diff --git a/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Language.kt b/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Language.kt
index 17adc70..ea09852 100644
--- a/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Language.kt
+++ b/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Language.kt
@@ -6,8 +6,8 @@ import space.kscience.dataforge.data.*
import space.kscience.dataforge.meta.*
import space.kscience.dataforge.names.*
import space.kscience.snark.SnarkBuilder
-import space.kscience.snark.html.Language.Companion.SITE_LANGUAGES_KEY
import space.kscience.snark.html.Language.Companion.SITE_LANGUAGE_KEY
+import space.kscience.snark.html.Language.Companion.SITE_LANGUAGE_MAP_KEY
import kotlin.reflect.typeOf
@@ -45,7 +45,7 @@ public class Language : Scheme() {
public val SITE_LANGUAGE_KEY: Name = SiteContext.SITE_META_KEY + LANGUAGE_KEY
- public val SITE_LANGUAGES_KEY: Name = SiteContext.SITE_META_KEY + LANGUAGE_MAP_KEY
+ public val SITE_LANGUAGE_MAP_KEY: Name = SiteContext.SITE_META_KEY + LANGUAGE_MAP_KEY
public const val DEFAULT_LANGUAGE: String = "en"
@@ -75,14 +75,16 @@ public class Language : Scheme() {
public fun Language(prefix: String): Language = Language { this.prefix = prefix }
-public val SiteContext.languages: Map
- get() = siteMeta[SITE_LANGUAGES_KEY]?.items?.mapKeys { it.key.toStringUnescaped() } ?: emptyMap()
+public val SiteContext.languageMap: Map
+ get() = siteMeta[SITE_LANGUAGE_MAP_KEY]?.items?.map {
+ it.key.toStringUnescaped() to Language.read(it.value)
+ }?.toMap() ?: emptyMap()
public val SiteContext.language: String
get() = siteMeta[SITE_LANGUAGE_KEY].string ?: Language.DEFAULT_LANGUAGE
-//
-//public val SiteContext.languagePrefix: Name
-// get() = languages[language]?.let { it[Language::prefix.name].string ?: language }?.parseAsName() ?: Name.EMPTY
+
+public val SiteContext.languagePrefix: Name
+ get() = languageMap[language]?.let { it.prefix ?: language }?.parseAsName() ?: Name.EMPTY
private class LanguageBranchAction(val prefix: Name) : AbstractAction(typeOf()) {
@@ -127,7 +129,7 @@ public fun SiteContext.multiLanguageSite(
val prefix = language.prefix ?: languageKey
val languageSiteMeta = Meta {
SITE_LANGUAGE_KEY put languageKey
- SITE_LANGUAGES_KEY put Meta {
+ SITE_LANGUAGE_MAP_KEY put Meta {
languageMap.forEach {
it.key put it.value
}
@@ -151,11 +153,11 @@ public val PageContext.language: String
/**
* Mapping of language keys to other language versions of this page
*/
-public fun PageContext.getLanguageMap(): Map =
- pageMeta[Language.LANGUAGE_MAP_KEY]?.items?.mapKeys { it.key.toStringUnescaped() } ?: emptyMap()
+public val PageContext.languageMap: Map
+ get() = pageMeta[Language.LANGUAGE_MAP_KEY]?.items?.mapKeys { it.key.toStringUnescaped() } ?: emptyMap()
public fun PageContext.localisedPageRef(pageName: Name, relative: Boolean = false): String {
- val prefix = getLanguageMap()[language]?.get(Language::prefix.name)?.string?.parseAsName() ?: Name.EMPTY
+ val prefix = languageMap[language]?.get(Language::prefix.name)?.string?.parseAsName() ?: Name.EMPTY
return resolvePageRef(prefix + pageName, relative)
}
diff --git a/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Postprocessor.kt b/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Postprocessor.kt
index 7c23d6a..c77c61f 100644
--- a/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Postprocessor.kt
+++ b/snark-html/src/jvmMain/kotlin/space/kscience/snark/html/Postprocessor.kt
@@ -77,9 +77,12 @@ public class Postprocessor(
}
context(PageContext)
-public inline fun FlowContent.postprocess(block: FlowContent.() -> Unit) {
+public inline fun FlowContent.postprocess(
+ processor: TextProcessor = WebPageTextProcessor(page),
+ block: FlowContent.() -> Unit,
+) {
val fc = object : FlowContent by this {
- override val consumer: TagConsumer<*> = Postprocessor(page, this@postprocess.consumer)
+ override val consumer: TagConsumer<*> = Postprocessor(page, this@postprocess.consumer, processor)
}
fc.block()
}
\ No newline at end of file
diff --git a/snark-ktor/src/jvmMain/kotlin/space/kscience/snark/ktor/KtorSiteContext.kt b/snark-ktor/src/jvmMain/kotlin/space/kscience/snark/ktor/KtorSiteContext.kt
index c0f8d4d..cad02fb 100644
--- a/snark-ktor/src/jvmMain/kotlin/space/kscience/snark/ktor/KtorSiteContext.kt
+++ b/snark-ktor/src/jvmMain/kotlin/space/kscience/snark/ktor/KtorSiteContext.kt
@@ -121,8 +121,11 @@ public class KtorSiteContext(
"name" put route.toString()
"url" put url.buildString()
}
- val pageContext =
- KtorPageContext(this@KtorSiteContext, url.buildString(), Laminate(modifiedPageMeta, siteMeta))
+ val pageContext = KtorPageContext(
+ site = this@KtorSiteContext,
+ pageBaseUrl = url.buildString(),
+ pageMeta = Laminate(modifiedPageMeta, siteMeta)
+ )
//render page in suspend environment
val html = HtmlPage.createHtmlString(pageContext, data, content)
@@ -157,7 +160,7 @@ public class KtorSiteContext(
route = Name.EMPTY,
ktorRoute = ktorRoute.createRouteFromPath(route.toWebPath())
),
- data?: DataTree.EMPTY
+ data ?: DataTree.EMPTY
)
with(content) {
with(siteContext) {
@@ -177,7 +180,7 @@ public fun Route.site(
) {
val siteContext = SiteContextWithData(
KtorSiteContext(context, siteMeta, baseUrl, route = Name.EMPTY, this@Route),
- data?: DataTree.EMPTY
+ data ?: DataTree.EMPTY
)
with(content) {
with(siteContext) {