Set default value of raw.theme to auto, and allow setting raw.theme to auto (#4186)

This commit is contained in:
Yip Coekjan 2024-05-25 07:14:56 +08:00 committed by GitHub
parent ea4c64a799
commit 374b82f8ca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 6 deletions

View File

@ -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<EcoString>,
pub theme: Smart<EcoString>,
/// The raw file buffer of syntax theme file.
#[internal]
@ -321,7 +321,7 @@ impl Packed<RawElem> {
.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<Arc<synt::Theme>> {
fn parse_theme(
engine: &mut Engine,
args: &mut Args,
) -> SourceResult<(Option<EcoString>, Option<Bytes>)> {
let Some(Spanned { v: path, span }) = args.named::<Spanned<EcoString>>("theme")?
) -> SourceResult<(Option<Smart<EcoString>>, Option<Bytes>)> {
let Some(Spanned { v: path, span }) =
args.named::<Spanned<Smart<EcoString>>>("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.

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@ -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.
//