From 10c11b9f361267cae16eb9403eeafb684098ecd9 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 10 Nov 2015 15:40:24 +0000 Subject: [PATCH] When there is a bold and underline command remove the space between the two commands. Logic to consider underline and bold command between a hard space a word when determining if replace words should be done. --- PROMS/Volian.Controls.Library/DisplayText.cs | 12 ++++++------ PROMS/Volian.Print.Library/Grid2Pdf.cs | 8 +++++--- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/PROMS/Volian.Controls.Library/DisplayText.cs b/PROMS/Volian.Controls.Library/DisplayText.cs index a2838a7e..cbd3a7f1 100644 --- a/PROMS/Volian.Controls.Library/DisplayText.cs +++ b/PROMS/Volian.Controls.Library/DisplayText.cs @@ -1778,14 +1778,12 @@ namespace Volian.Controls.Library } private string DoReplaceWords2(string Text) { - if(!ProcessReplaceWords) return Text; + if (!ProcessReplaceWords) return Text; if (_MyItemInfo.MyContent.Type < 20000) return Text; // for now only replace in steps. - FoundMatches myMatches = new FoundMatches(Text,_MyItemInfo.FormatStepData.Font,_MyItemInfo); + FoundMatches myMatches = new FoundMatches(Text, _MyItemInfo.FormatStepData.Font, _MyItemInfo); // Exclude Link Text from Replace Word process myMatches.AddLink(regFindLink, _MyFormat.PlantFormat.FormatData.SectData.ReplaceWordsInROs, _MyItemInfo.MyProcedure.MyDocVersion); ReplaceStrList rsl = _MyFormat.PlantFormat.FormatData.SectData.ReplaceStrList; - - // The only way to get an 'empty' list is to have one 'dummy' replacestr, i.e. that has ReplaceWord as an empty string. If the // ReplaceStrData xml node is empty, it does the inheritance and gets the 'base' format's list. if (rsl.Count==1 && (rsl[0].ReplaceWord == null || rsl[0].ReplaceWord == "")) return Text; // Loop through text looking for words to be replaced @@ -1845,6 +1843,7 @@ namespace Volian.Controls.Library } //ProfileTimer.Pop(profileDepth); //int profileDepth5 = ProfileTimer.Push(">>>> DoReplaceWords2.ReplaceMatches"); + Text = myMatches.ReplaceMatches(); //ProfileTimer.Pop(profileDepth5); Text = Text.Replace(@"\xA0", @"\u160?"); //replace hard space @@ -2150,10 +2149,11 @@ namespace Volian.Controls.Library if (text.StartsWith(@"{\rtf")) { // make sure that it is not preceded by \u160? \'a0 or \~ - if(Regex.IsMatch(begin,@"(\\(u160\?|'a0|~)(\\f[0-9]* ?)*(\\fs[0-9]* ?)*)$")) + // bug fix B2015-197 - need to consider underline and bold commands between a hard space and a word + if (Regex.IsMatch(begin, @"(\\(u160\?|'a0|~)(\\ulnone ?|\\b0 ?|\\ul ?|\\b ?)*(\\f[0-9]* ?)*(\\fs[0-9]* ?)*)$")) return false; // make sure that it is not followed by \u160? \'a0 or \~ - if (Regex.IsMatch(end, @"^((\\f[0-9]* ?)*(\\fs[0-9]* ?)*\\(u160\?|'a0|~))")) + if (Regex.IsMatch(end, @"^((\\f[0-9]* ?)*(\\fs[0-9]* ?)*(\\ulnone ?|\\b0 ?|\\ul ?|\\b ?)*\\(u160\?|'a0|~))")) return false; } else diff --git a/PROMS/Volian.Print.Library/Grid2Pdf.cs b/PROMS/Volian.Print.Library/Grid2Pdf.cs index 1984adc9..c67de9b0 100644 --- a/PROMS/Volian.Print.Library/Grid2Pdf.cs +++ b/PROMS/Volian.Print.Library/Grid2Pdf.cs @@ -664,14 +664,16 @@ namespace Volian.Print.Library _StatRTB.Width = (int)w; _StatRTB.Font = MyFlexGrid.Font; if (str.StartsWith(@"{\rtf")) - // The 'Replace(@" \ulnone", @"\u160?\ulnone")' was added so that data in VEWCN SUR_WTC - // tables would print. There were a number of tables, for example in STN NB-106/8.1.6, + { + // The 'Replace(@" \ulnone", @"\u160?\ulnone")' was added so that data in VEWCNSUR_MTC + // tables would print. There were a number of tables, for example in STN NB-115/8.1.6, // that had a series of spaces underlined and these spaces were not underlined in the // generated pdf. It seems that there is a problem somewhere in the rtb -> itextsharp // level. This fixed the immediate problem. If there is 'b0' (bold off) after the // space before the 'ulnone' the following won't work. Also, this change was not // made in the non-table code. If the problem occurs there, it should be added. - _StatRTB.Rtf = str.Replace(@"\~", @"\u160?").Replace(@" \ulnone", @"\u160?\ulnone"); + _StatRTB.Rtf = Regex.Replace(str.Replace(@"\~", @"\u160?"), @"(?