macro_rules! theme {
($($tt:tt)*) => { ... };
}
Expand description
Convenience macro for constructing new Theme
s.
Currently, the macro is very strict about the input’s structure. See the example
below to learn more. Also note that for extended values, either
color
or link
must be set, or
any call to resolve_links
will fail.
See the documentation for Theme
and ResolvedTheme
for more information on themes.
§Example
use std::collections::BTreeMap;
use syntastica_core::{
theme,
theme::{Theme, ThemeValue},
};
let theme = theme! {
// specify colors using hex literals
"purple": "#c678dd",
"blue": "#61afef",
"green": "#98c379",
// link to other keys using a `$` sign
"keyword": "$purple",
"function": "$blue",
// specify more styling options in curly braces
// (note that currently this order required by the macro)
"string": {
color: None, // either `None` or `"#<color>"`
bg: None, // either `None` or `"#<color>"`
underline: false,
strikethrough: false,
italic: true,
bold: false,
link: "green", // either `None` or `"<key>"`
},
};
assert_eq!(theme, Theme::new(BTreeMap::from([
("purple".to_owned(), ThemeValue::Simple("#c678dd".to_owned())),
("blue".to_owned(), ThemeValue::Simple("#61afef".to_owned())),
("green".to_owned(), ThemeValue::Simple("#98c379".to_owned())),
("keyword".to_owned(), ThemeValue::Simple("$purple".to_owned())),
("function".to_owned(), ThemeValue::Simple("$blue".to_owned())),
("string".to_owned(), ThemeValue::Extended {
color: None,
bg: None,
underline: false,
strikethrough: false,
italic: true,
bold: false,
link: Some("green".to_owned()),
}),
])));