///|
pub fn ThemeDocument::to_tailwind(self : ThemeDocument) -> String {
  let document = self.sorted()
  let colors : Array[String] = []
  let sizes : Array[String] = []
  for token in document.tokens {
    let name = token.path.canonical().replace(old=".", new="-")
    match token.value {
      ColorValue(value) =>
        colors.push(
          "    \"" + json_escape(name) + "\": \"" + json_escape(value) + "\"",
        )
      NumberValue(value) =>
        sizes.push(
          "    \"" + json_escape(name) + "\": \"" + value.to_string() + "px\"",
        )
      _ => ()
    }
  }
  let builder = StringBuilder::new()
  builder.write_string("{\n  \"theme\": {\n    \"extend\": {")
  if colors.length() > 0 {
    builder.write_string("\n      \"colors\": {\n")
    builder.write_string(colors.join(",\n"))
    builder.write_string("\n      }")
  }
  if sizes.length() > 0 {
    if colors.length() > 0 {
      builder.write_string(",")
    }
    builder.write_string("\n      \"fontSize\": {\n")
    builder.write_string(sizes.join(",\n"))
    builder.write_string("\n      }")
  }
  builder.write_string("\n    }\n  }\n}\n")
  builder.to_string()
}