typst-web-template/lib/html_utils.typ
Jean-Marie 'Histausse' Mineau 3be22c5654
add support for pygame scripts
2026-06-07 15:57:09 +02:00

50 lines
1.3 KiB
Typst

#import "./figures.typ": show-rule-figure
#import "./code.typ": show-rule-code-block
#let css-list = state("css-list", ())
#let js-list = state("js-list", ())
#let additionnal-head-tags = state("additionnal-head-tags", ())
/// Add string `css` to `css-list` if not already present
#let add-css(css) = context {
css-list.update(x => if css in x { x } else { x + (css,) })
}
/// Add string `js` to `js-list` if not already present
#let add-js(js) = context {
js-list.update(x => if js in x { x } else { x + (js,) })
}
/// Add additionnal html tag to insert in <head>
#let add-tag-in-head(tag) = context {
additionnal-head-tags.update(x => if tag in x { x } else { x + (tag, ) })
}
/// Concatenate all css found in css-list at the end of the document
#let get-css() = context {
css-list.final().join("\n\n")
}
/// Concatenate all js found in js-list at the end of the document
#let get-js() = context {
js-list.final().join("\n\n")
}
#let html-show(body) = {
show raw: it => {
if it.lang == "raw-css" {
// remove code and add it to css style
add-css(it.text)
} else if it.lang == "raw-js" {
// remove code and add it to css style
add-js(it.text)
} else if it.block {
// wrap <pre><code> inside a <code-block>
show-rule-code-block(it)
} else {
it
}
}
show figure: show-rule-figure
body
}