grammar TomlRB::Document include TomlRB::Primitive include TomlRB::Arrays rule document (comment | table_array | table | keyvalue | line_break)* end rule table_array (space? '[[' stripped_key ']]' comment?) end rule table (space? '[' stripped_key ']' comment?) end rule keyvalue (stripped_key '=' space? v:(toml_values) comment? space) end rule inline_table (space? '{' (keyvalue? (',' keyvalue)*)? space? '}' ) end rule inline_table_array (inline_table (space "," array_comments inline_table)*) { captures[:inline_table].map(&:value).map(&:value) } end rule array ("[" array_comments (array_elements)? space ","? array_comments "]" indent?) end rule array_elements inline_table_array | float_array | string_array | array_array | integer_array | datetime_array | bool_array end rule array_array (array (space "," array_comments array)*) { captures[:array].map(&:value) } end rule toml_values primitive | inline_table | array | inline_table_array end rule stripped_key (space? key space?) { captures[:key].first.value } end end