namespace HaWeb.HTMLHelpers;
using HaDocument.Interfaces;
using HaXMLReader.Interfaces;
using HaXMLReader.EvArgs;
using HaDocument.Models;
using HaWeb.Settings.ParsingRules;
using HaWeb.Settings.ParsingState;
using System.Text;
public static class CommentHelpers {
private static readonly string DEFAULTELEMENT = HaWeb.Settings.HTML.DEFAULTELEMENT;
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 BACKLINKSHKBCLASS = HaWeb.Settings.CSSClasses.BACKLINKSHKBCLASS;
public static string CreateHTML(ILibrary lib, IReaderService readerService, Comment comment, string category, CommentType type, bool generateBacklinks = true) {
var sb = new StringBuilder();
var rd = readerService.RequestStringReader(comment.Lemma);
var commentState = new CommentState(category, type);
new HTMLParser.XMLHelper(commentState, rd, sb, CommentRules.OTagRules, CommentRules.STagRules, CommentRules.CTagRules, CommentRules.TextRules, CommentRules.WhitespaceRules);
sb.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, COMMENTHEADCLASS, comment.Index));
new HTMLHelpers.LinkHelper(lib, rd, sb);
rd.Read();
var backlinks = lib.Backlinks.ContainsKey(comment.Index) ? lib.Backlinks[comment.Index]
.Where(x => lib.Metas.ContainsKey(x.Letter))
.OrderBy(x => lib.Metas[x.Letter].Sort)
.ThenBy(x => lib.Metas[x.Letter].Order) : null;
if (backlinks != null && generateBacklinks) {
sb.Append(HTMLHelpers.TagHelpers.CreateElement(DEFAULTELEMENT, BACKLINKSCLASS));
var arrow = false;
foreach (var blk in backlinks) {
var let = lib.Metas.ContainsKey(blk.Letter) ? lib.Metas[blk.Letter] : null;
if (let != null) {
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, "/HKB/Briefe/" + let.ID + "#" + blk.Page + "-" + blk.Line));
var linkstring = string.Empty;
var pglnstring = string.Empty;
linkstring += let.ID;
pglnstring += " ( " + blk.Page + "/" + blk.Line + " )";
linkstring += pglnstring;
sb.Append(linkstring);
if (blk != backlinks.Last())
sb.Append(", ");
sb.Append(HTMLHelpers.TagHelpers.CreateEndElement("a"));
}
}
sb.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
}
sb.Append(HTMLHelpers.TagHelpers.CreateEndElement(DEFAULTELEMENT));
rd = readerService.RequestStringReader(comment.Element);
new HTMLParser.XMLHelper(commentState, rd, sb, CommentRules.OTagRules, CommentRules.STagRules, CommentRules.CTagRules, CommentRules.TextRules, CommentRules.WhitespaceRules);
new HTMLHelpers.LinkHelper(lib, rd, sb);
rd.Read();
return sb.ToString();
}
}