emancu/toml-rb

View on GitHub
lib/toml-rb/grammars/document.citrus

Summary

Maintainability
Test Coverage
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?) <TomlRB::TableArrayParser>
  end

  rule table
    (space? '[' stripped_key ']' comment?) <TomlRB::TableParser>
  end

  rule keyvalue
    (stripped_key '=' space? v:(toml_values) comment? space) <TomlRB::KeyvalueParser>
  end

  rule inline_table
    (space? '{' (keyvalue? (',' keyvalue)*)? space? '}' ) <TomlRB::InlineTableParser>
  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?) <TomlRB::ArrayParser>
  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