diff --git a/Tests/Controller/Elements/ItemsTest.cs b/Tests/Controller/Elements/ItemsTest.cs index 8b3b861..cc24ed6 100755 --- a/Tests/Controller/Elements/ItemsTest.cs +++ b/Tests/Controller/Elements/ItemsTest.cs @@ -24,6 +24,7 @@ using Microsoft.Office.Interop.Word; using zaaReloaded2.LabModel; using zaaReloaded2.Formatter; using zaa = zaaReloaded2.Controller.Elements; +using System.Text.RegularExpressions; namespace Tests.Controller.Elements { @@ -62,8 +63,10 @@ namespace Tests.Controller.Elements _formatter.Settings.Elements.Add(new zaa.Items("Na, K, Cl")); _formatter.Run(); string expected = ( - TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + - "Na 133, K 6 (5)\r\r").Replace(Environment.NewLine, "\r"); + StripMarkup( + TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + + "Na 133, K 6 (5)\r\r").Replace(Environment.NewLine, "\r") + ); Assert.AreEqual(expected, _document.Range().Text); } @@ -82,8 +85,10 @@ namespace Tests.Controller.Elements _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, K, Cl")); _formatter.Run(); string expected = ( - TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + - "Klinische Chemie: Na 133, K 6 (5)\r\r").Replace(Environment.NewLine, "\r"); + StripMarkup( + TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + + "Klinische Chemie: Na 133, K 6 (5)\r\r").Replace(Environment.NewLine, "\r") + ); Assert.AreEqual(expected, _document.Range().Text); } @@ -120,7 +125,9 @@ namespace Tests.Controller.Elements _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, *")); _formatter.Run(); string expected = ( - TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + + StripMarkup( + TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + ) + "Klinische Chemie: Na 133, Cl 110, K 6\r\r").Replace(Environment.NewLine, "\r"); Assert.AreEqual(expected, _document.Range().Text); } @@ -142,7 +149,9 @@ namespace Tests.Controller.Elements _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*")); _formatter.Run(); string expected = ( - TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + + StripMarkup( + TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + )+ "Klinische Chemie: Na 133, SU-Protein 2,8\r\r").Replace(Environment.NewLine, "\r"); Assert.AreEqual(expected, _document.Range().Text); } @@ -164,10 +173,19 @@ namespace Tests.Controller.Elements _formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*, *")); _formatter.Run(); string expected = ( - TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + + StripMarkup( + TimePointFormatter.DateAndTimeHeader(new DateTime(2015, 07, 13, 13, 31, 00)) + ) + "Klinische Chemie: Na 133, SU-Protein 2,8, Cl 110, U-Na 99\r\r") .Replace(Environment.NewLine, "\r"); Assert.AreEqual(expected, _document.Range().Text); } + + static string StripMarkup(string s) + { + return _markupStripper.Replace(s, string.Empty); + } + + static readonly Regex _markupStripper = new Regex(@""); } } diff --git a/Tests/Formatter/DocumentWriterTest.cs b/Tests/Formatter/DocumentWriterTest.cs index f3e201e..74d3075 100755 --- a/Tests/Formatter/DocumentWriterTest.cs +++ b/Tests/Formatter/DocumentWriterTest.cs @@ -21,6 +21,7 @@ using System.Linq; using System.Text; using NUnit.Framework; using zaaReloaded2.Formatter; +using Microsoft.Office.Interop.Word; namespace Tests.Formatter { @@ -95,5 +96,13 @@ namespace Tests.Formatter Assert.IsFalse(_docWriter.HasBufferedText); Assert.AreEqual(String.Empty, _docWriter.ToString()); } + + [Test] + public void TextMarkup() + { + _docWriter.Document = new Document(); + _docWriter.WriteLine("This is not bold. This is bold!"); + _docWriter.Flush(); + } } } diff --git a/Tests/ViewModels/SettingsRepositoryViewModelTest.cs b/Tests/ViewModels/SettingsRepositoryViewModelTest.cs index ff434a1..afa5ddc 100755 --- a/Tests/ViewModels/SettingsRepositoryViewModelTest.cs +++ b/Tests/ViewModels/SettingsRepositoryViewModelTest.cs @@ -65,7 +65,12 @@ namespace Tests.ViewModels Assert.AreNotSame(orig, copy); Assert.AreNotSame(orig.RevealModelObject(), copy.RevealModelObject()); - Assert.AreEqual(String.Format("Kopie von {0}", orig.Name), copy.Name); + Assert.AreEqual( + String.Format( + "Kopie von {0}", + orig.Name.Replace(" (eingebaut)", String.Empty) + ), + copy.Name); Assert.IsTrue(copy.IsSelected); } } diff --git a/zaaReloaded2/Formatter/DocumentWriter.cs b/zaaReloaded2/Formatter/DocumentWriter.cs index 2c11113..e373553 100755 --- a/zaaReloaded2/Formatter/DocumentWriter.cs +++ b/zaaReloaded2/Formatter/DocumentWriter.cs @@ -20,6 +20,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Office.Interop.Word; +using System.Text.RegularExpressions; namespace zaaReloaded2.Formatter { @@ -59,6 +60,20 @@ namespace zaaReloaded2.Formatter /// public string ParagraphStyle { get; set; } + /// + /// Returns text without markup from the buffer. + /// + public string Text + { + get + { + if (!HasBufferedText) + throw new InvalidOperationException("This DocumentWriter does not have any text."); + + return _markupRegex.Replace(_buffer.ToString(), String.Empty); + } + } + #endregion #region Constructors @@ -126,7 +141,7 @@ namespace zaaReloaded2.Formatter { s.set_Style(ParagraphStyle); } - s.Range.Text = _buffer.ToString(); + MarkupToDocument(_buffer.ToString()); } if (Parent != null) { @@ -166,9 +181,40 @@ namespace zaaReloaded2.Formatter #endregion + #region Private methods + + /// + /// Parses a string containing markup (e.g., "<b>", "</b>") + /// and writes formatted text to the current Document. + /// + /// + void MarkupToDocument(string text) + { + string[] substrings = _markupRegex.Split(text); + foreach (string substring in substrings) + { + switch (substring) + { + case "": + Document.ActiveWindow.Selection.Font.Bold = 1; + break; + case "": + Document.ActiveWindow.Selection.Font.Bold = 0; + break; + default: + Document.ActiveWindow.Selection.TypeText(substring); + break; + } + } + } + + #endregion + #region Fields StringBuilder _buffer; + // Put pattern in parentheses so they will not be discarded by Regex.Split + static readonly Regex _markupRegex = new Regex(@"()"); #endregion } diff --git a/zaaReloaded2/Formatter/ItemFormatter.cs b/zaaReloaded2/Formatter/ItemFormatter.cs index 17d0bf3..5e198c9 100755 --- a/zaaReloaded2/Formatter/ItemFormatter.cs +++ b/zaaReloaded2/Formatter/ItemFormatter.cs @@ -153,15 +153,20 @@ namespace zaaReloaded2.Formatter string name = IncludeMaterial ? LabItem.QualifiedName : LabItem.Name; - // Insert the formatted text into the document. - formatter.Write( + string output = String.Format( "{0} {1}{2}{3}", name, value, unit, reference - )); + ); + if (!LabItem.IsNormal) + { + output = String.Format("{0}", output); + } + + formatter.Write(output); HasBeenUsed = true; } diff --git a/zaaReloaded2/Formatter/TimePointFormatter.cs b/zaaReloaded2/Formatter/TimePointFormatter.cs index da8b41e..bcdc801 100755 --- a/zaaReloaded2/Formatter/TimePointFormatter.cs +++ b/zaaReloaded2/Formatter/TimePointFormatter.cs @@ -68,7 +68,7 @@ namespace zaaReloaded2.Formatter static string FormatHeader(string text) { - return String.Format("{0}Laborwerte vom {1}:{2}", + return String.Format("{0}Laborwerte vom {1}:{2}", Environment.NewLine, text, Environment.NewLine diff --git a/zaaReloaded2/LabModel/LabItem.cs b/zaaReloaded2/LabModel/LabItem.cs index 3fc6c7e..4ada2c5 100755 --- a/zaaReloaded2/LabModel/LabItem.cs +++ b/zaaReloaded2/LabModel/LabItem.cs @@ -123,7 +123,8 @@ namespace zaaReloaded2.LabModel public bool HasUpperLimit { get; protected set; } /// - /// Is true if is normal. + /// Is true if is normal. Returns true + /// if no limits and no normal value are known. /// public bool IsNormal { @@ -147,7 +148,7 @@ namespace zaaReloaded2.LabModel } else { - return (Value == Normal); + return String.IsNullOrEmpty(Normal) || (Value == Normal); } } } diff --git a/zaaReloaded2/ViewModels/SettingsViewModel.cs b/zaaReloaded2/ViewModels/SettingsViewModel.cs index db33e3f..05af8a2 100755 --- a/zaaReloaded2/ViewModels/SettingsViewModel.cs +++ b/zaaReloaded2/ViewModels/SettingsViewModel.cs @@ -347,7 +347,7 @@ namespace zaaReloaded2.ViewModels picker.ElementChosenMessage.Sent += (sender, args) => { ElementViewModel newVM = args.Content.ViewModel as ElementViewModel; - if (IsTopLevelElement()) + if (LastSelectedElement == null || IsTopLevelElement()) { AddElementViewModel(newVM); }