Non-Typst highlighting in documentation

This commit is contained in:
Laurenz 2023-06-30 16:17:52 +02:00
parent 5b4f4c164b
commit d1a7a6dbab
4 changed files with 16 additions and 4 deletions

1
Cargo.lock generated
View File

@ -2495,6 +2495,7 @@ dependencies = [
"pulldown-cmark",
"serde",
"serde_yaml",
"syntect",
"typed-arena",
"typst",
"typst-library",

View File

@ -20,6 +20,7 @@ once_cell = "1"
pulldown-cmark = "0.9"
serde = { version = "1", features = ["derive"] }
serde_yaml = "0.8"
syntect = { version = "5", default-features = false, features = ["parsing", "html", "regex-fancy"] }
typed-arena = "2"
unicode_names2 = "0.6.0"
unscanny = "0.1"

View File

@ -1,7 +1,6 @@
use std::ops::Range;
use comemo::Prehashed;
use md::escape::escape_html;
use pulldown_cmark as md;
use typed_arena::Arena;
use typst::diag::FileResult;
@ -402,11 +401,22 @@ fn code_block(resolver: &dyn Resolver, lang: &str, text: &str) -> Html {
}
}
if !matches!(lang, "example" | "typ") {
if lang.is_empty() {
let mut buf = String::from("<pre>");
escape_html(&mut buf, &display).unwrap();
md::escape::escape_html(&mut buf, &display).unwrap();
buf.push_str("</pre>");
return Html::new(buf);
} else if !matches!(lang, "example" | "typ") {
let set = &*typst_library::text::SYNTAXES;
let buf = syntect::html::highlighted_html_for_string(
&display,
set,
set.find_syntax_by_token(lang)
.unwrap_or_else(|| panic!("unsupported highlighting language: {lang}")),
&typst_library::text::THEME,
)
.expect("failed to highlight code");
return Html::new(buf);
}
let root = typst::syntax::parse(&display);

View File

@ -343,7 +343,7 @@ fn to_syn(RgbaColor { r, g, b, a }: RgbaColor) -> synt::Color {
/// syntaxes/02_Extra/VimHelp.sublime-syntax
/// syntaxes/02_Extra/cmd-help/syntaxes/cmd-help.sublime-syntax
/// ```
static SYNTAXES: Lazy<syntect::parsing::SyntaxSet> =
pub static SYNTAXES: Lazy<syntect::parsing::SyntaxSet> =
Lazy::new(|| syntect::dumps::from_binary(include_bytes!("../../assets/syntect.bin")));
/// The default theme used for syntax highlighting.