diff options
| author | ObserverOfTime <chronobserver@disroot.org> | 2023-08-04 14:50:28 +0300 |
|---|---|---|
| committer | ObserverOfTime <chronobserver@disroot.org> | 2023-08-13 10:34:57 +0300 |
| commit | 5b3dd8cff1064db583ddd3edd314e94a02ea1bef (patch) | |
| tree | 2a8ae4546d07a867531e7f861e48c004050ecf7f | |
| parent | fixup: php injections (diff) | |
| download | nvim-treesitter-5b3dd8cff1064db583ddd3edd314e94a02ea1bef.tar nvim-treesitter-5b3dd8cff1064db583ddd3edd314e94a02ea1bef.tar.gz nvim-treesitter-5b3dd8cff1064db583ddd3edd314e94a02ea1bef.tar.bz2 nvim-treesitter-5b3dd8cff1064db583ddd3edd314e94a02ea1bef.tar.lz nvim-treesitter-5b3dd8cff1064db583ddd3edd314e94a02ea1bef.tar.xz nvim-treesitter-5b3dd8cff1064db583ddd3edd314e94a02ea1bef.tar.zst nvim-treesitter-5b3dd8cff1064db583ddd3edd314e94a02ea1bef.zip | |
feat: add xml & dtd parsers
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | lockfile.json | 6 | ||||
| -rw-r--r-- | lua/nvim-treesitter/parsers.lua | 21 | ||||
| -rw-r--r-- | queries/dtd/folds.scm | 4 | ||||
| -rw-r--r-- | queries/dtd/highlights.scm | 121 | ||||
| -rw-r--r-- | queries/dtd/injections.scm | 1 | ||||
| -rw-r--r-- | queries/http/injections.scm | 4 | ||||
| -rw-r--r-- | queries/hurl/injections.scm | 2 | ||||
| -rw-r--r-- | queries/xml/folds.scm | 5 | ||||
| -rw-r--r-- | queries/xml/highlights.scm | 53 | ||||
| -rw-r--r-- | queries/xml/indents.scm | 16 | ||||
| -rw-r--r-- | queries/xml/injections.scm | 29 |
12 files changed, 261 insertions, 3 deletions
@@ -207,6 +207,7 @@ We are looking for maintainers to add more parsers and to write query files for - [x] [diff](https://github.com/the-mikedavis/tree-sitter-diff) (maintained by @gbprod) - [x] [dockerfile](https://github.com/camdencheek/tree-sitter-dockerfile) (maintained by @camdencheek) - [x] [dot](https://github.com/rydesun/tree-sitter-dot) (maintained by @rydesun) +- [x] [dtd](https://github.com/ObserverOfTime/tree-sitter-xml) (maintained by @ObserverOfTime) - [x] [ebnf](https://github.com/RubixDev/ebnf) (experimental, maintained by @RubixDev) - [x] [eex](https://github.com/connorlay/tree-sitter-eex) (maintained by @connorlay) - [x] [elixir](https://github.com/elixir-lang/tree-sitter-elixir) (maintained by @connorlay) @@ -371,6 +372,7 @@ We are looking for maintainers to add more parsers and to write query files for - [x] [wgsl](https://github.com/szebniok/tree-sitter-wgsl) (maintained by @szebniok) - [x] [wgsl_bevy](https://github.com/theHamsta/tree-sitter-wgsl-bevy) (maintained by @theHamsta) - [x] [wing](https://github.com/winglang/wing) (experimental, maintained by @gshpychka) +- [x] [xml](https://github.com/ObserverOfTime/tree-sitter-xml) (maintained by @ObserverOfTime) - [x] [yaml](https://github.com/ikatyang/tree-sitter-yaml) (maintained by @stsewd) - [x] [yang](https://github.com/Hubro/tree-sitter-yang) (maintained by @Hubro) - [x] [yuck](https://github.com/Philipp-M/tree-sitter-yuck) (maintained by @Philipp-M, @amaanq) diff --git a/lockfile.json b/lockfile.json index 4501e7956..3a15ebf32 100644 --- a/lockfile.json +++ b/lockfile.json @@ -101,6 +101,9 @@ "dot": { "revision": "9ab85550c896d8b294d9b9ca1e30698736f08cea" }, + "dtd": { + "revision": "9deacbfb79cb3527a0396255beb17e1bba3f2052" + }, "ebnf": { "revision": "8e635b0b723c620774dfb8abf382a7f531894b40" }, @@ -593,6 +596,9 @@ "wing": { "revision": "9399564d1e32864c6af2d49c0dcd1f76d54443f2" }, + "xml": { + "revision": "9deacbfb79cb3527a0396255beb17e1bba3f2052" + }, "yaml": { "revision": "0e36bed171768908f331ff7dff9d956bae016efb" }, diff --git a/lua/nvim-treesitter/parsers.lua b/lua/nvim-treesitter/parsers.lua index 53ccce0df..08817b5df 100644 --- a/lua/nvim-treesitter/parsers.lua +++ b/lua/nvim-treesitter/parsers.lua @@ -42,6 +42,9 @@ for ft, lang in pairs { quarto = "markdown", dosini = "ini", confini = "ini", + svg = "xml", + xsd = "xml", + xslt = "xml", } do register_lang(lang, ft) end @@ -356,6 +359,15 @@ list.dot = { maintainers = { "@rydesun" }, } +list.dtd = { + install_info = { + url = "https://github.com/ObserverOfTime/tree-sitter-xml", + files = { "src/parser.c", "src/scanner.c" }, + location = "tree-sitter-dtd", + }, + maintainers = { "@ObserverOfTime" }, +} + list.ebnf = { install_info = { url = "https://github.com/RubixDev/ebnf", @@ -1745,6 +1757,15 @@ list.wing = { experimental = true, } +list.xml = { + install_info = { + url = "https://github.com/ObserverOfTime/tree-sitter-xml", + files = { "src/parser.c", "src/scanner.c" }, + location = "tree-sitter-xml", + }, + maintainers = { "@ObserverOfTime" }, +} + list.yaml = { install_info = { url = "https://github.com/ikatyang/tree-sitter-yaml", diff --git a/queries/dtd/folds.scm b/queries/dtd/folds.scm new file mode 100644 index 000000000..ba7ea121b --- /dev/null +++ b/queries/dtd/folds.scm @@ -0,0 +1,4 @@ +[ + (conditionalSect) + (Comment) +] @fold diff --git a/queries/dtd/highlights.scm b/queries/dtd/highlights.scm new file mode 100644 index 000000000..ba34f0bfe --- /dev/null +++ b/queries/dtd/highlights.scm @@ -0,0 +1,121 @@ +;; XML declaration + +(XMLDecl "xml" @preproc) + +(XMLDecl [ "version" "encoding" ] @tag.attribute) + +(XMLDecl (EncName) @string.special) + +(XMLDecl (VersionNum) @number) + +;; Processing instructions + +(PI) @preproc + +;; Element declaration + +(elementdecl + "ELEMENT" @define + (Name) @tag) + +(contentspec + (_ (Name) @tag.attribute)) + +"#PCDATA" @type.builtin + +[ "EMPTY" "ANY" ] @type.qualifier + +[ "*" "?" "+" ] @character.special + +;; Entity declaration + +(GEDecl + "ENTITY" @define + (Name) @constant) + +(GEDecl (EntityValue) @string) + +(NDataDecl + "NDATA" @keyword + (Name) @label) + +;; Parsed entity declaration + +(PEDecl + "ENTITY" @define + "%" @operator + (Name) @function.macro) + +(PEDecl (EntityValue) @string) + +;; Notation declaration + +(NotationDecl + "NOTATION" @preproc + (Name) @label) + +((NotationDecl + (ExternalID + (SystemLiteral (URI) @string.special)) + (#set! "priority" 105))) + +;; Attlist declaration + +(AttlistDecl + "ATTLIST" @define + (Name) @tag) + +(AttDef (Name) @tag.attribute) + +(AttDef (Enumeration (Nmtoken) @string)) + +[ + (StringType) + (TokenizedType) +] @type.builtin + +(NotationType "NOTATION" @type.builtin) + +[ + "#REQUIRED" + "#IMPLIED" + "#FIXED" +] @attribute + +;; Entities + +(EntityRef) @constant + +((EntityRef) @constant.builtin + (#any-of? @constant.builtin + "&" "<" ">" """ "'")) + +(CharRef) @character + +(PEReference) @function.macro + +;; External references + +[ "PUBLIC" "SYSTEM" ] @keyword + +(PubidLiteral) @string.special + +(SystemLiteral (URI) @text.uri) + +;; Delimiters & punctuation + +[ "<?" "?>" "<!" ">" "]]>" ] @tag.delimiter + +[ "(" ")" "[" ] @punctuation.bracket + +[ "\"" "'" ] @punctuation.delimiter + +[ "," "|" "=" ] @operator + +;; Misc + +[ "INCLUDE" "IGNORE" ] @include + +(Comment) @comment @spell + +(ERROR) @error diff --git a/queries/dtd/injections.scm b/queries/dtd/injections.scm new file mode 100644 index 000000000..ed5557a05 --- /dev/null +++ b/queries/dtd/injections.scm @@ -0,0 +1 @@ +(Comment) @comment diff --git a/queries/http/injections.scm b/queries/http/injections.scm index 7f06e336d..cc17373dc 100644 --- a/queries/http/injections.scm +++ b/queries/http/injections.scm @@ -4,8 +4,8 @@ ((json_body) @injection.content (#set! injection.language "json")) -; ((xml_body) @injection.content -; (#set! injection.language "xml")) +((xml_body) @injection.content + (#set! injection.language "xml")) ; ((graphql_body) @injection.content ; (#set! injection.language "graphql")) ; Not used as of now.. diff --git a/queries/hurl/injections.scm b/queries/hurl/injections.scm index 3d961258f..363e90046 100644 --- a/queries/hurl/injections.scm +++ b/queries/hurl/injections.scm @@ -3,7 +3,7 @@ (#set! injection.language "json")) ((xml) @injection.content - (#set! injection.language "html")) + (#set! injection.language "xml")) (multiline_string (multiline_string_type) @_lang diff --git a/queries/xml/folds.scm b/queries/xml/folds.scm new file mode 100644 index 000000000..494e8c00a --- /dev/null +++ b/queries/xml/folds.scm @@ -0,0 +1,5 @@ +[ + (element) + (doctypedecl) + (Comment) +] @fold diff --git a/queries/xml/highlights.scm b/queries/xml/highlights.scm new file mode 100644 index 000000000..e47636ac4 --- /dev/null +++ b/queries/xml/highlights.scm @@ -0,0 +1,53 @@ +; inherits: dtd + +;; XML declaration + +(XMLDecl "standalone" @tag.attribute) + +(XMLDecl [ "yes" "no" ] @boolean) + +;; Processing instructions + +(XmlModelPI "xml-model" @preproc) + +(StyleSheetPI "xml-stylesheet" @preproc) + +(PseudoAtt (Name) @tag.attribute) + +(PseudoAtt (PseudoAttValue) @string) + +;; Doctype declaration + +(doctypedecl "DOCTYPE" @define) + +(doctypedecl (Name) @type.definition) + +;; Tags + +(STag (Name) @tag) + +(ETag (Name) @tag) + +(EmptyElemTag (Name) @tag) + +;; Attributes + +(Attribute (Name) @tag.attribute) + +(Attribute (AttValue) @string) + +;; Text + +(CharData) @text @spell + +((CDSect + (CDStart) @text.environment + (CData) @text.literal + "]]>" @text.environment) + (#set! "priority" 105)) + +;; Delimiters & punctuation + +[ "<" "</" "/>" ] @tag.delimiter + +"]" @punctuation.bracket diff --git a/queries/xml/indents.scm b/queries/xml/indents.scm new file mode 100644 index 000000000..24cd75cfa --- /dev/null +++ b/queries/xml/indents.scm @@ -0,0 +1,16 @@ +(element) @indent.begin + +[ + (Attribute) + (AttlistDecl) + (contentspec) +] @indent.align + +(ETag) @indent.dedent + +(doctypedecl) @indent.ignore + +[ + (Comment) + (ERROR) +] @indent.auto diff --git a/queries/xml/injections.scm b/queries/xml/injections.scm new file mode 100644 index 000000000..99b3a9cc8 --- /dev/null +++ b/queries/xml/injections.scm @@ -0,0 +1,29 @@ +((Comment) @injection.content + (#set! injection.language "comment")) + +; SVG style +((element + (STag (Name) @_name) + (content) @injection.content) + (#eq? @_name "style") + (#set! injection.combined) + (#set! injection.include-children) + (#set! injection.language "css")) + +; SVG script +((element + (STag (Name) @_name) + (content) @injection.content) + (#eq? @_name "script") + (#set! injection.combined) + (#set! injection.include-children) + (#set! injection.language "javascript")) + +; phpMyAdmin dump +((element + (STag (Name) @_name) + (content) @injection.content) + (#eq? @_name "pma:table") + (#set! injection.combined) + (#set! injection.include-children) + (#set! injection.language "sql")) |
