Started integrating letter view; overhauled marginals completely

This commit is contained in:
schnulller
2022-05-22 02:31:51 +02:00
parent da95222e8e
commit 8179ea6e68
19 changed files with 2203 additions and 261 deletions

View File

@@ -55,17 +55,20 @@ public static class CSSClasses {
public const string EMPHCLASS = "ha-emph";
public const string APPCLASS = "ha-app";
public const string MARGINGALBOXCLASS = "ha-marginalbox";
public const string TRADLINECOUNTCLASS = "ha-tradlinecount";
public const string TRADCOMMENTCOLUMNCLASS = "ha-tradcommentcolumn";
public const string TRADZHTEXTCLASS = "ha-tradzhtext";
public const string TRADZHTEXTBOXCLASS = "ha-tradtextbox";
// Zeilen:
public const string ZHLINECLASS = "ha-zhline";
public const string FIRSTLINECLASS ="ha-firstline";
public const string ZHBREAKCLASS = "ha-zhbreak";
public const string LINELINECLASS = "ha-hr";
public const string LINEINDENTCLASS = "ha-indent-"; // TODO: GEN
public const string ZHPAGECLASS = "ha-zhpage";
public const string ZHLINECOUNTCLASS = "ha-linecount";
public const string HIDDENZHLINECOUNT = "ha-hiddenlinecount";
public const string FIRSTPAGECLASS = "ha-firstpage";
public const string EMPTYLINECLASS = "ha-emptyline";

View File

@@ -1,5 +1,6 @@
namespace HaWeb.Settings.ParsingRules;
using System.Text;
using System.Text.RegularExpressions;
using TagFuncList = List<(Func<HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.CommentState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Tag, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.CommentState>>)>;
using TextFuncList = List<(Func<HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.CommentState>, bool>, Action<System.Text.StringBuilder, HaXMLReader.EvArgs.Text, HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.CommentState>>)>;
@@ -30,8 +31,20 @@ public static class CommentRules {
};
public static readonly TextFuncList TextRules = new TextFuncList() {
( (x, _) => true, ( sb, txt, _) => sb.Append(txt.Value) )
};
( (x, _) => true, ( sb, txt, reader) => {
sb.Append(txt.Value);
if (reader.State.Category == "bibel" && reader.State.Type == HaWeb.Settings.ParsingState.CommentType.Subcomment &&
reader.OpenTags.Any() && reader.OpenTags.Last().Name == "lemma" &&
!txt.Value.Contains("Stücke zu") && !txt.Value.Contains("ZusDan")) {
var lnkstring = Regex.Replace(txt.Value, @"\s+", "");
sb.Append(HTMLHelpers.TagHelpers.CreateCustomElement("a",
new HaWeb.HTMLHelpers.TagHelpers.Attribute() { Name = "href", Value = "https://www.bibleserver.com/LUT/" + lnkstring},
new HaWeb.HTMLHelpers.TagHelpers.Attribute() { Name = "target", Value = "_blank"},
new HaWeb.HTMLHelpers.TagHelpers.Attribute() { Name = "rel", Value = "noopener noreferrer"}));
sb.Append("<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-external-link\"><path d=\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\"></path><polyline points=\"15 3 21 3 21 9\"></polyline><line x1=\"10\" y1=\"14\" x2=\"21\" y2=\"3\"></line></svg>");
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement("a"));
}
})};
public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() {
( (x, _) => true, ( sb, txt, _) => sb.Append(txt.Value) )

View File

@@ -45,12 +45,16 @@ public class LetterRules
private static readonly string MARGINGALBOXCLASS = HaWeb.Settings.CSSClasses.MARGINGALBOXCLASS;
// Zeilen:
private static readonly string ZHLINECLASS = HaWeb.Settings.CSSClasses.ZHLINECLASS;
private static readonly string FIRSTLINECLASS = HaWeb.Settings.CSSClasses.FIRSTLINECLASS;
private static readonly string ZHBREAKCLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS;
private static readonly string LINELINECLASS = HaWeb.Settings.CSSClasses.LINELINECLASS;
private static readonly string LINEINDENTCLASS = HaWeb.Settings.CSSClasses.LINEINDENTCLASS;
private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS;
private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHPAGECLASS;
private static readonly string ZHLINECOUNTCLASS = HaWeb.Settings.CSSClasses.ZHLINECOUNTCLASS;
private static readonly string FIRSTPAGECLASS = HaWeb.Settings.CSSClasses.FIRSTPAGECLASS;
private static readonly string EMPTYLINECLASS = HaWeb.Settings.CSSClasses.EMPTYLINECLASS;
private static readonly string HIDDENZHLINECOUNT = HaWeb.Settings.CSSClasses.HIDDENZHLINECOUNT;
// Root-Elemente
private static readonly string COMMENTCLASS = HaWeb.Settings.CSSClasses.COMMENTCLASS;
@@ -155,14 +159,90 @@ public class LetterRules
})};
public static readonly TagFuncList STagRules = new TagFuncList() {
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
( (x, _) => x.Name == "page", (sb, tag, reader) => reader.State.currpage = tag["index"] ),
( (x, _) => x.Name == "line", (sb, tag, reader) => {
// This is the beginning of the Text, so no <br> needed, just a special linecount
if(reader.State.currline == "-1") {
reader.State.currline = tag["index"];
// First Linecount
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + FIRSTLINECLASS, ""));
if(reader.State.Meta.ZH != null) {
sb.Append("ZH&nbsp;");
sb.Append(HaWeb.HTMLHelpers.ConversionHelpers.ToRoman(Int32.Parse(reader.State.Meta.ZH.Volume)));
sb.Append("&nbsp;");
}
sb.Append("S." + "&nbsp;");
if (tag["index"] != "1")
sb.Append(reader.State.currpage + "&thinsp;/&thinsp;" + tag["index"]);
else
sb.Append(reader.State.currpage);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
// This is NOT the beginning of the text, so we set a br, and then, linecount
else {
reader.State.currline = tag["index"];
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
// Linecount
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
// Fall 1: Neue Seite
if (reader.State.currline == "1") {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
sb.Append("S.&nbsp;" + 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, ZHLINECLASS, ""));
sb.Append(tag["index"]);
}
// Fall 3: Neue Zeile, nicht teilbar durch 5, deswegen versteckt
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECLASS + " " + HIDDENZHLINECOUNT, ""));
sb.Append(tag["index"]);
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
// Marginalien
if(reader.State.Marginals != null) {
var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline);
if (margs != null && margs.Any())
{
margs = margs.OrderBy(x => Int32.Parse(x.Index));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS));
foreach (var marginal in margs)
{
// In Marginal, the Root-Element (<marginal>) 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<HaWeb.Settings.ParsingState.LetterState>(reader.State, rd, sb, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules);
new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false);
rd.Read();
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
}
// Line type=line
if(tag["type"] == "line") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINELINECLASS));
} ),
( ( x, _) => x.Name == "line" && !String.IsNullOrWhiteSpace(x["tab"]), (sb, tag, _) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
})};
// Line tab=
if(!String.IsNullOrWhiteSpace(tag["tab"])) {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
}
)};
public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() {
( ( _, _) => true, ( sb, txt, reader) => {
@@ -171,64 +251,4 @@ public class LetterRules
else
reader.State.active_skipwhitespace = !reader.State.active_skipwhitespace;
})};
// Rules for the left sidebar
public static readonly TagFuncList STagRulesLineCount = new TagFuncList() {
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1") {
if (reader.State.currpage == reader.State.oldpage)
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.currpage + "-" + reader.State.currline));
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.oldpage + "-" + reader.State.currline));
reader.State.oldpage = reader.State.currpage;
}
}
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + FIRSTPAGECLASS, reader.State.currpage + "-" + tag["index"]));
sb.Append("S." + "&nbsp;");
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
if (tag["index"] != "1")
sb.Append(reader.State.currpage + "&thinsp;/&thinsp;" + tag["index"]);
else
sb.Append(reader.State.currpage);
reader.State.oldpage = reader.State.currpage;
}
}),
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1" && Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0)
sb.Append(tag["index"]);
}),
( ( x, reader) => x.Name == "line" && x["index"] == "1" && reader.State.currline != "-1", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
sb.Append("S. " + reader.State.currpage);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "line", (sb, tag, reader) => { reader.State.currline = tag["index"]; } ),
( ( x, _) => x.Name == "page", (sb, tag, reader) => { reader.State.currpage = tag["index"]; } )
};
// Rules for the right sidebar
public static readonly TagFuncList STagRulesMarginals = new TagFuncList() {
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1" && reader.State.Marginals != null) {
var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline);
if (margs != null && margs.Any())
{
margs = margs.OrderBy(x => Int32.Parse(x.Index));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS, reader.State.commid.ToString()));
foreach (var marginal in margs)
{
var rd = reader.State.ReaderService.RequestStringReader(marginal.Element);
new HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.LetterState>(reader.State, rd, sb, LetterRules.OTagRules, null, LetterRules.CTagRules, LetterRules.TextRules, LetterRules.WhitespaceRules);
new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false);
rd.Read();
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br"));
}
else
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", EMPTYLINECLASS));
}
reader.State.commid++;
})};
}

View File

@@ -47,9 +47,11 @@ public static class TraditionRules
private static readonly string ZHBREAKCLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS;
private static readonly string LINELINECLASS = HaWeb.Settings.CSSClasses.LINELINECLASS;
private static readonly string LINEINDENTCLASS = HaWeb.Settings.CSSClasses.LINEINDENTCLASS;
private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHBREAKCLASS;
private static readonly string ZHPAGECLASS = HaWeb.Settings.CSSClasses.ZHPAGECLASS;
private static readonly string ZHLINECOUNTCLASS = HaWeb.Settings.CSSClasses.ZHLINECOUNTCLASS;
private static readonly string FIRSTPAGECLASS = HaWeb.Settings.CSSClasses.FIRSTPAGECLASS;
private static readonly string EMPTYLINECLASS = HaWeb.Settings.CSSClasses.EMPTYLINECLASS;
private static readonly string HIDDENZHLINECOUNT = HaWeb.Settings.CSSClasses.HIDDENZHLINECOUNT;
// Root-Elemente
private static readonly string COMMENTCLASS = HaWeb.Settings.CSSClasses.COMMENTCLASS;
@@ -160,14 +162,82 @@ public static class TraditionRules
})};
public static readonly TagFuncList STagRules = new TagFuncList() {
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
( (x, _) => x.Name == "page", (sb, tag, reader) => reader.State.currpage = tag["index"] ),
( (x, _) => x.Name == "line", (sb, tag, reader) => {
// This is the beginning of the Text, so no <br> needed, just a special linecount
if(reader.State.currline == "-1") {
reader.State.currline = tag["index"];
// First Linecount
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
sb.Append("S." + "&nbsp;");
if (tag["index"] != "1")
sb.Append(reader.State.currpage + "&thinsp;/&thinsp;" + tag["index"]);
else
sb.Append(reader.State.currpage);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
// This is NOT the beginning of the text, so we set a br, and then, linecount
else {
reader.State.currline = tag["index"];
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", ZHBREAKCLASS));
// Linecount
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHLINECOUNTCLASS, reader.State.currpage + "-" + reader.State.currline));
// Fall 1: Neue Seite
if (reader.State.currline == "1") {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
sb.Append("S.&nbsp;" + 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, ZHPAGECLASS, ""));
sb.Append(tag["index"]);
}
// Fall 3: Neue Zeile, nicht teilbar durch 5, deswegen versteckt
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + HIDDENZHLINECOUNT, ""));
sb.Append(tag["index"]);
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
// Marginalien
if(reader.State.Marginals != null) {
var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline);
if (margs != null && margs.Any())
{
margs = margs.OrderBy(x => Int32.Parse(x.Index));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS));
foreach (var marginal in margs)
{
// In Marginal, the Root-Element (<marginal>) 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<HaWeb.Settings.ParsingState.TraditionState>(reader.State, rd, sb, TraditionRules.OTagRules, null, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules);
new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false);
rd.Read();
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
}
// Line type=line
if(tag["type"] == "line") sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINELINECLASS));
} ),
( ( x, _) => x.Name == "line" && !String.IsNullOrWhiteSpace(x["tab"]), (sb, tag, _) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
})};
// Line tab=
if(!String.IsNullOrWhiteSpace(tag["tab"])) {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, LINEINDENTCLASS + tag["tab"]));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
}
)};
public static readonly WhitespaceFuncList WhitespaceRules = new WhitespaceFuncList() {
( ( _, _) => true, ( sb, txt, reader) => {
@@ -178,67 +248,8 @@ public static class TraditionRules
})};
// Rules for the left sidebar
public static readonly TagFuncList STagRulesLineCount = new TagFuncList() {
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1") {
if (reader.State.currpage == reader.State.oldpage)
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.currpage + "-" + reader.State.currline));
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", "", reader.State.oldpage + "-" + reader.State.currline));
reader.State.oldpage = reader.State.currpage;
}
}
else {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS + " " + FIRSTPAGECLASS, reader.State.currpage + "-" + tag["index"]));
sb.Append("S." + "&nbsp;");
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
if (tag["index"] != "1")
sb.Append(reader.State.currpage + "&thinsp;/&thinsp;" + tag["index"]);
else
sb.Append(reader.State.currpage);
reader.State.oldpage = reader.State.currpage;
}
}),
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1" && Int32.TryParse(tag["index"], out var _) && Int32.Parse(tag["index"]) % 5 == 0)
sb.Append(tag["index"]);
}),
( ( x, reader) => x.Name == "line" && x["index"] == "1" && reader.State.currline != "-1", (sb, tag, reader) => {
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, ZHPAGECLASS, ""));
sb.Append("S. " + reader.State.currpage);
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}),
( ( x, _) => x.Name == "line", (sb, tag, reader) => { reader.State.currline = tag["index"]; } ),
( ( x, _) => x.Name == "page", (sb, tag, reader) => { reader.State.currpage = tag["index"]; } )
};
// Rules for the right sidebar
public static readonly TagFuncList STagRulesMarginals = new TagFuncList() {
( ( x, _) => x.Name == "line", (sb, tag, reader) => {
if(reader.State.currline != "-1" && reader.State.Marginals != null) {
var margs = reader.State.Marginals.Where(x => x.Page == reader.State.currpage && x.Line == reader.State.currline);
if (margs != null && margs.Any())
{
margs = margs.OrderBy(x => Int32.Parse(x.Index));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, MARGINGALBOXCLASS, reader.State.commid.ToString()));
foreach (var marginal in margs)
{
var rd = reader.State.ReaderService.RequestStringReader(marginal.Element);
new HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>(reader.State, rd, sb, TraditionRules.OTagRules, null, TraditionRules.CTagRules, TraditionRules.TextRules, TraditionRules.WhitespaceRules);
new HaWeb.HTMLHelpers.LinkHelper(reader.State.Lib, rd, sb, false);
rd.Read();
}
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br"));
}
else
sb.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", EMPTYLINECLASS));
}
reader.State.commid++;
})};
public static readonly TagFuncList OTagRulesInitial = new TagFuncList() {
( ( x, _) => x.Name == "app", (sb, tag, reader) => {
if (!reader.State.active_firstedit)
@@ -247,29 +258,14 @@ public static class TraditionRules
reader.State.active_firstedit = false;
}),
( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => {
reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "row zhtext"));
reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "trad-text col order-2 letterbox"));
reader.State.sb_trad_left = new StringBuilder();
reader.State.sb_trad_right = new StringBuilder();
reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, TRADZHTEXTCLASS));
reader.State.currline = "-1";
reader.State.currpage = "";
reader.State.active_trad = true;
reader.State.sb_trad_left.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "trad-linecount countbox nnumber d-none d-lg-block order-1"));
reader.State.sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, "commentColumn trad-comm col-4 d-none d-lg-block order-3"));
reader.State.sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateElement("br", EMPTYLINECLASS));
if (reader.State.rd_tradition != null) {
new HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>(reader.State, reader.State.rd_tradition, reader.State.sb_trad_left, null, TraditionRules.STagRulesLineCount);
new HaWeb.HTMLParser.XMLHelper<HaWeb.Settings.ParsingState.TraditionState>(reader.State, reader.State.rd_tradition, reader.State.sb_trad_right, null, TraditionRules.STagRulesMarginals);
}
})};
public static readonly TagFuncList CTagRulesInitial = new TagFuncList() {
( ( x, _) => x.Name == "ZHText", (sb, tag, reader) => {
reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.sb_trad_left.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.sb_trad_right.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.sb_tradition.Append(reader.State.sb_trad_left.ToString());
reader.State.sb_tradition.Append(reader.State.sb_trad_right.ToString());
reader.State.sb_tradition.Append(HaWeb.HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
reader.State.active_trad = false;
})};

View File

@@ -1,6 +1,19 @@
namespace HaWeb.Settings.ParsingState;
using System.Text;
public enum CommentType {
Comment,
Subcomment
}
public class CommentState : HaWeb.HTMLParser.IState {
internal string Category;
internal CommentType Type;
public CommentState(string category, CommentType type) {
this.Category = category;
this.Type = type;
}
public void SetupState() { }
}

View File

@@ -22,13 +22,9 @@ public class LetterState : HaWeb.HTMLParser.IState {
internal bool active_skipwhitespace;
internal string currline;
internal string currpage;
internal string oldpage;
internal int commid;
// Parsing-Combinations
internal StringBuilder sb_lettertext; // Hauptext
internal StringBuilder sb_linecount; // Linke Spalte (Zeilenzählung)
internal StringBuilder sb_marginals; // Rechte Spalte (Kommentare)
internal StringBuilder sb_lettertext;
public LetterState(ILibrary lib, IReaderService readerService, Meta meta, IEnumerable<Marginal>? marginals) {
@@ -43,14 +39,9 @@ public class LetterState : HaWeb.HTMLParser.IState {
public void SetupState() {
sb_lettertext = new StringBuilder();
sb_linecount = new StringBuilder();
sb_marginals = new StringBuilder();
active_skipwhitespace = true;
currline = "-1";
currpage = "";
oldpage = "";
commid = 1;
// Initialize State
if (Meta.ZH != null) {

View File

@@ -17,14 +17,10 @@ public class TraditionState : HaWeb.HTMLParser.IState {
internal bool active_firstedit;
internal string currline;
internal string currpage;
internal string oldpage;
internal int commid;
internal bool active_trad;
internal StringBuilder sb_tradition; // Überlieferung
internal StringBuilder sb_trad_zhtext; // Überlieferung, ZHText
internal StringBuilder sb_trad_left; // Überlieferung ZHText linke Spalte (zeilenzählung)
internal StringBuilder sb_trad_right; // Überlieferung ZHText rechte Spalte (Kommentare)
internal IReader rd_tradition;
@@ -39,8 +35,6 @@ public class TraditionState : HaWeb.HTMLParser.IState {
public void SetupState() {
sb_tradition = new StringBuilder();
sb_trad_zhtext = new StringBuilder();
sb_trad_left = new StringBuilder();
sb_trad_right = new StringBuilder();
active_trad = false;
active_del = false;
@@ -48,7 +42,5 @@ public class TraditionState : HaWeb.HTMLParser.IState {
active_firstedit = true;
currline = "-1";
currpage = "";
oldpage = "";
commid = 1;
}
}