tree-sitter-html/src/grammar.json

417 lines
8.5 KiB
JSON

{
"name": "html",
"rules": {
"fragment": {
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
"_node": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "text"
},
{
"type": "SYMBOL",
"name": "element"
},
{
"type": "SYMBOL",
"name": "void_element"
}
]
},
"element": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "start_tag"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_node"
}
},
{
"type": "SYMBOL",
"name": "end_tag"
}
]
},
"void_element": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "void_start_tag"
},
{
"type": "SYMBOL",
"name": "self_closing_tag"
}
]
},
"start_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "tag_name"
},
"named": true,
"value": "tag_name"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": ">"
}
]
},
"void_start_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "void_tag_name"
},
"named": true,
"value": "tag_name"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": ">"
}
]
},
"self_closing_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "tag_name"
},
{
"type": "SYMBOL",
"name": "void_tag_name"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "attribute"
}
},
{
"type": "STRING",
"value": "/"
},
{
"type": "STRING",
"value": ">"
}
]
},
"attribute": {
"type": "SEQ",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_attribute_part"
},
"named": true,
"value": "attribute_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_attribute_part"
},
"named": true,
"value": "attribute_value"
},
{
"type": "SYMBOL",
"name": "quoted_attribute_value"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"_attribute_part": {
"type": "PATTERN",
"value": "[^<>\"'\\/=\\s]+"
},
"quoted_attribute_value": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[^']+"
},
"named": true,
"value": "attribute_value"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "'"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[^\"]+"
},
"named": true,
"value": "attribute_value"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "\""
}
]
}
]
},
"end_tag": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "<"
},
{
"type": "STRING",
"value": "/"
},
{
"type": "SYMBOL",
"name": "tag_name"
},
{
"type": "STRING",
"value": ">"
}
]
},
"tag_name": {
"type": "PATTERN",
"value": "[a-zA-Z\\-]+"
},
"void_tag_name": {
"type": "TOKEN",
"content": {
"type": "PREC",
"value": 1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "area"
},
{
"type": "STRING",
"value": "base"
},
{
"type": "STRING",
"value": "basefont"
},
{
"type": "STRING",
"value": "bgsound"
},
{
"type": "STRING",
"value": "br"
},
{
"type": "STRING",
"value": "col"
},
{
"type": "STRING",
"value": "command"
},
{
"type": "STRING",
"value": "embed"
},
{
"type": "STRING",
"value": "frame"
},
{
"type": "STRING",
"value": "hr"
},
{
"type": "STRING",
"value": "image"
},
{
"type": "STRING",
"value": "img"
},
{
"type": "STRING",
"value": "input"
},
{
"type": "STRING",
"value": "isindex"
},
{
"type": "STRING",
"value": "keygen"
},
{
"type": "STRING",
"value": "link"
},
{
"type": "STRING",
"value": "menuitem"
},
{
"type": "STRING",
"value": "meta"
},
{
"type": "STRING",
"value": "nextid"
},
{
"type": "STRING",
"value": "param"
},
{
"type": "STRING",
"value": "source"
},
{
"type": "STRING",
"value": "track"
},
{
"type": "STRING",
"value": "wbr"
}
]
}
}
},
"text": {
"type": "PATTERN",
"value": "[^<>]+"
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
}
],
"conflicts": [],
"externals": [],
"inline": []
}