///|
pub fn ThemeDocument::to_yaml(self : ThemeDocument) -> String {
let document = self.sorted()
if document.tokens.length() == 0 {
return "tokens: []\n"
}
let builder = StringBuilder::new()
builder.write_string("tokens:\n")
for token in document.tokens {
builder.write_string(" - path: ")
builder.write_string(yaml_quote(token.path.canonical()))
builder.write_string("\n kind: ")
builder.write_string(token_kind_name(token.kind))
builder.write_string("\n value: ")
builder.write_string(theme_value_yaml(token.value))
builder.write_string("\n")
if token.description != "" {
builder.write_string(" description: ")
builder.write_string(yaml_quote(token.description))
builder.write_string("\n")
}
}
builder.to_string()
}
///|
fn theme_value_yaml(value : ThemeValue) -> String {
match value {
ColorValue(text) => text
NumberValue(number) => number.to_string()
TextValue(text) => yaml_quote(text)
BooleanValue(flag) => if flag { "true" } else { "false" }
}
}
///|
fn yaml_quote(text : String) -> String {
"'" + text.replace(old="'", new="''") + "'"
}
///|
fn token_kind_name(kind : TokenKind) -> String {
match kind {
Color => "color"
Number => "number"
Text => "text"
Boolean => "boolean"
}
}