From acb9bc903e55a636b8eef93c7762b23c30fd69c4 Mon Sep 17 00:00:00 2001 From: Kathy Date: Fri, 12 Mar 2021 13:40:23 +0000 Subject: [PATCH] B2021-028: During print, removal of trailing spaces and newlines causes missing line in print of empty steps --- .../VEPROMS.CSLA.Library/Config/StepConfig.cs | 22 -------- .../Extension/DisplayText.cs | 8 +-- PROMS/Volian.Print.Library/PromsPrinter.cs | 55 +++++++++---------- 3 files changed, 30 insertions(+), 55 deletions(-) diff --git a/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs b/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs index fc005847..55124d8e 100644 --- a/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs +++ b/PROMS/VEPROMS.CSLA.Library/Config/StepConfig.cs @@ -315,28 +315,6 @@ namespace VEPROMS.CSLA.Library OnPropertyChanged("Step_PreferredPagebreak"); } } - // C2021-010: Remove trailing returns/spaces & manual page breaks & allow save. - // EmptyStep was added to make printing consistent after saving of trailing newlines/spaces. - // The print code was printing an empty string rather than a space. But a space gets saved since - // without it the step is deleted. - public bool Step_EmptyStep - { - get - { - string s = _Xp["Step", "EmptyStep"]; - - if (s == string.Empty) return false; - if (s == "True") return true; - return false; - } - set - { - string s = _Xp["Step", "EmptyStep"]; - if (value.ToString() == s) return; - _Xp["Step", "EmptyStep"] = value.ToString(); - OnPropertyChanged("Step_EmptyStep"); - } - } //[Category("Step Attributes")] //[DisplayName("Step Change Bar Override")] //[RefreshProperties(RefreshProperties.All)] diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs index 7d536224..a119a523 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DisplayText.cs @@ -142,15 +142,13 @@ namespace VEPROMS.CSLA.Library // No 'true' change occurred if trailing space was after an rtf command if (!OriginalText.EndsWith(@"\b0") && !OriginalText.EndsWith(@"\i0") && !OriginalText.EndsWith(@"\ulnone") && !OriginalText.EndsWith(@"\up0") && !OriginalText.EndsWith(@"\dn0")) + { RemoveTrailingBlankID = itemInfo.ItemID; + if (OriginalText == "") OriginalText = " "; // B2021-028: don't make step empty, print with a space + } else OriginalText = InfoText; } - if (epMode == E_EditPrintMode.Print && !RemoveTrailingHardReturnAndManualPageBreaks) // if step was made empty from previous print & not removing now, text is an empty string - { - StepConfig sc = itemInfo.MyConfig as StepConfig; - if (sc != null && sc.Step_EmptyStep) OriginalText = ""; - } //OriginalText = InfoText; //if (OriginalText != InfoText) Console.WriteLine("ItemId = {0}, {1}", itemInfo.ItemID, OriginalText.Length-InfoText.Length); if (OriginalText.Contains("Prerequisite") && epMode == E_EditPrintMode.Print) diff --git a/PROMS/Volian.Print.Library/PromsPrinter.cs b/PROMS/Volian.Print.Library/PromsPrinter.cs index 3e55592e..7beb4203 100644 --- a/PROMS/Volian.Print.Library/PromsPrinter.cs +++ b/PROMS/Volian.Print.Library/PromsPrinter.cs @@ -2479,8 +2479,8 @@ namespace Volian.Print.Library { using (Item itm = Item.Get(iid)) { - VEPROMS.CSLA.Library.Annotation x = VEPROMS.CSLA.Library.Annotation.MakeAnnotation(itm, AnnotationType.GetByNameOrCreate("Manual Pagination Issues"), null, "Removed Manual Page Break", null); - sc.Step_NewManualPagebreak = false; // reset the flag that was set in the config + if (!HasManPagAnnot(ii, "Removed Manual Page Break")) VEPROMS.CSLA.Library.Annotation.MakeAnnotation(itm, AnnotationType.GetByNameOrCreate("Manual Pagination Issues"), null, "Removed Manual Page Break", null); + sc.Step_NewManualPagebreak = false; // reset the flag that was set in the config itm.MyContent.Config = sc.ToString(); itm.MyContent.DTS = DateTime.Now; itm.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID; @@ -2501,42 +2501,41 @@ namespace Volian.Print.Library string annot = "Removed Trailing Newlines and Spaces"; if (RemoveManualPageBreaks != null && RemoveManualPageBreaks.Contains(iid)) annot = "Removed Trailing Newlines, Spaces and ManualPageBreak"; string tmp = Regex.Replace(iitmp.MyContent.Text, "(\\\\line|\r|\n|\\\\u160\\?| )+$", ""); - // if the step ends up empty, set the text to a space (if null or "") step gets deleted. Also, flag - // that this is an emtpy step so that print can handle it, i.e. when text is set for step during printing, - // if it is emtpy the string is "", which prints without height. This is flagged so that the pdf will - // look the same, i.e. printed when trailing newlines/spaces are removed (text = "") & after the changes - // are saved (text = " ") + // if the step ends up empty, set the text to a space (if null or "") step gets deleted. + // B2021-028: removed code that set a step config item flagging an empty step. This had been put in to print + // the same way before save but that printing was wrong and was fixed for this bug. if (tmp == null || tmp == "") { - StepConfig sctmp = iitmp.MyConfig as StepConfig; - if (sctmp == null) sctmp = new StepConfig(); - sctmp.Step_EmptyStep = true; + tmp = " "; annot = "Empty step. Consider deleting to restore standard pagination."; - using (Item itm = Item.Get(iid)) - { - VEPROMS.CSLA.Library.Annotation x = VEPROMS.CSLA.Library.Annotation.MakeAnnotation(itm, AnnotationType.GetByNameOrCreate("Manual Pagination Issues"), null, annot, null); - itm.MyContent.Config = sctmp.ToString(); - itm.MyContent.Text = " "; - itm.MyContent.DTS = DateTime.Now; - itm.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID; - itm.MyContent.Save(); - } } - else + bool alreadyHasAnnot = HasManPagAnnot(iitmp, annot); // don't add annotation if it exists. + using (Item itm = Item.Get(iid)) { - using (Item itm = Item.Get(iid)) - { - VEPROMS.CSLA.Library.Annotation x = VEPROMS.CSLA.Library.Annotation.MakeAnnotation(itm, AnnotationType.GetByNameOrCreate("Manual Pagination Issues"), null, annot, null); - itm.MyContent.Text = tmp; - itm.MyContent.DTS = DateTime.Now; - itm.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID; - itm.MyContent.Save(); - } + if (!alreadyHasAnnot) VEPROMS.CSLA.Library.Annotation.MakeAnnotation(itm, AnnotationType.GetByNameOrCreate("Manual Pagination Issues"), null, annot, null); + itm.MyContent.Text = tmp; + itm.MyContent.DTS = DateTime.Now; + itm.MyContent.UserID = Volian.Base.Library.VlnSettings.UserID; + itm.MyContent.Save(); } } } } } + + private bool HasManPagAnnot(ItemInfo iitmp, string annotstr) + { + if (iitmp.ItemAnnotations != null && iitmp.ItemAnnotationCount > 0) + { + // check each annotation to see if this manual pagination issue exists - so it won't get added again. + foreach (AnnotationInfo ai in iitmp.ItemAnnotations) + { + if (ai.MyAnnotationType.Name.StartsWith("Manual Pagination Issues")) + if (ai.SearchText.StartsWith(annotstr)) return true; + } + } + return false; + } } public class ReaderHelper {