1.0.0 • Published 8 years ago

matango v1.0.0

Weekly downloads
5
License
MIT
Repository
github
Last release
8 years ago

Matango

Minimalistic format for expressing key-value pairs.

Matango is a simple format for expressing lists of key-value pairs. It is easy for humans to read and write. It is easy for machines to parse and generate.

Matango is text format similar to a line of CSV, but has some more restrictions and extensions to it.

Matango is not a general purpose data exchange format like JSON or YAML. Rather it aims to only express a list of simple key-value pairs and to be embedded in other languages like HTML, YAML, JSON or any other custom DSLs.

Example

A typical matango line looks like the below.

foo,bar,baz=quux,hello=Matango!

This parses to something like (in JSON format):

[
  {
    "key": "foo",
    "value": null
  },
  {
    "key": "bar",
    "value": null
  },
  {
    "key": "baz",
    "value": "quux"
  },
  {
    "key": "hello",
    "value": "Matango!"
  }
]

Syntax

In BNF:

<line> ::= <pairs>
<pairs> ::= <pair> | <pair> "," <pairs>
<pair> ::= <key> | <key> "=" <value>
<key> ::= <chars>
<value> ::= <chars>
<chars> ::= <char> | <char> <chars>
<char> ::= <alnum> | <symbol> | <whitespace>
<alnum> ::= "a" | ... | "z" | "A" | ... | "Z" | "0" | ... | "9"
<symbol> ::= "!" | "$" | "%" | "&" | "{" | "}" | "<" | ">" | "[" | "]" | "-" | "|" | "^" | "~" | "+" | "*" | ";" | ":" | "\" | "." | "/" | "\"
<whitespace> :: " " | "\t"

NOTE: The following characters are invalid in Matango:

\n (line break)
\r (carriage return)
() (open and close parens)
" (double quote)
' (single quote)

This is to encourage embedding Matango inside quotes or parens in other languages.

Notes (Semantics)

  • Each key-value pair is separated by ,.
  • <whitespaces> before and after each key and value are stripped.
    • So there is no way to express a key or value which starts or ends with whitespaces.
  • There sould one or zero = symbol inside each key-value pair.
    • if a key-value pair has more than one = symbol, then it should be a parse error.
    • If there is no = symbol in key-value pair, that's ok and the value is null in that case.
    • There is no way to include = symbol in key or value.
  • A key can be an empty string. (e.g. =foo parses to [{"key": "", "value": "foo"}])
  • A value can be an empty string. (e.g. foo= parses to [{"key": "foo", "value": ""}])
  • The same keys can appear in a single matango format. (e.g. foo,foo,foo is valid)
  • empty key-value pair is invalid
    • For example foo,,bar is an invalid matango expression.

Parsers

License

MIT