diff --git a/package.json b/package.json index 6ae71cb..7a540f5 100644 --- a/package.json +++ b/package.json @@ -21,5 +21,13 @@ "scripts": { "build": "tree-sitter generate && node-gyp build", "test": "tree-sitter test && tree-sitter parse examples --quiet --time" - } + }, + "tree-sitter": [ + { + "textmate-scope": "text.html.basic", + "file-types": ["html"], + "highlights": "src/highlights.json", + "injection-regex": "html" + } + ] } diff --git a/properties/highlights.css b/properties/highlights.css new file mode 100644 index 0000000..13877ca --- /dev/null +++ b/properties/highlights.css @@ -0,0 +1,24 @@ +tag_name { + scope: 'tag'; +} + +/* TODO - highlight as an error? */ +erroneous_end_tag_name { + scope: 'tag'; +} + +doctype { + scope: 'constant'; +} + +attribute_name { + scope: 'attribute'; +} + +attribute_value { + scope: 'string'; +} + +comment { + scope: 'comment'; +} diff --git a/src/highlights.json b/src/highlights.json new file mode 100644 index 0000000..45ad141 --- /dev/null +++ b/src/highlights.json @@ -0,0 +1,244 @@ +{ + "states": [ + { + "id": 0, + "property_set_id": 0, + "transitions": [ + { + "type": "attribute_name", + "named": true, + "state_id": 4 + }, + { + "type": "attribute_value", + "named": true, + "state_id": 2 + }, + { + "type": "comment", + "named": true, + "state_id": 1 + }, + { + "type": "doctype", + "named": true, + "state_id": 5 + }, + { + "type": "erroneous_end_tag_name", + "named": true, + "state_id": 3 + }, + { + "type": "tag_name", + "named": true, + "state_id": 3 + } + ], + "default_next_state_id": 0 + }, + { + "id": 1, + "property_set_id": 1, + "transitions": [ + { + "type": "attribute_name", + "named": true, + "state_id": 4 + }, + { + "type": "attribute_value", + "named": true, + "state_id": 2 + }, + { + "type": "comment", + "named": true, + "state_id": 1 + }, + { + "type": "doctype", + "named": true, + "state_id": 5 + }, + { + "type": "erroneous_end_tag_name", + "named": true, + "state_id": 3 + }, + { + "type": "tag_name", + "named": true, + "state_id": 3 + } + ], + "default_next_state_id": 0 + }, + { + "id": 2, + "property_set_id": 2, + "transitions": [ + { + "type": "attribute_name", + "named": true, + "state_id": 4 + }, + { + "type": "attribute_value", + "named": true, + "state_id": 2 + }, + { + "type": "comment", + "named": true, + "state_id": 1 + }, + { + "type": "doctype", + "named": true, + "state_id": 5 + }, + { + "type": "erroneous_end_tag_name", + "named": true, + "state_id": 3 + }, + { + "type": "tag_name", + "named": true, + "state_id": 3 + } + ], + "default_next_state_id": 0 + }, + { + "id": 3, + "property_set_id": 3, + "transitions": [ + { + "type": "attribute_name", + "named": true, + "state_id": 4 + }, + { + "type": "attribute_value", + "named": true, + "state_id": 2 + }, + { + "type": "comment", + "named": true, + "state_id": 1 + }, + { + "type": "doctype", + "named": true, + "state_id": 5 + }, + { + "type": "erroneous_end_tag_name", + "named": true, + "state_id": 3 + }, + { + "type": "tag_name", + "named": true, + "state_id": 3 + } + ], + "default_next_state_id": 0 + }, + { + "id": 4, + "property_set_id": 4, + "transitions": [ + { + "type": "attribute_name", + "named": true, + "state_id": 4 + }, + { + "type": "attribute_value", + "named": true, + "state_id": 2 + }, + { + "type": "comment", + "named": true, + "state_id": 1 + }, + { + "type": "doctype", + "named": true, + "state_id": 5 + }, + { + "type": "erroneous_end_tag_name", + "named": true, + "state_id": 3 + }, + { + "type": "tag_name", + "named": true, + "state_id": 3 + } + ], + "default_next_state_id": 0 + }, + { + "id": 5, + "property_set_id": 5, + "transitions": [ + { + "type": "attribute_name", + "named": true, + "state_id": 4 + }, + { + "type": "attribute_value", + "named": true, + "state_id": 2 + }, + { + "type": "comment", + "named": true, + "state_id": 1 + }, + { + "type": "doctype", + "named": true, + "state_id": 5 + }, + { + "type": "erroneous_end_tag_name", + "named": true, + "state_id": 3 + }, + { + "type": "tag_name", + "named": true, + "state_id": 3 + } + ], + "default_next_state_id": 0 + } + ], + "property_sets": [ + {}, + { + "scope": "comment" + }, + { + "scope": "string" + }, + { + "scope": "tag" + }, + { + "scope": "attribute" + }, + { + "scope": "constant" + } + ] +} \ No newline at end of file