dalet/specification/daletl.md

99 lines
1.3 KiB
Markdown

# Daletl specification for Dalet v1.0-preview
## Data format
Daletl must be serialized as [MessagePack](https://github.com/msgpack/msgpack/blob/master/spec.md). All data transfer between server and client is done in this format.
### Root
Daletl root is array of tags. For convenience, we will use the json5 representation of the data.
```json5
[]
```
### Tag
All tags specification is in [Tags](./tags.md).
Each tag may be one of four types:
#### Data Representation
##### As array of 2-3 elements
1. Tag id
2. Tag body
3. Tag argument (optional)
Tag id is integer number.
Body can be only a string, null, array of tags or tag (equals to array of tags with 1 tag).
Argument can be number or string.
###### Heading example
```json5
[1, "This is heading", 1]
```
###### Unordered list example
```json5
[
4,
[
[0, "Item 1"],
[0, "Item 2"],
],
]
```
##### As number
Number becomes tag.
```json5
1
```
equals to
```json5
[1, null]
```
##### As string
String becomes element tag.
```json5
"Element"
```
equals to
```json5
[0, "Element"]
```
##### As array of tags
If array not started with a number. The implication is that this turns into an “element” tag
```json5
["Element", [1, "Heading"]]
```
equals to
```json5
[
0,
[
[0, "Element"],
[1, "Heading"],
],
]
```