C2022-003-Change-Textboxes-to-RTF-3

This commit is contained in:
2025-12-24 14:20:31 -05:00
parent d4ecf28147
commit 72c2bd90e4
10 changed files with 8 additions and 329 deletions

View File

@@ -202,7 +202,6 @@ using RODBInterface;
using Org.Mentalis.Files;
using System.Windows;
using System.Text.RegularExpressions;
using Volian.Base.Library;
using System.Linq;
@@ -336,8 +335,6 @@ namespace ctlXMLEditLib
set
{
_TextBoxFocus = value;
// C2015-017 hide the label indicating user is working with a duplicate of an exiting RO
//lblDuplicateRO.Visible = value;
}
}
public ctlXMLEdit(VlnXmlElement myelem, XmlSchema myschema, ArrayList reqfields, ArrayList fldsWithApplic, string [] pckids)
@@ -509,7 +506,6 @@ namespace ctlXMLEditLib
{
hwnd.Text = Regex.Replace(nd.InnerText, @"\\u([0-9]{1,4})\?", m => Convert.ToChar(int.Parse(m.Groups[1].Value)).ToString()); // set the field's text from XML
//hwnd.Text = nd.InnerText; // set the field's text from XML
Size size = hwnd.Size;
// check if this window has a button name as part of its tag. If
@@ -717,11 +713,7 @@ namespace ctlXMLEditLib
{
if (chr > 166)
{
//Str = @"\u" + ((int)chr).ToString("X4");
//Str = @"\u" + ((int)chr); //.ToString("X4");
Str = $"\\u{(int)chr}?";
Str = $"\\u{(int)chr}?";
result1 = result1 + Str;
}
else
@@ -850,124 +842,6 @@ namespace ctlXMLEditLib
return (false);
}
// RO Editor add symbols C2022 - 003
private static Regex sreg1 = new Regex(@"\\par\r\n(?!\\)");
private static Regex sreg2 = new Regex(@"[\r\n]", RegexOptions.Singleline); // Strip Carriage Returns and Newlines
private static Regex sreg3 = new Regex(@"^\{(.*)\}$", RegexOptions.Singleline); // Strip Opening and Closing Braces
private static Regex sreg4 = new Regex(@"\{[^{]*?\}", RegexOptions.Singleline); // Strip Clauses - remove anything from curly braces
private static Regex sreg5 = new Regex(@"\{[^{]*?\}", RegexOptions.Singleline); // Strip Clauses - remove anything from curly braces
private static Regex sreg6 = new Regex(@"(\\[^' \\?\r\n\t]+)(?=\\)"); // add space after token if followed by token
private static Regex sreg7 = new Regex(@"(\\[^ \\?\r\n\t]+ )"); // take backslash xyz and evaluates them
private static Regex sreg8 = new Regex(@"(\\[^ \\?\r\n\t]+) (?=\\)"); // remove space between tokens
private static Regex sreg9 = new Regex(@"(\\[^ \\?\r\n\t]+) (?=\r\n)"); // remove space before /r/n
public static string StaticStripRtfCommands(string rtf, bool fromTable)
{
// replace \{ & \} with (![ & (!] respectively and then redo at end. The curly braces
// are rtf so were getting removed and/or not handled correctly.
string retval = rtf.Replace(@"\{", @" (![");
retval = retval.Replace(@"\}", @" (!]");
// For hardspaces, the windows richtextbox does some 'quirky' things:
// A unicode representation of \u160? is sent INTO the rtb. Coming out,
// that \u160? was translated to a \~ (by the underlying windows rtb).
// Note that if the \~ is sent to the rtb, it is treated as a regular space,
// i.e. no longer a hardspace, and actually is converted to a regular space.
// SO, on the way out, convert any \~ to \u160?
retval = RTFConvertedSymbolsToUnicode(retval);
// remove carriage return/newlines after \par commands (these are introduced by rtb
// for hard returns, goes into rtb as \par and comes out as \par\r\n):
retval = sreg1.Replace(retval, "\\par ");
retval = retval.Replace("\\v0\r\n", "\\v0 "); // Replace Carriage Return and Newline after comment
retval = sreg2.Replace(retval, ""); // Strip Carriage Returns and Newlines
retval = sreg3.Replace(retval, "$1"); // Strip Opening and Closing Braces
retval = sreg4.Replace(retval, ""); // Strip Clauses - remove anything from curly braces
retval = sreg5.Replace(retval, ""); // Strip Clauses - remove anything from curly braces
retval = sreg6.Replace(retval, "$1 "); // add space after token if followed by token
retval = sreg7.Replace(retval, new MatchEvaluator(StaticReplaceRTFClause)); // take backslash xyz and evaluates them
retval = sreg8.Replace(retval, "$1"); // remove space between tokens
retval = sreg9.Replace(retval, "$1"); // remove space before /r/n
// remove \r\n at end of string if the string has 2 or more characters
if (retval.Length > 1 && retval.Substring(retval.Length - 2, 2) == "\r\n") retval = retval.Remove(retval.Length - 2, 2);
if (retval.Length == 0) return "";
if (retval.Length > 1 && retval.Substring(retval.Length - 2, 2) == @"\v") retval = retval.Remove(retval.Length - 2, 2);
retval = retval.Replace(@" (![", @"\{");
retval = retval.Replace(@" (!]", @"\}");
retval = retval.TrimEnd(' ');
// the indent character was translated in the richtextbox, change it back:
if (retval.IndexOf(@"\'05") > -1) retval = retval.Replace(@"\'05", "\x05");
return retval;
}
// RO Editor add symbols C2022 - 003
public static string RTFConvertedSymbolsToUnicode(string str)
{
string rtnStr = str;
// convert \~ to a hard spece. RTF is automatically converting \u160? to \~ but will then convert
// the \~ to a regular space!
rtnStr = rtnStr.Replace(@"\~", @"\u160?");
rtnStr = rtnStr.Replace(@"\'a0", @"\u160?");
// convert \'99 to \u8482? this is for the trade mark symbol. RTF is automatically
// converting the unicode \u8482? to \'99, but once this is done, PROMS StepRTB (edit windows) does not show it
rtnStr = rtnStr.Replace(@"\'99", @"\u8482?");
// convert \'ae to \u174? this is for the registered symbol. RTF converts the unicode character to \'ae
rtnStr = rtnStr.Replace(@"\'ae", @"\u174?");
// convert \'a9 to \u169? this is for the copyright symbol. RTF converts the unicode character to \'a9
rtnStr = rtnStr.Replace(@"\'a9", @"\u169?");
return rtnStr;
}
public static string StaticReplaceRTFClause(Match m)
{
try
{
string token = m.Groups[1].Value;
switch (token[1])
{
case '_': // B2020-100 New Non-Breaking Hyphen
return token.Trim();
case '\\':
return token;
case '\'': // Special Character
return token;
case '{': // look for escape for curly braces:
return token;
case '}':
return token;
case 'v': // save link hidden info
if (token == "\\viewkind4 ") break;
if (Regex.IsMatch(token, @"^\\v0? ?$"))
return token; // comment part of link
// If possible show what procedure was being processed.
break;
case 'l':
if (Regex.IsMatch(token, @"^\\line ?$")) return token;
if (Regex.IsMatch(token, @"^\\li[-0-9]+ ?$")) return token; // line indent
break;
case 'f':
if (Regex.IsMatch(token, @"^\\fi[-0-9]+ ?$")) return token; // first line indent
// C2020-001: only keep the font size rtf if in a table.
//if (_fromTable && Regex.IsMatch(token, @"^\\fs[-0-9]+ ?$")) return token; // font size
break;
case 'p':
if (Regex.IsMatch(token, @"^\\par ?$")) return "\r\n";
break;
}
}
catch (Exception ex)
{
Console.WriteLine("StaticReplaceRTFClause {0} - {1}", ex.GetType().Name, ex.Message);
}
return "";//Strip All
}
#region Component Designer generated code
/// <summary>
@@ -1072,8 +946,7 @@ namespace ctlXMLEditLib
Size size = GraphicsHttextbox.Size;
mytextbox.LostFocus += new System.EventHandler(this.GraphicsHt_lostfocus);
//mytextbox.
}
if (getannot.IndexOf("Character")>=0)
{
@@ -2170,14 +2043,6 @@ namespace ctlXMLEditLib
richTextBox.SelectedRtf = RtfPrefixForSymbols + sym + @"}";
richTextBox.SelectedRtf = @"{\rtf1\ansi\ansicpg1252\deff0\deflang1033\uc1 }";
richTextBox.Select(position, 0);
//richTextBox.Select(position, 1); //left here for reference
//richTextBox.Select(position + 1, 0);
//TextPointer caretPos = rtb.CaretPosition;
//if (symbcode < 256)
// AddText(((char)symbcode).ToString());
//else
// AddSymbol(sym); // Adds font commands around symbol, needed for higher codes
}
}