From 374b82f8cad0d36d36c549a0295b8d14b093c3f9 Mon Sep 17 00:00:00 2001 From: Yip Coekjan <69834864+Coekjan@users.noreply.github.com> Date: Sat, 25 May 2024 07:14:56 +0800 Subject: [PATCH] Set default value of `raw.theme` to `auto`, and allow setting `raw.theme` to `auto` (#4186) --- crates/typst/src/text/raw.rs | 19 +++++++++++++------ tests/ref/raw-theme-set-to-auto.png | Bin 0 -> 3221 bytes tests/suite/text/raw.typ | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 tests/ref/raw-theme-set-to-auto.png diff --git a/crates/typst/src/text/raw.rs b/crates/typst/src/text/raw.rs index 1aa69fbfc..0493c080d 100644 --- a/crates/typst/src/text/raw.rs +++ b/crates/typst/src/text/raw.rs @@ -233,10 +233,10 @@ pub struct RawElem { /// ```` #[parse( let (theme_path, theme_data) = parse_theme(engine, args)?; - theme_path.map(Some) + theme_path )] #[borrowed] - pub theme: Option, + pub theme: Smart, /// The raw file buffer of syntax theme file. #[internal] @@ -321,7 +321,7 @@ impl Packed { .unwrap() }); - let theme = theme.as_deref().unwrap_or(&RAW_THEME); + let theme = theme.as_ref().map(std::ops::Deref::deref).unwrap_or(&RAW_THEME); let foreground = theme.settings.foreground.unwrap_or(synt::Color::BLACK); let mut seq = vec![]; @@ -784,12 +784,19 @@ fn load_theme(path: &str, bytes: &Bytes) -> StrResult> { fn parse_theme( engine: &mut Engine, args: &mut Args, -) -> SourceResult<(Option, Option)> { - let Some(Spanned { v: path, span }) = args.named::>("theme")? +) -> SourceResult<(Option>, Option)> { + let Some(Spanned { v: path, span }) = + args.named::>>("theme")? else { + // Argument `theme` not found. return Ok((None, None)); }; + let Smart::Custom(path) = path else { + // Argument `theme` is `auto`. + return Ok((Some(Smart::Auto), None)); + }; + // Load theme file. let id = span.resolve_path(&path).at(span)?; let data = engine.world.file(id).at(span)?; @@ -797,7 +804,7 @@ fn parse_theme( // Check that parsing works. let _ = load_theme(&path, &data).at(span)?; - Ok((Some(path), Some(data))) + Ok((Some(Smart::Custom(path)), Some(data))) } /// The syntect syntax definitions. diff --git a/tests/ref/raw-theme-set-to-auto.png b/tests/ref/raw-theme-set-to-auto.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2c8857574ec4c82c415d8ef72f8e63129faf56 GIT binary patch literal 3221 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 Hu0mjf#Q`|( literal 0 HcmV?d00001 diff --git a/tests/suite/text/raw.typ b/tests/suite/text/raw.typ index 6a3ea6bd7..8ced276c6 100644 --- a/tests/suite/text/raw.typ +++ b/tests/suite/text/raw.typ @@ -633,6 +633,21 @@ fn main() { `code` ``` +--- raw-theme-set-to-auto --- +```typ +#let hi = "Hello World" +``` + +#set raw(theme: "/assets/themes/halcyon.tmTheme") +```typ +#let hi = "Hello World" +``` + +#set raw(theme: auto) +```typ +#let hi = "Hello World" +``` + --- raw-unclosed --- // Test unterminated raw text. //