{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "ink",
"rules": {
"program": {
"type": "PREC",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "empty_line"
},
"named": false,
"value": ""
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "weave_body"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "knot"
},
{
"type": "SYMBOL",
"name": "function"
}
]
}
}
]
}
},
"block_comment": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "block_comment_start"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^*]"
},
{
"type": "PATTERN",
"value": "\\*[^/]"
}
]
}
},
{
"type": "SYMBOL",
"name": "block_comment_end"
}
]
},
"knot": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "knot_header"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "weave_body"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "stitch"
}
}
]
},
"knot_header": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "knot_start"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "=+"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "=+"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
},
"stitch": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "stitch_header"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "weave_body"
},
{
"type": "BLANK"
}
]
}
]
},
"stitch_header": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "stitch_start"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
},
"weave_body": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "weave_body_line"
},
{
"type": "SYMBOL",
"name": "var_line"
},
{
"type": "SYMBOL",
"name": "const_line"
},
{
"type": "SYMBOL",
"name": "list_line"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "empty_line"
},
"named": false,
"value": ""
}
]
}
}
},
"weave_body_line": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "line_start"
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "option_text"
},
{
"type": "SYMBOL",
"name": "code_text"
},
{
"type": "SYMBOL",
"name": "dialog_text"
},
{
"type": "SYMBOL",
"name": "gather_text"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
},
"function": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "function_header"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "weave_body"
},
{
"type": "BLANK"
}
]
}
]
},
"gather_text": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "gather_mark"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "label"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "dialog_text"
},
{
"type": "BLANK"
}
]
}
]
},
"gather_mark": {
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "-"
}
},
"option_text": {
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "option_mark"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "label"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "option_words"
},
{
"type": "BLANK"
}
]
}
]
},
"option_mark": {
"type": "PATTERN",
"value": "[\\+\\*]"
},
"option_words": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "words"
},
{
"type": "SYMBOL",
"name": "divert_or_thread"
},
{
"type": "SYMBOL",
"name": "default_option_mark"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "words"
},
{
"type": "SYMBOL",
"name": "divert_or_thread"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "words"
},
{
"type": "SYMBOL",
"name": "default_option_mark"
}
]
}
]
},
"default_option_mark": {
"type": "SYMBOL",
"name": "arrow"
},
"divert_or_thread": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "divert_chain"
},
{
"type": "SYMBOL",
"name": "thread"
}
]
},
"label": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "\\("
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "PATTERN",
"value": "\\)"
}
]
},
"code_text": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "~"
},
{
"type": "SYMBOL",
"name": "text"
}
]
},
"var_line": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "var_start"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "value"
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
},
"const_line": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "const_start"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "value"
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
},
"list_line": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "list_start"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "list"
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
},
"list": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "marked_identifier"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": ","
},
{
"type": "SYMBOL",
"name": "marked_identifier"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"marked_identifier": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "mark_start"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "mark_end"
},
{
"type": "BLANK"
}
]
}
]
},
"mark_start": {
"type": "PATTERN",
"value": "\\("
},
"mark_end": {
"type": "PATTERN",
"value": "\\)"
},
"dialog_text": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "condition_text"
},
{
"type": "SYMBOL",
"name": "text"
},
{
"type": "SYMBOL",
"name": "divert_or_thread"
},
{
"type": "SYMBOL",
"name": "tag"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "text"
},
{
"type": "SYMBOL",
"name": "divert_or_thread"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "text"
},
{
"type": "SYMBOL",
"name": "tag"
}
]
}
]
},
"text": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "glue"
},
{
"type": "SYMBOL",
"name": "inline_block"
},
{
"type": "SYMBOL",
"name": "vocabulary"
},
{
"type": "SYMBOL",
"name": "other"
}
]
}
},
"words": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "hide_start"
},
{
"type": "SYMBOL",
"name": "hide_end"
},
{
"type": "SYMBOL",
"name": "glue"
},
{
"type": "SYMBOL",
"name": "inline_block"
},
{
"type": "SYMBOL",
"name": "vocabulary"
},
{
"type": "SYMBOL",
"name": "word_other"
}
]
}
},
"hide_start": {
"type": "PATTERN",
"value": "\\["
},
"hide_end": {
"type": "PATTERN",
"value": "\\]"
},
"divert_chain": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "divert_return"
},
{
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "divert"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "divert_continue"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "divert_return"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"divert": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "arrow"
},
{
"type": "SYMBOL",
"name": "identifier_path"
}
]
},
"divert_continue": {
"type": "SYMBOL",
"name": "arrow"
},
"divert_return": {
"type": "SYMBOL",
"name": "double_arrow"
},
"thread": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "back_arrow"
},
{
"type": "SYMBOL",
"name": "identifier_path"
}
]
},
"function_header": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "function_start"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "=+"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\("
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "arguments"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "\\)"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "=+"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
},
"arguments": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "argument"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": ","
},
{
"type": "SYMBOL",
"name": "argument"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"argument": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ref"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"condition_text": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "condition_block"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "text"
},
{
"type": "BLANK"
}
]
}
]
},
"condition_block": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "\\{"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "condition_block_content"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "line_end"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "line_start"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "condition_block_content"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "line_end"
}
]
}
},
{
"type": "SYMBOL",
"name": "line_start"
},
{
"type": "PATTERN",
"value": "\\}"
}
]
},
"condition_block_content": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "block_remainder"
},
{
"type": "SYMBOL",
"name": "inline_block"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "condition_block_nested"
},
"named": true,
"value": "condition_block"
}
]
}
},
"condition_block_nested": {
"type": "SYMBOL",
"name": "condition_block"
},
"inline_block": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "\\{"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "PREC",
"value": 2,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "block_remainder"
},
{
"type": "SYMBOL",
"name": "inline_block"
}
]
}
}
},
{
"type": "BLANK"
}
]
},
{
"type": "PATTERN",
"value": "\\}"
}
]
},
"identifier_path": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "dot"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
}
},
{
"type": "BLANK"
}
]
}
]
},
"tag": {
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": "#"
},
{
"type": "SYMBOL",
"name": "identifier"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "PATTERN",
"value": ":"
},
{
"type": "SYMBOL",
"name": "tag_remainder"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"tag_remainder": {
"type": "PATTERN",
"value": "[^\\r\\n:]+"
},
"value": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "boolean"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "identifier"
}
]
},
"boolean": {
"type": "PATTERN",
"value": "(true|false)"
},
"string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\"\\\\\\n\\r]"
},
{
"type": "PATTERN",
"value": "\\\\."
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
"ref": {
"type": "PATTERN",
"value": "ref"
},
"number": {
"type": "PATTERN",
"value": "\\d+"
},
"assignment": {
"type": "PATTERN",
"value": "="
},
"dot": {
"type": "PATTERN",
"value": "\\."
},
"block_remainder": {
"type": "PATTERN",
"value": "[^\\r\\n\\}\\{]+"
},
"vocabulary": {
"type": "PATTERN",
"value": "[\\p{N}\\p{L}_-]+"
},
"identifier": {
"type": "PATTERN",
"value": "[\\p{N}\\p{L}_]+"
},
"other": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[^\\s\\n\\r\\p{N}\\p{L}_]"
}
}
},
"word_other": {
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "REPEAT1",
"content": {
"type": "PATTERN",
"value": "[^\\s\\n\\r\\p{N}\\p{L}\\[\\]_]"
}
}
}
},
"extras": [
{
"type": "PATTERN",
"value": "[ \\t\\v\\f\\u00A0\\u1680\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]"
},
{
"type": "SYMBOL",
"name": "block_comment"
},
{
"type": "SYMBOL",
"name": "line_comment"
}
],
"conflicts": [],
"precedences": [],
"externals": [
{
"type": "SYMBOL",
"name": "arrow"
},
{
"type": "SYMBOL",
"name": "double_arrow"
},
{
"type": "SYMBOL",
"name": "back_arrow"
},
{
"type": "SYMBOL",
"name": "block_comment_start"
},
{
"type": "SYMBOL",
"name": "block_comment_end"
},
{
"type": "SYMBOL",
"name": "line_comment"
},
{
"type": "SYMBOL",
"name": "glue"
},
{
"type": "SYMBOL",
"name": "line_start"
},
{
"type": "SYMBOL",
"name": "stitch_start"
},
{
"type": "SYMBOL",
"name": "knot_start"
},
{
"type": "SYMBOL",
"name": "function_start"
},
{
"type": "SYMBOL",
"name": "var_start"
},
{
"type": "SYMBOL",
"name": "const_start"
},
{
"type": "SYMBOL",
"name": "list_start"
},
{
"type": "SYMBOL",
"name": "empty_line"
},
{
"type": "SYMBOL",
"name": "line_end"
}
],
"inline": [],
"supertypes": []
}