Compare commits
115 Commits
v2.0.0-alp
...
v2.0.0-bet
Author | SHA1 | Date | |
---|---|---|---|
45947b3d1e | |||
0eed93f902 | |||
005a245fae | |||
da1976e093 | |||
cb790191fb | |||
e80f129c3d | |||
4390d7ce52 | |||
4c818010a7 | |||
f6e5087e3c | |||
3fcb6c1af5 | |||
7eaabb7f13 | |||
058de8e8cf | |||
6d62e619eb | |||
b7d413c412 | |||
0d94d77483 | |||
a51d771dbe | |||
ac486bbcee | |||
94ebf5508b | |||
8d24a669ac | |||
b9f35c8b11 | |||
6c99224814 | |||
b360d5b640 | |||
fbcb060f12 | |||
221509520d | |||
392de61b74 | |||
2745ab819c | |||
2e8c881e1f | |||
92a8faa972 | |||
4cb2999297 | |||
a609c7f93c | |||
d5340d1b3a | |||
91b7aa70e9 | |||
863dfa071a | |||
7a105d7aad | |||
32d4e8d955 | |||
39e8b1f81d | |||
de6dab5fb4 | |||
5d2acb6233 | |||
bb67a993fb | |||
193a83a769 | |||
65e34cdf1d | |||
8f9eb83e9d | |||
65ac72fb50 | |||
0461dfd66e | |||
63447def9b | |||
3a615eda8b | |||
a9d0e8ee7e | |||
2bb0452a87 | |||
12c2412e38 | |||
e0b749382e | |||
6f65340ca5 | |||
f2cb30fabb | |||
1afa9bb14f | |||
03a62ddf5a | |||
5a0923e8e8 | |||
0708f2a2b3 | |||
00c60ba0ad | |||
6af2243660 | |||
c9fc4a5fae | |||
53d13b394e | |||
947b53cf97 | |||
6c9f003134 | |||
51bfdc760e | |||
a009c1ab39 | |||
5833e0fcb7 | |||
750fb093b1 | |||
11b9b9df54 | |||
b59c9f2898 | |||
257e3e8568 | |||
c6121353e4 | |||
bde85e5651 | |||
edaf88c4cd | |||
b6c33971bd | |||
476f2d69be | |||
2cefede3c0 | |||
d0bd7dd2a5 | |||
ed43497179 | |||
1205958eb1 | |||
60296602a9 | |||
742a588083 | |||
b7fdf87ea5 | |||
880e8b0bdc | |||
06a74992ef | |||
285c6a2555 | |||
75c9c984c6 | |||
ae9cf7fa2e | |||
33d453cf73 | |||
8d6ed32a84 | |||
5fe7250b53 | |||
34006ba1e9 | |||
204139d16b | |||
41b155e8be | |||
b6209731ec | |||
a128b76522 | |||
805da69d47 | |||
8437f0907c | |||
db8f88c563 | |||
14b09f89c5 | |||
305baf2402 | |||
e4edd0f197 | |||
23acb13019 | |||
1e4c3681f2 | |||
9fd0907310 | |||
286ddb1641 | |||
d0be7524d3 | |||
5197c294b9 | |||
088422b8a1 | |||
09b3decd03 | |||
12cd58180f | |||
a725246f27 | |||
f2e75b1abe | |||
4bae35b665 | |||
4d614e0be5 | |||
4ca9e21e80 | |||
cf1b75e6a0 |
72
HISTORY.md
@ -1,3 +1,75 @@
|
|||||||
|
Version 2.0.0-beta.4 (2015-08-21)
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
- VERBESSERUNG: Aliasse für fT3 und fT4.
|
||||||
|
- VERBESSERUNG: Ambulanz-Stil überarbeitet.
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Version 2.0.0-beta.3. (2015-08-20)
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
- VERBESSERT: Bei Updates werden neue eingebaute Stile jetzt immer berücksichtigt.
|
||||||
|
- VERBESSERT: Formatierung erscheint nur noch als 1 Undo-Schritt.
|
||||||
|
- VERBESSERUNG: Alias ACR für Albumin-Krea-Quotient; mg/g statt mg/g Crea.
|
||||||
|
- VERBESSERUNG: Datumseilen, die mit "Labor:" beginnen, werden nicht länger ignoriert.
|
||||||
|
- VERBESSERUNG: Keine Fehlermeldung mehr, falls Referenzbereiche negative Werte enthalten (wie z.B. Base Excess) [#650db4d2]
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Version 2.0.0-beta.2 (2015-08-16)
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
- FIX: Kleinere Bugfixes.
|
||||||
|
- GEÄNDERT: Diff.-BB-Werte im Stations-Stil in Hämatologie-Zeile integriert.
|
||||||
|
- NEU: Überschriften und pathologische Werte werden fett gedruckt.
|
||||||
|
- NEU: Überschriften und pathologische Werte werden jetzt besonders ausgezeichnet (fett).
|
||||||
|
- VERBESSERT: Element-Bearbeitungsfenster.
|
||||||
|
- VERBESSERT: Floskel-Ersetzungen in Daniels Spezial.
|
||||||
|
- VERBESSERT: Formatieren läßt sich nicht mehr starten, ohne daß Labor-Text markiert ist.
|
||||||
|
- VERBESSERUNG: Einheiten, die mit einem Schrägstrich beginnen, werden nicht mehr mit Leerzeichen vom Wert getrennt.
|
||||||
|
- VERÄNDERUNG: Laborwerte, die explizit (also nicht mit "*") ausgewählt werden, werden jetzt ohne vorangestelltes Material-Kürzel eingefügt (z.B. jetzt "Sammelurin: Volumen" anstatt "Sammelurin: SU-Volumen").
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Version 2.0.0-beta.1 (2015-08-13)
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
- FIX: Datenimport funktioniert jetzt auch mit Word-Text und nicht nur in den Tests.
|
||||||
|
- FIX: Mehrere Thesaurus-Fehler behoben.
|
||||||
|
- FIX: Stile werden jetzt gespeichert.
|
||||||
|
- NEU: Auf Werkseinstellungen zurücksetzen.
|
||||||
|
- NEU: Datumsangaben werden in eine Zeile "Laborwerte vom ..." eingebettet.
|
||||||
|
- NEU: Elemente können verschoben werden.
|
||||||
|
- NEU: Formatierung der Ausgabe mit Absatzvorlage.
|
||||||
|
- NEU: Parameter können im Thesaurus als "blacklisted" markiert werden und werden dann bei Verwendung einer Wildcard ("*") nicht berücksichtigt.
|
||||||
|
- NEU: Steuer-Elemente für Spalten.
|
||||||
|
- NEU: Stile können importiert und exportiert werden.
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
Version 2.0.0-alpha.5. (2015-08-04)
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
- FIX: Daniels Spezial löscht nicht mehr die Unterschriften.
|
||||||
|
- NEU: Eingebautes Demo-Dokument zum Ausprobieren.
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Version 2.0.0-alpha.3 (2015-07-31)
|
||||||
|
========================================================================
|
||||||
|
|
||||||
|
- FIX: Beim Start wird jetzt nach Updates gesucht.
|
||||||
|
|
||||||
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||||
|
|
||||||
|
|
||||||
Version 2.0.0-alpha.2 (2015-07-28)
|
Version 2.0.0-alpha.2 (2015-07-28)
|
||||||
========================================================================
|
========================================================================
|
||||||
|
|
||||||
|
50
README.md
@ -52,6 +52,11 @@ folgende Teile aufgeteilt:
|
|||||||
existieren verschiedene Klassen, die die Klassen des Labor-Modells
|
existieren verschiedene Klassen, die die Klassen des Labor-Modells
|
||||||
(`zaaReloaded2.LabModel`) umschließen und um entsprechende
|
(`zaaReloaded2.LabModel`) umschließen und um entsprechende
|
||||||
Funktionalitäten erweitern.
|
Funktionalitäten erweitern.
|
||||||
|
- __Kontrolle der Formatierung:__ Der Namensraum
|
||||||
|
`zaaReloaded2.Controller` umfaßt Klassen, mit denen ein
|
||||||
|
`zaaReloaded2.Formatter.Formatter` gesteuert werden kann. Diese
|
||||||
|
Klassen spielen eine große Rolle bei den benutzerdefinierten
|
||||||
|
Anpassungen von Stilen.
|
||||||
|
|
||||||
|
|
||||||
## Parsen der Lauris-Ausgabe
|
## Parsen der Lauris-Ausgabe
|
||||||
@ -174,4 +179,49 @@ oder nicht-normalen Parametern oder immer mit ausgegeben werden:
|
|||||||
Die Markierung besonderer Parameter erfolgt in der Textdatei, aus der
|
Die Markierung besonderer Parameter erfolgt in der Textdatei, aus der
|
||||||
das `zaaReloaded2.Thesaurus.Parameters` generiert wird (s.o.).
|
das `zaaReloaded2.Thesaurus.Parameters` generiert wird (s.o.).
|
||||||
|
|
||||||
|
|
||||||
|
## User Interface
|
||||||
|
|
||||||
|
Das User Interface wurde mit der Windows Presentation Foundation nach
|
||||||
|
dem [MVVM][]-Muster implementiert. Dabei wurde auf das Hilfs-Framework
|
||||||
|
[Bovender][bovender-framework] zurückgegriffen.
|
||||||
|
|
||||||
|
|
||||||
|
## Updates
|
||||||
|
|
||||||
|
Das Add-in sucht täglich nach einem Update; dabei wird die Datei
|
||||||
|
<http://zaa.nephrowiki.de/versioninfo.txt> heruntergeladen. Updates
|
||||||
|
werden automatisch im Hintergrund geladen und beim Schließen von Word
|
||||||
|
(bzw. der Zentralen Arztbriefablage) installiert und stehen dann beim
|
||||||
|
nächsten Starten der Anwendung zur Verfügung.
|
||||||
|
|
||||||
|
|
||||||
|
## Serialisierung
|
||||||
|
|
||||||
|
Um das Stil-Repositorium (`zaaReloaded2.Controller.SettingsRepository`)
|
||||||
|
in den Assembly-Properties speichern zu können und für den Im- und
|
||||||
|
Export von Stilen werden die in .NET eingebauten
|
||||||
|
Serialisierungs-Strukturen genutzt. Weil es mit der Verwendung eines
|
||||||
|
`XmlSerializer`s Probleme gab, weil der `XmlSerializer` nicht mit
|
||||||
|
Interface-Eigenschaften umgehen kann, wurde zunächst für alle Klassen,
|
||||||
|
die serialisiert werden müssen (`SettingsRepository`,
|
||||||
|
`zaaReloaded2.Controller.Settings` und die von
|
||||||
|
`zaaReloaded2.Controller.Elements.ElementBase` abgeleiteten Klassen) das
|
||||||
|
Interface `ISerializable` implementiert. Das hat aber auch nicht dazu
|
||||||
|
geführt, daß der `XmlSerializer` die Klassen serialisierte, so daß
|
||||||
|
jetzt der `SoapFormatter` verwendet wird. Der stört sich nicht an
|
||||||
|
Interface-Eigenschaften und produziert auch XML, wenngleich im etwas
|
||||||
|
komplizierten [SOAP][]-Format.
|
||||||
|
|
||||||
|
Um das `SettingsRepository` in den Assembly-Properties zu persistieren,
|
||||||
|
muß das serialisierte XML noch in einen Base64-kodierten String
|
||||||
|
umgewandelt werden, damit das SOAP-XML nicht mit dem XML der
|
||||||
|
Assembly-Properties ins Gehege kommt (siehe
|
||||||
|
`zaaReloaded2.Controller.SettingsRepository.Load()` und
|
||||||
|
`zaaReloaded2.Controller.SettingsRepository.Store()`).
|
||||||
|
|
||||||
|
[SOAP]: http://de.wikipedia.org/wiki/SOAP
|
||||||
|
[MVVM]: http://de.wikipedia.org/wiki/MVVM
|
||||||
|
[bovender-framework]: https://github.com/bovender/bovender
|
||||||
|
|
||||||
<!-- vim: set tw=72 sw=2 ts=2 sts=-1 : -->
|
<!-- vim: set tw=72 sw=2 ts=2 sts=-1 : -->
|
||||||
|
@ -24,6 +24,7 @@ using Microsoft.Office.Interop.Word;
|
|||||||
using zaaReloaded2.LabModel;
|
using zaaReloaded2.LabModel;
|
||||||
using zaaReloaded2.Formatter;
|
using zaaReloaded2.Formatter;
|
||||||
using zaa = zaaReloaded2.Controller.Elements;
|
using zaa = zaaReloaded2.Controller.Elements;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace Tests.Controller.Elements
|
namespace Tests.Controller.Elements
|
||||||
{
|
{
|
||||||
@ -61,7 +62,12 @@ namespace Tests.Controller.Elements
|
|||||||
_formatter.Laboratory = lab;
|
_formatter.Laboratory = lab;
|
||||||
_formatter.Settings.Elements.Add(new zaa.Items("Na, K, Cl"));
|
_formatter.Settings.Elements.Add(new zaa.Items("Na, K, Cl"));
|
||||||
_formatter.Run();
|
_formatter.Run();
|
||||||
Assert.AreEqual("Na 133, K 6 (5)\r", _document.Range().Text);
|
string expected = (
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -78,7 +84,12 @@ namespace Tests.Controller.Elements
|
|||||||
_formatter.Laboratory = lab;
|
_formatter.Laboratory = lab;
|
||||||
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, K, Cl"));
|
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, K, Cl"));
|
||||||
_formatter.Run();
|
_formatter.Run();
|
||||||
Assert.AreEqual("Klinische Chemie: Na 133, K 6 (5)\r", _document.Range().Text);
|
string expected = (
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -113,8 +124,12 @@ namespace Tests.Controller.Elements
|
|||||||
_formatter.Laboratory = lab;
|
_formatter.Laboratory = lab;
|
||||||
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, *"));
|
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, *"));
|
||||||
_formatter.Run();
|
_formatter.Run();
|
||||||
Assert.AreEqual("Klinische Chemie: Na 133, Cl 110, K 6\r",
|
string expected = (
|
||||||
_document.Range().Text);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -133,8 +148,12 @@ namespace Tests.Controller.Elements
|
|||||||
_formatter.Laboratory = lab;
|
_formatter.Laboratory = lab;
|
||||||
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*"));
|
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*"));
|
||||||
_formatter.Run();
|
_formatter.Run();
|
||||||
Assert.AreEqual("Klinische Chemie: Na 133, SU-Protein 2,8\r",
|
string expected = (
|
||||||
_document.Range().Text);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
@ -153,8 +172,20 @@ namespace Tests.Controller.Elements
|
|||||||
_formatter.Laboratory = lab;
|
_formatter.Laboratory = lab;
|
||||||
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*, *"));
|
_formatter.Settings.Elements.Add(new zaa.Items("Klinische Chemie: Na, SU-*, *"));
|
||||||
_formatter.Run();
|
_formatter.Run();
|
||||||
Assert.AreEqual("Klinische Chemie: Na 133, SU-Protein 2,8, Cl 110, U-Na 99\r",
|
string expected = (
|
||||||
_document.Range().Text);
|
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(@"<[^>]+>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ namespace Tests.Controller
|
|||||||
[TestFixture]
|
[TestFixture]
|
||||||
class SettingsRepositoryTest
|
class SettingsRepositoryTest
|
||||||
{
|
{
|
||||||
SettingsRepository _savedSettings;
|
string _savedSettings;
|
||||||
|
|
||||||
[SetUp]
|
[SetUp]
|
||||||
public void SetUp()
|
public void SetUp()
|
||||||
@ -49,12 +49,14 @@ namespace Tests.Controller
|
|||||||
Settings s = new Settings();
|
Settings s = new Settings();
|
||||||
string testName = "test";
|
string testName = "test";
|
||||||
s.Name = testName;
|
s.Name = testName;
|
||||||
sr.Settings.Add(s);
|
sr.SettingsList.Add(s);
|
||||||
|
int expected = sr.SettingsList.Count;
|
||||||
|
int index = sr.SettingsList.IndexOf(s);
|
||||||
sr.Store();
|
sr.Store();
|
||||||
sr = null;
|
sr = null;
|
||||||
sr = SettingsRepository.Load();
|
sr = SettingsRepository.Load();
|
||||||
Assert.AreEqual(1, sr.Settings.Count);
|
Assert.AreEqual(expected, sr.SettingsList.Count);
|
||||||
Assert.AreEqual(testName, sr.Settings[0].Name);
|
Assert.AreEqual(testName, sr.SettingsList[index].Name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
54
Tests/Controller/SettingsTest.cs
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
/* SettingsTest.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using zaaReloaded2.Controller;
|
||||||
|
using zaaReloaded2.Controller.Elements;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
|
namespace Tests.Controller
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
class SettingsTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void CloneSettings()
|
||||||
|
{
|
||||||
|
SelectEachDay selectEachDay = new SelectEachDay();
|
||||||
|
Items items = new Items("some text");
|
||||||
|
Settings source = new Settings(
|
||||||
|
"hello world",
|
||||||
|
new List<ElementBase>() { selectEachDay, items });
|
||||||
|
source.ReferenceStyle = zaaReloaded2.Formatter.ReferenceStyle.IfSpecialOrAbnormal;
|
||||||
|
Settings clone = source.Clone() as Settings;
|
||||||
|
Assert.AreNotSame(source, clone);
|
||||||
|
Assert.AreEqual("Kopie von " + source.Name, clone.Name,
|
||||||
|
"Name");
|
||||||
|
Assert.AreNotSame(source.Elements, clone.Elements);
|
||||||
|
Assert.AreEqual(source.ReferenceStyle, clone.ReferenceStyle,
|
||||||
|
"ReferenceStyle");
|
||||||
|
Assert.AreEqual(
|
||||||
|
((Items)source.Elements[1]).Content,
|
||||||
|
((Items)clone.Elements[1]).Content,
|
||||||
|
"Items content");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -21,6 +21,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using zaaReloaded2.Formatter;
|
using zaaReloaded2.Formatter;
|
||||||
|
using Microsoft.Office.Interop.Word;
|
||||||
|
|
||||||
namespace Tests.Formatter
|
namespace Tests.Formatter
|
||||||
{
|
{
|
||||||
@ -95,5 +96,15 @@ namespace Tests.Formatter
|
|||||||
Assert.IsFalse(_docWriter.HasBufferedText);
|
Assert.IsFalse(_docWriter.HasBufferedText);
|
||||||
Assert.AreEqual(String.Empty, _docWriter.ToString());
|
Assert.AreEqual(String.Empty, _docWriter.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TextMarkup()
|
||||||
|
{
|
||||||
|
DocumentWriter output = new DocumentWriter();
|
||||||
|
_docWriter.Parent = output;
|
||||||
|
_docWriter.Write("This is not bold. <b>This is bold!</b>\rThis not.");
|
||||||
|
_docWriter.Flush();
|
||||||
|
Assert.AreEqual("This is not bold. This is bold!\rThis not.", output.Text);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
04.07.2015 12:31:00:
|
Laborwerte vom 04.07.2015 12:31:00:
|
||||||
Klinische Chemie: Na 144 mM, K 4,3 mM
|
Klinische Chemie: Na 144 mM, K 4,3 mM
|
||||||
|
|
||||||
06.07.2015 10:28:00:
|
Laborwerte vom 06.07.2015 10:28:00:
|
||||||
Klinische Chemie: Na 138 mM, K 4,6 mM
|
Klinische Chemie: Na 138 mM, K 4,6 mM
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
04.07.2015:
|
Laborwerte vom 04.07.2015:
|
||||||
Klinische Chemie: Na 144 mM, K 4,3 mM
|
Klinische Chemie: Na 144 mM, K 4,3 mM
|
||||||
|
|
||||||
06.07.2015:
|
Laborwerte vom 06.07.2015:
|
||||||
Klinische Chemie: Na 138 mM, K 4,6 mM
|
Klinische Chemie: Na 138 mM, K 4,6 mM
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
04.07.2015:
|
Laborwerte vom 04.07.2015:
|
||||||
Klinische Chemie: Na 144 mM, K 4,3 mM
|
Klinische Chemie: Na 144 mM, K 4,3 mM
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
|
|
||||||
06.07.2015:
|
Laborwerte vom 06.07.2015:
|
||||||
Klinische Chemie: Na 138 mM, K 4,6 mM
|
Klinische Chemie: Na 138 mM, K 4,6 mM
|
||||||
|
|
||||||
|
@ -99,6 +99,25 @@ namespace Tests.Formatter
|
|||||||
_document.Range().Text);
|
_document.Range().Text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void FormatSpecialItems()
|
||||||
|
{
|
||||||
|
ZaaImporter importer = new ZaaImporter();
|
||||||
|
importer.Import(
|
||||||
|
"Klinische Chemie: glomerul. Filtrationsr. CKD-EP: 36 ml/min /1,73qm; " +
|
||||||
|
"Sammelmenge (U): 12300 ml; "
|
||||||
|
);
|
||||||
|
Document document = new Document();
|
||||||
|
f.Formatter formatter = new f.Formatter(document);
|
||||||
|
formatter.Laboratory = importer.Laboratory;
|
||||||
|
formatter.Settings = new zaaReloaded2.Controller.Settings(
|
||||||
|
new List<ElementBase>() { new Items("*") } );
|
||||||
|
formatter.Run();
|
||||||
|
Assert.AreEqual(
|
||||||
|
"eGFR (CKD-EPI) 36 ml/min/1,73 m², SU-Volumen 12300 ml\r\r",
|
||||||
|
document.Range().Text);
|
||||||
|
}
|
||||||
|
|
||||||
string GetResourceText(string resource)
|
string GetResourceText(string resource)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@ -29,6 +29,7 @@ namespace Tests.Importer.ZaaImporter
|
|||||||
class LaurisItemTest
|
class LaurisItemTest
|
||||||
{
|
{
|
||||||
[Test]
|
[Test]
|
||||||
|
[TestCase("BE: 5.2 [-2 - 2] mmol/l", "BE", 5.2, "mmol/l", -2, 2, false)]
|
||||||
[TestCase("Natrium: 139 [135 - 145] mmol/l", "Natrium", 139, "mmol/l", 135, 145, true)]
|
[TestCase("Natrium: 139 [135 - 145] mmol/l", "Natrium", 139, "mmol/l", 135, 145, true)]
|
||||||
[TestCase("Kalium: 5.2 [3.5 - 5] mmol/l", "Kalium", 5.2, "mmol/l", 3.5, 5, false)]
|
[TestCase("Kalium: 5.2 [3.5 - 5] mmol/l", "Kalium", 5.2, "mmol/l", 3.5, 5, false)]
|
||||||
public void ParseLaurisWithBothLimits(
|
public void ParseLaurisWithBothLimits(
|
||||||
|
@ -40,7 +40,7 @@ namespace Tests.Importer.ZaaImporter
|
|||||||
[Test]
|
[Test]
|
||||||
public void ParseInvalidLaurisTimePoints()
|
public void ParseInvalidLaurisTimePoints()
|
||||||
{
|
{
|
||||||
LaurisTimePoint tp = new LaurisTimePoint("Aerobe Kultur: Enterokokken ; Wachstum: 10 ;");
|
LaurisTimePoint tp = new LaurisTimePoint("Mit freundlichen Grüßen");
|
||||||
Assert.IsFalse(tp.IsValidTimePoint,
|
Assert.IsFalse(tp.IsValidTimePoint,
|
||||||
"Bogus paragraph should be invalid LaurisTimePoint");
|
"Bogus paragraph should be invalid LaurisTimePoint");
|
||||||
|
|
||||||
|
@ -41,5 +41,15 @@ namespace Tests.Importer.ZaaImporter
|
|||||||
// Only 6 distinct time points (see method documentation above).
|
// Only 6 distinct time points (see method documentation above).
|
||||||
Assert.AreEqual(6, importer.Laboratory.TimePoints.Count);
|
Assert.AreEqual(6, importer.Laboratory.TimePoints.Count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ParseInvalidInput()
|
||||||
|
{
|
||||||
|
zaa.ZaaImporter importer = new zaa.ZaaImporter();
|
||||||
|
importer.Import("some arbitrary text\r\nthat does not represent\r\na valid lab");
|
||||||
|
Assert.IsFalse(importer.Success);
|
||||||
|
importer.Import("(03.03.1930 13:30:00)\r\nKlinische Chemie: Natrium 135 [135 - 145] mmol/l;");
|
||||||
|
Assert.IsTrue(importer.Success);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
169
Tests/SerializationTest.cs
Executable file
@ -0,0 +1,169 @@
|
|||||||
|
/* SelectFirstDayTest.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
using zaaReloaded2.Controller.Elements;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using System.Runtime.Serialization.Formatters.Binary;
|
||||||
|
using System.Runtime.Serialization.Formatters.Soap;
|
||||||
|
using zaaReloaded2.Controller;
|
||||||
|
|
||||||
|
namespace Tests.Controller
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
class SerializationTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void SerializeControlElement()
|
||||||
|
{
|
||||||
|
SelectFirstDay element = new SelectFirstDay(
|
||||||
|
new List<FormatElementBase>()
|
||||||
|
{
|
||||||
|
new Items("hello"),
|
||||||
|
new Items("world")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
MemoryStream stream = new MemoryStream();
|
||||||
|
// XmlSerializer does not work with interface properties...
|
||||||
|
// XmlSerializer serializer = new XmlSerializer(typeof(SelectFirstDay));
|
||||||
|
// BinaryFormatter serializer = new BinaryFormatter();
|
||||||
|
SoapFormatter serializer = new SoapFormatter();
|
||||||
|
serializer.Serialize(stream, element);
|
||||||
|
stream.Position = 0;
|
||||||
|
StreamReader sr = new StreamReader(stream);
|
||||||
|
Console.WriteLine(sr.ReadToEnd());
|
||||||
|
stream.Position = 0;
|
||||||
|
SelectFirstDay deserialized = serializer.Deserialize(stream) as SelectFirstDay;
|
||||||
|
Assert.IsNotNull(deserialized);
|
||||||
|
Assert.AreEqual(element.Children.Count, deserialized.Children.Count);
|
||||||
|
Assert.AreEqual(element.Children[0].Content, deserialized.Children[0].Content);
|
||||||
|
Assert.AreEqual(element.Children[1].Content, deserialized.Children[1].Content);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SerializeFormatElement()
|
||||||
|
{
|
||||||
|
string testString = "Hello World";
|
||||||
|
CustomText element = new CustomText();
|
||||||
|
element.Content = testString;
|
||||||
|
MemoryStream stream = new MemoryStream();
|
||||||
|
SoapFormatter serializer = new SoapFormatter();
|
||||||
|
serializer.Serialize(stream, element);
|
||||||
|
stream.Position = 0;
|
||||||
|
CustomText deserialized = serializer.Deserialize(stream) as CustomText;
|
||||||
|
Assert.IsNotNull(deserialized);
|
||||||
|
Assert.AreEqual(element.Content, deserialized.Content);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SerializeSettings()
|
||||||
|
{
|
||||||
|
Settings settings = CreateTestSettings1();
|
||||||
|
MemoryStream stream = new MemoryStream();
|
||||||
|
SoapFormatter serializer = new SoapFormatter();
|
||||||
|
serializer.Serialize(stream, settings);
|
||||||
|
stream.Position = 0;
|
||||||
|
Settings deserialized = serializer.Deserialize(stream) as Settings;
|
||||||
|
Assert.IsNotNull(deserialized);
|
||||||
|
Assert.AreEqual(settings.Name, deserialized.Name);
|
||||||
|
Assert.AreEqual(settings.ReferenceStyle, deserialized.ReferenceStyle);
|
||||||
|
Assert.AreEqual(settings.Elements.Count, deserialized.Elements.Count);
|
||||||
|
Assert.AreEqual(settings.Elements[0].GetType(), deserialized.Elements[0].GetType());
|
||||||
|
Assert.AreEqual(settings.Elements[1].GetType(), deserialized.Elements[1].GetType());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void SerializeSettingsRepository()
|
||||||
|
{
|
||||||
|
SettingsRepository repository = new SettingsRepository();
|
||||||
|
repository.SettingsList.Add(CreateTestSettings1());
|
||||||
|
repository.SettingsList.Add(CreateTestSettings2());
|
||||||
|
MemoryStream stream = new MemoryStream();
|
||||||
|
SoapFormatter serializer = new SoapFormatter();
|
||||||
|
serializer.Serialize(stream, repository);
|
||||||
|
stream.Position = 0;
|
||||||
|
SettingsRepository deserialized = serializer.Deserialize(stream) as SettingsRepository;
|
||||||
|
Assert.IsNotNull(deserialized);
|
||||||
|
Assert.AreEqual(repository.SettingsList.Count, deserialized.SettingsList.Count);
|
||||||
|
Assert.AreEqual(
|
||||||
|
repository.SettingsList[1].Elements.Count,
|
||||||
|
deserialized.SettingsList[1].Elements.Count
|
||||||
|
);
|
||||||
|
Assert.AreEqual(
|
||||||
|
repository.SettingsList[0].Name,
|
||||||
|
deserialized.SettingsList[0].Name
|
||||||
|
);
|
||||||
|
Assert.AreEqual(
|
||||||
|
repository.SettingsList[0].ReferenceStyle,
|
||||||
|
deserialized.SettingsList[0].ReferenceStyle
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings CreateTestSettings1()
|
||||||
|
{
|
||||||
|
string testName = "test name...";
|
||||||
|
string testString = "Hello World";
|
||||||
|
SelectFirstDay controlElement = new SelectFirstDay(
|
||||||
|
new List<FormatElementBase>()
|
||||||
|
{
|
||||||
|
new Items("hello"),
|
||||||
|
new Items("world")
|
||||||
|
}
|
||||||
|
);
|
||||||
|
CustomText formatElement = new CustomText();
|
||||||
|
formatElement.Content = testString;
|
||||||
|
Settings settings = new Settings(testName, new List<ElementBase>()
|
||||||
|
{
|
||||||
|
controlElement,
|
||||||
|
formatElement
|
||||||
|
}
|
||||||
|
);
|
||||||
|
settings.ReferenceStyle = zaaReloaded2.Formatter.ReferenceStyle.IfSpecialItem;
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
Settings CreateTestSettings2()
|
||||||
|
{
|
||||||
|
string testName = "another test name";
|
||||||
|
SelectFirstDay controlElement1 = new SelectFirstDay(
|
||||||
|
new List<FormatElementBase>()
|
||||||
|
{
|
||||||
|
new CustomText(),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
SelectLastDay controlElement2 = new SelectLastDay(
|
||||||
|
new List<FormatElementBase>()
|
||||||
|
{
|
||||||
|
new Items("Items content"),
|
||||||
|
}
|
||||||
|
);
|
||||||
|
Settings settings = new Settings(testName, new List<ElementBase>()
|
||||||
|
{
|
||||||
|
controlElement1,
|
||||||
|
controlElement2
|
||||||
|
}
|
||||||
|
);
|
||||||
|
settings.ReferenceStyle = zaaReloaded2.Formatter.ReferenceStyle.IfSpecialOrAbnormal;
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -41,6 +41,10 @@
|
|||||||
<AssemblyOriginatorKeyFile>zaaReloaded2.pfx</AssemblyOriginatorKeyFile>
|
<AssemblyOriginatorKeyFile>zaaReloaded2.pfx</AssemblyOriginatorKeyFile>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Reference Include="Bovender, Version=0.2.0.0, Culture=neutral, PublicKeyToken=df1c15557d8b6df8, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Bovender.0.2.0.0\lib\net40\Bovender.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
<Reference Include="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
<Reference Include="Microsoft.Office.Interop.Word, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL">
|
||||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||||
</Reference>
|
</Reference>
|
||||||
@ -48,10 +52,20 @@
|
|||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
|
<HintPath>..\packages\NUnit.2.6.4\lib\nunit.framework.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="PresentationCore" />
|
||||||
|
<Reference Include="PresentationFramework" />
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core">
|
<Reference Include="System.Core">
|
||||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||||
</Reference>
|
</Reference>
|
||||||
|
<Reference Include="System.Runtime.Serialization.Formatters.Soap" />
|
||||||
|
<Reference Include="System.Windows.Interactivity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\Expression.Blend.Sdk.1.0.2\lib\net40-client\System.Windows.Interactivity.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="System.Xaml" />
|
||||||
|
<Reference Include="System.XML" />
|
||||||
|
<Reference Include="WindowsBase" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Choose>
|
<Choose>
|
||||||
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
||||||
@ -66,7 +80,9 @@
|
|||||||
</Otherwise>
|
</Otherwise>
|
||||||
</Choose>
|
</Choose>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Compile Include="SerializationTest.cs" />
|
||||||
<Compile Include="Controller\SettingsRepositoryTest.cs" />
|
<Compile Include="Controller\SettingsRepositoryTest.cs" />
|
||||||
|
<Compile Include="Controller\SettingsTest.cs" />
|
||||||
<Compile Include="Formatter\DocumentWriterTest.cs" />
|
<Compile Include="Formatter\DocumentWriterTest.cs" />
|
||||||
<Compile Include="Thesaurus\ThesaurusTest.cs" />
|
<Compile Include="Thesaurus\ThesaurusTest.cs" />
|
||||||
<Compile Include="Controller\Elements\ItemsTest.cs" />
|
<Compile Include="Controller\Elements\ItemsTest.cs" />
|
||||||
@ -79,6 +95,9 @@
|
|||||||
<Compile Include="Thesaurus\TestThesaurus.cs" />
|
<Compile Include="Thesaurus\TestThesaurus.cs" />
|
||||||
<Compile Include="Importer\ZaaImporter\TimePointTest.cs" />
|
<Compile Include="Importer\ZaaImporter\TimePointTest.cs" />
|
||||||
<Compile Include="TestHelpers.cs" />
|
<Compile Include="TestHelpers.cs" />
|
||||||
|
<Compile Include="ViewModels\ElementPickerViewModelTest.cs" />
|
||||||
|
<Compile Include="ViewModels\SettingsRepositoryViewModelTest.cs" />
|
||||||
|
<Compile Include="ViewModels\SettingsViewModelTest.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="packages.config" />
|
<None Include="packages.config" />
|
||||||
|
54
Tests/ViewModels/ElementPickerViewModelTest.cs
Executable file
@ -0,0 +1,54 @@
|
|||||||
|
/* ElementPickerViewModelTest.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using Bovender.Mvvm.ViewModels;
|
||||||
|
using zaaReloaded2.ViewModels;
|
||||||
|
|
||||||
|
namespace Tests.ViewModels
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
class ElementPickerViewModelTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void ChooseElement()
|
||||||
|
{
|
||||||
|
ElementPickerViewModel vm = new ElementPickerViewModel(true);
|
||||||
|
ViewModelBase elementVM = vm.Categories.First().Children.First();
|
||||||
|
elementVM.IsSelected = true;
|
||||||
|
string expectedLabel = elementVM.DisplayString;
|
||||||
|
|
||||||
|
Assert.IsTrue(vm.ChooseElementCommand.CanExecute(null),
|
||||||
|
"Cannot execute ChooseElementCommand");
|
||||||
|
|
||||||
|
bool messageSent = false;
|
||||||
|
vm.ElementChosenMessage.Sent += (sender, args) =>
|
||||||
|
{
|
||||||
|
messageSent = true;
|
||||||
|
ViewModelBase messageContentVM = args.Content.ViewModel as ViewModelBase;
|
||||||
|
Assert.AreEqual(expectedLabel, messageContentVM.DisplayString);
|
||||||
|
};
|
||||||
|
|
||||||
|
vm.ChooseElementCommand.Execute(null);
|
||||||
|
Assert.IsTrue(messageSent, "No message was sent when element was chosen");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
77
Tests/ViewModels/SettingsRepositoryViewModelTest.cs
Executable file
@ -0,0 +1,77 @@
|
|||||||
|
/* SettingsRepositoryViewModel.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using zaaReloaded2.Controller;
|
||||||
|
using zaaReloaded2.ViewModels;
|
||||||
|
|
||||||
|
namespace Tests.ViewModels
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
class SettingsRepositoryViewModelTest
|
||||||
|
{
|
||||||
|
SettingsRepositoryViewModel _vm;
|
||||||
|
const string TESTNAME = "hello world";
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void SetUp()
|
||||||
|
{
|
||||||
|
SettingsRepository rep = new SettingsRepository();
|
||||||
|
rep.SettingsList.Add(new Settings(TESTNAME));
|
||||||
|
_vm = new SettingsRepositoryViewModel(rep);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CanDeleteNonDefaultSettings()
|
||||||
|
{
|
||||||
|
_vm.SettingsList[_vm.SettingsList.Count - 1].IsSelected = true;
|
||||||
|
Assert.IsTrue(_vm.DeleteSettingsCommand.CanExecute(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CannotDeleteDefaultSettings()
|
||||||
|
{
|
||||||
|
_vm.SettingsList[0].IsSelected = true;
|
||||||
|
Assert.IsFalse(_vm.DeleteSettingsCommand.CanExecute(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CopySettings()
|
||||||
|
{
|
||||||
|
SettingsViewModel orig = _vm.SettingsList[0];
|
||||||
|
orig.IsSelected = true;
|
||||||
|
_vm.CopySettingsCommand.Execute(null);
|
||||||
|
SettingsViewModel copy = _vm.SettingsList[_vm.SettingsList.Count-1];
|
||||||
|
|
||||||
|
// Make sure we have a new object
|
||||||
|
Assert.AreNotSame(orig, copy);
|
||||||
|
Assert.AreNotSame(orig.RevealModelObject(), copy.RevealModelObject());
|
||||||
|
|
||||||
|
Assert.AreEqual(
|
||||||
|
String.Format(
|
||||||
|
"Kopie von {0}",
|
||||||
|
orig.Name.Replace(" (eingebaut)", String.Empty)
|
||||||
|
),
|
||||||
|
copy.Name);
|
||||||
|
Assert.IsTrue(copy.IsSelected);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
188
Tests/ViewModels/SettingsViewModelTest.cs
Executable file
@ -0,0 +1,188 @@
|
|||||||
|
/* SettingsViewModelTest.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using NUnit.Framework;
|
||||||
|
using zaaReloaded2.ViewModels;
|
||||||
|
using zaaReloaded2.Controller;
|
||||||
|
using zaaReloaded2.Controller.Elements;
|
||||||
|
|
||||||
|
namespace Tests.ViewModels
|
||||||
|
{
|
||||||
|
[TestFixture]
|
||||||
|
class SettingsViewModelTest
|
||||||
|
{
|
||||||
|
SettingsViewModel _settingsVM;
|
||||||
|
|
||||||
|
[SetUp]
|
||||||
|
public void SetUp()
|
||||||
|
{
|
||||||
|
_settingsVM = new SettingsViewModel();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void AddElement()
|
||||||
|
{
|
||||||
|
bool messageSent = false;
|
||||||
|
Settings model = _settingsVM.RevealModelObject() as Settings;
|
||||||
|
int oldViewModelElementCount = _settingsVM.Elements.Count;
|
||||||
|
int oldModelElementCount = model.Elements.Count;
|
||||||
|
_settingsVM.AddElementMessage.Sent += (sender, args) =>
|
||||||
|
{
|
||||||
|
messageSent = true;
|
||||||
|
ElementPickerViewModel picker = args.Content.ViewModel as ElementPickerViewModel;
|
||||||
|
Assert.IsNotNull(picker, "ViewModel in MessageContent is not an ElementPickerViewModel");
|
||||||
|
picker.Categories.First().Children.First().IsSelected = true;
|
||||||
|
picker.ChooseElementCommand.Execute(null);
|
||||||
|
};
|
||||||
|
_settingsVM.AddElementCommand.Execute(null);
|
||||||
|
Assert.IsTrue(messageSent, "Message was not sent");
|
||||||
|
Assert.AreEqual(oldViewModelElementCount + 1, _settingsVM.Elements.Count,
|
||||||
|
"Count of elements in ViewModel was not increased by 1");
|
||||||
|
Assert.AreEqual(oldModelElementCount + 1, model.Elements.Count,
|
||||||
|
"Count of elements in settings Model was not increased by 1");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void AddChildElement()
|
||||||
|
{
|
||||||
|
bool messageSent = false;
|
||||||
|
SelectEachDay model = new SelectEachDay();
|
||||||
|
ControlElementViewModel viewModel = new ControlElementViewModel(model);
|
||||||
|
_settingsVM.AddElementViewModel(viewModel);
|
||||||
|
viewModel.IsSelected = true;
|
||||||
|
int oldViewModelChildrenCount = viewModel.Elements.Count;
|
||||||
|
int oldModelChildrenCount = model.Children.Count;
|
||||||
|
_settingsVM.AddChildElementMessage.Sent += (sender, args) =>
|
||||||
|
{
|
||||||
|
messageSent = true;
|
||||||
|
ElementPickerViewModel picker = args.Content.ViewModel as ElementPickerViewModel;
|
||||||
|
Assert.IsNotNull(picker, "ViewModel in MessageContent is not an ElementPickerViewModel");
|
||||||
|
picker.Categories.First().Children.First().IsSelected = true;
|
||||||
|
Assert.IsTrue(picker.ChooseElementCommand.CanExecute(null),
|
||||||
|
"Cannot execute element picker's ChooseElementCommand.");
|
||||||
|
picker.ChooseElementCommand.Execute(null);
|
||||||
|
};
|
||||||
|
_settingsVM.AddChildElementCommand.Execute(null);
|
||||||
|
Assert.IsTrue(messageSent, "Message was not sent");
|
||||||
|
Assert.AreEqual(oldViewModelChildrenCount + 1, viewModel.Elements.Count,
|
||||||
|
"Count of children in ViewModel was not increased by 1");
|
||||||
|
Assert.AreEqual(oldModelChildrenCount + 1, model.Children.Count,
|
||||||
|
"Count of children in Model was not increased by 1");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CannotAddChildElementToFormatElement()
|
||||||
|
{
|
||||||
|
ControlElementViewModel parent = new ControlElementViewModel(
|
||||||
|
new SelectFirstDay());
|
||||||
|
_settingsVM.AddElementViewModel(parent);
|
||||||
|
parent.IsSelected = true;
|
||||||
|
Assert.IsTrue(_settingsVM.AddChildElementCommand.CanExecute(null));
|
||||||
|
FormatElementViewModel child = new FormatElementViewModel(new Items());
|
||||||
|
_settingsVM.AddChildElementViewModel(parent, child);
|
||||||
|
parent.IsSelected = false;
|
||||||
|
child.IsSelected = true;
|
||||||
|
Assert.IsFalse(_settingsVM.AddChildElementCommand.CanExecute(null));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void DeleteElement()
|
||||||
|
{
|
||||||
|
Settings settings = new Settings();
|
||||||
|
settings.AddElement(new SelectFirstDay());
|
||||||
|
settings.AddElement(new SelectEachDay());
|
||||||
|
settings.AddElement(new SelectLastDay());
|
||||||
|
SettingsViewModel settingsVM = new SettingsViewModel(settings);
|
||||||
|
int oldCount = settingsVM.Elements.Count;
|
||||||
|
ElementViewModel elementVM = settingsVM.Elements.First();
|
||||||
|
ElementBase element = elementVM.RevealModelObject() as ElementBase;
|
||||||
|
Assert.IsTrue(settings.Elements.Contains(element),
|
||||||
|
"Settings object does not contain the model that the VM revealed?!");
|
||||||
|
elementVM.IsSelected = true;
|
||||||
|
Assert.IsTrue(settingsVM.DeleteElementCommand.CanExecute(null),
|
||||||
|
"DeleteElementCommand should be enabled.");
|
||||||
|
settingsVM.DeleteElementCommand.Execute(null);
|
||||||
|
Assert.AreEqual(oldCount - 1, settingsVM.Elements.Count);
|
||||||
|
Assert.IsFalse(settingsVM.Elements.Contains(elementVM),
|
||||||
|
"Elements collection still contains the deleted element view model.");
|
||||||
|
Assert.IsFalse(settings.Elements.Contains(element),
|
||||||
|
"Settings' Element collection still contains the element model.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void DeleteChildElement()
|
||||||
|
{
|
||||||
|
Settings settings = new Settings();
|
||||||
|
settings.AddElement(new SelectFirstDay(new Items()));
|
||||||
|
settings.AddElement(new SelectEachDay());
|
||||||
|
settings.AddElement(new SelectLastDay());
|
||||||
|
SettingsViewModel settingsVM = new SettingsViewModel(settings);
|
||||||
|
ControlElementViewModel parent = ((ControlElementViewModel)settingsVM.Elements.First());
|
||||||
|
int oldCount = parent.Elements.Count;
|
||||||
|
ElementViewModel elementVM = ((ControlElementViewModel)settingsVM.Elements.First())
|
||||||
|
.Elements.First();
|
||||||
|
ElementBase element = elementVM.RevealModelObject() as ElementBase;
|
||||||
|
Assert.IsTrue(((ControlElementBase)settings.Elements[0]).Children.Contains(element),
|
||||||
|
"Settings object does not contain the model that the VM revealed?!");
|
||||||
|
elementVM.IsSelected = true;
|
||||||
|
Assert.IsTrue(settingsVM.DeleteElementCommand.CanExecute(null),
|
||||||
|
"DeleteElementCommand should be enabled.");
|
||||||
|
settingsVM.DeleteElementCommand.Execute(null);
|
||||||
|
Assert.AreEqual(oldCount - 1, parent.Elements.Count);
|
||||||
|
Assert.IsFalse(parent.Elements.Contains(elementVM),
|
||||||
|
"Elements collection still contains the deleted element view model.");
|
||||||
|
Assert.IsFalse(((ControlElementBase)settings.Elements[0]).Children.Contains(element),
|
||||||
|
"Settings' collection of FormatElement children still contains the element model.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CopyElement()
|
||||||
|
{
|
||||||
|
string testString = "this text should be duplicated";
|
||||||
|
_settingsVM.AddElementViewModel(
|
||||||
|
new ControlElementViewModel(new SelectEachDay(new Items(testString))));
|
||||||
|
int oldCount = _settingsVM.Elements.Count;
|
||||||
|
_settingsVM.Elements.First().IsSelected = true;
|
||||||
|
Assert.IsTrue(_settingsVM.CopyElementCommand.CanExecute(null),
|
||||||
|
"CopyElementCommand should be enabled.");
|
||||||
|
_settingsVM.CopyElementCommand.Execute(null);
|
||||||
|
Assert.AreEqual(oldCount + 1, _settingsVM.Elements.Count);
|
||||||
|
|
||||||
|
// Access the first element
|
||||||
|
ControlElementViewModel controlVM = _settingsVM.Elements.First() as ControlElementViewModel;
|
||||||
|
FormatElementViewModel formatVM = controlVM.Elements.First() as FormatElementViewModel;
|
||||||
|
Items items = formatVM.RevealModelObject() as Items;
|
||||||
|
Assert.IsNotNull(items,
|
||||||
|
"Child ViewModel of first ControlElementViewModel does not wrap Items object.");
|
||||||
|
Assert.AreEqual(testString, items.Content,
|
||||||
|
"First control element's child element has incorrect Content string.");
|
||||||
|
|
||||||
|
// Access the second element
|
||||||
|
controlVM = _settingsVM.Elements.Last() as ControlElementViewModel;
|
||||||
|
formatVM = controlVM.Elements.First() as FormatElementViewModel;
|
||||||
|
items = formatVM.RevealModelObject() as Items;
|
||||||
|
Assert.IsNotNull(items,
|
||||||
|
"Child ViewModel of last ControlElementViewModel does not wrap Items object.");
|
||||||
|
Assert.AreEqual(testString, items.Content,
|
||||||
|
"First control element's child element has incorrect Content string.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
|
<package id="Bovender" version="0.2.0.0" targetFramework="net40" />
|
||||||
|
<package id="Expression.Blend.Sdk" version="1.0.2" targetFramework="net40" />
|
||||||
<package id="NUnit" version="2.6.4" targetFramework="net40" />
|
<package id="NUnit" version="2.6.4" targetFramework="net40" />
|
||||||
</packages>
|
</packages>
|
BIN
gimp/d.xcf
Normal file
BIN
gimp/down.xcf
Normal file
BIN
gimp/duplicate.xcf
Normal file
BIN
gimp/exit.xcf
Normal file
BIN
gimp/export.xcf
Normal file
BIN
gimp/gear.xcf
Normal file
BIN
gimp/icon.xcf
Normal file
BIN
gimp/import.xcf
Normal file
BIN
gimp/installbanner-small.xcf
Normal file
BIN
gimp/installbanner.xcf
Normal file
BIN
gimp/minus.xcf
Normal file
BIN
gimp/pen.xcf
Normal file
BIN
gimp/plus-child.xcf
Normal file
BIN
gimp/plus.xcf
Normal file
BIN
gimp/reset.xcf
Normal file
BIN
gimp/up.xcf
Normal file
BIN
publish/setup-files/icon.bmp
Normal file
After Width: | Height: | Size: 204 KiB |
BIN
publish/setup-files/icon.ico
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
publish/setup-files/installbanner-small.bmp
Executable file
After Width: | Height: | Size: 6.8 KiB |
BIN
publish/setup-files/installbanner.bmp
Executable file
After Width: | Height: | Size: 153 KiB |
@ -1,345 +1,120 @@
|
|||||||
{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff41\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1031\deflangfe1031\themelang1031\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
|
{\rtf1\ansi\deff4\adeflang1025
|
||||||
{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f40\fbidi \fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}Liberation Sans{\*\falt Arial};}{\f41\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0502040204020203}Segoe UI;}
|
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset128 Liberation Sans{\*\falt Arial};}{\f5\fswiss\fprq2\fcharset128 Segoe UI;}{\f6\fswiss\fprq2\fcharset128 Calibri;}{\f7\fnil\fprq2\fcharset0 Times New Roman;}{\f8\fswiss\fprq2\fcharset128 FreeSans;}{\f9\fnil\fprq2\fcharset0 Calibri;}}
|
||||||
{\f43\fbidi \fswiss\fcharset128\fprq2{\*\panose 00000000000000000000}@Liberation Sans;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
|
{\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red128\green128\blue128;}
|
||||||
{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}
|
{\stylesheet{\s0\snext0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031 Normal;}
|
||||||
{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
|
{\*\cs15\snext15 Default Paragraph Font;}
|
||||||
{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}
|
{\*\cs16\snext16\cf2\ul\ulc0\langfe255\lang255 Internet Link;}
|
||||||
{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f44\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f45\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
|
{\s17\sbasedon0\snext18\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb240\sa120\keepn\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs28\alang1081\loch\f4\fs28\lang1031 Heading;}
|
||||||
{\f47\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f48\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f49\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f50\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
|
{\s18\sbasedon0\snext18\sl288\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa140\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031 Text Body;}
|
||||||
{\f51\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f52\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f44\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f45\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
|
{\s19\sbasedon18\snext19\sl288\slmult1\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa140\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f4\fs22\lang1031 List;}
|
||||||
{\f47\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f48\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f49\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f50\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
|
{\s20\sbasedon0\snext20\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb120\sa120\noline\ltrpar\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af8\afs24\alang1081\ai\loch\f4\fs20\lang1031 Caption;}
|
||||||
{\f51\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f52\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f414\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f415\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}
|
{\s21\sbasedon0\snext21\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs20\alang1081\loch\f4\fs20\lang1031 Index;}
|
||||||
{\f417\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f418\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f421\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f422\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}
|
{\s22\snext22\sl276\slmult1\ql\widctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa200\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\dbch\af7\langfe1031\dbch\af9\afs22\alang1025\cf0\kerning1\loch\f6\fs22\lang1031 DocumentMap;}
|
||||||
{\f454\fbidi \fswiss\fcharset238\fprq2 Segoe UI CE;}{\f455\fbidi \fswiss\fcharset204\fprq2 Segoe UI Cyr;}{\f457\fbidi \fswiss\fcharset161\fprq2 Segoe UI Greek;}{\f458\fbidi \fswiss\fcharset162\fprq2 Segoe UI Tur;}
|
{\s23\sbasedon0\snext23\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs20\alang1081\ai\loch\f4\fs20\lang1031 caption;}
|
||||||
{\f460\fbidi \fswiss\fcharset178\fprq2 Segoe UI (Arabic);}{\f461\fbidi \fswiss\fcharset186\fprq2 Segoe UI Baltic;}{\f462\fbidi \fswiss\fcharset163\fprq2 Segoe UI (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
|
}{\*\generator LibreOffice/4.4.2.2$Linux_X86_64 LibreOffice_project/40m0$Build-2}{\info{\author Daniel Kraus}{\creatim\yr2015\mo1\dy28\hr17\min3}{\author Daniel Kraus}{\revtim\yr2015\mo7\dy28\hr18\min16}{\printim\yr0\mo0\dy0\hr0\min0}}\deftab720\deftab720
|
||||||
{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
|
\viewscale150
|
||||||
{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
|
{\*\pgdsctbl
|
||||||
{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
|
{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\pgdscnxt0 Default Style;}}
|
||||||
{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
|
\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1800\margr1800\margt1440\margb1440\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
|
||||||
{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
|
{\*\ftnsep}\pgndec\pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs18\alang1081\ai\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}
|
zaaReloaded2 ist mit der \uc2 \u8220\'81\'67Apache 2.0 License\u8221\'81\'68 lizensiert.\uc1 }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs18\alang1081\ai\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
|
}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs18\alang1081\ai\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
|
Diese Lizenz erlaubt kostenfreie Nutzung und schlie\u223\'3ft jedwede Haftung aus. Bitte lesen Sie sich den unten stehenden Lizenztext vor der Nutzung genau durch und stimmen Sie den Bedingungen zu.}
|
||||||
{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}
|
Diese Software enth\u228\'3flt Code von Dritten:}
|
||||||
{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}
|
DLLs }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}
|
der}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}
|
Visual Studio Tools for Office }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}
|
Laufzeit und des }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}
|
Expression Blend }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}
|
S}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}
|
oftware }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}
|
D}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;
|
evelopment }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp
|
K}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{
|
it}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\ql \li0\ri0\sa170\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\f41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \snext0 \sqformat \spriority0 Normal;}{\*
|
s}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*
|
(SDK), \u169\'3f }{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1
|
C}{\cf1\i\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \fs22\lang1031\langfe1031\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1031\langfenp1031 \snext11 \ssemihidden \sunhideused
|
opyright Microsoft Corporation.}
|
||||||
Normal Table;}{\*\cs15 \additive \ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1 Internet Link;}{\s16\ql \li0\ri0\sb240\sa120\keepn\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs28\alang1081 \ltrch\fcs0
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\fs28\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext17 Heading;}{\s17\ql \li0\ri0\sa140\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081
|
\uc2 \u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\uc1 }
|
||||||
\ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\f41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext17 Text Body;}{\s18\ql \li0\ri0\sa140\sl288\slmult1\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\af40\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon17 \snext18 List;}{\s19\ql \li0\ri0\sb120\sa120\nowidctlpar\noline\wrapdefault\faauto\rin0\lin0\itap0
|
Apache License}{\rtlch \ltrch\loch
|
||||||
\rtlch\fcs1 \ai\af40\afs20\alang1081 \ltrch\fcs0 \i\fs20\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext19 \sqformat caption;}{
|
\line }{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\s20\ql \li0\ri0\sa170\nowidctlpar\noline\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1081 \ltrch\fcs0 \fs20\cf1\lang1031\langfe1031\kerning1\loch\f40\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 \sbasedon0 \snext20 Index;}}
|
Version 2.0, January 2004}
|
||||||
{\*\rsidtbl \rsid4605650\rsid15302586}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author Daniel Kraus}{\operator Daniel Kraus}{\creatim\yr2015\mo1\dy28\hr17\min3}
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{{\field{\*\fldinst HYPERLINK "http://www.apache.org/licenses/" }{\fldrslt {\cf2\ul\ulc0\langfe255\lang255\cf2\ul\ulc0\kerning1\dbch\af7\langfe255\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang255
|
||||||
{\revtim\yr2015\mo1\dy28\hr17\min5}{\version2}{\edmins0}{\nofpages3}{\nofwords1381}{\nofchars8701}{\nofcharsws10062}{\vern49247}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}
|
http://www.apache.org/licenses/}}}}
|
||||||
\paperw12240\paperh15840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\formshade\horzdoc\dghspace120\dgvspace120
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION}
|
||||||
\dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale150\rsidroot4605650 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0{\*\ftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1 \af31507\afs24\alang1025 \ltrch\fcs0 \fs24\cf0\kerning0\loch\af40\dbch\af40\insrsid15302586
|
1. Definitions}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af7\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }}{\*\ftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {
|
.}
|
||||||
\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid15302586 \chftnsepc
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\par }}{\*\aftnsep \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid15302586 \chftnsep
|
License\uc2 \u8221\'81\'68 shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.\uc1 }
|
||||||
\par }}{\*\aftnsepc \ltrpar \pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\rtlch\fcs1 \af41 \ltrch\fcs0 \insrsid15302586 \chftnsepc
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }}\ltrpar \sectd \ltrsect\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang
|
Licensor\uc2 \u8221\'81\'68 shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.\uc1 }
|
||||||
{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\qj \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 \rtlch\fcs1 \af41\afs22\alang1081 \ltrch\fcs0 \fs22\cf1\lang1031\langfe1031\kerning1\loch\af41\hich\af31506\dbch\af0\cgrid\langnp1031\langfenp1031 {\rtlch\fcs1
|
Legal Entity\uc2 \u8221\'81\'68 shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, \u8220\'81\'67control\u8221\'81\'68 means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.\uc1 }
|
||||||
\ai\af41\afs18 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Daniel}{\rtlch\fcs1 \ai\af41\afs18 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\loch\af41\dbch\af0\hich\f31506 \rquote }{\rtlch\fcs1 \ai\af41\afs18 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 s XL Toolbox NG is distributed under the A
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\hich\af31506\dbch\af0\loch\f41 pache License, Version 2.0, which allows you to use this add-in free of charge in any environment (e.g., academic or commercial), but does not give any warranty. Please see the license text below for details.}{\rtlch\fcs1
|
You\uc2 \u8221\'81\'68 (or \u8220\'81\'67Your\u8221\'81\'68) shall mean an individual or Legal Entity exercising permissions granted by this License.\uc1 }
|
||||||
\af41 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 The add-in contains code whose copyright is own\hich\af31506\dbch\af0\loch\f41 ed by others:}{\rtlch\fcs1
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
Source\uc2 \u8221\'81\'68 form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.\uc1 }
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
DLLs from the Visual Studio Tools for Office runtime and the Expression Blend software development kit (SDK) are }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\loch\af41\dbch\af0\hich\f31506 \'a9}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 copyright Microsoft Corporation.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
Object\uc2 \u8221\'81\'68 form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.\uc1 }
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 The FreeImage library is }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'a9}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
Work\uc2 \u8221\'81\'68 shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).\uc1 }
|
||||||
copyright Herv}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'e9}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Drolon and others and is used under the FreeImage P\hich\af31506\dbch\af0\loch\f41
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
ublic License (FIPL). The source code of the FreeImage library is available at }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
Derivative Works\uc2 \u8221\'81\'68 shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.\uc1 }
|
||||||
HYPERLINK "http://freeimage.sf.net" }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \insrsid4605650 {\*\datafield
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4a00000068007400740070003a002f002f00660072006500650069006d006100670065002e00730066002e006e00650074002f000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}}}{\fldrslt {
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1\insrsid15302586 \hich\af31506\dbch\af0\loch\f41 http://freeimage.sf.net}}}\sectd \ltrsect\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\rtlch\fcs1
|
Contribution\uc2 \u8221\'81\'68 shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, \u8220\'81\'67submitted\u8221\'81\'68 means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as \u8220\'81\'67Not a Contribution.\u8221\'81\'68\uc1 }
|
||||||
\af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 and in the XL Toolbox code repository at }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1033
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 HYPERLINK "http://sf.net/p/xltoolbox/ng-code" }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \insrsid4605650 {\*\datafield
|
\uc2 \u8220\'81\'67\uc1 }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5c00000068007400740070003a002f002f00730066002e006e00650074002f0070002f0078006c0074006f006f006c0062006f0078002f006e0067002d0063006f00640065000000795881f43b1d7f48af2c825dc485
|
Contributor\uc2 \u8221\'81\'68 shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.\uc1 }
|
||||||
276300000000a5ab0000}}}{\fldrslt {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1\insrsid15302586 \hich\af31506\dbch\af0\loch\f41 http://sf.net/p/xltoolbox/n\hich\af31506\dbch\af0\loch\f41 g-code}}}
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\sectd \ltrsect\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 .}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
2. Grant of Copyright License}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\i\fs18\lang1033\langfe1031\langnp1033\insrsid15302586
|
. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.}
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650 \hich\af31506\dbch\af0\loch\f41 The LittleCMS2 library is }{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'a9}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 copyright
|
3. Grant of Patent License}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650 \hich\af31506\dbch\af0\loch\f41 }{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650
|
. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.}
|
||||||
\hich\af31506\dbch\af0\loch\f41 Marti Maria Saguer}{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \i\fs18\lang1033\langfe1031\langnp1033\insrsid4605650 \hich\af31506\dbch\af0\loch\f41 and is used under the MIT license.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\lang1033\langfe1031\langnp1033\insrsid4605650\charrsid4605650
|
4. Redistribution}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }\pard \ltrpar\qc \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \emdash \emdash
|
. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:}
|
||||||
\emdash \emdash \emdash }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Apache License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
1.\tab You must give any other recipients of the Work or Derivative Works a copy of this License; and}
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \line }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Version 2.0, January 2004}{
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and}
|
||||||
\par }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 HYPERLINK "http://www.apache.org/licenses/" }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\insrsid4605650 {\*\datafield
|
3.\tab You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and}
|
||||||
00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e006100700061006300680065002e006f00720067002f006c006900630065006e007300650073002f000000795881f43b1d7f48af2c825dc48527630000
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li360\ri0\lin360\rin0\fi-360\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
0000a5ab0000}}}{\fldrslt {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\ul\cf9\lang255\langfe255\langnp255\langfenp255\ulc1\insrsid15302586 \hich\af31506\dbch\af0\loch\f41 http://www.apache.org/licenses/}}}\sectd \ltrsect
|
4.\tab If the Work includes a \uc2 \u8220\'81\'67NOTICE\u8221\'81\'68 text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\uc1 }{\rtlch \ltrch\loch
|
||||||
\sbknone\linex0\sectunlocked1\sectdefaultcl\sftnbj {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\line \line }{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }\pard \ltrpar\qj \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.}
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 1. Definitions}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
5. Submission of Contributions}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 .}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.}
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}
|
6. Trademarks}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean the terms and conditi\hich\af31506\dbch\af0\loch\f41
|
. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.}
|
||||||
ons for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
7. Disclaimer of Warranty}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Licensor}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94
|
. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an \uc2 \u8220\'81\'67AS IS\u8221\'81\'68 BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.\uc1 }
|
||||||
}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.}{
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
8. Limitation of Liability}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.}
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Legal Entity}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qj\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\b\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
\'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean the union of the \hich\af31506\dbch\af0\loch\f41
|
9. Accepting Warranty or Additional Liability}{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\loch\fs18\lang1033
|
||||||
acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.}
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 control}
|
\par \pard\plain \s0\ql\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa170\ltrpar{\*\hyphen2\hyphlead0\hyphtrail4\hyphmax0}\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs22\alang1081\loch\f5\fs22\lang1031\qc\nowidctlpar\faauto\li0\ri0\lin0\rin0\fi0\sb0\sa40{\cf1\kerning1\dbch\af7\langfe1031\dbch\af9\afs24\alang1081\rtlch \ltrch\fs18\lang1031
|
||||||
{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
\uc2 \u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\u8212\'81\'5c\uc1 }
|
||||||
\hich\af31506\dbch\af0\loch\f41 means (i) the power, direct or indirect, to cause the direction or management of such entity,\hich\af31506\dbch\af0\loch\f41
|
\par }
|
||||||
whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 You}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 (or }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Your}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
) shall mean an individual or Legal Entity exercising permissions granted by this L\hich\af31506\dbch\af0\loch\f41 icense.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Source}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Object}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 form shall mean any form resulting from mechanical transformation or tr\hich\af31506\dbch\af0\loch\f41
|
|
||||||
anslation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Work}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).}{\rtlch\fcs1
|
|
||||||
\af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Derivative Works}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall \hich\af31506\dbch\af0\loch\f41
|
|
||||||
mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes o
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 f\hich\af31506\dbch\af0\loch\f41 this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Contribution}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506
|
|
||||||
\'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 shall mean any work of authorship, including the original versi\hich\af31506\dbch\af0\loch\f41
|
|
||||||
on of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 t\hich\af31506\dbch\af0\loch\f41 he copyright owner. For the purposes of this definition, }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 submitted}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source \hich\af31506\dbch\af0\loch\f41
|
|
||||||
code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the co
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 p\hich\af31506\dbch\af0\loch\f41 yright owner as }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1
|
|
||||||
\af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Not a Contribution.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 Contributor}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506
|
|
||||||
\'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 2. Grant of Copyright License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicl
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 y\hich\af31506\dbch\af0\loch\f41 perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 3. Grant of Patent License}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
|
|
||||||
\hich\af31506\dbch\af0\loch\f41
|
|
||||||
no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contrib
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 u\hich\af31506\dbch\af0\loch\f41
|
|
||||||
tor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or count
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 e\hich\af31506\dbch\af0\loch\f41
|
|
||||||
rclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 \hich\af31506\dbch\af0\loch\f41 litigation is filed.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 4. Redistribution}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }\pard \ltrpar\qj \fi-360\li360\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin360\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 1.\tab
|
|
||||||
You must\hich\af31506\dbch\af0\loch\f41 give any other recipients of the Work or Derivative Works a copy of this License; and}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 2.\tab You must cause any modified files to carry prominent notices stating that You changed the files; and}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 3.\tab You must retain, in the Source form of any Derivative Works th\hich\af31506\dbch\af0\loch\f41
|
|
||||||
at You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 4.\tab If the Work includes a }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 NOTICE}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 text file as part of its \hich\af31506\dbch\af0\loch\f41
|
|
||||||
distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 f\hich\af31506\dbch\af0\loch\f41
|
|
||||||
ollowing places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such thir
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 d\hich\af31506\dbch\af0\loch\f41
|
|
||||||
-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOT
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 I\hich\af31506\dbch\af0\loch\f41 CE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.\line \line
|
|
||||||
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions fo\hich\af31506\dbch\af0\loch\f41 r\hich\af31506\dbch\af0\loch\f41
|
|
||||||
use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.}{\rtlch\fcs1
|
|
||||||
\af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }\pard \ltrpar\qj \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
5. Submission of Contributi\hich\af31506\dbch\af0\loch\f41 ons}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the a
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 bove, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 6. Trademarks}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . This License does not grant permission to use the trade names, trademarks, service m\hich\af31506\dbch\af0\loch\f41
|
|
||||||
arks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 7. Disclaimer of Warranty}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . Unless required by applicable law or agreed to in wr\hich\af31506\dbch\af0\loch\f41
|
|
||||||
iting, Licensor provides the Work (and each Contributor provides its Contributions) on an }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \loch\af41\dbch\af0\hich\f31506 \'93}{\rtlch\fcs1
|
|
||||||
\af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 AS IS}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\loch\af41\dbch\af0\hich\f31506 \'94}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFR\hich\af31506\dbch\af0\loch\f41
|
|
||||||
INGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 8. Limi\hich\af31506\dbch\af0\loch\f41 tation of Liability}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41
|
|
||||||
. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
\hich\af31506\dbch\af0\loch\f41
|
|
||||||
liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 g\hich\af31506\dbch\af0\loch\f41 oodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.}{
|
|
||||||
\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \b\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 9. Accepting Warranty or Additional Liability}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0
|
|
||||||
\fs18\lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650 \hich\af31506\dbch\af0\loch\f41 . While redistributing t\hich\af31506\dbch\af0\loch\f41
|
|
||||||
he Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 o\hich\af31506\dbch\af0\loch\f41
|
|
||||||
nly on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by r
|
|
||||||
\hich\af31506\dbch\af0\loch\f41 e\hich\af31506\dbch\af0\loch\f41 ason of your accepting any such warranty or additional liability.}{\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \lang1033\langfe1031\langnp1033\insrsid15302586\charrsid4605650
|
|
||||||
\par }\pard \ltrpar\qc \li0\ri0\sa40\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid4605650 {\rtlch\fcs1 \af31507\afs24 \ltrch\fcs0 \fs18\insrsid15302586 \loch\af41\dbch\af0\hich\f31506 \emdash \emdash \emdash \emdash \emdash }{\rtlch\fcs1
|
|
||||||
\af31507\afs24 \ltrch\fcs0 \insrsid15302586
|
|
||||||
\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a
|
|
||||||
9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad
|
|
||||||
5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6
|
|
||||||
b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0
|
|
||||||
0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6
|
|
||||||
a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f
|
|
||||||
c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512
|
|
||||||
0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462
|
|
||||||
a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865
|
|
||||||
6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b
|
|
||||||
4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b
|
|
||||||
4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210060ffbff5a4060000a21b0000160000007468656d652f7468656d652f
|
|
||||||
7468656d65312e786d6cec594f6f1b4514bf23f11d467b6f6327761a4775aad8b11b6852a2d82dea71bc3bde9d66766735334eea1b6a8f484888823850891b07
|
|
||||||
04546a252ee5d3048aa048fd0abc99d95defc46b92b411ada039b4f6ec6fdefff79b37ebabd7eec50c1d1221294fda5efd72cd4324f1794093b0eddd1af62fad
|
|
||||||
79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607f22d771db8b944ad79796a40fcb585ee62949e0d9988b182bf82ac2a540e023901bb3a5e55a6d
|
|
||||||
7529c634f150826310bb830595127b1bb9dc1e03e189927ac16762a0a5920a707050d71039955d26d021666d0f7404fc6848ee290f312c153c687b35f3e72d6d
|
|
||||||
5c5dc2ebd926a616ec2dedeb9bbf6c5fb6213858363a45382a94d6fb8dd695ad42be0130358febf57add5ebd906700d8f7c1556b4b5966a3bf56efe4324b20fb
|
|
||||||
715e76b7d6ac355c7c49feca9ccdad4ea7d36c65b658a106643f36e6f06bb5d5c6e6b28337208b6fcee11b9dcd6e77d5c11b90c5afcee1fb575aab0d176f4011
|
|
||||||
a3c9c11c5a27b4dfcfa417903167db95f03580afd532f80c05d55094975631e6895a586c31becb451f101ac9b0a20952d3948cb10f25dcc5f14850ac35e07582
|
|
||||||
4b4fec922fe796b432247d4153d5f63e4c31b4c34cdecb673fbc7cf6041ddf7f7a7cffe7e3070f8eefff640539bbb671129677bdf8eef3bf1e7d82fe7cf2ed8b
|
|
||||||
875f56e36519ffdb8f9ffefacb17d540e89f9939cfbf7afcfbd3c7cfbffeec8fef1f56c037051e95e1431a13896e9223b4cf6370cc44c5b59c8cc4f9760c234c
|
|
||||||
cb3b369350e2046b2d15f27b2a72d037a79865d971ece8103782b705f04715f0fae4ae63f0201213452b34df886207b8cb39eb705119851b5a5729ccc3491256
|
|
||||||
2b1793326e1fe3c32add5d9c38f9ed4d5260cebc2c1dc7bb1171ccdc63385138240951483fe30784547877875227aebbd4175cf2b1427728ea605a1992211d39
|
|
||||||
d534dbb44d63c8cbb4ca67c8b7139bdddba8c35995d75be4d0454257605661fc9030278cd7f144e1b84ae410c7ac1cf01daca22a230753e197713da920d32161
|
|
||||||
1cf502a2cfb4f9d2ff4880bfa5a4dfc040599569df65d3d8450a450faa64ee60cecbc82d7ed08d709c5661073489cad80fe4019428467b5c55c177b9db21fa3b
|
|
||||||
e401270bd37d9b1227dda7b3c12d1a3a26cd0a443f99888a285e27dca9dfc1948d31315403acee70754c937f226e4681b9ad868b236ea0cae7df3caab0fb6da5
|
|
||||||
ec4d38bdaa7a66fb04512fc29da4e72e17017dfbd9790b4f923d020d31dfa7efc8f91d397bff79725ed4cf174fc933160682d6b3889db4cddc1d2f1ebbc794b1
|
|
||||||
819a32b223cde42de1f009fab0a8379afb2629ee6169041f752b830607170a6cf620c1d5c754458308a730b5d73d2d249499e850a2944bb82e9ae54ad91a0f93
|
|
||||||
bfb297cda6be8658ea9058edf2c02eafe8e5fcb65188315685e64e9b2b5ad102ceaa6ce54a26147c7b1565756dd499b5d58d6986151d6d85cb3ac4e65e0e212f
|
|
||||||
5c83c5229a30d520988520caab70e3d7aae1b683190974dc6d8ef2b4982c5c648a64840392e548fb3d9fa3ba49525e2b738e683f6c31e8abe329512b696b69b1
|
|
||||||
afa1ed2c492aab6b2c509767ef75b29457f02c4b20ed643bb2a4dc9c2c41476dafd55c6e7ac8c769db1bc345193ec629645dea4112b3105e35f94ad8b23fb599
|
|
||||||
4d97cfb2d9ca1d739ba00e2f3f6cdce71c76782015526d6119d9d2308fb2126089d664ed5f6e42582fca810a363a9b152b6b500c6fcc0a88a39b5a321e135f95
|
|
||||||
935d5ad1b1b35f332ae51345c4200a8ed0884dc43e86f4eb52057f022ae17d876104fd05decee9689b472e39674d577e276670761db334c219ddea16cd3bd9c2
|
|
||||||
0d211536986f25f3c0b74adb8d73e777c5b4fc05b9522ee3ff992bfa3c81d70f2b81ce800f2f860546ba53da1e172ae2c0426944fdbe80c9c17007540bbce185
|
|
||||||
c75054f07adafc2fc8a1fedff69c9561da1a6e916a9f864850388f542408d9035a32d5778ab07a767659912c13642aaa64ae4cadd9237248d85073e0aa3edb3d
|
|
||||||
1441a91b36c968c0e04ed69ffb3deba051a8879c72bf394c569cbdb607feedc9c7363338e5f2b01968f2f8172616e3c1ec54b5fbcdf6fcec2d3ba21fccc6ac46
|
|
||||||
de15a0ac7414b4b2b67f4513ce79d45ac69af378b9991b07599cf718168b812885974848ff03e71f153e23a68cf5813ae4fbc0ad087ebed0c2a06ca0aa2fd9c1
|
|
||||||
036982b48b23189ceca22d262dca86361b9d74d4f2c3fa8227dd42ef89606bcbce92ef7306bb18ce5c754e2f5e64b0b3083bb1b66b0b430d993dd9a2b034ce6f
|
|
||||||
322631e647b2f28f597c741712bd053f1a4c9892a698e0972a8161861e983e80e6b71acdd68dbf010000ffff0300504b0304140006000800000021000dd1909f
|
|
||||||
b60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f78277086f
|
|
||||||
6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89d93b64b0
|
|
||||||
60828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd5001996509a
|
|
||||||
ffb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0fbfff0000
|
|
||||||
001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6a7e7c000
|
|
||||||
0000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a0000001c
|
|
||||||
00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d001400060008000000210060ffbf
|
|
||||||
f5a4060000a21b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d00140006000800000021
|
|
||||||
000dd1909fb60000001b0100002700000000000000000000000000ae0900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000a90a00000000}
|
|
||||||
{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d
|
|
||||||
617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169
|
|
||||||
6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363
|
|
||||||
656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e}
|
|
||||||
{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4;
|
|
||||||
\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9;
|
|
||||||
\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7;
|
|
||||||
\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 caption;\lsdunhideused0 \lsdlocked0 List;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;
|
|
||||||
\lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;
|
|
||||||
\lsdunhideused0 \lsdlocked0 Revision;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;
|
|
||||||
\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;
|
|
||||||
\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 0105000002000000180000004d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000
|
|
||||||
d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
|
||||||
ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000010db
|
|
||||||
9f3f143bd001feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000
|
|
||||||
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000
|
|
||||||
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000
|
|
||||||
0000000000000000000000000000000000000000000000000105000000000000}}
|
|
@ -67,9 +67,9 @@ AppSupportURL=http://zaa.nephrowiki.de
|
|||||||
AppUpdatesURL=http://zaa.nephrowiki.de
|
AppUpdatesURL=http://zaa.nephrowiki.de
|
||||||
|
|
||||||
; Setup wizard
|
; Setup wizard
|
||||||
;SetupIconFile=setup-files\xltoolbox.ico
|
SetupIconFile=setup-files\icon.ico
|
||||||
;WizardImageFile=setup-files\installbanner.bmp
|
WizardImageFile=setup-files\installbanner.bmp
|
||||||
;WizardSmallImageFile=setup-files\icon-48.bmp
|
WizardSmallImageFile=setup-files\installbanner-small.bmp
|
||||||
ArchitecturesAllowed=x86 x64
|
ArchitecturesAllowed=x86 x64
|
||||||
ArchitecturesInstallIn64BitMode=x64
|
ArchitecturesInstallIn64BitMode=x64
|
||||||
DisableProgramGroupPage=true
|
DisableProgramGroupPage=true
|
||||||
|
BIN
www/img/elementbearbeiten.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
www/img/elementpicker.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
www/img/nachher.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
www/img/ribbon.png
Normal file
After Width: | Height: | Size: 5.6 KiB |
BIN
www/img/stilauswahl.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
www/img/stilbearbeiten.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
www/img/vorher.png
Normal file
After Width: | Height: | Size: 78 KiB |
172
www/index.html
@ -1,20 +1,186 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>zaaReloaded2 by Daniel Kraus</title>
|
<title>zaaReloaded2 by Daniel Kraus</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="author" content="Daniel Kraus">
|
||||||
|
<style type="text/css"><!--
|
||||||
|
* {
|
||||||
|
font-family: Arial; font-size: 16px; line-height: 125%;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
body { margin: 16px 24px; max-width: 800px; }
|
||||||
|
|
||||||
|
h1, h2 { color: #5e2750; }
|
||||||
|
h1 { font-size: 300%; margin: 48px 0 24px 0; }
|
||||||
|
h2 { font-size: 200%; margin: 32px 0 16px 0; }
|
||||||
|
|
||||||
|
p { text-align: justify; }
|
||||||
|
|
||||||
|
img {
|
||||||
|
box-shadow: 2px 2px 8px #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.download {
|
||||||
|
width: 500px; margin: 16px auto;
|
||||||
|
padding: 8px; border: 1px solid #888;
|
||||||
|
box-shadow: 2px 2px 8px #444;
|
||||||
|
background-color: #eef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.float-right {
|
||||||
|
float: right;
|
||||||
|
margin: 8px 0 8px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clear {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
--></style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>zaaReloaded2</h1>
|
<h1>zaaReloaded2</h1>
|
||||||
<p>
|
<p style="font-weight: bold;">
|
||||||
Erweiterung für Microsoft® Word 2010-2013, das die <a
|
Erweiterung für Microsoft® Word 2010-2013, das die <a
|
||||||
href="http://www.smi.ukw.de/sap-klinische-verfahren/archivsysteme/zentrale-arztbriefablage.html">
|
href="http://www.smi.ukw.de/sap-klinische-verfahren/archivsysteme/zentrale-arztbriefablage.html">
|
||||||
Zentrale Arztbriefablage (ZAA)</a> um Funktionen für das Formatieren
|
Zentrale Arztbriefablage (ZAA)</a> um Funktionen für das Formatieren
|
||||||
von Laborwerten erweitert.
|
von Laborwerten erweitert.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<div class="download">
|
||||||
|
<h2 style="margin-top:0">Download</h2>
|
||||||
|
<p><a href="downloads/">zaa.nephrowiki.de/downloads</a></p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>Vorher</h2>
|
||||||
|
<p class="center"><img src="img/vorher.png" alt="Vorher" /></p>
|
||||||
|
|
||||||
|
<h2>Nachher</h2>
|
||||||
|
<p>Am Beispiel des Ambulanz-Stils:</p>
|
||||||
|
<p class="center"><img src="img/nachher.png" alt="Nachher" /></p>
|
||||||
|
|
||||||
|
<h2>Anleitung</h2>
|
||||||
|
|
||||||
|
<p class="center">
|
||||||
|
<img src="img/ribbon.png" alt="zaaReloaded2-Ribbon" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li>Laborwerte auf üblichem Wege in einen Arztbrief einfügen
|
||||||
|
(alternativ kann der Befehl "Demo" ausgeführt werden, dann wird
|
||||||
|
ein Beispieldokument mit Laborwerten geöffnet).</li>
|
||||||
|
<li>Im zaaReloaded-Tab (s.o.) den linken Knopf "Formatieren"
|
||||||
|
klicken.</li>
|
||||||
|
<p class="center">
|
||||||
|
<img src="img/stilauswahl.png" alt="Stil auswählen" />
|
||||||
|
</p>
|
||||||
|
<li>
|
||||||
|
Beim ersten Mal erscheint eine Liste mit Stilen, aus der man den
|
||||||
|
gewünschten Stil auswählt (siehe Abbildung). Beim nächsten Mal,
|
||||||
|
wenn man auf diesen Knopf drückt, wird der zuletzt verwendete Stil
|
||||||
|
genommen.</li>
|
||||||
|
<li>Einen Moment warten... Voilà.</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
|
<h2 class="clear">Anpassen</h2>
|
||||||
|
<p>
|
||||||
|
Das Addin enthält einen Stil-Editor, mit dem die eingebauten Stile
|
||||||
|
bearbeitet und neue Stile entworfen werden können:
|
||||||
|
</p>
|
||||||
|
<p class="center">
|
||||||
|
<img src="img/stilbearbeiten.png" alt="Stil bearbeiten" />
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p class="clear">
|
||||||
|
<img src="img/elementpicker.png" alt="Elemente" class="float-right" />
|
||||||
|
Jeder Stil setzt sich aus sog. <i>Elementen</i> zusammen. Es gibt
|
||||||
|
<i>Steuerelemente</i>, die zum Beispiel für die Auswahl eines Tages
|
||||||
|
(erster Tag/letzter Tag) zuständig sind, und es gibt
|
||||||
|
<i>Ausgabeelemente</i>, die die eigentliche Formatierung und Ausgabe
|
||||||
|
der Laborwerte übernehmen.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Steuerelemente:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Ersten Tag auswählen</li>
|
||||||
|
<li>Letzten Tag auswählen</li>
|
||||||
|
<li>Jeden Tag nacheinander auswählen</li>
|
||||||
|
<li>Zwei Spalten einfügen/zur nächsten Spalte wechseln</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Ausgabeelemente:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li>Laborparameter</li>
|
||||||
|
<li>Beliebiger Text</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
"Beliebiger Text" kann, wie der Name schon sagt, beliebigen Text
|
||||||
|
enthalten, der nicht weiter bearbeitet wird. Auf diese Weise kann
|
||||||
|
man z.B. Platzhalter für Urinsedimente ausgeben lassen, die dann
|
||||||
|
noch händisch vervollständigt werden.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
"Laborparameter" enthalten eine durch Kommata getrennte Auflistung
|
||||||
|
von Parametern, die ausgegeben werden sollen. Jedes Element
|
||||||
|
"Laborparameter" kann optional einen Titel enthalten:
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Beispiel:
|
||||||
|
</p>
|
||||||
|
<blockquote>
|
||||||
|
<p>
|
||||||
|
<img src="img/elementbearbeiten.png" alt="Element bearbeiten" />
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Klinische Chemie: Na, K, Cl, (usw.)
|
||||||
|
</p>
|
||||||
|
</blockquote>
|
||||||
|
<p>
|
||||||
|
In diesem Fall ist "Klinische Chemie:" der optionale Titel.
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Die Bezeichnungen der einzelnen Parameter sind fest einprogrammiert.
|
||||||
|
Teils decken sie sich mit den Bezeichnungen, wie sie in der
|
||||||
|
Zentralen Arztbriefablage erscheinen; teils sind sie aber auch
|
||||||
|
Surrogate (z.B. "eGFR (CKD-EPI)" anstatt "glomerul. Filtrationsr.
|
||||||
|
CKD-EP").
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Die Platzhalter "SU-*", "U-*" und "*" geben die noch nicht
|
||||||
|
verwendeten Werte für Sammelurin, Spontanurin und alles weitere aus.
|
||||||
|
"*" sollte daher als letztes verwendet werden.
|
||||||
|
<p>
|
||||||
|
Die Liste der möglichen Parameternamen ist momentan fest
|
||||||
|
einprogrammiert und kann auch noch nicht angezeigt werden. Man kann
|
||||||
|
beim Entwickeln eines Stils aber probehalber den Platzhalter "*"
|
||||||
|
verwenden und sieht dann, welche Parameternamen noch verwendet
|
||||||
|
werden könnten.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h2>Updates</h2>
|
||||||
|
<p>
|
||||||
|
Das Addin sucht täglich nach Updates und lädt und installiert diese
|
||||||
|
bei Bedarf im Hintergrund.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h2>Weitere Informationen</h2>
|
<h2>Weitere Informationen</h2>
|
||||||
<p><a href="doc/md_history.html">Versionsgeschichte</a></p>
|
<p><a href="doc/md_HISTORY.html">Versionsgeschichte</a></p>
|
||||||
<p><a href="doc/index.html">Quellcode-Dokumentation</a></p>
|
<p><a href="doc/index.html">Quellcode-Dokumentation</a></p>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
<p>© 2015 Daniel Kraus</p>
|
<p>© 2015 <a href="http://www.bovender.de">Daniel Kraus</a></p>
|
||||||
</body>
|
</body>
|
||||||
<!-- vim: set tw=72 ai sts=2 ts=2 sw=2 : -->
|
<!-- vim: set tw=72 ai sts=2 ts=2 sw=2 : -->
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
2.0.0-alpha.1
|
2.0.0-beta.4
|
||||||
0e0620c09c28cc494352dd3901245e7402ea5b64 publish/release/zaaReloaded-2.0.0-alpha.1.exe
|
http://zaa.nephrowiki.de/downloads/zaaReloaded-2.0.0-beta.4.exe
|
||||||
http://zaa.nephrowiki.de/downloads/zaaReloaded-2.0.0-alpha.1.exe
|
d660895c949b9a1be96e70198d694e090b970c62 publish/release/zaaReloaded-2.0.0-beta.4.exe
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
/* ControlElementBase.cs
|
using System;
|
||||||
|
/* ControlElementBase.cs
|
||||||
* part of zaaReloaded2
|
* part of zaaReloaded2
|
||||||
*
|
*
|
||||||
* Copyright 2015 Daniel Kraus
|
* Copyright 2015 Daniel Kraus
|
||||||
@ -16,6 +17,8 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
{
|
{
|
||||||
@ -23,23 +26,90 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
/// Base class for control elements that control e.g. the working
|
/// Base class for control elements that control e.g. the working
|
||||||
/// set of time points in a Formatter object.
|
/// set of time points in a Formatter object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class ControlElementBase : ElementBase
|
[Serializable]
|
||||||
|
public abstract class ControlElementBase : ElementBase, ISerializable
|
||||||
{
|
{
|
||||||
|
#region Properties
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets a list of child elements, all of which must be derived
|
/// Gets a list of child elements, all of which must be derived
|
||||||
/// from FormatElementBase.
|
/// from FormatElementBase.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public IList<FormatElementBase> FormatElements { get; private set; }
|
public IList<FormatElementBase> Children { get; internal set; }
|
||||||
|
|
||||||
public ControlElementBase() { }
|
/// <summary>
|
||||||
|
/// Informs whether this control element can have child elements.
|
||||||
|
/// </summary>
|
||||||
|
public virtual bool CanHaveChildren { get { return true; } }
|
||||||
|
|
||||||
public ControlElementBase(IList<FormatElementBase> formatElements)
|
#endregion
|
||||||
{
|
|
||||||
FormatElements = formatElements;
|
|
||||||
}
|
|
||||||
|
|
||||||
public ControlElementBase(FormatElementBase formatElement)
|
#region Constructors
|
||||||
: this(new List<FormatElementBase>() { formatElement })
|
|
||||||
|
public ControlElementBase()
|
||||||
|
: this(new List<FormatElementBase>())
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
public ControlElementBase(IList<FormatElementBase> children)
|
||||||
|
{
|
||||||
|
Children = children;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ControlElementBase(FormatElementBase children)
|
||||||
|
: this(new List<FormatElementBase>() { children })
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Serialization
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected ControlElementBase(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
int version = info.GetInt32("Version");
|
||||||
|
int childrenCount = info.GetInt32("ChildrenCount");
|
||||||
|
Children = new List<FormatElementBase>();
|
||||||
|
for (int i = 0; i < childrenCount; i++)
|
||||||
|
{
|
||||||
|
Type typeOfChild = info.GetValue(SerializedChildName(i, "Type"), typeof(Type)) as Type;
|
||||||
|
Children.Add(info.GetValue(SerializedChildName(i, "Object"), typeOfChild) as FormatElementBase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GetObjectData(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
|
||||||
|
info.AddValue("ChildrenCount", Children.Count);
|
||||||
|
int i = 0;
|
||||||
|
foreach (FormatElementBase child in Children)
|
||||||
|
{
|
||||||
|
info.AddValue(SerializedChildName(i, "Type"), child.GetType());
|
||||||
|
info.AddValue(SerializedChildName(i, "Object"), child);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private string SerializedChildName(int index, string info)
|
||||||
|
{
|
||||||
|
return String.Format("Child{0}{1}", index, info);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Protected methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a clone of the Children list (for use in cloning
|
||||||
|
/// derived classes).
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Clone of the Children list.</returns>
|
||||||
|
protected IList<FormatElementBase> CloneChildren()
|
||||||
|
{
|
||||||
|
return Children.Select(child => child.Clone() as FormatElementBase).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
@ -25,22 +26,49 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Controller element that writes arbitrary text to the document.
|
/// Controller element that writes arbitrary text to the document.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class CustomText : ElementBase
|
[Serializable]
|
||||||
|
public class CustomText : FormatElementBase, ISerializable
|
||||||
{
|
{
|
||||||
public override string Label
|
public override string Label
|
||||||
{
|
{
|
||||||
get { return String.Format("\"{0}\"", Text); }
|
get
|
||||||
|
{
|
||||||
|
if (String.IsNullOrEmpty(Content))
|
||||||
|
{
|
||||||
|
return "Beliebiger Text";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return String.Format("\"{0}\"", Content);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Run(Formatter.Formatter formatter)
|
public override void Run(Formatter.Formatter formatter)
|
||||||
{
|
{
|
||||||
formatter.Write(Text);
|
formatter.WriteParagraph(Content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override ElementBase CreateInstance()
|
||||||
|
{
|
||||||
|
CustomText clone = new CustomText();
|
||||||
|
clone.Content = Content;
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
public CustomText () { }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the arbitrary text that will be written
|
/// Deserialization constructor.
|
||||||
/// to the document.
|
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string Text { get; set; }
|
protected CustomText(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
int version = info.GetInt32("Version");
|
||||||
|
Content = info.GetString("Content");
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,14 +21,14 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.Office.Interop.Word;
|
using Microsoft.Office.Interop.Word;
|
||||||
using zaaReloaded2.LabModel;
|
using zaaReloaded2.LabModel;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base class for formatting elements.
|
/// Base class for formatting elements.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Serializable]
|
public abstract class ElementBase : ICloneable
|
||||||
public abstract class ElementBase
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns the label for this formatting element.
|
/// Returns the label for this formatting element.
|
||||||
@ -44,5 +44,16 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
/// Element belongs to. The Formatter object provides access
|
/// Element belongs to. The Formatter object provides access
|
||||||
/// to the current Word document etc.</param>
|
/// to the current Word document etc.</param>
|
||||||
abstract public void Run(zaaReloaded2.Formatter.Formatter formatter);
|
abstract public void Run(zaaReloaded2.Formatter.Formatter formatter);
|
||||||
|
|
||||||
|
public object Clone()
|
||||||
|
{
|
||||||
|
return CreateInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance that can be used for cloning.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>New instance of a derived class.</returns>
|
||||||
|
protected abstract ElementBase CreateInstance();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,42 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Base class for elements that perform actual formatting.
|
/// Base class for elements that perform actual formatting.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class FormatElementBase : ElementBase
|
public abstract class FormatElementBase : ElementBase, ISerializable
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the content of this format element.
|
||||||
|
/// </summary>
|
||||||
|
public string Content
|
||||||
|
{
|
||||||
|
get { return _content; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_content = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Is called whenever the Content is changed.
|
||||||
|
/// </summary>
|
||||||
|
protected virtual void OnContentChanged() {}
|
||||||
|
|
||||||
|
private string _content;
|
||||||
|
|
||||||
|
#region Serialization
|
||||||
|
|
||||||
|
public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
|
||||||
|
info.AddValue("Content", Content);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,6 +23,7 @@ using System.Diagnostics;
|
|||||||
using Microsoft.Office.Interop.Word;
|
using Microsoft.Office.Interop.Word;
|
||||||
using zaaReloaded2.LabModel;
|
using zaaReloaded2.LabModel;
|
||||||
using zaaReloaded2.Formatter;
|
using zaaReloaded2.Formatter;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
{
|
{
|
||||||
@ -31,17 +32,28 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
/// to a Word document.
|
/// to a Word document.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Serializable]
|
[Serializable]
|
||||||
class Items : FormatElementBase
|
public class Items : CustomText
|
||||||
{
|
{
|
||||||
#region ElementBase implementation
|
#region ElementBase implementation
|
||||||
|
|
||||||
public override string Label
|
public override string Label
|
||||||
{
|
{
|
||||||
get { return Line; }
|
get
|
||||||
|
{
|
||||||
|
if (String.IsNullOrEmpty(Content))
|
||||||
|
{
|
||||||
|
return "Laborparameter";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Content;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Run(zaaReloaded2.Formatter.Formatter formatter)
|
public override void Run(zaaReloaded2.Formatter.Formatter formatter)
|
||||||
{
|
{
|
||||||
|
ParseLine();
|
||||||
if (_items == null || _items.Count == 0) return;
|
if (_items == null || _items.Count == 0) return;
|
||||||
|
|
||||||
bool _needComma = false;
|
bool _needComma = false;
|
||||||
@ -73,27 +85,11 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
protected override ElementBase CreateInstance()
|
||||||
|
|
||||||
#region Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gets or sets a text line that contains a comma-separated list of
|
|
||||||
/// parsable laboratory item names. The list may optionally be preceded
|
|
||||||
/// with a caption followed by a colon.
|
|
||||||
/// </summary>
|
|
||||||
public string Line
|
|
||||||
{
|
{
|
||||||
[DebuggerStepThrough]
|
Items clone = new Items();
|
||||||
get
|
clone.Content = Content;
|
||||||
{
|
return clone;
|
||||||
return _line;
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
_line = value;
|
|
||||||
ParseLine();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -102,12 +98,19 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
|
|
||||||
public Items() : base() { }
|
public Items() : base() { }
|
||||||
|
|
||||||
public Items(string line)
|
public Items(string content)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
Line = line;
|
Content = content;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected Items(SerializationInfo info, StreamingContext context)
|
||||||
|
: base(info, context)
|
||||||
|
{ }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Private methods
|
#region Private methods
|
||||||
@ -121,7 +124,7 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
_items = null;
|
_items = null;
|
||||||
_caption = null;
|
_caption = null;
|
||||||
Regex r = new Regex(@"((?<caption>[^:]+):\s*)?((?<items>[^,]+),\s*)*(?<items>[^,]+)");
|
Regex r = new Regex(@"((?<caption>[^:]+):\s*)?((?<items>[^,]+),\s*)*(?<items>[^,]+)");
|
||||||
Match m = r.Match(Line);
|
Match m = r.Match(Content);
|
||||||
if (m.Success)
|
if (m.Success)
|
||||||
{
|
{
|
||||||
if (m.Groups["caption"].Success)
|
if (m.Groups["caption"].Success)
|
||||||
@ -154,7 +157,6 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
{
|
{
|
||||||
items.AddRange(CollectByName(formatter, itemName));
|
items.AddRange(CollectByName(formatter, itemName));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
@ -170,9 +172,12 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
foreach (TimePointFormatter tpf in formatter.WorkingTimePoints.Values)
|
foreach (TimePointFormatter tpf in formatter.WorkingTimePoints.Values)
|
||||||
{
|
{
|
||||||
List<ItemFormatter> newItems = tpf.ItemFormatters.Values
|
List<ItemFormatter> newItems = tpf.ItemFormatters.Values
|
||||||
.Where(i => !i.HasBeenUsed && i.LabItem.QualifiedName.StartsWith(material))
|
.Where(i => !i.HasBeenUsed && !i.IsBlacklisted && i.LabItem.QualifiedName.StartsWith(material))
|
||||||
.ToList();
|
.ToList();
|
||||||
newItems.ForEach(i => i.HasBeenUsed = true);
|
newItems.ForEach(i => i.HasBeenUsed = true);
|
||||||
|
// Include the material prefix only if this item was collected by a
|
||||||
|
// general wildcard ("*" rather than "SU-*" etc.).
|
||||||
|
newItems.ForEach(i => i.IncludeMaterial = String.IsNullOrEmpty(material));
|
||||||
items.AddRange(newItems);
|
items.AddRange(newItems);
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
@ -194,6 +199,7 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
// item with itemName.
|
// item with itemName.
|
||||||
ItemFormatter i = tpf.ItemFormatters[name];
|
ItemFormatter i = tpf.ItemFormatters[name];
|
||||||
i.HasBeenUsed = true;
|
i.HasBeenUsed = true;
|
||||||
|
i.IncludeMaterial = false;
|
||||||
items.Add(i);
|
items.Add(i);
|
||||||
}
|
}
|
||||||
return items;
|
return items;
|
||||||
@ -203,7 +209,6 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
string _line;
|
|
||||||
string _caption;
|
string _caption;
|
||||||
List<string> _items;
|
List<string> _items;
|
||||||
static Regex _wildcard = new Regex(@"(?<material>[^-]+-)?\*");
|
static Regex _wildcard = new Regex(@"(?<material>[^-]+-)?\*");
|
||||||
|
69
zaaReloaded2/Controller/Elements/NextColumn.cs
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
/* NextColumn.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace zaaReloaded2.Controller.Elements
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Format element that causes a Formatter object to move the
|
||||||
|
/// insertion point to the next colum in a layout table.
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
public class NextColumn : ControlElementBase, ISerializable
|
||||||
|
{
|
||||||
|
public override string Label
|
||||||
|
{
|
||||||
|
get { return "Nächste Spalte"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanHaveChildren
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Run(Formatter.Formatter formatter)
|
||||||
|
{
|
||||||
|
formatter.NextColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override ElementBase CreateInstance()
|
||||||
|
{
|
||||||
|
return new NextColumn();
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
public NextColumn() : base() { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected NextColumn(SerializationInfo info, StreamingContext context)
|
||||||
|
: base(info, context)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
@ -18,15 +18,17 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
{
|
{
|
||||||
class SelectEachDay : ControlElementBase
|
[Serializable]
|
||||||
|
public class SelectEachDay : ControlElementBase
|
||||||
{
|
{
|
||||||
public override string Label
|
public override string Label
|
||||||
{
|
{
|
||||||
get { return "Jeden Tag auswählen"; }
|
get { return "Jeder Tag"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Run(Formatter.Formatter formatter)
|
public override void Run(Formatter.Formatter formatter)
|
||||||
@ -34,10 +36,30 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
formatter.ProcessEachDay(this);
|
formatter.ProcessEachDay(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override ElementBase CreateInstance()
|
||||||
|
{
|
||||||
|
return new SelectEachDay(CloneChildren());
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
public SelectEachDay() : base() { }
|
public SelectEachDay() : base() { }
|
||||||
|
|
||||||
public SelectEachDay(FormatElementBase formatElement)
|
public SelectEachDay(FormatElementBase formatElement)
|
||||||
: base(formatElement)
|
: base(formatElement)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
public SelectEachDay(IList<FormatElementBase> formatElements)
|
||||||
|
: base(formatElements)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected SelectEachDay(SerializationInfo info, StreamingContext context)
|
||||||
|
: base(info, context)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
@ -26,11 +27,12 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
/// Selects the time points of the first day in a given Formatter
|
/// Selects the time points of the first day in a given Formatter
|
||||||
/// object.
|
/// object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class SelectFirstDay : ControlElementBase
|
[Serializable]
|
||||||
|
public class SelectFirstDay : ControlElementBase, ISerializable
|
||||||
{
|
{
|
||||||
public override string Label
|
public override string Label
|
||||||
{
|
{
|
||||||
get { return "Ersten Tag auswählen"; }
|
get { return "Erster Tag"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Run(Formatter.Formatter formatter)
|
public override void Run(Formatter.Formatter formatter)
|
||||||
@ -38,10 +40,30 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
formatter.ProcessFirstDay(this);
|
formatter.ProcessFirstDay(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override ElementBase CreateInstance()
|
||||||
|
{
|
||||||
|
return new SelectFirstDay(CloneChildren());
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
public SelectFirstDay() : base() { }
|
public SelectFirstDay() : base() { }
|
||||||
|
|
||||||
public SelectFirstDay(FormatElementBase formatElement)
|
public SelectFirstDay(FormatElementBase formatElement)
|
||||||
: base(formatElement)
|
: base(formatElement)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
public SelectFirstDay(IList<FormatElementBase> formatElements)
|
||||||
|
: base(formatElements)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected SelectFirstDay(SerializationInfo info, StreamingContext context)
|
||||||
|
: base(info, context)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller.Elements
|
namespace zaaReloaded2.Controller.Elements
|
||||||
@ -27,11 +28,12 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
/// Selects the time points of the last day in a given Formatter
|
/// Selects the time points of the last day in a given Formatter
|
||||||
/// object.
|
/// object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
class SelectLastDay : ControlElementBase
|
[Serializable]
|
||||||
|
public class SelectLastDay : ControlElementBase, ISerializable
|
||||||
{
|
{
|
||||||
public override string Label
|
public override string Label
|
||||||
{
|
{
|
||||||
get { return "Letzten Tag auswählen"; }
|
get { return "Letzter Tag"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Run(Formatter.Formatter formatter)
|
public override void Run(Formatter.Formatter formatter)
|
||||||
@ -39,10 +41,30 @@ namespace zaaReloaded2.Controller.Elements
|
|||||||
formatter.ProcessLastDay(this);
|
formatter.ProcessLastDay(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override ElementBase CreateInstance()
|
||||||
|
{
|
||||||
|
return new SelectLastDay(CloneChildren());
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
public SelectLastDay() : base() { }
|
public SelectLastDay() : base() { }
|
||||||
|
|
||||||
public SelectLastDay(FormatElementBase formatElement)
|
public SelectLastDay(FormatElementBase formatElement)
|
||||||
: base(formatElement)
|
: base(formatElement)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
public SelectLastDay(IList<FormatElementBase> formatElements)
|
||||||
|
: base(formatElements)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected SelectLastDay(SerializationInfo info, StreamingContext context)
|
||||||
|
: base(info, context)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
69
zaaReloaded2/Controller/Elements/TwoColumns.cs
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
/* TwoColumns.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace zaaReloaded2.Controller.Elements
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Format element that causes a Formatter object to insert a table with
|
||||||
|
/// two columns and one row into the documents.
|
||||||
|
/// </summary>
|
||||||
|
[Serializable]
|
||||||
|
public class TwoColumns : ControlElementBase, ISerializable
|
||||||
|
{
|
||||||
|
public override string Label
|
||||||
|
{
|
||||||
|
get { return "Zwei Spalten einfügen"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public override bool CanHaveChildren
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Run(Formatter.Formatter formatter)
|
||||||
|
{
|
||||||
|
formatter.InsertTwoColumns();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override ElementBase CreateInstance()
|
||||||
|
{
|
||||||
|
return new TwoColumns();
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Constructors
|
||||||
|
|
||||||
|
public TwoColumns() : base() { }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected TwoColumns(SerializationInfo info, StreamingContext context)
|
||||||
|
: base(info, context)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
@ -21,6 +21,10 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using zaaReloaded2.Formatter;
|
using zaaReloaded2.Formatter;
|
||||||
using zaaReloaded2.Controller.Elements;
|
using zaaReloaded2.Controller.Elements;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
using System.Runtime.Serialization.Formatters.Soap;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller
|
namespace zaaReloaded2.Controller
|
||||||
{
|
{
|
||||||
@ -28,8 +32,43 @@ namespace zaaReloaded2.Controller
|
|||||||
/// Holds settings related to controlling laboratory output.
|
/// Holds settings related to controlling laboratory output.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class Settings
|
public class Settings : ICloneable, ISerializable
|
||||||
{
|
{
|
||||||
|
#region Persistence
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserializes a Settings object from SOAP XML that is read from a file.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName">File to read.</param>
|
||||||
|
/// <returns>Deserialized Settings object with new unique ID.</returns>
|
||||||
|
/// <exception cref="InvalidDataException">if the file does not contain
|
||||||
|
/// SOAP XML that can be deserialized to a Settings object.</exception>
|
||||||
|
public static Settings LoadFromFile(string fileName)
|
||||||
|
{
|
||||||
|
StreamReader reader = new StreamReader(fileName);
|
||||||
|
SoapFormatter formatter = new SoapFormatter();
|
||||||
|
Settings settings = formatter.Deserialize(reader.BaseStream) as Settings;
|
||||||
|
if (settings == null)
|
||||||
|
{
|
||||||
|
throw new InvalidDataException("Datei enthält keine Stil-Daten oder ist beschädigt.");
|
||||||
|
}
|
||||||
|
settings.Uid = Guid.NewGuid();
|
||||||
|
return settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Serializes a Settings object to SOAP XML that is written to a file.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="fileName">File to write to.</param>
|
||||||
|
public void SaveToFile(string fileName)
|
||||||
|
{
|
||||||
|
StreamWriter writer = new StreamWriter(fileName);
|
||||||
|
SoapFormatter formatter = new SoapFormatter();
|
||||||
|
formatter.Serialize(writer.BaseStream, this);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -47,14 +86,144 @@ namespace zaaReloaded2.Controller
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public IList<ElementBase> Elements { get; private set; }
|
public IList<ElementBase> Elements { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the unique ID of this Settings object. The unique
|
||||||
|
/// ID is not included in deep-copying (cloning).
|
||||||
|
/// </summary>
|
||||||
|
public Guid Uid { get; internal set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructor
|
#region Constructors
|
||||||
|
|
||||||
public Settings()
|
public Settings()
|
||||||
|
: this(string.Empty, null)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
public Settings(string name)
|
||||||
|
: this(name, null)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new Settings object with an initial
|
||||||
|
/// set of elements.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="initialElements">Set of ElementBase
|
||||||
|
/// object (or derived ones).</param>
|
||||||
|
public Settings(IList<ElementBase> initialElements)
|
||||||
|
: this(String.Empty, initialElements)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new Settings object with an initial
|
||||||
|
/// set of elements and a name.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="initialElements">Set of ElementBase
|
||||||
|
/// object (or derived ones).</param>
|
||||||
|
/// <param name="name">Name of these settings.</param>
|
||||||
|
public Settings(string name, IList<ElementBase> initialElements)
|
||||||
|
{
|
||||||
|
Uid = Guid.NewGuid();
|
||||||
|
Name = name;
|
||||||
|
Elements = initialElements;
|
||||||
|
ReferenceStyle = Properties.Settings.Default.ReferenceStyle;
|
||||||
|
if (Elements == null)
|
||||||
{
|
{
|
||||||
Elements = new List<ElementBase>();
|
Elements = new List<ElementBase>();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new Settings object with an initial
|
||||||
|
/// set of elements, a name, and a unique ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="initialElements">Set of ElementBase
|
||||||
|
/// object (or derived ones).</param>
|
||||||
|
/// <param name="name">Name of these settings.</param>
|
||||||
|
/// <param name="Uid">Unique ID for this Settings object.</param>
|
||||||
|
public Settings(string name, IList<ElementBase> initialElements, Guid uid)
|
||||||
|
: this(name, initialElements)
|
||||||
|
{
|
||||||
|
Uid = uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialization constructor.
|
||||||
|
/// </summary>
|
||||||
|
protected Settings(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
int version = info.GetInt32("Version");
|
||||||
|
Uid = (Guid)info.GetValue("Uid", typeof(Guid));
|
||||||
|
Name = info.GetString("Name");
|
||||||
|
ReferenceStyle = (ReferenceStyle)info.GetValue("ReferenceStyle", typeof(ReferenceStyle));
|
||||||
|
int elementsCount = info.GetInt32("ElementsCount");
|
||||||
|
Elements = new List<ElementBase>();
|
||||||
|
for (int i = 0; i < elementsCount; i++)
|
||||||
|
{
|
||||||
|
Type type = info.GetValue(SerializationElementName(i, "Type"), typeof(Type)) as Type;
|
||||||
|
ElementBase element = info.GetValue(SerializationElementName(i, "Object"), type) as ElementBase;
|
||||||
|
Elements.Add(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds an element to the list of Elements.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="element">Element to add.</param>
|
||||||
|
public void AddElement(ElementBase element)
|
||||||
|
{
|
||||||
|
Elements.Add(element);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Implementation of ICloneable
|
||||||
|
|
||||||
|
public object Clone()
|
||||||
|
{
|
||||||
|
Settings clone = new Settings(
|
||||||
|
String.Format("Kopie von {0}", Name),
|
||||||
|
Elements.Select(e => e.Clone() as ElementBase).ToList()
|
||||||
|
);
|
||||||
|
clone.ReferenceStyle = ReferenceStyle;
|
||||||
|
return clone;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Implementation of ISerializable
|
||||||
|
|
||||||
|
public void GetObjectData(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
|
||||||
|
info.AddValue("Uid", Uid);
|
||||||
|
info.AddValue("Name", Name);
|
||||||
|
info.AddValue("ReferenceStyle", ReferenceStyle);
|
||||||
|
info.AddValue("ElementsCount", Elements.Count);
|
||||||
|
int i = 0;
|
||||||
|
foreach (ElementBase e in Elements)
|
||||||
|
{
|
||||||
|
info.AddValue(SerializationElementName(i, "Type"), e.GetType());
|
||||||
|
info.AddValue(SerializationElementName(i, "Object"), e);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string SerializationElementName(int index, string info)
|
||||||
|
{
|
||||||
|
return String.Format("Element{0}{1}", index, info);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Fields
|
||||||
|
|
||||||
|
// Defines header lines for the persistence file: "[My name]" and so on.
|
||||||
|
static readonly Regex _persistenceHeaderRegex = new Regex(@"^\[(?<name>.+?)]$");
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -18,47 +18,232 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Configuration;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
using System.Reflection;
|
||||||
|
using zaaReloaded2.Controller.Elements;
|
||||||
|
using System.Runtime.Serialization.Formatters.Soap;
|
||||||
|
using System.Web;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
namespace zaaReloaded2.Controller
|
namespace zaaReloaded2.Controller
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// A repository for zaaReloaded2.Controller.Settings.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// This class is derived from ApplicationSettingsBase to be able
|
||||||
|
/// to simply store it in the assembly's properties. However, this
|
||||||
|
/// causes some confusion because .NET's ApplicationSettings are
|
||||||
|
/// different from zaaReloaded's Settings.
|
||||||
|
/// </remarks>
|
||||||
[Serializable]
|
[Serializable]
|
||||||
public class SettingsRepository : ApplicationSettingsBase
|
public class SettingsRepository : ISerializable
|
||||||
{
|
{
|
||||||
#region Persistence
|
#region Properties persistence
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Loads the SettingsRepository instance that was persisted in
|
||||||
|
/// the assembly properties.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>SettingsRepository that was last stored in the
|
||||||
|
/// assembly properties, or a newly created SettingsRepository
|
||||||
|
/// if no previously stored exists.</returns>
|
||||||
|
/// <remarks>
|
||||||
|
/// The SettingsRepository is serialized using a SoapFormatter, which
|
||||||
|
/// creates SOAP XML. Since the assembly properties are stored as
|
||||||
|
/// XML as well, the serialized SettingsRepository is converted to
|
||||||
|
/// a base-64 string, which does not mess with the properties XML.
|
||||||
|
/// </remarks>
|
||||||
public static SettingsRepository Load()
|
public static SettingsRepository Load()
|
||||||
{
|
{
|
||||||
return
|
string s = Properties.Settings.Default.SettingsRepository;
|
||||||
zaaReloaded2.Properties.Settings.Default.SettingsRepository ??
|
if (String.IsNullOrEmpty(s))
|
||||||
new SettingsRepository();
|
{
|
||||||
|
return new SettingsRepository();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
MemoryStream stream = new MemoryStream();
|
||||||
|
string encoded = Properties.Settings.Default.SettingsRepository;
|
||||||
|
byte[] bytes = Convert.FromBase64String(encoded);
|
||||||
|
stream.Write(bytes, 0, bytes.Length);
|
||||||
|
stream.Position = 0;
|
||||||
|
SoapFormatter serializer = new SoapFormatter();
|
||||||
|
SettingsRepository repo = serializer.Deserialize(stream) as SettingsRepository;
|
||||||
|
repo.LoadDefaults();
|
||||||
|
return repo;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stores the SettingsRepository in the assembly properties.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// The SettingsRepository is serialized using a SoapFormatter, which
|
||||||
|
/// creates SOAP XML. Since the assembly properties are stored as
|
||||||
|
/// XML as well, the serialized SettingsRepository is converted to
|
||||||
|
/// a base-64 string, which does not mess with the properties XML.
|
||||||
|
/// </remarks>
|
||||||
public void Store()
|
public void Store()
|
||||||
{
|
{
|
||||||
zaaReloaded2.Properties.Settings.Default.SettingsRepository = this;
|
MemoryStream stream = new MemoryStream();
|
||||||
zaaReloaded2.Properties.Settings.Default.Save();
|
SoapFormatter serializer = new SoapFormatter();
|
||||||
|
serializer.Serialize(stream, this);
|
||||||
|
stream.Position = 0;
|
||||||
|
string encoded = Convert.ToBase64String(stream.ToArray());
|
||||||
|
Properties.Settings.Default.SettingsRepository = encoded;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
[UserScopedSetting()]
|
public IList<Settings> SettingsList { get; protected set; }
|
||||||
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
|
|
||||||
public IList<Settings> Settings { get; private set; }
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructor
|
#region Constructors
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a new instance of a settings repository that will
|
||||||
|
/// contain a default set of settings.
|
||||||
|
/// </summary>
|
||||||
public SettingsRepository()
|
public SettingsRepository()
|
||||||
{
|
{
|
||||||
Settings = new List<Settings>();
|
SettingsList = new List<Settings>();
|
||||||
|
Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Serialization
|
||||||
|
|
||||||
|
protected SettingsRepository(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
int version = info.GetInt32("Version");
|
||||||
|
int settingsCount = info.GetInt32("SettingsCount");
|
||||||
|
SettingsList = new List<Settings>();
|
||||||
|
for (int i = 0; i < settingsCount; i++)
|
||||||
|
{
|
||||||
|
Type type = info.GetValue(SerializationSettingsName(i, "Type"), typeof(Type)) as Type;
|
||||||
|
Settings s = info.GetValue(SerializationSettingsName(i, "Object"), typeof(Settings)) as Settings;
|
||||||
|
SettingsList.Add(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void GetObjectData(SerializationInfo info, StreamingContext context)
|
||||||
|
{
|
||||||
|
info.AddValue("Version", Properties.Settings.Default.SerializationVersion);
|
||||||
|
info.AddValue("SettingsCount", SettingsList.Count);
|
||||||
|
int i = 0;
|
||||||
|
foreach (Settings s in SettingsList)
|
||||||
|
{
|
||||||
|
info.AddValue(SerializationSettingsName(i, "Type"), s.GetType());
|
||||||
|
info.AddValue(SerializationSettingsName(i, "Object"), s);
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
string SerializationSettingsName(int index, string info)
|
||||||
|
{
|
||||||
|
return String.Format("Settings{0}{1}", index, info);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Public methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks up a Settings object contained in this repository
|
||||||
|
/// by unique ID.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="uid">GUID to look for.</param>
|
||||||
|
/// <returns>Settings object with this GUID, or null if the
|
||||||
|
/// GUID was not found.</returns>
|
||||||
|
public Settings FindByGuid(Guid uid)
|
||||||
|
{
|
||||||
|
return SettingsList.FirstOrDefault(s => s.Uid == uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsDefaultSettings(Settings settings)
|
||||||
|
{
|
||||||
|
return (settings.Name == Properties.Settings.Default.SettingsNameClinic + BUILTIN_LABEL ||
|
||||||
|
settings.Name == Properties.Settings.Default.SettingsNameWard + BUILTIN_LABEL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Private methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Resets the Settings contained in this SettingsRepository
|
||||||
|
/// to the default set of settings.
|
||||||
|
/// </summary>
|
||||||
|
private void Reset()
|
||||||
|
{
|
||||||
|
SettingsList.Clear();
|
||||||
|
LoadDefaults();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Loads default, built-in settings, replacing existing default
|
||||||
|
/// settings that might have been persisted.
|
||||||
|
/// </summary>
|
||||||
|
private void LoadDefaults()
|
||||||
|
{
|
||||||
|
Assembly myAssembly = this.GetType().Assembly;
|
||||||
|
SoapFormatter deserializer = new SoapFormatter();
|
||||||
|
Stream stream = myAssembly.GetManifestResourceStream("zaaReloaded2.Defaults.ward.zaaReloaded");
|
||||||
|
Settings settings = deserializer.Deserialize(stream) as Settings;
|
||||||
|
settings.Name = Properties.Settings.Default.SettingsNameWard + BUILTIN_LABEL;
|
||||||
|
settings.Uid = Guid.Parse(DEFAULT_SETTINGS_1_UID);
|
||||||
|
ReplaceOrAdd(settings);
|
||||||
|
|
||||||
|
stream = myAssembly.GetManifestResourceStream("zaaReloaded2.Defaults.clinic.zaaReloaded");
|
||||||
|
settings = deserializer.Deserialize(stream) as Settings;
|
||||||
|
settings.Name = Properties.Settings.Default.SettingsNameClinic + BUILTIN_LABEL;
|
||||||
|
settings.Uid = Guid.Parse(DEFAULT_SETTINGS_2_UID);
|
||||||
|
ReplaceOrAdd(settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ReplaceOrAdd(Settings settings)
|
||||||
|
{
|
||||||
|
Settings existing = SettingsList.FirstOrDefault(s => s.Uid == settings.Uid);
|
||||||
|
if (existing == null)
|
||||||
|
{
|
||||||
|
SettingsList.Add(settings);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int index = SettingsList.IndexOf(existing);
|
||||||
|
SettingsList.RemoveAt(index);
|
||||||
|
SettingsList.Insert(index, settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Constants
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Label that is appended to the default Settings' names.
|
||||||
|
/// </summary>
|
||||||
|
public const string BUILTIN_LABEL = " (eingebaut)";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constant GUID for the first default Settings.
|
||||||
|
/// </summary>
|
||||||
|
const string DEFAULT_SETTINGS_1_UID = "EA79DE6C-E999-44F1-9122-929A8AA404CB";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Constant GUID for the second default Settings.
|
||||||
|
/// </summary>
|
||||||
|
const string DEFAULT_SETTINGS_2_UID = "783C63B5-A964-4368-B2D0-D4595DCCB952";
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
158
zaaReloaded2/Defaults/clinic.zaaReloaded
Executable file
@ -0,0 +1,158 @@
|
|||||||
|
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||||
|
<SOAP-ENV:Body>
|
||||||
|
<a1:Settings id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<_a>218738701</_a>
|
||||||
|
<_b>27917</_b>
|
||||||
|
<_c>18480</_c>
|
||||||
|
<_d>165</_d>
|
||||||
|
<_e>139</_e>
|
||||||
|
<_f>92</_f>
|
||||||
|
<_g>162</_g>
|
||||||
|
<_h>40</_h>
|
||||||
|
<_i>202</_i>
|
||||||
|
<_j>51</_j>
|
||||||
|
<_k>115</_k>
|
||||||
|
</Uid>
|
||||||
|
<Name id="ref-3">Kopie von Standard für NepA</Name>
|
||||||
|
<ReferenceStyle xsi:type="a3:ReferenceStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">IfSpecialOrAbnormal</ReferenceStyle>
|
||||||
|
<ElementsCount>1</ElementsCount>
|
||||||
|
<Element0Type href="#ref-4"/>
|
||||||
|
<Element0Object href="#ref-5"/>
|
||||||
|
</a1:Settings>
|
||||||
|
<a2:UnitySerializationHolder id="ref-4" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-6">zaaReloaded2.Controller.Elements.SelectEachDay</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName id="ref-7">zaaReloaded2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6ec8d075a1ab1383</AssemblyName>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:SelectEachDay id="ref-5" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<ChildrenCount>19</ChildrenCount>
|
||||||
|
<Child0Type href="#ref-8"/>
|
||||||
|
<Child0Object href="#ref-9"/>
|
||||||
|
<Child1Type href="#ref-8"/>
|
||||||
|
<Child1Object href="#ref-10"/>
|
||||||
|
<Child2Type href="#ref-8"/>
|
||||||
|
<Child2Object href="#ref-11"/>
|
||||||
|
<Child3Type href="#ref-8"/>
|
||||||
|
<Child3Object href="#ref-12"/>
|
||||||
|
<Child4Type href="#ref-8"/>
|
||||||
|
<Child4Object href="#ref-13"/>
|
||||||
|
<Child5Type href="#ref-8"/>
|
||||||
|
<Child5Object href="#ref-14"/>
|
||||||
|
<Child6Type href="#ref-8"/>
|
||||||
|
<Child6Object href="#ref-15"/>
|
||||||
|
<Child7Type href="#ref-8"/>
|
||||||
|
<Child7Object href="#ref-16"/>
|
||||||
|
<Child8Type href="#ref-8"/>
|
||||||
|
<Child8Object href="#ref-17"/>
|
||||||
|
<Child9Type href="#ref-8"/>
|
||||||
|
<Child9Object href="#ref-18"/>
|
||||||
|
<Child10Type href="#ref-8"/>
|
||||||
|
<Child10Object href="#ref-19"/>
|
||||||
|
<Child11Type href="#ref-8"/>
|
||||||
|
<Child11Object href="#ref-20"/>
|
||||||
|
<Child12Type href="#ref-8"/>
|
||||||
|
<Child12Object href="#ref-21"/>
|
||||||
|
<Child13Type href="#ref-8"/>
|
||||||
|
<Child13Object href="#ref-22"/>
|
||||||
|
<Child14Type href="#ref-8"/>
|
||||||
|
<Child14Object href="#ref-23"/>
|
||||||
|
<Child15Type href="#ref-8"/>
|
||||||
|
<Child15Object href="#ref-24"/>
|
||||||
|
<Child16Type href="#ref-25"/>
|
||||||
|
<Child16Object href="#ref-26"/>
|
||||||
|
<Child17Type href="#ref-25"/>
|
||||||
|
<Child17Object href="#ref-27"/>
|
||||||
|
<Child18Type href="#ref-25"/>
|
||||||
|
<Child18Object href="#ref-28"/>
|
||||||
|
</a4:SelectEachDay>
|
||||||
|
<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-29">zaaReloaded2.Controller.Elements.Items</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName href="#ref-7"/>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:Items id="ref-9" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-30">Klinische Chemie: Na, K, Cl, Mg, Ca, P, CaxP, Alb, Prot, Haptoglobin, LDH, Glukose, Harnsäure</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-10" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-31">Entzündung/Immunsystem: CRP, Pct, C3c, C4, Anti-DNAse B, ASL</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-11" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-32">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-12" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-33">Niere: Krea, Hst, eGFR (CKD-EPI)</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-13" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-34">Sammelurin: SU-Proteinurie, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Natrium, SU-Zeit, SU-Volumen</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-14" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-35">Spot-Urin: TPCR, ACR, U-Ery, U-Leu, U-Bakt</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-15" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-36">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-16" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-37">Blutfette: TG, Chol, LDL, HDL, Lp(a)</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-17" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-38">Hämatologie: Hb, Hkt, Reti, Leu, Thr, MCV, HbA1c, Retikulozyten, Fragmentozyten</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-18" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-39">Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-19" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-40">Diff.-BB: Neu, Lym, Mon, Baso, Eos</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-20" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-41">Hormone: iPTH, TSH, fT3, fT4</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-21" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-42">Eisenhaushalt: Eisen, Ferritin, Transferrin, Tf.-Sätt.</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-22" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-43">BGA: pH, Std.-Bic., BE</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-23" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-44">Hepatitis-Serologie: Anti-HBs, Anti-HBc</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-24" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-45">Medikamente: TAC, CSA (C0), SIR, Vancomycin, Gentamicin, Tobramicin</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a2:UnitySerializationHolder id="ref-25" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-46">zaaReloaded2.Controller.Elements.CustomText</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName href="#ref-7"/>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:CustomText id="ref-26" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-47">Virologie (EDTA-Blut): CMV-PCR, BKV-PCR</Content>
|
||||||
|
</a4:CustomText>
|
||||||
|
<a4:CustomText id="ref-27" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-48">Nephrolog. Sediment: pH, Proteinurie, Ery /µl, Leu /µl, Plattenep. /µl, Bakt., Schleimfäden</Content>
|
||||||
|
</a4:CustomText>
|
||||||
|
<a4:CustomText id="ref-28" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-49">Autoantikörper: ANCA (IF), MPO-ANCA (ELISA), PR3-ANCA (ELISA), ANA (IF), AnDNA (ELISA), AnDNA (RIA)</Content>
|
||||||
|
</a4:CustomText>
|
||||||
|
</SOAP-ENV:Body>
|
||||||
|
</SOAP-ENV:Envelope>
|
119
zaaReloaded2/Defaults/parameters.txt
Executable file
@ -0,0 +1,119 @@
|
|||||||
|
# LAURIS-NAME "KANONISCHER NAME" MATERIAL "IMMER REFERENZBEREICH" "BLACKLIST"
|
||||||
|
# =========== ================== ======== ======================= ===========
|
||||||
|
"Übergangsepithelien (U)" Übergangsep. U
|
||||||
|
"a1-Microglobulin (SU)" a1-Microglobulin SU
|
||||||
|
"a1-Microglobulin (SU)/die" a1-Microglobulin SU
|
||||||
|
"aktuelles Bicarbonat" Bic BGA
|
||||||
|
"Albumin (PU)" Alb U
|
||||||
|
"Albumin (SU)" Alb SU
|
||||||
|
"Albumin (SU)/die" Alb SU
|
||||||
|
Albumin Alb S
|
||||||
|
"Albumin/Creatinin (PU)" ACR U
|
||||||
|
"Alk. Phosphatase" AP S
|
||||||
|
Amylase Amylase S
|
||||||
|
"anorg. Phosphat" P S
|
||||||
|
"Bakterien (U)" Bakt U
|
||||||
|
Basenabweichung BE BGA
|
||||||
|
Basophile Baso E
|
||||||
|
"Bilirubin (U)" Bilirubin U
|
||||||
|
"C-reaktives Protein" CRP S
|
||||||
|
"Calcium (SU)" Ca SU
|
||||||
|
"Calcium (SU)/die" Ca SU
|
||||||
|
Calcium Ca S
|
||||||
|
Calcium-Phosphat-Produkt CaxP S
|
||||||
|
Cholesterin Chol S
|
||||||
|
CK gesamt" CK S
|
||||||
|
"CK MB" CK-MB S
|
||||||
|
"Creatinin (PU)" Krea U
|
||||||
|
"Creatinin (SU)" Krea SU
|
||||||
|
Creatinin Krea S
|
||||||
|
"Creatinin-Clearance (SU)/min" CrCl SU
|
||||||
|
"Cyclosporin-A vor Gabe" "CsA (C0)" S X
|
||||||
|
"Cystatin C (N Latex)" "Cystatin C" S X
|
||||||
|
Eisen Fe S
|
||||||
|
Eosinophile Eos E
|
||||||
|
"Erythrozyten (U)" Ery U
|
||||||
|
Erythrozyten Ery E
|
||||||
|
Ferritin Ferr S
|
||||||
|
"freies T3" fT3 S X
|
||||||
|
"freies T4" fT4 S X
|
||||||
|
Gesamt-Bilirubin Bilirubin S
|
||||||
|
"Gesamt-Eiweiss (PU)" Protein U
|
||||||
|
"Gesamt-Eiweiss (SU)" Protein SU
|
||||||
|
"Gesamt-Eiweiss (SU)/die" Proteinurie SU
|
||||||
|
Gesamt-Eiweiss Protein S
|
||||||
|
"Gesamt-Eiweiss/Creatinin (PU)" TPCR U
|
||||||
|
GGT GGT S
|
||||||
|
"glomeruläre Filtrationsrate" GFR SU
|
||||||
|
"glomerul. Filtrationsr. (MDRD)" "eGFR (MDRD)" S --- X
|
||||||
|
"glomerul. Filtrationsr. CKD-EP" "eGFR (CKD-EPI)" S
|
||||||
|
"Glucose (U)" Glukose U
|
||||||
|
Glucose Glukose S
|
||||||
|
"GOT (ASAT)" GOT S
|
||||||
|
"GPT (ALAT)" GPT S
|
||||||
|
Hämatokrit Hkt E
|
||||||
|
Hämoglobin Hb E
|
||||||
|
Haptoglobin Haptoglobin S X
|
||||||
|
Harnsäure Harnsäure S
|
||||||
|
"Harnstoff (SU)" Hst SU
|
||||||
|
"Harnstoff (SU)/die" Hst/Tag SU
|
||||||
|
Harnstoff" Hst S
|
||||||
|
"Harnstoff-Clearance (SU)/min" HstCl SU
|
||||||
|
"HbA1c (NGSP)" HbA1c E
|
||||||
|
"HDL - Cholesterin" HDL S
|
||||||
|
"hyaline Zylinder (U)" "hyal. Zyl." U
|
||||||
|
"Kalium (SU)" K U
|
||||||
|
"Kalium (SU)/die" K SU
|
||||||
|
Kalium K S
|
||||||
|
"Ketonkörper (U)" KK U
|
||||||
|
"Lactat Dehydrogenase" LDH S
|
||||||
|
"LDL - Cholesterin" LDL S
|
||||||
|
"Leukozyten (U)" Leu U
|
||||||
|
Leukozyten Leu E
|
||||||
|
Lymphozyten Lym E
|
||||||
|
Magnesium Mg S X
|
||||||
|
"MCH (HbE)" MCH E
|
||||||
|
MCHC MCHC E
|
||||||
|
MCV MCV E
|
||||||
|
"Mittleres Plättchenvolumen" MPV E
|
||||||
|
Monozyten Mon E
|
||||||
|
"Natrium (SU)" Na SU
|
||||||
|
"Natrium (SU)/die" Na SU
|
||||||
|
Natrium Na S
|
||||||
|
Neutrophile Neu E
|
||||||
|
"Nitrit (U)" Nitrit U
|
||||||
|
NT-proBNP NT-proBNP S
|
||||||
|
"PCO2 (art.)" pCO2 BGA
|
||||||
|
"pH (U)" pH U
|
||||||
|
pH pH BGA
|
||||||
|
"Plattenepithelien (U)" Plattenep U
|
||||||
|
"PO2 (art.)" pO2 BGA
|
||||||
|
"Protein (U)" Protein U
|
||||||
|
"Sammelmenge (U)" Volumen SU
|
||||||
|
"Sammelzeit (U)" Zeit SU
|
||||||
|
"Sauerstoffsättigung (art.)" SO2 BGA
|
||||||
|
Sirolimus SIR S
|
||||||
|
"spezifisches Gewicht (U)" "spez. Gew." U
|
||||||
|
"Standard Bicarbonat" "Std.-Bic." BGA
|
||||||
|
"Tacrolimus (FK506)" TAC S
|
||||||
|
Thrombozyten Thr E
|
||||||
|
Transferrin Transferrin S
|
||||||
|
"Transferrinsättigung" Tf.-Sätt. S
|
||||||
|
"Triglyceride" TG S
|
||||||
|
"Troponin T (high sensitive)" hsTnT S
|
||||||
|
Unreife Granulozyten" Gran E
|
||||||
|
"Urobilinogen (U)" Urobilinogen U
|
||||||
|
"Niedermol. Heparin (Anti-Xa)" Anti-Xa Z
|
||||||
|
"Thromboplastinzeit n. Quick" Quick Z
|
||||||
|
PTT PTT Z
|
||||||
|
"Ratio int. norm." INR Z
|
||||||
|
"Komplementfaktor C3c" C3c S X
|
||||||
|
"Komplementfaktor C4" C4 S X
|
||||||
|
"Anti-DNAse B" "Anti-DNAse B" S
|
||||||
|
Anti-Streptolysin ASL S
|
||||||
|
"PTH intakt" iPTH S
|
||||||
|
TSH TSH S
|
||||||
|
HAPTOGLOBIN Haptoglobin S
|
||||||
|
FRAGMENTOZYTEN Fragmentozyten E
|
||||||
|
"HBc-Antikörper (gesamt)" Anti-HBc S
|
||||||
|
HBs-Antikörper Anti-HBs S
|
@ -5,3 +5,7 @@
|
|||||||
"ml/min /1,73qm" "ml/min/1,73 m²"
|
"ml/min /1,73qm" "ml/min/1,73 m²"
|
||||||
ng/ml µg/l
|
ng/ml µg/l
|
||||||
mmol/l mM
|
mmol/l mM
|
||||||
|
n*1000/µl /nl
|
||||||
|
n*10E6/µl /fl
|
||||||
|
Bak/µl /µl
|
||||||
|
"mg/g Crea" mg/g
|
200
zaaReloaded2/Defaults/ward.zaaReloaded
Executable file
@ -0,0 +1,200 @@
|
|||||||
|
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:clr="http://schemas.microsoft.com/soap/encoding/clr/1.0" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
|
||||||
|
<SOAP-ENV:Body>
|
||||||
|
<a1:Settings id="ref-1" xmlns:a1="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Uid xsi:type="a2:Guid" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<_a>1443045381</_a>
|
||||||
|
<_b>29162</_b>
|
||||||
|
<_c>17774</_c>
|
||||||
|
<_d>182</_d>
|
||||||
|
<_e>243</_e>
|
||||||
|
<_f>111</_f>
|
||||||
|
<_g>227</_g>
|
||||||
|
<_h>16</_h>
|
||||||
|
<_i>47</_i>
|
||||||
|
<_j>142</_j>
|
||||||
|
<_k>57</_k>
|
||||||
|
</Uid>
|
||||||
|
<Name id="ref-3">Kopie von Standard für Station</Name>
|
||||||
|
<ReferenceStyle xsi:type="a3:ReferenceStyle" xmlns:a3="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Formatter/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">IfSpecialOrAbnormal</ReferenceStyle>
|
||||||
|
<ElementsCount>4</ElementsCount>
|
||||||
|
<Element0Type href="#ref-4"/>
|
||||||
|
<Element0Object href="#ref-5"/>
|
||||||
|
<Element1Type href="#ref-6"/>
|
||||||
|
<Element1Object href="#ref-7"/>
|
||||||
|
<Element2Type href="#ref-8"/>
|
||||||
|
<Element2Object href="#ref-9"/>
|
||||||
|
<Element3Type href="#ref-10"/>
|
||||||
|
<Element3Object href="#ref-11"/>
|
||||||
|
</a1:Settings>
|
||||||
|
<a2:UnitySerializationHolder id="ref-4" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-12">zaaReloaded2.Controller.Elements.TwoColumns</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName id="ref-13">zaaReloaded2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6ec8d075a1ab1383</AssemblyName>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:TwoColumns id="ref-5" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<ChildrenCount>0</ChildrenCount>
|
||||||
|
</a4:TwoColumns>
|
||||||
|
<a2:UnitySerializationHolder id="ref-6" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-14">zaaReloaded2.Controller.Elements.SelectFirstDay</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName href="#ref-13"/>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:SelectFirstDay id="ref-7" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<ChildrenCount>16</ChildrenCount>
|
||||||
|
<Child0Type href="#ref-15"/>
|
||||||
|
<Child0Object href="#ref-16"/>
|
||||||
|
<Child1Type href="#ref-15"/>
|
||||||
|
<Child1Object href="#ref-17"/>
|
||||||
|
<Child2Type href="#ref-15"/>
|
||||||
|
<Child2Object href="#ref-18"/>
|
||||||
|
<Child3Type href="#ref-15"/>
|
||||||
|
<Child3Object href="#ref-19"/>
|
||||||
|
<Child4Type href="#ref-15"/>
|
||||||
|
<Child4Object href="#ref-20"/>
|
||||||
|
<Child5Type href="#ref-15"/>
|
||||||
|
<Child5Object href="#ref-21"/>
|
||||||
|
<Child6Type href="#ref-15"/>
|
||||||
|
<Child6Object href="#ref-22"/>
|
||||||
|
<Child7Type href="#ref-15"/>
|
||||||
|
<Child7Object href="#ref-23"/>
|
||||||
|
<Child8Type href="#ref-15"/>
|
||||||
|
<Child8Object href="#ref-24"/>
|
||||||
|
<Child9Type href="#ref-15"/>
|
||||||
|
<Child9Object href="#ref-25"/>
|
||||||
|
<Child10Type href="#ref-15"/>
|
||||||
|
<Child10Object href="#ref-26"/>
|
||||||
|
<Child11Type href="#ref-15"/>
|
||||||
|
<Child11Object href="#ref-27"/>
|
||||||
|
<Child12Type href="#ref-15"/>
|
||||||
|
<Child12Object href="#ref-28"/>
|
||||||
|
<Child13Type href="#ref-15"/>
|
||||||
|
<Child13Object href="#ref-29"/>
|
||||||
|
<Child14Type href="#ref-15"/>
|
||||||
|
<Child14Object href="#ref-30"/>
|
||||||
|
<Child15Type href="#ref-15"/>
|
||||||
|
<Child15Object href="#ref-31"/>
|
||||||
|
</a4:SelectFirstDay>
|
||||||
|
<a2:UnitySerializationHolder id="ref-8" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-32">zaaReloaded2.Controller.Elements.NextColumn</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName href="#ref-13"/>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:NextColumn id="ref-9" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<ChildrenCount>0</ChildrenCount>
|
||||||
|
</a4:NextColumn>
|
||||||
|
<a2:UnitySerializationHolder id="ref-10" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-33">zaaReloaded2.Controller.Elements.SelectLastDay</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName href="#ref-13"/>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:SelectLastDay id="ref-11" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<ChildrenCount>16</ChildrenCount>
|
||||||
|
<Child0Type href="#ref-15"/>
|
||||||
|
<Child0Object href="#ref-16"/>
|
||||||
|
<Child1Type href="#ref-15"/>
|
||||||
|
<Child1Object href="#ref-17"/>
|
||||||
|
<Child2Type href="#ref-15"/>
|
||||||
|
<Child2Object href="#ref-18"/>
|
||||||
|
<Child3Type href="#ref-15"/>
|
||||||
|
<Child3Object href="#ref-19"/>
|
||||||
|
<Child4Type href="#ref-15"/>
|
||||||
|
<Child4Object href="#ref-20"/>
|
||||||
|
<Child5Type href="#ref-15"/>
|
||||||
|
<Child5Object href="#ref-21"/>
|
||||||
|
<Child6Type href="#ref-15"/>
|
||||||
|
<Child6Object href="#ref-22"/>
|
||||||
|
<Child7Type href="#ref-15"/>
|
||||||
|
<Child7Object href="#ref-23"/>
|
||||||
|
<Child8Type href="#ref-15"/>
|
||||||
|
<Child8Object href="#ref-24"/>
|
||||||
|
<Child9Type href="#ref-15"/>
|
||||||
|
<Child9Object href="#ref-25"/>
|
||||||
|
<Child10Type href="#ref-15"/>
|
||||||
|
<Child10Object href="#ref-26"/>
|
||||||
|
<Child11Type href="#ref-15"/>
|
||||||
|
<Child11Object href="#ref-27"/>
|
||||||
|
<Child12Type href="#ref-15"/>
|
||||||
|
<Child12Object href="#ref-28"/>
|
||||||
|
<Child13Type href="#ref-15"/>
|
||||||
|
<Child13Object href="#ref-29"/>
|
||||||
|
<Child14Type href="#ref-15"/>
|
||||||
|
<Child14Object href="#ref-30"/>
|
||||||
|
<Child15Type href="#ref-15"/>
|
||||||
|
<Child15Object href="#ref-31"/>
|
||||||
|
</a4:SelectLastDay>
|
||||||
|
<a2:UnitySerializationHolder id="ref-15" xmlns:a2="http://schemas.microsoft.com/clr/ns/System">
|
||||||
|
<Data id="ref-34">zaaReloaded2.Controller.Elements.Items</Data>
|
||||||
|
<UnityType>4</UnityType>
|
||||||
|
<AssemblyName href="#ref-13"/>
|
||||||
|
</a2:UnitySerializationHolder>
|
||||||
|
<a4:Items id="ref-16" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-35">Klinische Chemie: Na, K, Cl, Mg, Ca, P, CaxP, Alb, Prot, Haptoglobin, LDH, Glukose, Harnsäure</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-17" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-36">Entzündung/Immunsystem: CRP, Pct, C3c, C4, Anti-DNAse B, ASL</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-18" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-37">Kardiale Marker: CK, CKMB, Trop, NTproBNP</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-19" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-38">Niere: Krea, Hst, eGFR (CKD-EPI)</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-20" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-39">Sammelurin: SU-Proteinurie, SU-Alb, SU-CrCl, SU-HstCl, SU-GFR, SU-Natrium, SU-Zeit, SU-Volumen</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-21" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-40">Spot-Urin: U-*</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-22" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-41">Leber: GOT, GGT, GPT, AP, Bilirubin, CHE</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-23" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-42">Blutfette: TG, Chol, LDL, HDL, Lp(a)</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-24" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-43">Hämatologie: Hb, Hkt, Reti, Leu, Thr, Ery, Neu, Lym, Mon, Baso, Eos, MCV, HbA1c, Retikulozyten, Fragmentozyten</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-25" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-44">Gerinnung: Quick, INR, PTT, Fibrinogen, ATIII, Anti-Xa</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-26" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-45">Hormone: iPTH, TSH</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-27" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-46">Medikamente: TAC, CSA, SIR, Vancomycin, Gentamicin, Tobramicin</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-28" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-47">Eisenhaushalt: Eisen, Ferritin, Transferrin, Tf.-Sätt.</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-29" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-48">BGA: pH, Std.-Bic., BE</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-30" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-49">Hepatitis-Serologie: Anti-HBs, Anti-HBc</Content>
|
||||||
|
</a4:Items>
|
||||||
|
<a4:Items id="ref-31" xmlns:a4="http://schemas.microsoft.com/clr/nsassem/zaaReloaded2.Controller.Elements/zaaReloaded2%2C%20Version%3D1.0.0.0%2C%20Culture%3Dneutral%2C%20PublicKeyToken%3D6ec8d075a1ab1383">
|
||||||
|
<Version>1</Version>
|
||||||
|
<Content id="ref-50">Weitere Werte: *</Content>
|
||||||
|
</a4:Items>
|
||||||
|
</SOAP-ENV:Body>
|
||||||
|
</SOAP-ENV:Envelope>
|
75
zaaReloaded2/Demo/Demo.cs
Executable file
@ -0,0 +1,75 @@
|
|||||||
|
/* Demo.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Microsoft.Office.Interop.Word;
|
||||||
|
|
||||||
|
namespace zaaReloaded2.Demo
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Static class that serves to load an embedded Word document
|
||||||
|
/// into a temporary file and open that temporary file in Word.
|
||||||
|
/// </summary>
|
||||||
|
static class Demo
|
||||||
|
{
|
||||||
|
#region Public methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Opens a demo document. The document's Saved property is set to
|
||||||
|
/// false so that a user who wants to save changes will be prompted
|
||||||
|
/// for a file name.
|
||||||
|
/// </summary>
|
||||||
|
public static void OpenDemoDocument()
|
||||||
|
{
|
||||||
|
string tempFile = CreateTempFileFromResource();
|
||||||
|
Document demoDoc = Globals.ThisAddIn.Application.Documents
|
||||||
|
.Add(Template: tempFile);
|
||||||
|
File.Delete(tempFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Private methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Copies the built-in demo file from a resource stream to a
|
||||||
|
/// temporary file and returns the path to that file.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>Path to the newly created temporary file.</returns>
|
||||||
|
static string CreateTempFileFromResource()
|
||||||
|
{
|
||||||
|
string resourceName = "zaaReloaded2.Demo.Demo.docx";
|
||||||
|
Stream resourceStream = typeof(Demo).Assembly
|
||||||
|
.GetManifestResourceStream(resourceName);
|
||||||
|
if (resourceStream == null)
|
||||||
|
{
|
||||||
|
throw new IOException("Unable to open stream " + resourceName);
|
||||||
|
}
|
||||||
|
string fileName = Path.GetTempFileName() + ".docx";
|
||||||
|
Stream tempStream = File.Create(fileName);
|
||||||
|
resourceStream.CopyTo(tempStream);
|
||||||
|
tempStream.Close();
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
BIN
zaaReloaded2/Demo/Demo.docx
Executable file
@ -25,7 +25,8 @@
|
|||||||
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
|
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
|
||||||
xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
||||||
xmlns:converter="clr-namespace:Bovender.Mvvm.Converters;assembly=Bovender"
|
xmlns:converter="clr-namespace:Bovender.Mvvm.Converters;assembly=Bovender"
|
||||||
SizeToContent="Height" Width="700"
|
SizeToContent="Height" Width="700" ShowInTaskbar="False"
|
||||||
|
WindowStyle="ToolWindow" Topmost="True" ResizeMode="CanResizeWithGrip"
|
||||||
x:Name="exceptionDetailView"
|
x:Name="exceptionDetailView"
|
||||||
Title="Technische Fehlerdetails"
|
Title="Technische Fehlerdetails"
|
||||||
settings:WindowState.Save="True"
|
settings:WindowState.Save="True"
|
||||||
|
@ -27,6 +27,7 @@
|
|||||||
xmlns:actions="clr-namespace:Bovender.Mvvm.Actions;assembly=Bovender"
|
xmlns:actions="clr-namespace:Bovender.Mvvm.Actions;assembly=Bovender"
|
||||||
xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
xmlns:settings="clr-namespace:Bovender.Mvvm.Views.Settings;assembly=Bovender"
|
||||||
SizeToContent="WidthAndHeight" ResizeMode="CanResizeWithGrip"
|
SizeToContent="WidthAndHeight" ResizeMode="CanResizeWithGrip"
|
||||||
|
WindowStyle="ToolWindow" ShowInTaskbar="False" Topmost="True"
|
||||||
WindowStartupLocation="CenterScreen"
|
WindowStartupLocation="CenterScreen"
|
||||||
Title="zaaReloaded2: Fehler!"
|
Title="zaaReloaded2: Fehler!"
|
||||||
settings:WindowState.Save="True"
|
settings:WindowState.Save="True"
|
||||||
|
@ -32,8 +32,7 @@ namespace zaaReloaded2.ExceptionHandler
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
// TODO: Get Word version
|
return Globals.ThisAddIn.Application.Build;
|
||||||
return "n/a";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +83,7 @@ namespace zaaReloaded2.ExceptionHandler
|
|||||||
|
|
||||||
protected override string DevPath()
|
protected override string DevPath()
|
||||||
{
|
{
|
||||||
return @"x:\Code\zaaReloaded2\";
|
return @"x:\Code\zaaReloaded2\zaaReloaded2\";
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -20,6 +20,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.Office.Interop.Word;
|
using Microsoft.Office.Interop.Word;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace zaaReloaded2.Formatter
|
namespace zaaReloaded2.Formatter
|
||||||
{
|
{
|
||||||
@ -32,6 +33,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
{
|
{
|
||||||
FixWords(document);
|
FixWords(document);
|
||||||
FormatDiagnoses(selection);
|
FormatDiagnoses(selection);
|
||||||
|
FixSalutation(document);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FormatDiagnoses(Selection selection)
|
static void FormatDiagnoses(Selection selection)
|
||||||
@ -59,6 +61,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
static void FixWords(Document document)
|
static void FixWords(Document document)
|
||||||
{
|
{
|
||||||
Find find = document.Range().Find;
|
Find find = document.Range().Find;
|
||||||
|
find.Execute2007(FindText: "Körperlicher Untersuchungsbefund", ReplaceWith: "Körperl. Untersuchung", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "Dr.D.Kraus", ReplaceWith: "Dr. D. Kraus", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "Dr.D.Kraus", ReplaceWith: "Dr. D. Kraus", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "Z. n.", ReplaceWith: "Z.n.", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "Z. n.", ReplaceWith: "Z.n.", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "Zust. n.", ReplaceWith: "Z.n.", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "Zust. n.", ReplaceWith: "Z.n.", Replace: WdReplace.wdReplaceAll);
|
||||||
@ -66,6 +69,26 @@ namespace zaaReloaded2.Formatter
|
|||||||
find.Execute2007(FindText: "Assistent der Klinik", ReplaceWith: "Internist/Nephrologe", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "Assistent der Klinik", ReplaceWith: "Internist/Nephrologe", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "Professor Dr.", ReplaceWith: "Prof. Dr.", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "Professor Dr.", ReplaceWith: "Prof. Dr.", Replace: WdReplace.wdReplaceAll);
|
||||||
find.Execute2007(FindText: "mmHg", ReplaceWith: "mm Hg", Replace: WdReplace.wdReplaceAll);
|
find.Execute2007(FindText: "mmHg", ReplaceWith: "mm Hg", Replace: WdReplace.wdReplaceAll);
|
||||||
|
find.Execute2007(FindText: "RR", ReplaceWith: "", Replace: WdReplace.wdReplaceAll, MatchCase: true, MatchWholeWord: true);
|
||||||
|
find.Execute2007(FindText: "HF", ReplaceWith: "", Replace: WdReplace.wdReplaceAll, MatchCase: true, MatchWholeWord: true);
|
||||||
|
find.Execute2007(FindText: "TAC-Spiegel", ReplaceWith: "Tacrolimus-Talspiegel", Replace: WdReplace.wdReplaceAll);
|
||||||
|
find.Execute2007(FindText: "4-7", ReplaceWith: "4 bis 7", Replace: WdReplace.wdReplaceAll);
|
||||||
|
find.Execute2007(FindText: "5-8", ReplaceWith: "5 bis 8", Replace: WdReplace.wdReplaceAll);
|
||||||
|
find.Execute2007(FindText: "8-10", ReplaceWith: "8 bis 10", Replace: WdReplace.wdReplaceAll);
|
||||||
|
find.Execute2007(FindText: "4 - 7", ReplaceWith: "4 bis 7", Replace: WdReplace.wdReplaceAll);
|
||||||
|
find.Execute2007(FindText: "5 - 8", ReplaceWith: "5 bis 8", Replace: WdReplace.wdReplaceAll);
|
||||||
|
find.Execute2007(FindText: "8 - 10", ReplaceWith: "8 bis 10", Replace: WdReplace.wdReplaceAll);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void FixSalutation(Document document)
|
||||||
|
{
|
||||||
|
Regex sal = new Regex(@"^Mit.*?Grüßen\r");
|
||||||
|
Regex med = new Regex(@"^((Häusl|Empf).*?Medikat)|Therapieempf");
|
||||||
|
foreach (Paragraph p in document.Paragraphs)
|
||||||
|
{
|
||||||
|
if (sal.IsMatch(p.Range.Text)) p.Range.Text = "Mit freundlichen, kollegialen Grüßen,\r";
|
||||||
|
if (med.IsMatch(p.Range.Text)) p.Range.Text = "Aktuelle Medikation:\r";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using Microsoft.Office.Interop.Word;
|
using Microsoft.Office.Interop.Word;
|
||||||
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace zaaReloaded2.Formatter
|
namespace zaaReloaded2.Formatter
|
||||||
{
|
{
|
||||||
@ -30,8 +31,19 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// depending on whether there is text in the buffer or not.
|
/// depending on whether there is text in the buffer or not.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <remarks>
|
/// <remarks>
|
||||||
|
/// <para>
|
||||||
/// Linking several DocumentWriters permits a cascading work flow
|
/// Linking several DocumentWriters permits a cascading work flow
|
||||||
/// with several buffers.
|
/// with several buffers.
|
||||||
|
/// </para>
|
||||||
|
/// <para>
|
||||||
|
/// Markup support: The DocumentWriter supports basic markup to control
|
||||||
|
/// the text styles in the Word document.
|
||||||
|
/// </para>
|
||||||
|
/// <list type="unordered">
|
||||||
|
/// <item><b> and </b> - bold/unbold</item>
|
||||||
|
/// <item><style:NAME> - set the paragraph or character style</item>
|
||||||
|
/// <item></style> - remove *character* style</item>
|
||||||
|
/// </list>
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
class DocumentWriter
|
class DocumentWriter
|
||||||
{
|
{
|
||||||
@ -53,6 +65,20 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool HasBufferedText { get { return _buffer.Length > 0; } }
|
public bool HasBufferedText { get { return _buffer.Length > 0; } }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Returns text without markup from the buffer.
|
||||||
|
/// </summary>
|
||||||
|
public string Text
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (!HasBufferedText)
|
||||||
|
throw new InvalidOperationException("This DocumentWriter does not have any text.");
|
||||||
|
|
||||||
|
return _markupRegex.Replace(_buffer.ToString(), String.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
@ -113,7 +139,10 @@ namespace zaaReloaded2.Formatter
|
|||||||
|
|
||||||
if (Document != null)
|
if (Document != null)
|
||||||
{
|
{
|
||||||
Document.Range().Text = _buffer.ToString();
|
Selection s = Document.ActiveWindow.Selection;
|
||||||
|
s.ClearCharacterDirectFormatting();
|
||||||
|
s.ClearParagraphDirectFormatting();
|
||||||
|
MarkupToDocument(_buffer.ToString());
|
||||||
}
|
}
|
||||||
if (Parent != null)
|
if (Parent != null)
|
||||||
{
|
{
|
||||||
@ -153,9 +182,54 @@ namespace zaaReloaded2.Formatter
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Private methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parses a string containing markup (e.g., "<b>", "</b>")
|
||||||
|
/// and writes formatted text to the current Document.
|
||||||
|
/// </summary>
|
||||||
|
void MarkupToDocument(string text)
|
||||||
|
{
|
||||||
|
string[] substrings = _markupRegex.Split(text);
|
||||||
|
Selection sel = Document.ActiveWindow.Selection;
|
||||||
|
foreach (string substring in substrings)
|
||||||
|
{
|
||||||
|
switch (substring)
|
||||||
|
{
|
||||||
|
case "<b>":
|
||||||
|
sel.Font.Bold = 1;
|
||||||
|
break;
|
||||||
|
case "</b>":
|
||||||
|
sel.Font.Bold = 0;
|
||||||
|
break;
|
||||||
|
case "</style>":
|
||||||
|
sel.ClearCharacterStyle();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Match styleMatch = _styleRegex.Match(substring);
|
||||||
|
if (styleMatch.Success)
|
||||||
|
{
|
||||||
|
sel.set_Style(styleMatch.Groups["style"].Value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sel.TypeText(substring);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
StringBuilder _buffer;
|
StringBuilder _buffer;
|
||||||
|
// Put pattern in parentheses so they will not be discarded by Regex.Split
|
||||||
|
// The splitting pattern must not contain subgroups!
|
||||||
|
static readonly Regex _markupRegex = new Regex(@"(<[^ >]+>)");
|
||||||
|
static readonly Regex _styleRegex = new Regex(@"<style:(?<style>[^>]+)>");
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,12 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public Dictionary<DateTime, TimePointFormatter> WorkingTimePoints { get; private set; }
|
public Dictionary<DateTime, TimePointFormatter> WorkingTimePoints { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Is true if this Formatter object carries a Laboratory with
|
||||||
|
/// at least one time point.
|
||||||
|
/// </summary>
|
||||||
|
public bool CanRun { get { return Laboratory.TimePoints.Count > 0; } }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
@ -113,6 +119,8 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// current position of the cursor).</param>
|
/// current position of the cursor).</param>
|
||||||
public void Run()
|
public void Run()
|
||||||
{
|
{
|
||||||
|
if (!CanRun) throw new NoLaboratoryDataException("No laboratory data to format.");
|
||||||
|
|
||||||
int current = 0;
|
int current = 0;
|
||||||
while (current < Settings.Elements.Count)
|
while (current < Settings.Elements.Count)
|
||||||
{
|
{
|
||||||
@ -137,7 +145,14 @@ namespace zaaReloaded2.Formatter
|
|||||||
current++;
|
current++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Write everything to the Word document
|
||||||
|
Globals.ThisAddIn.Application.UndoRecord.StartCustomRecord(
|
||||||
|
String.Format("Laborformatierung ({0})", Properties.Settings.Default.AddinName)
|
||||||
|
);
|
||||||
|
CreateStyles();
|
||||||
_secondaryBuffer.Flush();
|
_secondaryBuffer.Flush();
|
||||||
|
Globals.ThisAddIn.Application.UndoRecord.EndCustomRecord();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -195,7 +210,106 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// FormatElementBase children to process.</param>
|
/// FormatElementBase children to process.</param>
|
||||||
public void ProcessAllTimePoints(ControlElementBase controlElement)
|
public void ProcessAllTimePoints(ControlElementBase controlElement)
|
||||||
{
|
{
|
||||||
ProcessAllTimePoints(controlElement.FormatElements);
|
ProcessAllTimePoints(controlElement.Children);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Inserts a table with two columns into the document.
|
||||||
|
/// </summary>
|
||||||
|
public void InsertTwoColumns()
|
||||||
|
{
|
||||||
|
_secondaryBuffer.Flush();
|
||||||
|
if (Document != null)
|
||||||
|
{
|
||||||
|
Range r = Document.ActiveWindow.Selection.Range;
|
||||||
|
_table = Document.Tables.Add(r, NumRows: 1, NumColumns: 2);
|
||||||
|
_table.AllowAutoFit = true;
|
||||||
|
_table.AutoFitBehavior(WdAutoFitBehavior.wdAutoFitWindow);
|
||||||
|
_table.PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPercent;
|
||||||
|
_table.PreferredWidth = 100;
|
||||||
|
_table.Borders.Enable = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Moves the insertion point to the next column in a layout
|
||||||
|
/// table.
|
||||||
|
/// </summary>
|
||||||
|
public void NextColumn()
|
||||||
|
{
|
||||||
|
if (_table == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException(
|
||||||
|
"Kann nicht zur nächsten Spalte wechseln, da bislang keine Tabelle eingefügt wurde.");
|
||||||
|
}
|
||||||
|
_secondaryBuffer.Flush();
|
||||||
|
Document.ActiveWindow.Selection.MoveRight(WdUnits.wdCell);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a paragraph and character styles in the document.
|
||||||
|
/// </summary>
|
||||||
|
public void CreateStyles()
|
||||||
|
{
|
||||||
|
if (Document != null)
|
||||||
|
{
|
||||||
|
Style style;
|
||||||
|
// Don't see a better way to check for the existence of a particular
|
||||||
|
// paragraph style than by using a try...catch construction.
|
||||||
|
try
|
||||||
|
{
|
||||||
|
style = Document.Styles[Properties.Settings.Default.StyleParagraph];
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Add default paragraph style for laboratory
|
||||||
|
style = Document.Styles.Add(Properties.Settings.Default.StyleParagraph);
|
||||||
|
style.Font.Size = 10; // pt
|
||||||
|
style.Font.Bold = 0;
|
||||||
|
style.Font.Italic = 0;
|
||||||
|
style.Font.Underline = 0;
|
||||||
|
style.ParagraphFormat.SpaceAfter = 0;
|
||||||
|
style.ParagraphFormat.SpaceBefore = 0;
|
||||||
|
style.ParagraphFormat.LeftIndent = 36; // pt
|
||||||
|
style.ParagraphFormat.FirstLineIndent = -36; // pt
|
||||||
|
style.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphJustify;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
style = Document.Styles[Properties.Settings.Default.StyleHeader];
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Add header paragraph style for laboratory
|
||||||
|
style = Document.Styles.Add(Properties.Settings.Default.StyleHeader);
|
||||||
|
style.Font.Size = 10; // pt
|
||||||
|
style.Font.Bold = 1;
|
||||||
|
style.Font.Italic = 0;
|
||||||
|
style.Font.Underline = WdUnderline.wdUnderlineSingle;
|
||||||
|
style.ParagraphFormat.SpaceAfter = 0;
|
||||||
|
style.ParagraphFormat.SpaceBefore = 12;
|
||||||
|
style.ParagraphFormat.LeftIndent = 36; // pt
|
||||||
|
style.ParagraphFormat.FirstLineIndent = -36; // pt
|
||||||
|
style.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphJustify;
|
||||||
|
style.set_NextParagraphStyle(Document.Styles[Properties.Settings.Default.StyleParagraph]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
try
|
||||||
|
{
|
||||||
|
style = Document.Styles[Properties.Settings.Default.StyleAbnormal];
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Add character style for abnormal parameters
|
||||||
|
style = Document.Styles.Add(
|
||||||
|
Properties.Settings.Default.StyleAbnormal,
|
||||||
|
WdStyleType.wdStyleTypeCharacter);
|
||||||
|
style.Font.Bold = 1;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -259,7 +373,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
throw new ArgumentNullException("workingTimePoints");
|
throw new ArgumentNullException("workingTimePoints");
|
||||||
|
|
||||||
WorkingTimePoints = workingTimePoints;
|
WorkingTimePoints = workingTimePoints;
|
||||||
ProcessElements(controlElement.FormatElements);
|
ProcessElements(controlElement.Children);
|
||||||
if (_primaryBuffer.HasBufferedText)
|
if (_primaryBuffer.HasBufferedText)
|
||||||
{
|
{
|
||||||
_primaryBuffer.Prepend(
|
_primaryBuffer.Prepend(
|
||||||
@ -286,6 +400,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
Laboratory _laboratory;
|
Laboratory _laboratory;
|
||||||
DocumentWriter _primaryBuffer;
|
DocumentWriter _primaryBuffer;
|
||||||
DocumentWriter _secondaryBuffer;
|
DocumentWriter _secondaryBuffer;
|
||||||
|
Table _table;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,23 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool HasBeenUsed { get; set; }
|
public bool HasBeenUsed { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets a flag that tells the formatter to include or
|
||||||
|
/// not include the material indicator in the formatted output.
|
||||||
|
/// Default is true.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// For example, items that are selected with a wildcard may
|
||||||
|
/// contain the material info, while expressly chosen items
|
||||||
|
/// may not.
|
||||||
|
/// </remarks>
|
||||||
|
public bool IncludeMaterial { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets whether the Item is marked as blacklisted in the thesaurus.
|
||||||
|
/// </summary>
|
||||||
|
public bool IsBlacklisted { get { return LabItem.IsBlacklisted; } }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructor
|
#region Constructor
|
||||||
@ -58,6 +75,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// <param name="labItem">LabItem to wrap in this ItemFormatter.</param>
|
/// <param name="labItem">LabItem to wrap in this ItemFormatter.</param>
|
||||||
public ItemFormatter(LabItem labItem, ReferenceStyle referenceStyle)
|
public ItemFormatter(LabItem labItem, ReferenceStyle referenceStyle)
|
||||||
{
|
{
|
||||||
|
IncludeMaterial = true;
|
||||||
LabItem = labItem;
|
LabItem = labItem;
|
||||||
ReferenceStyle = referenceStyle;
|
ReferenceStyle = referenceStyle;
|
||||||
}
|
}
|
||||||
@ -114,7 +132,8 @@ namespace zaaReloaded2.Formatter
|
|||||||
string unit;
|
string unit;
|
||||||
if (LabItem.HasUnit)
|
if (LabItem.HasUnit)
|
||||||
{
|
{
|
||||||
unit = String.Format(" {0}", LabItem.Unit);
|
string space = LabItem.Unit.StartsWith("/") ? String.Empty : " ";
|
||||||
|
unit = String.Format("{0}{1}", space, LabItem.Unit);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -133,15 +152,24 @@ namespace zaaReloaded2.Formatter
|
|||||||
value = LabItem.Value;
|
value = LabItem.Value;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert the formatted text into the document.
|
string name = IncludeMaterial ? LabItem.QualifiedName : LabItem.Name;
|
||||||
formatter.Write(
|
|
||||||
|
string output =
|
||||||
String.Format(
|
String.Format(
|
||||||
"{0} {1}{2}{3}",
|
"{0} {1}{2}{3}",
|
||||||
LabItem.QualifiedName,
|
name,
|
||||||
value,
|
value,
|
||||||
unit,
|
unit,
|
||||||
reference
|
reference
|
||||||
));
|
);
|
||||||
|
if (!LabItem.IsNormal)
|
||||||
|
{
|
||||||
|
output = String.Format(
|
||||||
|
"<b>{0}</b>",
|
||||||
|
output);
|
||||||
|
}
|
||||||
|
|
||||||
|
formatter.Write(output);
|
||||||
HasBeenUsed = true;
|
HasBeenUsed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
35
zaaReloaded2/Formatter/NoLaboratoryDataException.cs
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
/* NoLaboratoryDataException.cs
|
||||||
|
* part of zaaReloaded2
|
||||||
|
*
|
||||||
|
* Copyright 2015 Daniel Kraus
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.Runtime.Serialization;
|
||||||
|
|
||||||
|
namespace zaaReloaded2.Formatter
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
class NoLaboratoryDataException : Exception
|
||||||
|
{
|
||||||
|
public NoLaboratoryDataException() { }
|
||||||
|
public NoLaboratoryDataException(string message) : base(message) { }
|
||||||
|
public NoLaboratoryDataException(string message,
|
||||||
|
Exception innerException)
|
||||||
|
: base(message, innerException) { }
|
||||||
|
public NoLaboratoryDataException(SerializationInfo info,
|
||||||
|
StreamingContext context)
|
||||||
|
: base(info, context) { }
|
||||||
|
}
|
||||||
|
}
|
@ -26,37 +26,36 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Describes the style of normal range references.
|
/// Describes the style of normal range references.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Serializable]
|
|
||||||
public enum ReferenceStyle
|
public enum ReferenceStyle
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Never write normal ranges
|
/// Never write normal ranges
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Description("Referenzbereich nie ausgeben")]
|
[Description("Niemals")]
|
||||||
Never,
|
Never,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Write normal range if item is marked in dictionary
|
/// Write normal range if item is marked in dictionary
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Description("Referenzbereich ausgeben, falls Parameter so markiert ist")]
|
[Description("Bei speziellen Parametern immer")]
|
||||||
IfSpecialItem,
|
IfSpecialItem,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Write normal range if value is abnormal
|
/// Write normal range if value is abnormal
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Description("Referenzbereich ausgeben, falls Wert nicht normal ist")]
|
[Description("Bei pathologischem Wert")]
|
||||||
IfAbnormal,
|
IfAbnormal,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Write normal range if item is marked in dictionary, or if value is abnormal
|
/// Write normal range if item is marked in dictionary, or if value is abnormal
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Description("Referenzbereich ausgeben, falls Parameter so markiert ist oder falls Wert nicht normal ist")]
|
[Description("Bei pathologischem Wert oder speziellem Parameter")]
|
||||||
IfSpecialOrAbnormal,
|
IfSpecialOrAbnormal,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Always write normal range reference
|
/// Always write normal range reference
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Description("Referenzbereich immer ausgeben")]
|
[Description("Immer")]
|
||||||
Always
|
Always
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,57 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class TimePointFormatter
|
public class TimePointFormatter
|
||||||
{
|
{
|
||||||
|
#region Static methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Builds a header paragraph from a Date,
|
||||||
|
/// but only if the Date structure has a value.
|
||||||
|
/// </summary>
|
||||||
|
public static string DateHeader(DateTime date)
|
||||||
|
{
|
||||||
|
if (date != _nullTimeStamp.Date)
|
||||||
|
{
|
||||||
|
return FormatHeader(date.ToShortDateString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return String.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Builds a header paragraph from a DateTime structure,
|
||||||
|
/// but only if the DateTime structure has a value.
|
||||||
|
/// </summary>
|
||||||
|
public static string DateAndTimeHeader(DateTime dateTime)
|
||||||
|
{
|
||||||
|
if (dateTime != _nullTimeStamp)
|
||||||
|
{
|
||||||
|
return FormatHeader(dateTime.ToString());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return String.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Private static methods
|
||||||
|
|
||||||
|
static string FormatHeader(string text)
|
||||||
|
{
|
||||||
|
return String.Format("<style:{0}>Laborwerte vom {1}:{2}<style:{3}>",
|
||||||
|
// Environment.NewLine,
|
||||||
|
Properties.Settings.Default.StyleHeader,
|
||||||
|
text,
|
||||||
|
Environment.NewLine,
|
||||||
|
Properties.Settings.Default.StyleParagraph
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Properties
|
#region Properties
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -77,7 +128,7 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public string GetDateHeader()
|
public string GetDateHeader()
|
||||||
{
|
{
|
||||||
return FormatHeader(TimeStamp.ToShortDateString());
|
return DateHeader(TimeStamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -88,21 +139,14 @@ namespace zaaReloaded2.Formatter
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public string GetDateAndTimeHeader()
|
public string GetDateAndTimeHeader()
|
||||||
{
|
{
|
||||||
return FormatHeader(TimeStamp.ToString());
|
return DateAndTimeHeader(TimeStamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Private methods
|
#region Fields
|
||||||
|
|
||||||
string FormatHeader(string text)
|
static readonly DateTime _nullTimeStamp = new DateTime();
|
||||||
{
|
|
||||||
return String.Format("{0}{1}:{2}",
|
|
||||||
Environment.NewLine,
|
|
||||||
text,
|
|
||||||
Environment.NewLine
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
BIN
zaaReloaded2/Icons/d.png
Normal file
After Width: | Height: | Size: 1012 B |
BIN
zaaReloaded2/Icons/down.png
Normal file
After Width: | Height: | Size: 545 B |
BIN
zaaReloaded2/Icons/duplicate.png
Normal file
After Width: | Height: | Size: 337 B |
BIN
zaaReloaded2/Icons/exit.png
Normal file
After Width: | Height: | Size: 751 B |
BIN
zaaReloaded2/Icons/export.png
Normal file
After Width: | Height: | Size: 365 B |
BIN
zaaReloaded2/Icons/gear.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
zaaReloaded2/Icons/icon.png
Normal file
After Width: | Height: | Size: 3.6 KiB |
BIN
zaaReloaded2/Icons/import.png
Normal file
After Width: | Height: | Size: 470 B |
BIN
zaaReloaded2/Icons/minus.png
Normal file
After Width: | Height: | Size: 280 B |
BIN
zaaReloaded2/Icons/pen.png
Normal file
After Width: | Height: | Size: 739 B |
BIN
zaaReloaded2/Icons/plus-child.png
Normal file
After Width: | Height: | Size: 557 B |
BIN
zaaReloaded2/Icons/plus.png
Normal file
After Width: | Height: | Size: 393 B |
BIN
zaaReloaded2/Icons/reset.png
Normal file
After Width: | Height: | Size: 743 B |
BIN
zaaReloaded2/Icons/up.png
Normal file
After Width: | Height: | Size: 537 B |
@ -30,6 +30,11 @@ namespace zaaReloaded2.Importer
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
Laboratory Laboratory { get; set; }
|
Laboratory Laboratory { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indicates whether the import was successful.
|
||||||
|
/// </summary>
|
||||||
|
bool Success { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Imports laboratory data contained in a string.
|
/// Imports laboratory data contained in a string.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -74,7 +74,9 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
if (parameterDictionary != null)
|
if (parameterDictionary != null)
|
||||||
{
|
{
|
||||||
Name = parameterDictionary.GetCanonicalName(OriginalName);
|
Name = parameterDictionary.GetCanonicalName(OriginalName);
|
||||||
AlwaysPrintLimits = parameterDictionary.GetForceReferenceDisplay(Name);
|
AlwaysPrintLimits = parameterDictionary.GetForceReferenceDisplay(OriginalName);
|
||||||
|
IsBlacklisted = parameterDictionary.GetIsBlacklisted(OriginalName);
|
||||||
|
Material = parameterDictionary.GetMaterial(OriginalName, Material);
|
||||||
}
|
}
|
||||||
if (unitDictionary != null)
|
if (unitDictionary != null)
|
||||||
{
|
{
|
||||||
@ -132,7 +134,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
{
|
{
|
||||||
if (match.Groups["limits"].Success)
|
if (match.Groups["limits"].Success)
|
||||||
{
|
{
|
||||||
Regex limitRegex = new Regex(@"\[(?<limit1>[\d.]+)?\s*(?<operator>\S+)\s*(?<limit2>[\d.]+)?]");
|
Regex limitRegex = new Regex(@"\[(?<limit1>[-\d.]+)?\s*(?<operator>\S+)\s*(?<limit2>[-\d.]+)?]");
|
||||||
Match limitMatch = limitRegex.Match(match.Groups["limits"].Value);
|
Match limitMatch = limitRegex.Match(match.Groups["limits"].Value);
|
||||||
if (limitMatch.Groups["limit1"].Success && limitMatch.Groups["limit2"].Success)
|
if (limitMatch.Groups["limit1"].Success && limitMatch.Groups["limit2"].Success)
|
||||||
{
|
{
|
||||||
@ -164,10 +166,12 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Analyses the Lauris name for a material abbreviation.
|
/// Parses the original Lauris name for a material abbreviation.
|
||||||
/// If the parameter does not refer to blood (serum, whole
|
/// This may be misleading in certain cases, e.g. "Sammelmenge (U)"
|
||||||
/// blood, etc.), Lauris appends an abbreviation in parentheses
|
/// appears to be spot urine ("U"), but is collected urine instead
|
||||||
/// to the parameter name.
|
/// ("SU"). Therefore, in the constructor that takes the thesaurus
|
||||||
|
/// parameters, the material is looked up in the Parameters thesaurus.
|
||||||
|
/// ("Sammelmenge (U)" is contained in the Parameters thesaurus.)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <example>
|
/// <example>
|
||||||
/// Gesamt-Eiweiss (SU), Albumin (SU)/die, Gesamt-Eiweiss (PU)
|
/// Gesamt-Eiweiss (SU), Albumin (SU)/die, Gesamt-Eiweiss (PU)
|
||||||
|
@ -32,6 +32,19 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class LaurisParagraph
|
public class LaurisParagraph
|
||||||
{
|
{
|
||||||
|
#region Static methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Investigates a paragraph and determines whether it looks
|
||||||
|
/// like a Lauris laboratory items paragraph.
|
||||||
|
/// </summary>
|
||||||
|
public static bool ResemblesLaurisParagraph(string paragraph)
|
||||||
|
{
|
||||||
|
return _expectedFormat.IsMatch(paragraph);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region Public properties
|
#region Public properties
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -122,7 +135,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
|
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
static readonly Regex _expectedFormat = new Regex(@"(?<caption>[^:]+:\s*)?(?<items>[^:]+:\s*[^;]+;)*");
|
static readonly Regex _expectedFormat = new Regex(@"(?<caption>[^:]+:\s*)?(?<items>[^:]+:\s*[^;]+;)+");
|
||||||
Thesaurus.Parameters _parameterDictionary;
|
Thesaurus.Parameters _parameterDictionary;
|
||||||
Thesaurus.Units _unitDictionary;
|
Thesaurus.Units _unitDictionary;
|
||||||
|
|
||||||
|
@ -65,11 +65,15 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets an array of paragraphs in this LaurisText.
|
/// Gets an array of paragraphs in this LaurisText.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string[] Paragraphs
|
public IList<String> Paragraphs
|
||||||
{
|
{
|
||||||
[DebuggerStepThrough]
|
[DebuggerStepThrough]
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
|
if (_paragraphs == null)
|
||||||
|
{
|
||||||
|
_paragraphs = new List<String>();
|
||||||
|
}
|
||||||
return _paragraphs;
|
return _paragraphs;
|
||||||
}
|
}
|
||||||
set
|
set
|
||||||
@ -83,7 +87,13 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// Is true if the LaurisText has time stamp in the first
|
/// Is true if the LaurisText has time stamp in the first
|
||||||
/// paragraph and <see cref="LabItem"/>s in the others.
|
/// paragraph and <see cref="LabItem"/>s in the others.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsValidTimePoint { get; private set; }
|
public bool IsValidTimePoint
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Items.Count > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets or sets the original Lauris text for this timepoint.
|
/// Gets or sets the original Lauris text for this timepoint.
|
||||||
@ -101,7 +111,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
{
|
{
|
||||||
Paragraphs = value.Split(
|
Paragraphs = value.Split(
|
||||||
new string[] { Environment.NewLine },
|
new string[] { Environment.NewLine },
|
||||||
StringSplitOptions.None);
|
StringSplitOptions.None).ToList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,19 +138,41 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
{ }
|
{ }
|
||||||
|
|
||||||
public LaurisTimePoint(
|
public LaurisTimePoint(
|
||||||
string[] paragraphs,
|
IList<String> paragraphs,
|
||||||
|
Parameters parameterDictionary,
|
||||||
|
Units unitDictionary)
|
||||||
|
: this(parameterDictionary, unitDictionary)
|
||||||
|
{
|
||||||
|
Paragraphs = paragraphs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LaurisTimePoint(IList<String> paragraphs)
|
||||||
|
: this(paragraphs, null, null)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public LaurisTimePoint(
|
||||||
Parameters parameterDictionary,
|
Parameters parameterDictionary,
|
||||||
Units unitDictionary)
|
Units unitDictionary)
|
||||||
: this()
|
: this()
|
||||||
{
|
{
|
||||||
_parameterDictionary = parameterDictionary;
|
_parameterDictionary = parameterDictionary;
|
||||||
_unitDictionary = unitDictionary;
|
_unitDictionary = unitDictionary;
|
||||||
Paragraphs = paragraphs;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LaurisTimePoint(string[] paragraphs)
|
#endregion
|
||||||
: this(paragraphs, null, null)
|
|
||||||
|
#region Public methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Adds a new paragraph to this time point by parsing
|
||||||
|
/// the paragraph for laboratory items.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="paragraph">Paragraph to add.</param>
|
||||||
|
public void AddParagraph(string paragraph)
|
||||||
{
|
{
|
||||||
|
Paragraphs.Add(paragraph);
|
||||||
|
ParseParagraph(paragraph);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -151,20 +183,36 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// Analyzes each Lauris paragraph in this time point, sets the date
|
/// Analyzes each Lauris paragraph in this time point, sets the date
|
||||||
/// and time, and collects LabItem data.
|
/// and time, and collects LabItem data.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>True if the LaurisText has time stamp in the first paragraphs
|
void ParseParagraphs()
|
||||||
/// and contains <see cref="LabItem"/>s in the others.</returns>
|
|
||||||
bool ParseParagraphs()
|
|
||||||
{
|
{
|
||||||
if (Paragraphs.Length > 0)
|
if (Paragraphs != null)
|
||||||
{
|
{
|
||||||
if (!ParseTimeStamp()) return false;
|
foreach (string paragraph in Paragraphs)
|
||||||
LaurisParagraph lp;
|
|
||||||
if (IsValidTimePoint)
|
|
||||||
{
|
{
|
||||||
for (int i = 1; i < Paragraphs.Length; i++)
|
ParseParagraph(paragraph);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParseParagraph(string paragraph)
|
||||||
{
|
{
|
||||||
lp = new LaurisParagraph(
|
if (_timeStampRegex.IsMatch(paragraph))
|
||||||
Paragraphs[i],
|
{
|
||||||
|
DateTime dt;
|
||||||
|
if (DateTime.TryParseExact(
|
||||||
|
_timeStampRegex.Match(paragraph).Groups["datetime"].Value,
|
||||||
|
"dd.MM.yyyy HH:mm",
|
||||||
|
CultureInfo.InvariantCulture,
|
||||||
|
DateTimeStyles.AllowWhiteSpaces,
|
||||||
|
out dt))
|
||||||
|
{
|
||||||
|
TimeStamp = dt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LaurisParagraph lp = new LaurisParagraph(
|
||||||
|
paragraph,
|
||||||
_parameterDictionary,
|
_parameterDictionary,
|
||||||
_unitDictionary);
|
_unitDictionary);
|
||||||
if (lp.IsLaurisParagraph)
|
if (lp.IsLaurisParagraph)
|
||||||
@ -173,38 +221,6 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
IsValidTimePoint = Items.Count > 0;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Analyzes the date and time information that is expected to be
|
|
||||||
/// in the first paragraph.
|
|
||||||
/// </summary>
|
|
||||||
/// <returns>True if the LaurisText contains a time stamp in the
|
|
||||||
/// first paragraph.</returns>
|
|
||||||
bool ParseTimeStamp()
|
|
||||||
{
|
|
||||||
if (Paragraphs.Length == 0)
|
|
||||||
throw new InvalidOperationException("The time point has no paragraphs.");
|
|
||||||
|
|
||||||
Match m = _timeStampRegex.Match(Paragraphs[0]);
|
|
||||||
bool success = false;
|
|
||||||
if (m.Success)
|
|
||||||
{
|
|
||||||
DateTime dt;
|
|
||||||
success = DateTime.TryParseExact(
|
|
||||||
m.Groups["datetime"].Value,
|
|
||||||
"dd.MM.yyyy HH:mm",
|
|
||||||
CultureInfo.InvariantCulture,
|
|
||||||
DateTimeStyles.AllowWhiteSpaces,
|
|
||||||
out dt);
|
|
||||||
TimeStamp = dt;
|
|
||||||
}
|
|
||||||
IsValidTimePoint = success;
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AddItems(IItemDictionary items)
|
void AddItems(IItemDictionary items)
|
||||||
{
|
{
|
||||||
@ -220,8 +236,8 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// paragraph of a LaurisText.
|
/// paragraph of a LaurisText.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
static readonly Regex _timeStampRegex = new Regex(
|
static readonly Regex _timeStampRegex = new Regex(
|
||||||
@"^\s*\(?\s*(?<datetime>\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)");
|
@"^(Labor:)?\s*\(?\s*(?<datetime>\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)");
|
||||||
string[] _paragraphs;
|
IList<String> _paragraphs;
|
||||||
Parameters _parameterDictionary;
|
Parameters _parameterDictionary;
|
||||||
Units _unitDictionary;
|
Units _unitDictionary;
|
||||||
|
|
||||||
|
@ -52,6 +52,14 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Success
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
return Laboratory.TimePoints.Count > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Splits the <paramref name="text"/> into individual time points
|
/// Splits the <paramref name="text"/> into individual time points
|
||||||
/// and creates <see cref="LaurisTimePoint"/> objects from them.
|
/// and creates <see cref="LaurisTimePoint"/> objects from them.
|
||||||
@ -59,45 +67,45 @@ namespace zaaReloaded2.Importer.ZaaImporter
|
|||||||
/// <param name="text">ZAA-formatted Lauris output to import.</param>
|
/// <param name="text">ZAA-formatted Lauris output to import.</param>
|
||||||
public void Import(string text)
|
public void Import(string text)
|
||||||
{
|
{
|
||||||
|
// Split the text into parargraphs. This implementation relies on the fact
|
||||||
|
// that the order or splitting strings in C#'s String.Split() method is
|
||||||
|
// important; see http://stackoverflow.com/a/8664639/270712
|
||||||
string[] paragraphs = text.Split(
|
string[] paragraphs = text.Split(
|
||||||
new string[] { Environment.NewLine },
|
new string[] { "\r\n", "\n\r", "\r", "\n" },
|
||||||
StringSplitOptions.RemoveEmptyEntries);
|
StringSplitOptions.RemoveEmptyEntries);
|
||||||
int i = 0;
|
LaurisTimePoint timePoint = null;
|
||||||
int start = 0;
|
|
||||||
int numParagraphs = paragraphs.Length;
|
|
||||||
|
|
||||||
while (i < numParagraphs)
|
foreach (string paragraph in paragraphs)
|
||||||
{
|
{
|
||||||
// Search for the next occurrence of a time stamp line
|
// If the current paragraph looks like a Lauris time stamp,
|
||||||
while (i < numParagraphs
|
// create a new time point.
|
||||||
&& !LaurisTimePoint.IsTimeStampLine(paragraphs[i]))
|
if (LaurisTimePoint.IsTimeStampLine(paragraph))
|
||||||
{
|
{
|
||||||
i++;
|
timePoint = new LaurisTimePoint(paragraph, _parameters, _units);
|
||||||
|
// Add the time point to the laboratory only if none
|
||||||
|
// with the same time stamp exists yet.
|
||||||
|
TimePoint existing = null;
|
||||||
|
if (Laboratory.TryGetTimePoint(timePoint.TimeStamp, ref existing))
|
||||||
|
{
|
||||||
|
timePoint = existing as LaurisTimePoint;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
// TODO: Find an alternative to returning in the middle of the method.
|
|
||||||
if (i >= numParagraphs) return;
|
|
||||||
|
|
||||||
if (LaurisTimePoint.IsTimeStampLine(paragraphs[i]))
|
|
||||||
{
|
{
|
||||||
// Remember the time stamp line's index
|
Laboratory.AddTimePoint(timePoint);
|
||||||
start = i;
|
|
||||||
|
|
||||||
// Seek the next time stamp line
|
|
||||||
while (i + 1 < numParagraphs
|
|
||||||
&& !LaurisTimePoint.IsTimeStampLine(paragraphs[i + 1]))
|
|
||||||
{
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// If the current paragraph looks like a paragraph with
|
||||||
Laboratory.AddTimePoint(
|
// laboratory items, add it to the current time point;
|
||||||
new LaurisTimePoint(
|
// if no time point exists yet, create one.
|
||||||
paragraphs.Slice(start, i - start + 1),
|
else if (LaurisParagraph.ResemblesLaurisParagraph(paragraph))
|
||||||
_parameters,
|
{
|
||||||
_units
|
if (timePoint == null)
|
||||||
)
|
{
|
||||||
);
|
timePoint = new LaurisTimePoint(_parameters, _units);
|
||||||
|
Laboratory.AddTimePoint(timePoint);
|
||||||
|
}
|
||||||
|
timePoint.AddParagraph(paragraph);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +123,8 @@ namespace zaaReloaded2.LabModel
|
|||||||
public bool HasUpperLimit { get; protected set; }
|
public bool HasUpperLimit { get; protected set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Is true if <see cref="Value"/> is normal.
|
/// Is true if <see cref="Value"/> is normal. Returns true
|
||||||
|
/// if no limits and no normal value are known.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsNormal
|
public bool IsNormal
|
||||||
{
|
{
|
||||||
@ -147,7 +148,7 @@ namespace zaaReloaded2.LabModel
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return (Value == Normal);
|
return String.IsNullOrEmpty(Normal) || (Value == Normal);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -205,6 +206,12 @@ namespace zaaReloaded2.LabModel
|
|||||||
|
|
||||||
public Material Material { get; protected set; }
|
public Material Material { get; protected set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets whether the LabItem is marked as blacklisted
|
||||||
|
/// in the thesaurus.
|
||||||
|
/// </summary>
|
||||||
|
public bool IsBlacklisted { get; protected set; }
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
@ -66,6 +66,30 @@ namespace zaaReloaded2.LabModel
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Checks if the Laboratory contains a TimePoint with an identical
|
||||||
|
/// time stamp to the one being queried.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="timePoint">TimePoint whose time stamp to look for.</param>
|
||||||
|
/// <returns>True if a TimePoint with identical time stamp exists.</returns>
|
||||||
|
public bool HasTimePoint(TimePoint timePoint)
|
||||||
|
{
|
||||||
|
return TimePoints.ContainsKey(timePoint.TimeStamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Looks for a TimePoint with a given timeStamp and returns
|
||||||
|
/// it as a reference parameter.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="timeStamp">Time stamp to look for.</param>
|
||||||
|
/// <param name="timePoint">Resulting TimePoint (if any).</param>
|
||||||
|
/// <returns>True if TimePoints contains a TimePoint with
|
||||||
|
/// the requested timeStamp.</returns>
|
||||||
|
public bool TryGetTimePoint(DateTime timeStamp, ref TimePoint timePoint)
|
||||||
|
{
|
||||||
|
return TimePoints.TryGetValue(timeStamp, out timePoint);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|