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 000000000..3d2c88575 Binary files /dev/null and b/tests/ref/raw-theme-set-to-auto.png differ 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. //