B2021-039: Paste of symbols results in invalid symbols

This commit is contained in:
Kathy Ruffing 2021-04-20 11:54:32 +00:00
parent 9339a49002
commit 1e85522762
3 changed files with 45 additions and 12 deletions

View File

@ -128,6 +128,14 @@ namespace Volian.Base.Library
rtnStr = rtnStr.Replace(@"\'ae",@"\u174?"); rtnStr = rtnStr.Replace(@"\'ae",@"\u174?");
// convert \'a9 to \u169? this is for the copyright symbol. RTF converts the unicode character to \'a9 // convert \'a9 to \u169? this is for the copyright symbol. RTF converts the unicode character to \'a9
rtnStr = rtnStr.Replace(@"\'a9",@"\u169?"); rtnStr = rtnStr.Replace(@"\'a9",@"\u169?");
// B2021-039: paste of the greek symbols was not working correctly, RTF was converting unicode, similar to above
for (int i = 0; i < 26; i++)
{
rtnStr = rtnStr.Replace(string.Format("\\'{0:x2}", 0xc0 + i) // upper case Greek
, string.Format("\\u{0}?", 912 + i));
rtnStr = rtnStr.Replace(string.Format("\\'{0:x2}", 0xe0 + i) // lower case Greek
, string.Format("\\u{0}?", 944 + i));
}
return rtnStr; return rtnStr;
} }
} }

View File

@ -2798,31 +2798,56 @@ namespace Volian.Controls.Library
public string GetPasteText(bool PasteNoReturnsSetting, IDataObject myDO) public string GetPasteText(bool PasteNoReturnsSetting, IDataObject myDO)
{ {
// allowable symbols are those symbols between 127-256 that the proms editor supports that // B2021-0039: symbols not pasting correctly from ctrl-v:
// can be pasted from word as is. These symbols are (in the order they are in the following // get base list of valid symbols, use base format if MyItemInfo is null. Use symbols from
// string): degree, plus/minus, exponent 2, exponent 3, micro, quarter, half, divide: // the format file versus a list in code
char[] allowableSymbols = { '\xb0', '\xb1', '\xb2', '\xb3', '\xb5', '\xbc', '\xbd', '\xf7' }; FormatData fmtd = MyItemInfo != null ? MyItemInfo.ActiveFormat.PlantFormat.FormatData : FormatInfo.PROMSBaseFormat.FormatData;
string ptext = myDO.GetData(DataFormats.Text).ToString(); SymbolList sl = fmtd.SymbolList;
string[] allowableSymbols = new string[sl.Count];
for (int i = 0; i < sl.Count; i++) allowableSymbols[i] = string.Format(@"{0}", sl[i].Unicode);
// allowable symbols are those symbols in the format file that the proms editor supports that
// can be pasted from word as is.
string ptext = (string)myDO.GetData(DataFormats.UnicodeText);
ptext = ptext.TrimEnd("\r\n\t ".ToCharArray()); ptext = ptext.TrimEnd("\r\n\t ".ToCharArray());
if (PasteNoReturnsSetting) ptext = ptext.Replace("\r\n", " "); if (PasteNoReturnsSetting) ptext = ptext.Replace("\r\n", " ");
StringBuilder sb = new StringBuilder(ptext);
StringBuilder sb = new StringBuilder();
bool didCharReplace = false; bool didCharReplace = false;
bool hasBadChar = false;
for (int i = 0; i < ptext.Length; i++) for (int i = 0; i < ptext.Length; i++)
{ {
// if allowable, allow for it to pasted. Otherwise, replace that character with a '?'. didCharReplace = false;
if ((sb[i] > 0x7e)) string sym = string.Format(@"{0}", Convert.ToInt32(ptext[i]));
if ((ptext.Substring(i, 1).IndexOfAny(allowableSymbols) < 0)) if ((ptext[i] > 0x7e))
{ {
sb[i] = '?'; // is this an allowable symbol/character:
didCharReplace = true; for (int j = 0; j < sl.Count; j++)
{
if (sym == allowableSymbols[j])
{
sb = sb.Append((char)(Convert.ToInt32(allowableSymbols[j])));
didCharReplace = true;
break;
}
}
// if not allowable, put in a "?" and give a message to user (below)
if (!didCharReplace)
{
sb = sb.Append("?");
didCharReplace = true;
hasBadChar = true;
}
} }
if (!didCharReplace)
sb = sb.Append(ptext[i]);
} }
ptext = sb.ToString(); ptext = sb.ToString();
ptext = ptext.Replace("\u2013", "-"); // Replace EN Dash with hyphen ptext = ptext.Replace("\u2013", "-"); // Replace EN Dash with hyphen
ptext = ptext.Replace("\u2014", "-"); // Replace EM Dash with hyphen ptext = ptext.Replace("\u2014", "-"); // Replace EM Dash with hyphen
ptext = ptext.Replace("\u2011", "-"); // Replace non-breaking hyphen with hyphen ptext = ptext.Replace("\u2011", "-"); // Replace non-breaking hyphen with hyphen
ptext = ptext.Replace("\u2572", "\\"); // Replace backslash symbol with backslash character ptext = ptext.Replace("\u2572", "\\"); // Replace backslash symbol with backslash character
if (didCharReplace) if (hasBadChar)
FlexibleMessageBox.Show("Replacing pasted characters that are not supported by Proms with a '?'."); FlexibleMessageBox.Show("Replacing pasted characters that are not supported by Proms with a '?'.");
return ptext; return ptext;
} }