https://github.com/kt3k/matango
A fragment language, expressing key-value pairs, aims to be embedded in other languages.
https://github.com/kt3k/matango
dsl json key-value language matango yaml
Last synced: about 1 month ago
JSON representation
A fragment language, expressing key-value pairs, aims to be embedded in other languages.
- Host: GitHub
- URL: https://github.com/kt3k/matango
- Owner: kt3k
- License: mit
- Created: 2017-05-07T06:45:35.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2018-03-16T12:54:03.000Z (over 8 years ago)
- Last Synced: 2025-06-04T21:04:43.088Z (about 1 year ago)
- Topics: dsl, json, key-value, language, matango, yaml
- Language: JavaScript
- Homepage:
- Size: 25.4 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Matango
[](https://circleci.com/gh/kt3k/matango)
[](https://codecov.io/gh/kt3k/matango)
> A fragment language, expressing key-value pairs, aims to be embedded in other languages.
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 serialize.
Matango is not a general purpose data exchange format like [JSON][JSON] or [YAML][YAML]. Rather it aims to serve as a DSL which is embedded in another language or DSL, such as HTML, YAML, JSON etc.
# Example
A typical matango line looks like the below.
```
foo,bar,baz=quux,hello=Matango!
```
This parses to:
```json
[
{
"key": "foo",
"value": null
},
{
"key": "bar",
"value": null
},
{
"key": "baz",
"value": "quux"
},
{
"key": "hello",
"value": "Matango!"
}
]
```
# Syntax
In BNF:
```
::=
::= | ","
::= | "="
::=
::=
::= |
::= | |
::= "a" | ... | "z" | "A" | ... | "Z" | "0" | ... | "9"
::= "!" | "$" | "%" | "&" | "{" | "}" | "<" | ">" | "[" | "]" | "-" | "|" | "^" | "~" | "+" | "*" | ";" | ":" | "\" | "." | "/" | "\"
:: " " | "\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 the embedding of Matango into quotes or parens in other languages.
# Notes (Semantics)
- Each key-value pair is separated by `,`.
- `` 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
- JavaScript: [matango](https://npm.im/matango)
# License
MIT
[CSV]: https://en.wikipedia.org/wiki/Comma-separated_values
[JSON]: http://json.org/
[YAML]: http://yaml.org/