From: LaniusTrolling Date: Sun, 18 May 2025 18:58:08 +0000 (-0400) Subject: Re-add page-top anchor to factbook pages X-Git-Url: https://gitweb.starshipfights.net/?a=commitdiff_plain;h=HEAD;p=factbooks Re-add page-top anchor to factbook pages --- diff --git a/src/main/kotlin/info/mechyrdia/lore/ParserHtml.kt b/src/main/kotlin/info/mechyrdia/lore/ParserHtml.kt index c066afb..d064536 100644 --- a/src/main/kotlin/info/mechyrdia/lore/ParserHtml.kt +++ b/src/main/kotlin/info/mechyrdia/lore/ParserHtml.kt @@ -282,14 +282,14 @@ class HtmlTagLexerTag( val NON_ANCHOR_CHAR = Regex("[^a-zA-Z\\d\\-]+") fun String.sanitizeAnchor() = replace(NON_ANCHOR_CHAR, "-") -class HtmlHeaderLexerTag(val tagCreator: TagCreator, val anchor: (String) -> String?) : HtmlLexerTag { +class HtmlHeaderLexerTag(val tagCreator: TagCreator, val isRedirectAnchor: Boolean, val id: (String) -> String) : HtmlLexerTag { override fun processTag(env: LexerTagEnvironment, param: String?, subNodes: ParserTree): HtmlBuilderSubject { val content = subNodes.treeToText() - val anchorId = anchor(content) - val anchorHash = anchorId?.let { "#$it" }.orEmpty() + val anchorId = id(content) + val anchorHash = if (isRedirectAnchor) "#$anchorId" else "" return { - anchorId?.let { a { id = it } } + a { id = anchorId } tagCreator { attributes["data-redirect-id"] = anchorHash @@ -416,12 +416,12 @@ enum class FactbookFormattingTag(val type: HtmlLexerTag) { ERROR(HtmlTagLexerTag(attributes = mapOf("style" to "color: #f00"), tagCreator = TagConsumer<*>::div.toTagCreator())), - H1(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h1.toTagCreator()) { null }), - H2(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h2.toTagCreator(), String::sanitizeAnchor)), - H3(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h3.toTagCreator(), String::sanitizeAnchor)), - H4(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h4.toTagCreator(), String::sanitizeAnchor)), - H5(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h5.toTagCreator(), String::sanitizeAnchor)), - H6(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h6.toTagCreator(), String::sanitizeAnchor)), + H1(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h1.toTagCreator(), false) { "page-top" }), + H2(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h2.toTagCreator(), true, String::sanitizeAnchor)), + H3(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h3.toTagCreator(), true, String::sanitizeAnchor)), + H4(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h4.toTagCreator(), true, String::sanitizeAnchor)), + H5(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h5.toTagCreator(), true, String::sanitizeAnchor)), + H6(HtmlHeaderLexerTag(tagCreator = TagConsumer<*>::h6.toTagCreator(), true, String::sanitizeAnchor)), ALIGN(HtmlTagLexerTag(attributes = ::processAlign, tagMode = HtmlTagMode.ITEM, tagCreator = TagConsumer<*>::div.toTagCreator())), ASIDE(HtmlTagLexerTag(attributes = ::processFloat, tagMode = HtmlTagMode.ITEM, tagCreator = TagConsumer<*>::div.toTagCreator())),