Compare commits

...

2 Commits

Author SHA1 Message Date
e2ef4b1c5b fix build for documents 2024-09-28 15:56:22 +03:00
3adadd5bd7 fix build for documents 2024-09-28 15:02:58 +03:00
6 changed files with 35 additions and 19 deletions

View File

@ -1,25 +1,23 @@
plugins {
id("space.kscience.gradle.mpp")
application
alias(spclibs.plugins.ktor)
}
val snarkVersion: String by extra
val ktorVersion = space.kscience.gradle.KScienceVersions.ktorVersion
kscience {
jvm{
withJava()
}
useContextReceivers()
useKtor()
jvmMain {
implementation(projects.snarkKtor)
implementation("io.ktor:ktor-server-cio:$ktorVersion")
implementation("io.ktor:ktor-server-cio")
implementation(spclibs.logback.classic)
}
jvmTest{
implementation("io.ktor:ktor-server-tests:$ktorVersion")
jvmTest {
implementation("io.ktor:ktor-server-tests")
}
}
@ -28,7 +26,7 @@ kotlin {
}
application {
mainClass.set("center.sciprog.snark.documents.Mainkt")
mainClass.set("center.sciprog.snark.documents.MainKt")
val isDevelopment: Boolean = project.ext.has("development")
applicationDefaultJvmArgs = listOf("-Dio.ktor.development=$isDevelopment", "-Xmx200M")

View File

@ -14,9 +14,7 @@ Curabitur hendrerit hendrerit rutrum. Nullam elementum libero a nisi viverra ali
Paragraph
$$
\int_a^b {f(x)} = const
$$
$ \int_a^b {f(x)} = const $
### Section ${section(2)}

View File

@ -6,6 +6,7 @@ import io.ktor.server.engine.embeddedServer
import kotlinx.html.ScriptCrossorigin
import kotlinx.html.link
import kotlinx.html.script
import kotlinx.html.unsafe
import space.kscience.snark.html.document.allDocuments
import space.kscience.snark.ktor.snarkApplication
@ -32,6 +33,22 @@ fun Application.renderAllDocuments() = snarkApplication {
crossorigin = ScriptCrossorigin.anonymous
attributes["onload"] = "renderMathInElement(document.body);"
}
script {
unsafe {
+"""
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: '$$', right: '$$', display: true},
{left: '$', right: '$', display: false},
],
throwOnError : false
});
});
""".trimIndent()
}
}
}
)
}

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -1,8 +1,11 @@
package space.kscience.snark.html
import kotlinx.css.html
import kotlinx.html.HTML
import kotlinx.html.stream.createHTML
import kotlinx.html.visitTagAndFinalize
import kotlinx.html.dom.append
import kotlinx.html.dom.document
import kotlinx.html.dom.serialize
import kotlinx.html.html
import space.kscience.dataforge.data.DataSink
import space.kscience.dataforge.data.DataTree
import space.kscience.dataforge.data.wrap
@ -15,20 +18,22 @@ public fun interface HtmlPage {
public fun renderPage()
public companion object {
public fun createHtmlString(
pageContext: PageContext,
dataSet: DataTree<*>?,
page: HtmlPage,
): String = createHTML().run {
HTML(kotlinx.html.emptyMap, this, null).visitTagAndFinalize(this) {
): String = document {
append.html {
with(PageContextWithData(pageContext, dataSet ?: DataTree.EMPTY)) {
with(page) {
renderPage()
}
}
}
}
}.serialize(true)
}
}

View File

@ -9,11 +9,9 @@ import org.intellij.markdown.ast.findChildOfType
import org.intellij.markdown.ast.getTextInNode
import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor
import org.intellij.markdown.flavours.gfm.GFMFlavourDescriptor
import org.intellij.markdown.flavours.space.SFMFlavourDescriptor
import org.intellij.markdown.html.*
import org.intellij.markdown.parser.LinkMap
import org.intellij.markdown.parser.MarkdownParser
import space.kscience.snark.SnarkReader
private class SnarkInlineLinkGeneratingProvider(
baseURI: URI?,