Flatlogic Bot ca3a32f23e V 4
2026-02-16 06:55:36 +00:00

80 lines
1.8 KiB
Markdown

# Himalaya AST Specification - Version 0
This document describes the abstract syntax tree output of Himalaya's parsing. This specification aims to provide context as to what may be expected as valid output from Himalaya.
## Node
```js
interface Node {
type: string;
}
```
All nodes are represented as `Node` objects. These object all have a property called `type` that designate what type of node it is.
```js
enum Type {
"Element" | "Comment" | "Text"
}
```
Nodes can be of `type`:
- `Element`, which are tags such as `<body>`, `<div>`, `<style>`
- `Comment`, which are `<!-- {...} -->` sections
- `Text`, which are text contents
## Element Node
```js
interface Element <: Node {
type: "Element";
tagName: string;
attributes: Attributes;
}
```
All element nodes have a `tagName` and `attributes` property. These nodes also have some optional properties:
- `children: [ Node ];` Element nodes can have child nodes of any type.
- `content: string;` Elements that do not have their contents parsed (i.e. `script` and `style` tags) will have their content placed in this property.
### Attributes
```js
interface Attributes <: Object {}
```
Attributes is a dictionary of keys and their values. All keys are strings and values can be strings, numbers, or objects. When they are objects, they must be one of the parsed sub-properties:
- `dataset: object;` If the element has any `data-*` attributes, they will be placed in this property.
- `style: object;` If the element has any `style` value declarations, they will be placed in this property.
Note: the attribute `class` is changed to `className`.
## Comment Node
```js
interface Comment <: Node {
type: "Comment";
content: string;
}
```
A `<!-- comment -->` node.
## Text Node
```js
interface Text <: Node {
type: "Text";
content: string;
}
```
A `text` node.