11# ![ Unist] [ logo ]
22
3- ** Unist** (** uni** versal ** s** yntax ** t** ree) is the combination of three
4- project, and more to come, which are the summation of at least
5- [ two] [ first-retext-commit ] [ years] [ first-remark-commit ] of my work and the
6- current epitome of that.
3+ ** Uni** versal ** S** yntax ** T** ree.
4+
5+ ***
6+
7+ ** Unist** is the combination of three project, and more to come, which
8+ are the summation of at least [ two] [ first-retext-commit ]
9+ [ years] [ first-remark-commit ] of my work and the current epitome of that.
710
811It’s basically a system for processing input: parsing it into a syntax tree,
912transforming it by plug-ins, and compiling the tree to something else.
@@ -13,32 +16,86 @@ This document explains some terminology relating to [**retext**][retext],
1316
1417## Unist nodes
1518
16- ** Unist nodes** :
17-
18- * must have a ` type ` property set to a to its namespace semantic
19- ` string ` ;
20-
21- * may have either a ` value ` property set to a ` string ` or a ` children `
22- property set to an array of zero or more ` Unist ` nodes;
23-
24- * may have a ` data ` property set to a ` JSON.stringify ` able object;
25-
26- * may have a ` position ` property set to a an object containing ` start ` and
27- ` end ` , both of which contain an object with ` line ` and ` column ` set
28- to an integer referencing their respective (1-based) line and column
29- in the input file. Both may have an ` offset ` property set to its
30- index from the beginning of the input.
31- The object at ` position ` may additionally have an ` indent ` property
32- set to an array of integers higher than 0 (not including), in which
33- case the node represents content which spans multiple lines prefixed
34- with content which is not part of the node.
35- If a node represents something not available in the original input, it
36- must not have a ` position ` .
37-
3819See [ ** nlcst** ] [ nlcst ] for more information on ** retext** nodes,
3920[ ** mdast** ] [ mdast ] for information on ** remark** nodes, and
4021[ ` hast#nodes ` ] [ hast-nodes ] for information on ** hast** nodes.
4122
23+ ### ` Node `
24+
25+ Node represents any unit in the Unist hierarchy. It is an abstract
26+ class. Interfaces inheriting from ** Node** must have a ` type ` property,
27+ and may have ` data ` or ` location ` properties. ` type ` s are defined by
28+ their namespace.
29+
30+ ``` idl
31+ interface Node {
32+ type: string;
33+ data: Data?;
34+ position: Location?;
35+ }
36+ ```
37+
38+ #### ` Data `
39+
40+ Data represents data associated with any node. Data is a scope for plug-ins
41+ to store any information. Its only limitation being that each property should
42+ by ` stringify ` able: not throw when passed to ` JSON.stringify() ` .
43+
44+ ``` idl
45+ interface Data { }
46+ ```
47+
48+ #### ` Location `
49+
50+ ** Location** references a location of a node in a ** Unist** file.
51+ If a location is not applicable, the location must be omitted.
52+ ** Location** consists of a ` start ` and end ` position ` . And, if
53+ relevant, an ` indent ` property.
54+
55+ ``` idl
56+ interface Location {
57+ start: Position;
58+ end: Position;
59+ indent: [uint32 >= 1]?;
60+ }
61+ ```
62+
63+ #### ` Position `
64+
65+ ** Position** contains ` line ` and ` column ` set to a (1-based) integer
66+ referencing a position in a ** Unist** file. An ` offset ` (0-based)
67+ may be used.
68+
69+ ``` idl
70+ interface Position {
71+ line: uint32 >= 1;
72+ column: uint32 >= 1;
73+ offset: uint32 >= 0?;
74+ }
75+ ```
76+
77+ ### ` Parent `
78+
79+ Nodes containing child nodes inherit the ** Parent** ([ ** Node** ] ( #node ) )
80+ abstract interface.
81+
82+ ``` idl
83+ interface Parent <: Node {
84+ children: [Node];
85+ }
86+ ```
87+
88+ ### ` Text `
89+
90+ Nodes containing a value inherit the ** Text** ([ ** Node** ] ( #node ) )
91+ abstract interface.
92+
93+ ``` idl
94+ interface Text <: Node {
95+ value: string;
96+ }
97+ ```
98+
4299## Unist files
43100
44101** Unist files** are virtual files (such as [ ** vfile** ] [ vfile ] )
0 commit comments