{} with key val pairs
[] with list items
bare, "quoted",
'raw'
# to end of line
toplevel = [ BOM ] _ [ pairs ] _ EOF
value = map | list | string
map = '{' _ [ pairs ] _ '}' # keys are ordered, no duplicates
pairs = pair { PAIRSEP _ pair }
pair = string [ HSPACE ] value [ HSPACE ] [ COMMENT ]
list = '[' _ [ items ] _ ']'
items = value { _ [ ';' ] _ value }
string = QSTRING | QRSTRING | BARE
QSTRING = '"' { QCHAR } '"'
QCHAR = /[^"\\]/ | QESCAPE
QESCAPE = '\' ( /[rnt\\"0]/ | /\r?\n/ | 'u{' /[0-9a-fA-F]{1,6}/ '}' )
QRSTRING = "'" /[^']*/ "'"
BARE = /[^\p{White_Space}{}[\]"#';]+/
_ = { WS | COMMENT }
BOM = /\u{FEFF}/
WS = /[\r\n\t ]+/
COMMENT = '#' /[^\n]*/
HSPACE = /[ \t]+/
PAIRSEP = /(\r?\n)+|;/