aboutsummaryrefslogtreecommitdiffstats
path: root/queries
diff options
context:
space:
mode:
authorObserverOfTime <chronobserver@disroot.org>2023-08-04 14:50:28 +0300
committerObserverOfTime <chronobserver@disroot.org>2023-08-13 10:34:57 +0300
commit5b3dd8cff1064db583ddd3edd314e94a02ea1bef (patch)
tree2a8ae4546d07a867531e7f861e48c004050ecf7f /queries
parentfixup: php injections (diff)
downloadnvim-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
Diffstat (limited to 'queries')
-rw-r--r--queries/dtd/folds.scm4
-rw-r--r--queries/dtd/highlights.scm121
-rw-r--r--queries/dtd/injections.scm1
-rw-r--r--queries/http/injections.scm4
-rw-r--r--queries/hurl/injections.scm2
-rw-r--r--queries/xml/folds.scm5
-rw-r--r--queries/xml/highlights.scm53
-rw-r--r--queries/xml/indents.scm16
-rw-r--r--queries/xml/injections.scm29
9 files changed, 232 insertions, 3 deletions
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
+ "&amp;" "&lt;" "&gt;" "&quot;" "&apos;"))
+
+(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"))