doc: update daletpack specification

This commit is contained in:
Artemy Egorov 2024-08-17 22:59:41 +03:00
parent 413c9e36ad
commit b5ed682990
2 changed files with 149 additions and 134 deletions

View file

@ -12,14 +12,49 @@ Mime type: `application/dalet-pack`
## Types ## Types
- **Integer** Notation: `type_name (...data) [hex_id]`
- **String** (3)
- **Tag array** - Tags with body
- **Tags** (4) - Tag (id, text) [**a0**]
- **Tag (id)** - Tag (id, tag) [**a1**]
- **Tag (id, body)** - Tag (id, tags) [**a2**]
- **Tag (id, argument)** - Tags with argument
- **Tag (id, body, argument)** - Tag (id, text) [**b0**]
- Tag (id, number) [**b1**]
- Complex tags
- Tag (id, text, text) [**c0**]
- Tag (id, tag, text) [**c1**]
- Tag (id, tags, text) [**c2**]
- Tag (id, text, number) [**c3**]
- Tag (id, tag, number) [**c4**]
- Tag (id, tags, number) [**c5**]
- Custom tags (most used, for better compression, backward compatible)
- El (text) [**d1**]
- El (tag) [**d2**]
- El (tags) [**d3**]
- P (text) [**d4**]
- P (tag) [**d5**]
- P (tags) [**d6**]
- Br [**d7**]
- Hr [**d8**]
- Img (text) [**d9**]
- Table (tags) [**da**]
- Tprow (tags) [**db**]
- Trow (tags) [**dc**]
- B (text) [**dd**]
- I (text) [**de**]
- A (number) [**df**]
- A (text) [**e0**]
- S (text) [**e1**]
- Sup (text) [**e2**]
- Sub (text) [**e3**]
- Meta (text, text) [**e4**]
## Limitations ## Limitations
@ -28,90 +63,59 @@ Mime type: `application/dalet-pack`
- text must be encoded in UTF-8 - text must be encoded in UTF-8
- maximum number of elements of a tag array object is (2^32) - maximum number of elements of a tag array object is (2^32)
## Formats ## Binary representation
### Overview ### Special symbols
| name | id | | name | hex_id |
| ------------------------ | --- | | ------------------------ | ------- |
| text end | 0 | | text end | 00 |
| text | 1 | | tags end | 01 |
| number | 2 |
| tags | 3 |
| tags end | 4 |
| tag (id) | 5 |
| tag (id, body) | 6 |
| tag (id, argument) | 7 |
| tag (id, body, argument) | 8 |
### Notation in diagrams ### Format
#### Notation
Byte - `+----+`
Variable length of bytes - `+====+`
Variable number of data objects - `+~~~~+`
#### Overview
##### Tag data
Look into types.
`type_name (...data) [hex_id]`
becomes
```txt ```txt
byte: +--------+~~~~~~~~~+
+--------+ | hex_id | ...data |
| | +--------+~~~~~~~~~+
+--------+
a variable number of bytes:
+========+
| |
+========+
variable number of objects stored in DaletPack format:
+~~~~~~~~~~~~~~~~~+
| |
+~~~~~~~~~~~~~~~~~+
X - unknown bit
``` ```
### Text format ##### Number data
```txt ```txt
+--------+=========+--------+ +---------------+
| 1 | utf-8 | 0 | | 8-bit integer |
+--------+=========+--------+ +---------------+
``` ```
### Number format ##### Text data
```txt ```txt
+--------+----------+ +=============+----+
| 1 | XXXXXXXX | | utf-8 bytes | 00 |
+--------+----------+ +=============+----+
``` ```
### Tags format ##### Tags data
```txt ```txt
+--------+~~~~~~~~~~~~+------+ +~~~~~~+----+
| 3 | elements | 4 | | tags | 01 |
+--------+~~~~~~~~~~~~+------+ +~~~~~~+----+
```
### Tag format
```txt
id = XXXXX (5 bits) (can change before release)
tag (id):
+--------+----+
| 5 | id |
+--------+----+
tag (id, body):
+--------+----+~~~~~~~~+
| 6 | id | body |
+--------+----+~~~~~~~~+
tag (id, argument):
+--------+----+~~~~~~~~~~~~+
| 7 | id | argument |
+--------+----+~~~~~~~~~~~~+
tag (id, body, argument):
+--------+----+~~~~~~~~+~~~~~~~~~~~~+
| 8 | id | body | argument |
+--------+----+~~~~~~~~+~~~~~~~~~~~~+
``` ```

View file

@ -13,12 +13,12 @@ Most primitive tag. Also used if no tag is specified.
**Daleth example**: **Daleth example**:
```yaml ```daleth
el: I am Element el: I am Element
el [ el [
h1: I am first level heading h1: I am first level heading
] ]
Element also used if no tag is specified. - Element also used with `- text` syntax.
``` ```
## 1. Heading ## 1. Heading
@ -34,7 +34,7 @@ Heading is used for text formatting.
**Daleth example**: **Daleth example**:
```yaml ```daleth
h1: Dalet h1: Dalet
h2: Daleth h2: Daleth
h3: High level h3: High level
@ -55,7 +55,7 @@ Paragraph is used for text formatting.
**Daleth example**: **Daleth example**:
```yaml ```daleth
p: This is a paragraph p: This is a paragraph
{- Paragraph also used with this custom syntax } {- Paragraph also used with this custom syntax }
``` ```
@ -73,7 +73,7 @@ Line break is used to insert a line break into the text.
**Daleth example**: **Daleth example**:
```yaml ```daleth
br br
``` ```
@ -90,10 +90,10 @@ Unordered list is used to create a list.
**Daleth example**: **Daleth example**:
```txt ```daleth
ul [ ul [
Item 1 - Item 1
Item 2 - Item 2
] ]
``` ```
@ -110,11 +110,11 @@ Ordered list is used to create a list with increasing numbers.
**Daleth example**: **Daleth example**:
```txt ```daleth
ol [ ol [
Item - Item
Item - Item
Item - Item
] ]
``` ```
@ -130,15 +130,15 @@ ol [
Splits the text into rows. The alignment argument specifies how the items inside the row are aligned horizontally. By default it is aligned to the start. Splits the text into rows. The alignment argument specifies how the items inside the row are aligned horizontally. By default it is aligned to the start.
**Daleth example**: **Daleth example**:
```txt ```daleth
row [ row [
Left - Left
Right - Right
] ]
row "start" [ row "start" [
Left - Left
Right - Right
] ]
``` ```
@ -155,7 +155,7 @@ Link to other sites. On click the link opens in new tab.
**Daleth example**: **Daleth example**:
```yaml ```daleth
link "https://example.com": I am Link link "https://example.com": I am Link
``` ```
@ -172,7 +172,7 @@ Link to the same site. On click the link opens in current tab.
**Daleth example**: **Daleth example**:
```yaml ```daleth
navlink "/specification": I am Navlink navlink "/specification": I am Navlink
``` ```
@ -189,7 +189,7 @@ Same as link, but with button style.
**Daleth example**: **Daleth example**:
```yaml ```daleth
btn "https://example.com": I am Button btn "https://example.com": I am Button
``` ```
@ -206,7 +206,7 @@ Same as navlink, but with button style.
**Daleth example**: **Daleth example**:
```yaml ```daleth
navbtn "https://example.com": I am NavButton navbtn "https://example.com": I am NavButton
``` ```
@ -223,28 +223,39 @@ Displays an image.
**Daleth example**: **Daleth example**:
```yaml ```daleth
img "/dalet.png" img "/dalet.png"
``` ```
## 12. Table ## 12. Table
| Property | Description | | Property | Description |
| -------- | --------------------------------- | | -------- | ----------- |
| name | table | | name | table |
| id | 12 | | id | 12 |
| body | (trow or tprow)[] or table-string | | body | tags |
| argument | no | | argument | no |
Creates a table. Creates a table.
**Daleth example**: **Daleth example**:
```txt ```daleth
table { {> table
| Name | Age | [ Name | Age ]
| Elon | 53 | [ Elon | 53 ]
} }
table [
tprow [
- Name
- Age
]
trow [
- Elon
- 53
]
]
``` ```
## 13. Table Row ## 13. Table Row
@ -260,10 +271,10 @@ Creates a table row.
**Daleth example**: **Daleth example**:
```txt ```daleth
trow [ trow [
Name - Name
Age - Age
] ]
``` ```
@ -280,10 +291,10 @@ Like table row, but with primary background.
**Daleth example**: **Daleth example**:
```txt ```daleth
tprow [ tprow [
Name - Name
Age - Age
] ]
``` ```
@ -300,7 +311,7 @@ Creates a horizontal rule.
**Daleth example**: **Daleth example**:
```yaml ```daleth
hr hr
``` ```
@ -317,7 +328,7 @@ Creates **bold** text.
**Daleth example**: **Daleth example**:
```yaml ```daleth
b: I am Bold b: I am Bold
``` ```
@ -334,7 +345,7 @@ Creates _italic_ text.
**Daleth example**: **Daleth example**:
```yaml ```daleth
i: I am Italic i: I am Italic
``` ```
@ -351,7 +362,7 @@ Creates a blockquote.
**Daleth example**: **Daleth example**:
```yaml ```daleth
bq: I am Blockquote bq: I am Blockquote
``` ```
@ -368,7 +379,7 @@ Link to footnote.
**Daleth example**: **Daleth example**:
```yaml ```daleth
footlnk 1 footlnk 1
``` ```
@ -385,7 +396,7 @@ Creates footnote.
**Daleth example**: **Daleth example**:
```yaml ```daleth
footn 1: I am Footnote footn 1: I am Footnote
``` ```
@ -402,7 +413,7 @@ Creates anchor. Like `<a href="#argument"></a>` in HTML.
**Daleth example**: **Daleth example**:
```yaml ```daleth
a0 a0
``` ```
@ -419,7 +430,7 @@ Creates ~~strikethrough~~ text.
**Daleth example**: **Daleth example**:
```yaml ```daleth
s: I am Strikethrough s: I am Strikethrough
``` ```
@ -436,7 +447,7 @@ Creates ^superscript^ text.
**Daleth example**: **Daleth example**:
```yaml ```daleth
sup: I am Superscript sup: I am Superscript
``` ```
@ -453,7 +464,7 @@ Creates ~subscript~ text.
**Daleth example**: **Daleth example**:
```yaml ```daleth
sub: I am Subscript sub: I am Subscript
``` ```
@ -470,7 +481,7 @@ Creates disclosure element.
**Daleth example**: **Daleth example**:
```yaml ```daleth
disc "Click to expand": I am Disclosure disc "Click to expand": I am Disclosure
``` ```
@ -487,7 +498,7 @@ Creates block element. Can be used for horizontal aligning. By default aligned t
**Daleth example**: **Daleth example**:
```yaml ```daleth
block: I am Block block: I am Block
``` ```
@ -509,10 +520,10 @@ Creates carousel.
**Daleth example**: **Daleth example**:
```txt ```daleth
carousel [ carousel [
Example 1 - Example 1
Example 2 - Example 2
] ]
``` ```
@ -529,7 +540,7 @@ Creates code block.
**Daleth example**: **Daleth example**:
```txt ```daleth
code "js": let code = "js" code "js": let code = "js"
``` ```
@ -546,7 +557,7 @@ Creates pre formatted text block. Like code but without style and highlight.
**Daleth example**: **Daleth example**:
```yaml ```daleth
pre: I am pre pre: I am pre
``` ```
@ -563,6 +574,6 @@ Not displayed. Specifies metadata such as title, description. Must be before all
**Daleth example**: **Daleth example**:
```yaml ```daleth
meta "description": I am description meta "description": I am description
``` ```