indent = ${ (^" "+)? }
newline = ${ "\n" | "\r" }
other = ${ !(pair) ~ ANY }
string_key = _{ "\"" ~ key_str* ~ "\"" }
simple_key = _{ key_str* }
key_str = _{ !(newline | ":" | "\"" | "'") ~ ANY }
simple_value = _{ value_str* }
string_value = _{ ("\"" ~ (!(newline | "\"") ~ ANY)* ~ "\"") | ("'" ~ (!(newline | "'") ~ ANY)* ~ "'") }
value_str = _{ !(newline | "\"" | "'") ~ ANY }
key_part = _{ indent ~ key }
comment = ${ "#" ~ (!(newline) ~ ANY)* }
key = ${ (string_key | simple_key) ~ (":" ~ " "?) }
string = ${ string_value | simple_value }
pair = _{ key_part ~ string }
item = _{ (pair | comment | newline | other)+ }