From 49c32dcc6a4c78bd70ca5b71eddd1ab3b55688eb Mon Sep 17 00:00:00 2001 From: Simon Martens Date: Sat, 26 Nov 2022 00:58:31 +0100 Subject: [PATCH] Added category to app defs --- Archive/2022-11-25_XML_Transforms/Program.cs | 100 +++++----- .../2022-11-25_XML_Transforms/references.xml | 22 ++- .../2022-11-25_XML_Transforms/traditions.xml | 1 + .../traditionsnew.xml | 16 +- HaDocumentV6/Models/App.cs | 4 +- HaDocumentV6/Reactors/AppDefsReactor.cs | 10 +- HaWeb/Hamann.xml | 32 ++-- HaWeb/Settings/ParsingRules/LetterRules.cs | 173 ++++++++++-------- HaWeb/Settings/ParsingRules/TraditionRules.cs | 2 +- HaWeb/Settings/ParsingState/LetterState.cs | 3 + XML/25.11.2022/references.xml | 22 ++- XML/25.11.2022/traditionsnew.xml | 16 +- 12 files changed, 225 insertions(+), 176 deletions(-) diff --git a/Archive/2022-11-25_XML_Transforms/Program.cs b/Archive/2022-11-25_XML_Transforms/Program.cs index 37c6383..af005cb 100644 --- a/Archive/2022-11-25_XML_Transforms/Program.cs +++ b/Archive/2022-11-25_XML_Transforms/Program.cs @@ -98,67 +98,65 @@ static void ReplaceStructure(List<(XElement appNode, List childNodes)> no foreach (var node in n.childNodes) node.Remove(); + } +} - var children = n.appNode.Nodes(); - foreach (var c in children) { - if (c.NodeType == XmlNodeType.Element) { - var e = (XElement)c; - if (e.Name == "line" && e.Attribute("type") != null && e.Attribute("type").Value == "break") - c.Remove(); - break; - } - if (!String.IsNullOrWhiteSpace(c.ToString())) - break; - } +static void CleanupLineBreaks(XDocument traditions) { + var apps = traditions.Descendants("app"); + foreach (var a in apps) { + var children = a.Nodes(); + RemoveLineBreaks(children); children = children.Reverse(); - foreach (var c in children) { - if (c.NodeType == XmlNodeType.Element) { - var e = (XElement)c; - if (e.Name == "line" && e.Attribute("type") != null && e.Attribute("type").Value == "break") - c.Remove(); - break; - } - if (!String.IsNullOrWhiteSpace(c.ToString())) - break; - } + RemoveLineBreaks(children); - var siblings = n.appNode.NodesAfterSelf(); - foreach (var c in siblings) { - if (c.NodeType == XmlNodeType.Element) { - var e = (XElement)c; - if (e.Name == "line" && e.Attribute("type") != null && e.Attribute("type").Value == "break") - c.Remove(); - break; - } - if (!String.IsNullOrWhiteSpace(c.ToString())) - break; - } + var siblings = a.NodesAfterSelf(); + RemoveLineBreaks(siblings); - siblings = n.appNode.NodesBeforeSelf(); - foreach (var c in siblings) { - if (c.NodeType == XmlNodeType.Element) { - var e = (XElement)c; - if (e.Name == "line" && e.Attribute("type") != null && e.Attribute("type").Value == "break") - c.Remove(); - break; - } - if (!String.IsNullOrWhiteSpace(c.ToString())) + siblings = a.NodesBeforeSelf(); + RemoveLineBreaks(siblings); + } +} + +static void RemoveLineBreaks(IEnumerable nodes) { + foreach (var c in nodes) { + if (c.NodeType == XmlNodeType.Element) { + var e = (XElement)c; + if (e.Name == "line" && e.Attribute("type") != null && e.Attribute("type").Value == "break") + c.Remove(); + break; + } + if (!String.IsNullOrWhiteSpace(c.ToString())) + break; + } +} + + +static void FindSingles(XDocument traditions) { + var tradition = traditions.Descendants("letterTradition"); + foreach (var t in tradition) { + var nodes = t.Nodes(); + var singles = new List (); + var isnonws = false; + foreach (var n in nodes) { + if (n.NodeType == XmlNodeType.Element && ((XElement)n).Name == "app") break; + singles.Add(n); + if (!String.IsNullOrWhiteSpace(n.ToString())) + isnonws = true; + } + if (isnonws) { + var elem = new XElement("app"); + elem.SetAttributeValue("ref", "-1"); + elem.Add(singles); + t.AddFirst(elem); + foreach (var n in singles) + n.Remove(); } } } static void Cleanup(XDocument traditions) { - var tradition = traditions.Descendants("letterTradition").SelectMany(x => x.Descendants()); - var notapp = tradition.Where(x => x.Name != "app" && !x.Ancestors("app").Any()); - foreach (var e in notapp) { - if (e.Name != "line" || (e.Attribute("type") != null && e.Attribute("type")!.Value != "break")) - Console.WriteLine("Nicht app zugehöriges Element " + e.Name + " Zeile " + ((IXmlLineInfo)e).LineNumber); - } - - // notapp.Remove(); - var apps = traditions.Descendants("app"); foreach (var a in apps) { if (a.Value.Last() != '\n') @@ -182,5 +180,7 @@ var names = GetNormalizeNames(documents.Item1); var appnumbers = GetAppNumbers(documents.Item2, names); var contents = GetAppContents(documents.Item1); ReplaceStructure(contents, appnumbers); +FindSingles(documents.Item1); +CleanupLineBreaks(documents.Item1); Cleanup(documents.Item1); Save(documents); \ No newline at end of file diff --git a/Archive/2022-11-25_XML_Transforms/references.xml b/Archive/2022-11-25_XML_Transforms/references.xml index 55556e3..1f3fa5a 100644 --- a/Archive/2022-11-25_XML_Transforms/references.xml +++ b/Archive/2022-11-25_XML_Transforms/references.xml @@ -236,15 +236,17 @@ - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/Archive/2022-11-25_XML_Transforms/traditions.xml b/Archive/2022-11-25_XML_Transforms/traditions.xml index a2fc655..3924644 100644 --- a/Archive/2022-11-25_XML_Transforms/traditions.xml +++ b/Archive/2022-11-25_XML_Transforms/traditions.xml @@ -11793,6 +11793,7 @@ Universitätsbibliothek Basel, Autographensammlung Karl Geigy-Hagenbach, 1027.Bisherige Drucke ZH VII 142 f., Nr. 1055. +Provenienz Universitäts- und Landesbibliothek Münster, Signatur: Nachlass Gallitzin, 20, 3. Zeitgenössische Abschrift von unbekannter Hand. Bisherige Drucke ZH VII 143–146, Nr. 1056. diff --git a/Archive/2022-11-25_XML_Transforms/traditionsnew.xml b/Archive/2022-11-25_XML_Transforms/traditionsnew.xml index 35834f0..490c29d 100644 --- a/Archive/2022-11-25_XML_Transforms/traditionsnew.xml +++ b/Archive/2022-11-25_XML_Transforms/traditionsnew.xml @@ -1,4 +1,6 @@ - + + + Universitäts- und Landesbibliothek Münster, Signatur: Hamann-Nachlass, Kaps. 2, 50. Neujahrsglückwünsche von Martinus Maletius mit einer späteren Notiz von Hamann. Abschrift von Arthur Warda. Original verschollen. Letzter bekannter Aufbewahrungsort: Unbekannt. @@ -14644,9 +14646,11 @@ ZH VI 262 f., Nr. 927. - + ZH druckte an dieser Stelle einen Hinweis auf einen Brief von Hamann an Elisa von der Recke. Der Wortlaut des Briefes findet sich -in dem Brief an Jacobi, 6. Februar 1786, HKB 926 (VI 258/16–260/16). Original nicht überliefert. +in dem Brief an Jacobi, 6. Februar 1786, HKB 926 (VI 258/16–260/16). Original nicht überliefert. + + @@ -17271,7 +17275,9 @@ ZH VII 142 f., Nr. 1055. -Universitäts- und Landesbibliothek Münster, Signatur: Nachlass Gallitzin, 20, 3. Zeitgenössische Abschrift von unbekannter Hand. + +Universitäts- und Landesbibliothek Münster, Signatur: Nachlass Gallitzin, 20, 3. Zeitgenössische Abschrift von unbekannter Hand. + ZH VII 143–146, Nr. 1056. @@ -20144,4 +20150,4 @@ ZH VII 515, Nr. 552a. - \ No newline at end of file + \ No newline at end of file diff --git a/HaDocumentV6/Models/App.cs b/HaDocumentV6/Models/App.cs index b1c6b08..984dca0 100644 --- a/HaDocumentV6/Models/App.cs +++ b/HaDocumentV6/Models/App.cs @@ -2,12 +2,12 @@ namespace HaDocument.Models { public class App { public string Index { get; } = ""; public string Name { get; } = ""; - public bool Category { get; } = false; + public string Category { get; } = ""; public App( string index, string name, - bool category + string category ) { Index = index; Name = name; diff --git a/HaDocumentV6/Reactors/AppDefsReactor.cs b/HaDocumentV6/Reactors/AppDefsReactor.cs index 1a79d68..f9fbc3c 100644 --- a/HaDocumentV6/Reactors/AppDefsReactor.cs +++ b/HaDocumentV6/Reactors/AppDefsReactor.cs @@ -13,7 +13,7 @@ namespace HaDocument.Reactors { // State private string Index; private string Name; - private bool Category; + private string Category; internal AppDefsReactor(IReader reader, IntermediateLibrary lib) : base(reader, lib) { lib.Apps = new Dictionary(); @@ -26,8 +26,7 @@ namespace HaDocument.Reactors { !tag.EndTag && tag.IsEmpty && tag.Name == "appDef" && - !String.IsNullOrWhiteSpace(tag["index"]) && - !String.IsNullOrWhiteSpace(tag["name"]) + !String.IsNullOrWhiteSpace(tag["index"]) ) { Activate(_reader, tag); } @@ -39,8 +38,7 @@ namespace HaDocument.Reactors { _active = true; Index = tag["index"]; Name = tag["name"]; - if (!String.IsNullOrWhiteSpace(tag["category"] )) - Category = tag["category"] == "true" ? true : false; + Category = tag["category"]; Add(); _active = false; } @@ -49,7 +47,7 @@ namespace HaDocument.Reactors { protected override void Reset() { Index = ""; Name = ""; - Category = false; + Category = ""; } protected void Add() { diff --git a/HaWeb/Hamann.xml b/HaWeb/Hamann.xml index c5423a7..e6ab1af 100644 --- a/HaWeb/Hamann.xml +++ b/HaWeb/Hamann.xml @@ -151138,16 +151138,18 @@ - - - - - - - - - - + + + + + + + + + + + + A @@ -213611,9 +213613,11 @@ Staatsbibliothek zu Berlin, Lessing-Sammlung Nr. 1841 n. Ludwig Schmitz-Kallenberg (Hg.): Aus dem Briefwechsel des Magus im Norden. Johann Georg Hamann an Franz Kaspar Bucholtz 1784–1788. Münster 1917, 84 f. ZH VI 262 f., Nr. 927. - + ZH druckte an dieser Stelle einen Hinweis auf einen Brief von Hamann an Elisa von der Recke. Der Wortlaut des Briefes findet sich -in dem Brief an Jacobi, 6. Februar 1786, HKB 926 (VI 258/16–260/16). Original nicht überliefert. +in dem Brief an Jacobi, 6. Februar 1786, HKB 926 (VI 258/16–260/16). Original nicht überliefert. + + Druck ZH nach der überlieferten handschriftlichen Abschrift Arthur Wardas. Original verschollen. Letzter bekannter Aufbewahrungsort: Staats- und Universitätsbibliothek Königsberg, Msc. 2552 [Roths Hamanniana], I 5. @@ -215851,7 +215855,9 @@ Universitätsbibliothek Basel, Autographensammlung Karl Geigy-Hagenbach, 1027. ZH VII 142 f., Nr. 1055. -Universitäts- und Landesbibliothek Münster, Signatur: Nachlass Gallitzin, 20, 3. Zeitgenössische Abschrift von unbekannter Hand. + +Universitäts- und Landesbibliothek Münster, Signatur: Nachlass Gallitzin, 20, 3. Zeitgenössische Abschrift von unbekannter Hand. + ZH VII 143–146, Nr. 1056. diff --git a/HaWeb/Settings/ParsingRules/LetterRules.cs b/HaWeb/Settings/ParsingRules/LetterRules.cs index 1414528..68927d6 100644 --- a/HaWeb/Settings/ParsingRules/LetterRules.cs +++ b/HaWeb/Settings/ParsingRules/LetterRules.cs @@ -51,7 +51,6 @@ public class LetterRules { ( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.BZGCLASS)) ), ( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHCLASS)) ), ( ( x, _) => x.Name == "emph", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.EMPHCLASS)); } ), - ( ( x, _) => x.Name == "app", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.APPCLASS)); } ), ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.SUBSECTIONCLASS, tag["id"])) ), ( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.COMMENTCLASS, tag["id"])) ), ( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.EDITREASONCLASS)) ), @@ -78,6 +77,16 @@ public class LetterRules { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.HANDMARKERCLASS, "ha-" + tag["ref"])); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.HANDCLASS)); + }), + + // Tradition specific: + ( ( x, _) => x.Name == "app", (sb, tag, reader) => { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.APPCLASS)); + reader.State.activelinecount = false; + } ), + ( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.TRADZHTEXTCLASS)); + reader.State.activelinecount = true; }) }; @@ -115,7 +124,6 @@ public class LetterRules { ( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "emph", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), - ( ( x, _) => x.Name == "app", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), ( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), @@ -127,7 +135,17 @@ public class LetterRules { reader.State.mustwrap = (true, true); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); }), - ( ( x, _) => x.Name == "hand", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ) + ( ( x, _) => x.Name == "hand", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), + + // Tradition specific: + ( ( x, _) => x.Name == "app", (sb, tag, reader) => { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + reader.State.activelinecount = true; + } ), + ( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + reader.State.activelinecount = false; + }) }; public static readonly TextFuncList TextRules = new TextFuncList() { @@ -147,88 +165,95 @@ public class LetterRules { reader.State.mustwrap = (false, true); } - // This is NOT the beginning of the text, so we set a br, and then, linecount - if(reader.State.currline != "-1") { - if (!reader.State.mustwrap.Item2) - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", CSSClasses.ZHBREAKCLASS)); - else - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")); - reader.State.mustwrap = (false, false); - - // Linecount - if(!String.IsNullOrWhiteSpace(tag["index"])) { - reader.State.currline = tag["index"]; - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline)); - - // Fall 1: Neue Seite - if (reader.State.pagebreak == true) { - reader.State.pagebreak = false; - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHPAGECLASS, "")); - sb.Append("S. " + reader.State.currpage); - } - - // Fall 2: Neue Zeile, teilbar durch 5 - else if (Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHLINECLASS, "")); - sb.Append(tag["index"]); - } + // Line count, do if in counted lines + if(reader.State.activelinecount) { + // This is NOT the beginning of the text, so we set a br, and then, linecount + if(reader.State.currline != "-1") { + if (!reader.State.mustwrap.Item2) + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", CSSClasses.ZHBREAKCLASS)); + else + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")); + reader.State.mustwrap = (false, false); - // Fall 3: Neue Zeile, nicht teilbar durch 5, deswegen versteckt - else { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHLINECLASS + " " + CSSClasses.HIDDENZHLINECOUNT, "")); - sb.Append(tag["index"]); + // Linecount + if(!String.IsNullOrWhiteSpace(tag["index"])) { + reader.State.currline = tag["index"]; + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline)); + + // Fall 1: Neue Seite + if (reader.State.pagebreak == true) { + reader.State.pagebreak = false; + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHPAGECLASS, "")); + sb.Append("S. " + reader.State.currpage); + } + + // Fall 2: Neue Zeile, teilbar durch 5 + else if (Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHLINECLASS, "")); + sb.Append(tag["index"]); + } + + // Fall 3: Neue Zeile, nicht teilbar durch 5, deswegen versteckt + else { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.ZHLINECLASS + " " + CSSClasses.HIDDENZHLINECOUNT, "")); + sb.Append(tag["index"]); + } + + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); } - - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + } else if (reader.State.currline == "-1" && !String.IsNullOrWhiteSpace(tag["index"])) { + reader.State.Startline = tag["index"]; + reader.State.currline = tag["index"]; + reader.State.pagebreak = false; } - } else if (reader.State.currline == "-1" && !String.IsNullOrWhiteSpace(tag["index"])) { - reader.State.Startline = tag["index"]; - reader.State.currline = tag["index"]; - reader.State.pagebreak = false; - } - // Marginalien, only for lines with a linenumber - if(reader.State.Marginals != null && !String.IsNullOrWhiteSpace(tag["index"])) { - var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline); - if (margs != null && margs.Any()) - { - if(reader.State.ParsedMarginals == null) reader.State.ParsedMarginals = new List<(string, string, string)>(); - var sb2 = new StringBuilder(); - margs = margs.OrderBy(x => Int32.Parse(x.Index)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.COMMENTMARKERCLASS, "ma-" + reader.State.currpage + "-" + reader.State.currline)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.MARGINGALBOXCLASS)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.MARGINALLISTCLASS)); - foreach (var marginal in margs) + // Marginalien, only for lines with a linenumber + if(reader.State.Marginals != null && !String.IsNullOrWhiteSpace(tag["index"])) { + var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline); + if (margs != null && margs.Any()) { - // In Marginal, the Root-Element () is somehow parsed, - // so we don't need to enclose it in a seperate div. - var rd = reader.State.ReaderService.RequestStringReader(marginal.Element); - new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules); - new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false); - new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb2, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules); - new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb2, false); - rd.Read(); + if(reader.State.ParsedMarginals == null) reader.State.ParsedMarginals = new List<(string, string, string)>(); + var sb2 = new StringBuilder(); + margs = margs.OrderBy(x => Int32.Parse(x.Index)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.COMMENTMARKERCLASS, "ma-" + reader.State.currpage + "-" + reader.State.currline)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.MARGINGALBOXCLASS)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.MARGINALLISTCLASS)); + foreach (var marginal in margs) + { + // In Marginal, the Root-Element () is somehow parsed, + // so we don't need to enclose it in a seperate div. + var rd = reader.State.ReaderService.RequestStringReader(marginal.Element); + new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules); + new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false); + new HaWeb.HTMLParser.XMLHelper(reader.State, rd, sb2, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules); + new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb2, false); + rd.Read(); + } + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + reader.State.ParsedMarginals.Add((reader.State.currpage, reader.State.currline, sb2.ToString())); } + } + + // Line type=line + if(tag["type"] == "line") { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.LINELINECLASS)); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); + reader.State.mustwrap = (false, true); + } + + // Line tab= + if(!String.IsNullOrWhiteSpace(tag["tab"])) { + sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.LINEINDENTCLASS + tag["tab"])); sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - reader.State.ParsedMarginals.Add((reader.State.currpage, reader.State.currline, sb2.ToString())); + if (tag["tab"] != "1") reader.State.mustwrap = (false, true); } } - // Line type=line - if(tag["type"] == "line") { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.LINELINECLASS)); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - reader.State.mustwrap = (false, true); - } - - // Line tab= - if(!String.IsNullOrWhiteSpace(tag["tab"])) { - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.LINEINDENTCLASS + tag["tab"])); - sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); - if (tag["tab"] != "1") reader.State.mustwrap = (false, true); + if (!reader.State.activelinecount) { + sb.Append("
"); } } )}; diff --git a/HaWeb/Settings/ParsingRules/TraditionRules.cs b/HaWeb/Settings/ParsingRules/TraditionRules.cs index 5487037..cf04a05 100644 --- a/HaWeb/Settings/ParsingRules/TraditionRules.cs +++ b/HaWeb/Settings/ParsingRules/TraditionRules.cs @@ -81,7 +81,7 @@ public static class TraditionRules { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.HANDCLASS)); }), - // Tradition specific: + // Tradition specific: ( ( x, _) => x.Name == "app", (sb, tag, _) => { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.APPCLASS)); } ), ( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => { reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, CSSClasses.TRADZHTEXTCLASS)); diff --git a/HaWeb/Settings/ParsingState/LetterState.cs b/HaWeb/Settings/ParsingState/LetterState.cs index c2b0792..e531b5c 100644 --- a/HaWeb/Settings/ParsingState/LetterState.cs +++ b/HaWeb/Settings/ParsingState/LetterState.cs @@ -39,6 +39,8 @@ public class LetterState : HaWeb.HTMLParser.IState { internal bool minwidth; // Did a pagebreak just occur? internal bool pagebreak = false; + // Are we in line-counted territory? + internal bool activelinecount; // Results internal StringBuilder sb_lettertext; @@ -63,6 +65,7 @@ public class LetterState : HaWeb.HTMLParser.IState { currline = "-1"; mustwrap = (false, false); minwidth = false; + activelinecount = true; // Initialize State if (Meta.ZH != null && !String.IsNullOrWhiteSpace(Meta.ZH.Page)) { diff --git a/XML/25.11.2022/references.xml b/XML/25.11.2022/references.xml index 55556e3..1f3fa5a 100644 --- a/XML/25.11.2022/references.xml +++ b/XML/25.11.2022/references.xml @@ -236,15 +236,17 @@ - - - - - - - - - - + + + + + + + + + + + + \ No newline at end of file diff --git a/XML/25.11.2022/traditionsnew.xml b/XML/25.11.2022/traditionsnew.xml index 35834f0..490c29d 100644 --- a/XML/25.11.2022/traditionsnew.xml +++ b/XML/25.11.2022/traditionsnew.xml @@ -1,4 +1,6 @@ - + + + Universitäts- und Landesbibliothek Münster, Signatur: Hamann-Nachlass, Kaps. 2, 50. Neujahrsglückwünsche von Martinus Maletius mit einer späteren Notiz von Hamann. Abschrift von Arthur Warda. Original verschollen. Letzter bekannter Aufbewahrungsort: Unbekannt. @@ -14644,9 +14646,11 @@ ZH VI 262 f., Nr. 927. - + ZH druckte an dieser Stelle einen Hinweis auf einen Brief von Hamann an Elisa von der Recke. Der Wortlaut des Briefes findet sich -in dem Brief an Jacobi, 6. Februar 1786, HKB 926 (VI 258/16–260/16). Original nicht überliefert. +in dem Brief an Jacobi, 6. Februar 1786, HKB 926 (VI 258/16–260/16). Original nicht überliefert. + + @@ -17271,7 +17275,9 @@ ZH VII 142 f., Nr. 1055. -Universitäts- und Landesbibliothek Münster, Signatur: Nachlass Gallitzin, 20, 3. Zeitgenössische Abschrift von unbekannter Hand. + +Universitäts- und Landesbibliothek Münster, Signatur: Nachlass Gallitzin, 20, 3. Zeitgenössische Abschrift von unbekannter Hand. + ZH VII 143–146, Nr. 1056. @@ -20144,4 +20150,4 @@ ZH VII 515, Nr. 552a. - \ No newline at end of file + \ No newline at end of file