mirror of
				https://github.com/Theodor-Springmann-Stiftung/hamann-ausgabe-core.git
				synced 2025-10-30 01:35:32 +00:00 
			
		
		
		
	- Commentboxes work (marginals) + mouseover
- Basic Briefe Controller - Generic XML reader
This commit is contained in:
		
							
								
								
									
										420
									
								
								HaWeb/HTMLHelpers/BriefeHelper.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										420
									
								
								HaWeb/HTMLHelpers/BriefeHelper.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,420 @@ | ||||
| namespace HaWeb.HTMLHelpers; | ||||
| using HaDocument.Interfaces; | ||||
| using HaXMLReader.Interfaces; | ||||
| using HaXMLReader.EvArgs; | ||||
| using HaDocument.Models; | ||||
| using System.Text; | ||||
| using System.Collections.Immutable; | ||||
| using System.Linq; | ||||
| using System.Xml.Linq; | ||||
|  | ||||
| // Type aliasses for incredible long types | ||||
| using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, BriefeHelper, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag, BriefeHelper>)>; | ||||
| using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, BriefeHelper, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text, BriefeHelper>)>; | ||||
| using WhitespaceFuncList = List<(Func<HaXMLReader.EvArgs.Whitespace, BriefeHelper, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Whitespace, BriefeHelper>)>; | ||||
|  | ||||
| public class BriefeHelper | ||||
| { | ||||
|     // Input | ||||
|     private protected ILibrary Lib; | ||||
|     private protected IReaderService ReaderService; | ||||
|     private protected Meta Meta; | ||||
|  | ||||
|     private protected Letter? Letter; | ||||
|     private protected Tradition? Tradition; | ||||
|     private protected ImmutableList<Hand>? Hands; | ||||
|     private protected ImmutableList<Editreason>? EditReasons; | ||||
|     private protected ImmutableList<Marginal>? Marginals; | ||||
|  | ||||
|     // State | ||||
|     private protected string currline = "-1"; | ||||
|     private protected string currpage = ""; | ||||
|     private protected string oldpage = ""; | ||||
|     private protected int commid = 1; | ||||
|     private protected bool active_firstedit = true; | ||||
|     private protected bool active_trad = false; | ||||
|     private protected bool active_skipwhitespace = true; | ||||
|     private protected bool active_del = false; | ||||
|     private protected List<string> handstrings = new List<string>(); | ||||
|  | ||||
|     // Parsing-Combinations | ||||
|     private protected StringBuilder sb_lettertext = new StringBuilder();    // Hauptext | ||||
|     private protected StringBuilder sb_linecount = new StringBuilder();     // Linke Spalte (Zeilenzählung) | ||||
|     private protected StringBuilder sb_marginals = new StringBuilder();     // Rechte Spalte (Kommentare) | ||||
|     private protected StringBuilder sb_tradition = new StringBuilder();     // Überlieferung | ||||
|     private protected StringBuilder sb_trad_zhtext = new StringBuilder();   // Überlieferung, ZHText | ||||
|     private protected StringBuilder sb_trad_left = new StringBuilder();     // Überlieferung ZHText linke Spalte (zeilenzählung) | ||||
|     private protected StringBuilder sb_trad_right = new StringBuilder();    // Überlieferung ZHText rechte Spalte (Kommentare) | ||||
|     private protected StringBuilder sb_edits = new StringBuilder();         // Edits | ||||
|  | ||||
|     private protected IReader? rd_lettertext; | ||||
|     private protected IReader? rd_tradition; | ||||
|  | ||||
|     // Parsing Rules | ||||
|     // General rules (for the lettertext column, also for parsing the marginals, awa tradtions and editreasons) | ||||
|     private static readonly TagFuncList OTag_Funcs = new TagFuncList() { | ||||
|         ( ( x, _) => x.Name == "align" && x["pos"] == "center", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "align center")) ), | ||||
|         ( ( x, _) => x.Name == "align" && x["pos"] == "right", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "align right")) ), | ||||
|         ( ( x, _) => x.Name == "added", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "added")) ), | ||||
|         ( ( x, _) => x.Name == "sal", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "sal")) ), | ||||
|         ( ( x, _) => x.Name == "aq", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "aq")) ), | ||||
|         ( ( x, _) => x.Name == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "super")) ), | ||||
|         ( ( x, _) => x.Name == "del", (sb, tag, bh) => { | ||||
|             sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "del")); | ||||
|             bh.active_del = true; | ||||
|             } ), | ||||
|         ( ( x, _) => x.Name == "nr", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "nr")) ), | ||||
|         ( ( x, _) => x.Name == "note", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "note")) ), | ||||
|         ( ( x, _) => x.Name == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "ul")) ), | ||||
|         ( ( x, _) => x.Name == "anchor" && !String.IsNullOrWhiteSpace(x["ref"]), (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "anchor")) ), | ||||
|         ( ( x, _) => x.Name == "fn" && !String.IsNullOrWhiteSpace(x["index"]), (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "footnote")) ), | ||||
|         ( ( x, _) => x.Name == "dul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "dul")) ), | ||||
|         ( ( x, _) => x.Name == "ful", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "ful")) ), | ||||
|         ( ( x, _) => x.Name == "up", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "up")) ), | ||||
|         ( ( x, _) => x.Name == "sub", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("sub")) ), | ||||
|         ( ( x, _) => x.Name == "tul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "tul")) ), | ||||
|         ( ( x, _) => x.Name == "header", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "header")) ), | ||||
|         ( ( x, _) => x.Name == "lemma", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "lemma")) ), | ||||
|         ( ( x, _) => x.Name == "eintrag", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "entry")) ), | ||||
|         ( ( x, _) => x.Name == "titel", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "title")) ), | ||||
|         ( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "bzg")) ), | ||||
|         ( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "zh")) ), | ||||
|         ( ( x, _) => x.Name == "emph", (sb, tag, _) => {  sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("em")); } ), | ||||
|         ( ( x, _) => x.Name == "app", (sb, tag, _) => {  sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "app")); } ), | ||||
|         ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "subcomment", tag["id"])) ), | ||||
|         ( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "comment", tag["id"])) ), | ||||
|         ( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "editreason")) ), | ||||
|         ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "letter")) ), | ||||
|         ( ( x, _) => x.Name == "letterTradition", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "tradition")) ), | ||||
|         ( ( x, _) => x.Name == "marginal", (sb, tag, bh) => { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "marginal")); | ||||
|                 bh.active_skipwhitespace = !bh.active_skipwhitespace; | ||||
|         }), | ||||
|         ( ( x, _) => x.Name == "hand", (sb, tag, _) => { | ||||
|             sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "hand")); | ||||
|             } ), | ||||
|             ( ( x, _) => x.Name == "tabs", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "htable")) ), | ||||
|             ( ( x, _) => x.Name == "tab" && !String.IsNullOrWhiteSpace(x["value"]), (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "htab htab-" + tag["value"]))) | ||||
|     }; | ||||
|  | ||||
|     public BriefeHelper(ILibrary lib, IReaderService readerService, Meta meta, Letter? letter, Tradition? tradition, ImmutableList<Hand>? hands, ImmutableList<Editreason> editreasons, ImmutableList<Marginal> marginals) | ||||
|     { | ||||
|         Lib = lib; | ||||
|         ReaderService = readerService; | ||||
|         Letter = letter; | ||||
|         Meta = meta; | ||||
|         Tradition = tradition; | ||||
|         Hands = hands; | ||||
|         EditReasons = editreasons; | ||||
|         Marginals = marginals; | ||||
|  | ||||
|         initState(); | ||||
|     } | ||||
|  | ||||
|     private void initState() | ||||
|     { | ||||
|         rd_lettertext = Letter != null && !String.IsNullOrWhiteSpace(Letter.Element) ? ReaderService.RequestStringReader(Letter.Element) : null; | ||||
|         rd_tradition = Tradition != null && !String.IsNullOrWhiteSpace(Tradition.Element) ? ReaderService.RequestStringReader(Tradition.Element) : null; | ||||
|         if (Meta.ZH != null) | ||||
|         { | ||||
|             currpage = Meta.ZH.Page; | ||||
|         } | ||||
|         if (Hands != null) | ||||
|         { | ||||
|             foreach (var hand in Hands.OrderBy(x => x.StartPage.Length).ThenBy(x => x.StartPage).ThenBy(x => x.StartLine.Length).ThenBy(x => x.StartLine)) | ||||
|             { | ||||
|                 var currstring = hand.StartPage + "/" + hand.StartLine; | ||||
|                 if (hand.StartPage != hand.EndPage) | ||||
|                 { | ||||
|                     currstring += "–" + hand.EndPage + "/" + hand.EndLine; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|                     if (hand.StartLine != hand.EndLine) | ||||
|                     { | ||||
|                         currstring += "–" + hand.EndLine; | ||||
|                     } | ||||
|                 } | ||||
|                 if (Lib.HandPersons.Where(x => x.Key == hand.Person).Any()) | ||||
|                 { | ||||
|                     currstring += " " + Lib.HandPersons.Where(x => x.Key == hand.Person).FirstOrDefault().Value.Name; | ||||
|                     handstrings.Add(currstring); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public void CreateHTML() | ||||
|     { | ||||
|         var CTag_Funcs = new TagFuncList() { | ||||
|             ( ( x, _) => x.Name == "align", (sb, tag, _) =>  { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|              } ), | ||||
|             ( ( x, _) => x.Name == "added", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "sal", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "aq", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "super", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "del", (sb, tag, _) => { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|                 active_del = false; | ||||
|              } ), | ||||
|             ( ( x, _) => x.Name == "nr", (sb, tag, _) =>  sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "note", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "ul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "anchor", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "fn", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "dul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "up", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "ful", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "sub", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("sub")) ), | ||||
|             ( ( x, _) => x.Name == "tul", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "header", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "lemma", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "eintrag", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "titel", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "bzg", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "zh", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "emph", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("em")) ), | ||||
|             ( ( x, _) => x.Name == "app", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")) ), | ||||
|             ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "kommentar", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "editreason", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "subsection", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "letterTradition", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "marginal", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "tabs", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "tab", (sb, tag, _) => sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")) ), | ||||
|             ( ( x, _) => x.Name == "hand", (sb, tag, _) => { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|              } ) | ||||
|         }; | ||||
|  | ||||
|         var Text_Funcs = new TextFuncList() { | ||||
|             ( ( x, _) => true, ( sb, txt, _) => { | ||||
|                 if (active_del) | ||||
|                     sb.Append(txt.Value.Replace("–", "<span class=\"diagdel\">–</span>")); | ||||
|                 else | ||||
|                     sb.Append(txt.Value); | ||||
|              } ) | ||||
|         }; | ||||
|  | ||||
|         var Text_Funcs_Tagging = new TextFuncList() { | ||||
|             ( ( _, _) => true, ( sb, txt, _) => { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "ntext")); | ||||
|                 sb.Append(txt.Value); | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|              } ) | ||||
|         }; | ||||
|  | ||||
|         var STag_Funcs = new TagFuncList() { | ||||
|             ( ( x, _) => x.Name == "line", (sb, tag, _) => { | ||||
|                 if(currline != "-1") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "ZHBreak")); | ||||
|                 if(tag["type"] == "line") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("hr", "lineline")); | ||||
|             } ), | ||||
|             ( ( x, _) => x.Name == "line" && !String.IsNullOrWhiteSpace(x["tab"]), (sb, tag, _) => { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "tab-" + tag["tab"])); | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|             } ) | ||||
|         }; | ||||
|  | ||||
|         var Whitespace_Funcs = new WhitespaceFuncList() { | ||||
|             ( ( _, _) => true, ( sb, txt, _) => { | ||||
|                 if (active_skipwhitespace) | ||||
|                     sb.Append(txt.Value); | ||||
|                 else | ||||
|                     active_skipwhitespace = !active_skipwhitespace; | ||||
|             }) | ||||
|         }; | ||||
|  | ||||
|         // Rules for the left sidebar | ||||
|         var STag_Funcs_LEFT = new TagFuncList() { | ||||
|             ( ( x, _) => x.Name == "line", (sb, tag, _) => { | ||||
|                 if(currline != "-1") { | ||||
|                     if (currpage == oldpage) | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", currpage + "-" + currline)); | ||||
|                     else { | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", oldpage + "-" + currline)); | ||||
|                         oldpage = currpage; | ||||
|                     } | ||||
|                 } | ||||
|                 else { | ||||
|                     sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "zhpage firstpage", currpage + "-" + tag["index"])); | ||||
|                     sb.Append("S." + " "); | ||||
|                     sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|                     if (tag["index"] != "1") | ||||
|                         sb.Append(currpage + " / " + tag["index"]); | ||||
|                     else | ||||
|                         sb.Append(currpage); | ||||
|                     oldpage = currpage; | ||||
|                 } | ||||
|             }), | ||||
|             ( ( x, _) => x.Name == "line", (sb, tag, _) => { if(currline != "-1" && Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0) { sb.Append(tag["index"]); } } ), | ||||
|             ( ( x, _) => x.Name == "line" && x["index"] == "1" && currline != "-1", (sb, tag, _) => { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "zhpage", "")); | ||||
|                 sb.Append("S. " + currpage); | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|             }), | ||||
|             ( ( x, _) => x.Name == "line", (sb, tag, _) => { currline = tag["index"]; } ), | ||||
|             ( ( x, _) => x.Name == "page", (sb, tag, _) =>  { currpage = tag["index"]; } ) | ||||
|         }; | ||||
|  | ||||
|         // Rules for the right sidebar | ||||
|         var STag_Funcs_RIGHT = new TagFuncList() { | ||||
|             ( ( x, _) => x.Name == "line", (sb, tag, _) => { | ||||
|                 if(currline != "-1" && Marginals != null) { | ||||
|                     var margs = Marginals.Where(x => x.Page == currpage && x.Line == currline); | ||||
|                     if (margs != null && margs.Any()) | ||||
|                     { | ||||
|                         margs = margs.OrderBy(x => Int32.Parse(x.Index)); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "commBox", commid.ToString())); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "commselector")); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("button", "button")); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("button")); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "comment")); | ||||
|                         foreach (var marginal in margs) | ||||
|                         { | ||||
|                             var rd = ReaderService.RequestStringReader(marginal.Element); | ||||
|                             new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd, sb, OTag_Funcs, null, CTag_Funcs, Text_Funcs_Tagging, Whitespace_Funcs); | ||||
|                             new HaWeb.HTMLHelpers.LinkHelper(Lib, rd, sb, false); | ||||
|                             rd.Read(); | ||||
|                         } | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")); | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "emptyline")); | ||||
|                     } | ||||
|                 } | ||||
|                 commid++; | ||||
|             } | ||||
|         )}; | ||||
|  | ||||
|         // Rules for traditions | ||||
|         var OTag_Funcs_Trad = new TagFuncList() { | ||||
|         ( ( x, _) => x.Name == "app", (sb, tag, _) => {  if (!active_firstedit) { sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br")); } else { active_firstedit = false; } } ), | ||||
|         ( ( x, _) => x.Name == "ZHText", (sb, tag, _) => { | ||||
|                 sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "row zhtext")); | ||||
|                 sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "trad-text col order-2 letterbox")); | ||||
|                 sb_trad_left = new StringBuilder(); | ||||
|                 sb_trad_right = new StringBuilder(); | ||||
|                 currline = "-1"; | ||||
|                 currpage = ""; | ||||
|                 active_trad = true; | ||||
|                 sb_trad_left.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "trad-linecount countbox nnumber d-none d-lg-block order-1")); | ||||
|                 sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "commentColumn trad-comm col-4 d-none d-lg-block order-3")); | ||||
|                 sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "emptyline")); | ||||
|                 if (rd_tradition != null) { | ||||
|                     new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd_tradition, sb_trad_left, null, STag_Funcs_LEFT); | ||||
|                     new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd_tradition, sb_trad_right, null, STag_Funcs_RIGHT); | ||||
|                 } | ||||
|             } ) | ||||
|         }; | ||||
|  | ||||
|         var CTag_Funcs_Trad = new TagFuncList() { | ||||
|         ( ( x, _) => x.Name == "ZHText", (sb, tag, _) => { | ||||
|                 sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|                 sb_trad_left.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|                 sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|                 sb_tradition.Append(sb_trad_left.ToString()); | ||||
|                 sb_tradition.Append(sb_trad_right.ToString()); | ||||
|                 sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|                 active_trad = false; | ||||
|             } ) | ||||
|         }; | ||||
|  | ||||
|         var STags_Funcs_TRAD = new TagFuncList() { | ||||
|             ( ( x, _) => x.Name == "line", (sb, tag, _) => { if(currline != "-1" || !active_trad) sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "ZHBreak")); } ), | ||||
|             ( ( x, _) => x.Name == "line" && !String.IsNullOrWhiteSpace(x["tab"]), (sb, tag, _) => { | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "tab-" + tag["tab"])); | ||||
|                 sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|             } ) | ||||
|         }; | ||||
|  | ||||
|         // Rules for Edits: | ||||
|         var STags_Funcs_EDIT = new TagFuncList() { | ||||
|             ( ( x, _) => x.Name == "line", (sb, tag, _) => sb.Append(" ") ) | ||||
|         }; | ||||
|  | ||||
|         string HandleEdit(Editreason edit) | ||||
|         { | ||||
|             sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("div", "edit")); | ||||
|             sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "pageline")); | ||||
|             var currstring = edit.StartPage + "/" + edit.StartLine; | ||||
|             if (edit.StartPage != edit.EndPage) | ||||
|             { | ||||
|                 currstring += "–" + edit.EndPage + "/" + edit.EndLine; | ||||
|             } | ||||
|             else | ||||
|             { | ||||
|                 if (edit.StartLine != edit.EndLine) | ||||
|                 { | ||||
|                     currstring += "–" + edit.EndLine; | ||||
|                 } | ||||
|             } | ||||
|             sb_edits.Append(currstring + " "); | ||||
|             sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|             if (!String.IsNullOrWhiteSpace(edit.Reference)) | ||||
|             { | ||||
|                 var sb2 = new StringBuilder(); | ||||
|                 sb2.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "reference")); | ||||
|                 var rd = ReaderService.RequestStringReader(edit.Reference); | ||||
|                 new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd, sb2, OTag_Funcs, null, CTag_Funcs, Text_Funcs, Whitespace_Funcs); | ||||
|                 rd.Read(); | ||||
|                 sb2.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|                 if ((edit.StartPage != edit.EndPage || edit.StartLine != edit.EndLine) && XElement.Parse(sb2.ToString()).Value.ToString().Length >= 60) | ||||
|                 { | ||||
|                     var text = XElement.Parse(sb2.ToString()).Value.ToString(); | ||||
|                     text = text.ToString().Split(' ').Take(1).First() + " […] " + text.ToString().Split(' ').TakeLast(1).First(); | ||||
|                     sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "reference")); | ||||
|                     sb_edits.Append(text); | ||||
|                     sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|                 } | ||||
|                 else | ||||
|                     sb_edits.Append(sb2); | ||||
|             } | ||||
|             if (!String.IsNullOrWhiteSpace(edit.Element)) | ||||
|             { | ||||
|                 sb_edits.Append(" "); | ||||
|                 sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("span", "corrections")); | ||||
|                 var rd = ReaderService.RequestStringReader(edit.Element); | ||||
|                 new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd, sb_edits, OTag_Funcs, STags_Funcs_EDIT, CTag_Funcs, Text_Funcs, Whitespace_Funcs); | ||||
|                 rd.Read(); | ||||
|                 sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("span")); | ||||
|             } | ||||
|             sb_edits.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("div")); | ||||
|             return sb_edits.ToString(); | ||||
|         } | ||||
|  | ||||
|         // Actual parsing | ||||
|         if (Letter != null && Letter.Element != null && !String.IsNullOrWhiteSpace(Letter.Element) && rd_lettertext != null) | ||||
|         { | ||||
|             new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd_lettertext, sb_lettertext, OTag_Funcs, STag_Funcs, CTag_Funcs, Text_Funcs, Whitespace_Funcs); | ||||
|             new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd_lettertext, sb_linecount, null, STag_Funcs_LEFT); | ||||
|  | ||||
|             if (Marginals != null && Marginals.Any()) | ||||
|             { | ||||
|                 new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd_lettertext, sb_marginals, null, STag_Funcs_RIGHT); | ||||
|             } | ||||
|             rd_lettertext.Read(); | ||||
|         } | ||||
|  | ||||
|         if (Tradition != null && !String.IsNullOrWhiteSpace(Tradition.Element) && rd_tradition != null) | ||||
|         { | ||||
|             new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd_tradition, sb_tradition, OTag_Funcs_Trad, null, CTag_Funcs_Trad, null, null); | ||||
|             new HaWeb.HTMLHelpers.GenericXMLHelper<BriefeHelper>(this, rd_tradition, sb_tradition, OTag_Funcs, STags_Funcs_TRAD, CTag_Funcs, Text_Funcs, Whitespace_Funcs); | ||||
|             new HaWeb.HTMLHelpers.LinkHelper(Lib, rd_tradition, sb_tradition); | ||||
|             rd_tradition.Read(); | ||||
|         } | ||||
|  | ||||
|         if (EditReasons != null && EditReasons.Any()) | ||||
|         { | ||||
|             foreach (var edit in EditReasons) | ||||
|             { | ||||
|                 HandleEdit(edit); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -5,38 +5,45 @@ using HaXMLReader.EvArgs; | ||||
| using HaDocument.Models; | ||||
| using System.Text; | ||||
|  | ||||
| // Type aliasses for incredible long types | ||||
| using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag>)>; | ||||
| using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text>)>; | ||||
| using WhitespaceFuncList = List<(Func<HaXMLReader.EvArgs.Whitespace, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Whitespace>)>; | ||||
|  | ||||
| public static class CommentHelpers | ||||
| { | ||||
|  | ||||
|     private static readonly string DEFAULTELEMENT = HaWeb.Settings.ParsingSettings.DEFAULTELEMENT; | ||||
|     private static readonly string DEFAULTELEMENT = HaWeb.Settings.HTML.DEFAULTELEMENT; | ||||
|     private static readonly string LEMMACLASS = HaWeb.Settings.CSSClasses.LEMMACLASS; | ||||
|     private static readonly string TITLECLASS = HaWeb.Settings.CSSClasses.TITLECLASS; | ||||
|     private static readonly string BACKLINKSCLASS = HaWeb.Settings.CSSClasses.BACKLINKSCLASS; | ||||
|     private static readonly string LETLINKCLASS = HaWeb.Settings.CSSClasses.LETLINKCLASS; | ||||
|     private static readonly string COMMENTHEADCLASS = HaWeb.Settings.CSSClasses.COMMENTHEADCLASS; | ||||
|     private static readonly string COMMENTBODYCLASS = HaWeb.Settings.CSSClasses.COMMENTBODYCLASS; | ||||
|     private static readonly string BACKLINKSHKBCLASS = HaWeb.Settings.CSSClasses.BACKLINKSHKBCLASS; | ||||
|      | ||||
|     // Parsing Rules | ||||
|     private static readonly List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> _OTagFuncs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() { | ||||
|     private static readonly TagFuncList _OTagFuncs = new TagFuncList() { | ||||
|         ( x => x.Name == "lemma", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LEMMACLASS))), | ||||
|         ( x => x.Name == "title", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS))), | ||||
|         ( x => x.Name == "titel", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS))) | ||||
|     }; | ||||
|  | ||||
|     private static readonly List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> _CTagFuncs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() { | ||||
|     private static readonly TagFuncList _CTagFuncs = new TagFuncList() { | ||||
|         ( x => x.Name == "lemma", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT))), | ||||
|         ( x => x.Name == "title", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT))), | ||||
|         ( x => x.Name == "titel", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT))) | ||||
|     }; | ||||
|  | ||||
|     private static readonly List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> _STagFuncs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() { | ||||
|     private static readonly TagFuncList _STagFuncs = new TagFuncList() { | ||||
|         ( x => x.Name == "line", (sb, tag) => sb.Append(HTMLHelpers.TagHelpers.CreateElement("br")) ) | ||||
|     }; | ||||
|  | ||||
|     private static readonly List<(Func<Text, bool>, Action<StringBuilder, Text>)> _TextFuncs = new List<(Func<Text, bool>, Action<StringBuilder, Text>)>() { | ||||
|     private static readonly TextFuncList _TextFuncs = new TextFuncList() { | ||||
|         ( x => true, ( sb, txt ) => sb.Append(txt.Value) ) | ||||
|     }; | ||||
|  | ||||
|     private static readonly List<(Func<Whitespace, bool>, Action<StringBuilder, Whitespace>)> _WhitespaceFuncs = new List<(Func<Whitespace, bool>, Action<StringBuilder, Whitespace>)>() { | ||||
|     private static readonly WhitespaceFuncList _WhitespaceFuncs = new WhitespaceFuncList() { | ||||
|         ( x => true, ( sb, txt ) => sb.Append(txt.Value) ) | ||||
|     }; | ||||
|  | ||||
| @@ -63,7 +70,9 @@ public static class CommentHelpers | ||||
|                 { | ||||
|                     if (!arrow) | ||||
|                     { | ||||
|                         sb.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, BACKLINKSHKBCLASS)); | ||||
|                         sb.Append("HKB "); | ||||
|                         sb.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)); | ||||
|                         arrow = true; | ||||
|                     } | ||||
|                     sb.Append(HTMLHelpers.TagHelpers.CreateElement("a", LETLINKCLASS, "/Briefe/" + let.Autopsic + "#" + blk.Page + "-" + blk.Line)); | ||||
|   | ||||
							
								
								
									
										116
									
								
								HaWeb/HTMLHelpers/GenericXMLHelper.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								HaWeb/HTMLHelpers/GenericXMLHelper.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,116 @@ | ||||
| namespace HaWeb.HTMLHelpers; | ||||
| using HaXMLReader.Interfaces; | ||||
| using HaXMLReader.EvArgs; | ||||
| using System.Text; | ||||
| using System.Collections.Generic; | ||||
| using System; | ||||
|  | ||||
| public class GenericXMLHelper<T> | ||||
| { | ||||
|     private T _caller; | ||||
|     private IReader _in; | ||||
|     private StringBuilder _target; | ||||
|     private List<(Func<Tag, T, bool>, Action<StringBuilder, Tag, T>)>? _OTag_Funcs; | ||||
|     private List<(Func<Tag, T, bool>, Action<StringBuilder, Tag, T>)>? _STag_Funcs; | ||||
|     private List<(Func<Tag, T, bool>, Action<StringBuilder, Tag, T>)>? _CTag_Funcs; | ||||
|     private List<(Func<Text, T, bool>, Action<StringBuilder, Text, T>)>? _Text_Funcs; | ||||
|     private List<(Func<Whitespace, T, bool>, Action<StringBuilder, Whitespace, T>)>? _WS_Funcs; | ||||
|     private bool _deleteLeadingWS; | ||||
|     private bool _deleteTrailingWS; | ||||
|  | ||||
|     public GenericXMLHelper( | ||||
|         T caller, | ||||
|         IReader input, | ||||
|         StringBuilder target, | ||||
|         List<(Func<Tag, T, bool>, Action<StringBuilder, Tag, T>)>? OTag_Funcs = null, | ||||
|         List<(Func<Tag, T, bool>, Action<StringBuilder, Tag, T>)>? STag_Funcs = null, | ||||
|         List<(Func<Tag, T, bool>, Action<StringBuilder, Tag, T>)>? CTag_Funcs = null, | ||||
|         List<(Func<Text, T, bool>, Action<StringBuilder, Text, T>)>? Text_Funcs = null, | ||||
|         List<(Func<Whitespace, T, bool>, Action<StringBuilder, Whitespace, T>)>? WS_Funcs = null, | ||||
|         bool deleteLeadingWS = false, | ||||
|         bool deleteTrailingWS = false | ||||
|     ) | ||||
|     { | ||||
|         if (input == null || target == null || caller == null) throw new ArgumentNullException(); | ||||
|  | ||||
|         _caller = caller; | ||||
|         _in = input; | ||||
|         _target = target; | ||||
|         _deleteLeadingWS = deleteLeadingWS; | ||||
|         _deleteTrailingWS = deleteTrailingWS; | ||||
|  | ||||
|         _OTag_Funcs = OTag_Funcs; | ||||
|         _STag_Funcs = STag_Funcs; | ||||
|         _CTag_Funcs = CTag_Funcs; | ||||
|         _Text_Funcs = Text_Funcs; | ||||
|         _WS_Funcs = WS_Funcs; | ||||
|  | ||||
|         if (_OTag_Funcs != null) | ||||
|             _in.OpenTag += OnOTag; | ||||
|         if (_STag_Funcs != null) | ||||
|             _in.SingleTag += OnSTag; | ||||
|         if (_CTag_Funcs != null) | ||||
|             _in.CloseTag += OnCTag; | ||||
|         if (_Text_Funcs != null) | ||||
|             _in.Text += OnText; | ||||
|         if (_WS_Funcs != null) | ||||
|             _in.Whitespace += OnWS; | ||||
|     } | ||||
|  | ||||
|     void OnOTag(object _, Tag tag) | ||||
|     { | ||||
|         if (_OTag_Funcs != null) | ||||
|             foreach (var entry in _OTag_Funcs) | ||||
|                 if (entry.Item1(tag, _caller)) entry.Item2(_target, tag, _caller); | ||||
|     } | ||||
|  | ||||
|     void OnText(object _, Text text) | ||||
|     { | ||||
|         if (_deleteLeadingWS) text.Value = text.Value.TrimStart(); | ||||
|         if (_deleteTrailingWS) text.Value = text.Value.TrimEnd(); | ||||
|         foreach (var entry in _Text_Funcs) | ||||
|             if (entry.Item1(text, _caller)) entry.Item2(_target, text, _caller); | ||||
|     } | ||||
|  | ||||
|     void OnSTag(object _, Tag tag) | ||||
|     { | ||||
|         foreach (var entry in _STag_Funcs) | ||||
|             if (entry.Item1(tag, _caller)) entry.Item2(_target, tag, _caller); | ||||
|     } | ||||
|  | ||||
|     void OnCTag(object _, Tag tag) | ||||
|     { | ||||
|         foreach (var entry in _CTag_Funcs) | ||||
|             if (entry.Item1(tag, _caller)) entry.Item2(_target, tag, _caller); | ||||
|     } | ||||
|  | ||||
|     void OnWS(object _, Whitespace ws) | ||||
|     { | ||||
|         foreach (var entry in _WS_Funcs) | ||||
|         { | ||||
|             if (entry.Item1(ws, _caller)) entry.Item2(_target, ws, _caller); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     internal void Dispose() | ||||
|     { | ||||
|         if (_in != null) | ||||
|         { | ||||
|             if (_OTag_Funcs != null) | ||||
|                 _in.OpenTag -= OnOTag; | ||||
|             if (_STag_Funcs != null) | ||||
|                 _in.SingleTag -= OnSTag; | ||||
|             if (_CTag_Funcs != null) | ||||
|                 _in.CloseTag -= OnCTag; | ||||
|             if (_Text_Funcs != null) | ||||
|                 _in.Text -= OnText; | ||||
|             if (_WS_Funcs != null) | ||||
|                 _in.Whitespace -= OnWS; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     ~GenericXMLHelper() | ||||
|     { | ||||
|         Dispose(); | ||||
|     } | ||||
| } | ||||
| @@ -8,6 +8,12 @@ using HaXMLReader.EvArgs; | ||||
| using HaXMLReader; | ||||
| using System.Collections.Generic; | ||||
|  | ||||
| // Type aliasses for incredible long types | ||||
| using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag>)>; | ||||
| using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text>)>; | ||||
| using WhitespaceFuncList = List<(Func<HaXMLReader.EvArgs.Whitespace, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Whitespace>)>; | ||||
|  | ||||
|  | ||||
| public class LinkHelper { | ||||
|     private ILibrary _lib; | ||||
|     private IReader _reader; | ||||
| @@ -16,7 +22,7 @@ public class LinkHelper { | ||||
|     private bool _followlinksinchildren; | ||||
|     private bool _followlinksinthis; | ||||
|  | ||||
|     private static readonly string DEFAULTELEMENT = HaWeb.Settings.ParsingSettings.DEFAULTELEMENT; | ||||
|     private static readonly string DEFAULTELEMENT = HaWeb.Settings.HTML.DEFAULTELEMENT; | ||||
|     private static readonly string LETLINKCLASS = HaWeb.Settings.CSSClasses.LETLINKCLASS; | ||||
|     private static readonly string REFLINKCLASS = HaWeb.Settings.CSSClasses.REFLINKCLASS; | ||||
|     private static readonly string WWWLINKCLASS = HaWeb.Settings.CSSClasses.WWWLINKCLASS; | ||||
| @@ -24,19 +30,19 @@ public class LinkHelper { | ||||
|     private static readonly string TITLECLASS = HaWeb.Settings.CSSClasses.TITLECLASS; | ||||
|  | ||||
|     // Parsing Rules for inserting lemmas | ||||
|     private static readonly List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> OTag_Funcs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() { | ||||
|         ( x => x.Name == "lemma", (strbd, x) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, INSERTEDLEMMACLASS)) ), | ||||
|         ( x => x.Name == "titel", (strbd, x) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS)) ), | ||||
|         ( x => x.Name == "title", (strbd, x) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS)) ) | ||||
|     private static readonly TagFuncList OTag_Funcs = new TagFuncList() { | ||||
|         ( x => x.Name == "lemma", (strbd, _) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, INSERTEDLEMMACLASS)) ), | ||||
|         ( x => x.Name == "titel", (strbd, _) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS)) ), | ||||
|         ( x => x.Name == "title", (strbd, _) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TITLECLASS)) ) | ||||
|     }; | ||||
|      | ||||
|     private static readonly List<(Func<Tag, bool>, Action<StringBuilder, Tag>)> CTag_Funcs = new List<(Func<Tag, bool>, Action<StringBuilder, Tag>)>() { | ||||
|         ( x => x.Name == "lemma", (strbd, x) => strbd.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), | ||||
|         ( x => x.Name == "titel", (strbd, x) => strbd.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), | ||||
|         ( x => x.Name == "title", (strbd, x) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT)) ) | ||||
|     private static readonly TagFuncList CTag_Funcs = new TagFuncList() { | ||||
|         ( x => x.Name == "lemma", (strbd, _) => strbd.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), | ||||
|         ( x => x.Name == "titel", (strbd, _) => strbd.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT)) ), | ||||
|         ( x => x.Name == "title", (strbd, _) => strbd.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT)) ) | ||||
|     }; | ||||
|  | ||||
|     private static readonly List<(Func<Text, bool>, Action<StringBuilder, Text>)> Text_Funcs = new List<(Func<Text, bool>, Action<StringBuilder, Text>)>() { | ||||
|     private static readonly TextFuncList Text_Funcs = new TextFuncList() { | ||||
|         ( x => true, (strbd, txt) => strbd.Append(txt.Value)) | ||||
|     }; | ||||
|  | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| namespace HaWeb.HTMLHelpers; | ||||
| public static class StringHelpers { | ||||
|     public static string GetEnumerationString(List<string> strlist) | ||||
|     public static string GetEnumerationString(IEnumerable<string> strlist) | ||||
|     { | ||||
|         var res = ""; | ||||
|         foreach (var str in strlist) | ||||
|   | ||||
| @@ -29,7 +29,7 @@ public class XMLHelper | ||||
|         bool deleteTrailingWS = false | ||||
|     ) | ||||
|     { | ||||
|         if (input == null || target == null) throw new ArgumentNullException(); | ||||
|         if (input == null || target == null ) throw new ArgumentNullException(); | ||||
|  | ||||
|         _in = input; | ||||
|         _target = target; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 schnulller
					schnulller