diff --git a/vendored_parsers/highlights/latex.scm b/vendored_parsers/highlights/latex.scm index f8b589ae0..98d7b8aea 100644 --- a/vendored_parsers/highlights/latex.scm +++ b/vendored_parsers/highlights/latex.scm @@ -1,252 +1,344 @@ ;; Based on the nvim-treesitter highlighting, which is under the Apache license. -;; https://github.com/nvim-treesitter/nvim-treesitter/blob/f0b50973f334a7a5bb5831cb52b9fd4c770e6cba/queries/latex/highlights.scm +;; https://github.com/nvim-treesitter/nvim-treesitter/blob/07bd1b53bf465e42d53253b48b7437892d6c45e8/queries/latex/highlights.scm -;; General syntax -(ERROR) @error +; General syntax +(command_name) @function @nospell -(command_name) @function (caption command: _ @function) +; Turn spelling on for text +(text) @spell + +; \text, \intertext, \shortintertext, ... +(text_mode + command: _ @function @nospell + content: (curly_group + (_) @none @spell)) + +; Variables, parameters +(placeholder) @variable + (key_value_pair - key: (_) @parameter + key: (_) @variable.parameter @nospell value: (_)) -[ - (line_comment) - (block_comment) - (comment_environment) -] @comment +(curly_group_spec + (text) @variable.parameter) -((line_comment) @preproc - (#lua-match? @preproc "^%% !TeX")) +(brack_group_argc) @variable.parameter [ - (brack_group) - (brack_group_argc) -] @parameter - -[(operator) "="] @operator + (operator) + "=" + "_" + "^" +] @operator "\\item" @punctuation.special -((word) @punctuation.delimiter -(#eq? @punctuation.delimiter "&")) +(delimiter) @punctuation.delimiter + +(math_delimiter + left_command: _ @punctuation.delimiter + left_delimiter: _ @punctuation.delimiter + right_command: _ @punctuation.delimiter + right_delimiter: _ @punctuation.delimiter) -["[" "]" "{" "}"] @punctuation.bracket ; "(" ")" has no syntactical meaning in LaTeX +[ + "[" + "]" + "{" + "}" +] @punctuation.bracket ; "(" ")" has no syntactical meaning in LaTeX -;; General environments +; General environments (begin - command: _ @text.environment - name: (curly_group_text (text) @text.environment.name)) + command: _ @module + name: (curly_group_text + (text) @label @nospell)) (end - command: _ @text.environment - name: (curly_group_text (text) @text.environment.name)) + command: _ @module + name: (curly_group_text + (text) @label @nospell)) -;; Definitions and references +; Definitions and references (new_command_definition - command: _ @function.macro - declaration: (curly_group_command_name (_) @function)) + command: _ @function.macro @nospell) + (old_command_definition - command: _ @function.macro - declaration: (_) @function) + command: _ @function.macro @nospell) + (let_command_definition - command: _ @function.macro - declaration: (_) @function) + command: _ @function.macro @nospell) (environment_definition - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) + command: _ @function.macro @nospell + name: (curly_group_text + (_) @label @nospell)) (theorem_definition - command: _ @function.macro - name: (curly_group_text (_) @text.environment.name)) + command: _ @function.macro @nospell + name: (curly_group_text_list + (_) @label @nospell)) (paired_delimiter_definition - command: _ @function.macro - declaration: (curly_group_command_name (_) @function)) + command: _ @function.macro @nospell + declaration: (curly_group_command_name + (_) @function)) (label_definition - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) + command: _ @function.macro + name: (curly_group_text + (_) @markup.link @nospell)) + (label_reference_range - command: _ @function.macro - from: (curly_group_text (_) @text.reference) - to: (curly_group_text (_) @text.reference)) + command: _ @function.macro + from: (curly_group_text + (_) @markup.link) + to: (curly_group_text + (_) @markup.link)) + (label_reference - command: _ @function.macro - names: (curly_group_text_list (_) @text.reference)) + command: _ @function.macro + names: (curly_group_text_list + (_) @markup.link)) + (label_number - command: _ @function.macro - name: (curly_group_text (_) @text.reference) - number: (_) @text.reference) + command: _ @function.macro + name: (curly_group_text + (_) @markup.link) + number: (_) @markup.link) (citation - command: _ @function.macro - keys: (curly_group_text_list) @text.reference) + command: _ @function.macro @nospell + keys: (curly_group_text_list) @markup.link @nospell) + +((hyperlink + command: _ @function @nospell + uri: (curly_group_uri + (_) @markup.link.url @nospell)) @_hyperlink) (glossary_entry_definition - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) + command: _ @function.macro @nospell + name: (curly_group_text + (_) @markup.link @nospell)) + (glossary_entry_reference - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) + command: _ @function.macro + name: (curly_group_text + (_) @markup.link)) (acronym_definition - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) + command: _ @function.macro @nospell + name: (curly_group_text + (_) @markup.link @nospell)) + (acronym_reference - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) + command: _ @function.macro + name: (curly_group_text + (_) @markup.link)) (color_definition - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) -(color_reference - command: _ @function.macro - name: (curly_group_text (_) @text.reference)) - -;; Math -[ - (displayed_equation) - (inline_formula) -] @text.math - -(math_environment - (begin - command: _ @text.math - name: (curly_group_text (text) @text.math))) - -(math_environment - (text) @text.math) + command: _ @function.macro + name: (curly_group_text + (_) @markup.link)) -(math_environment - (end - command: _ @text.math - name: (curly_group_text (text) @text.math))) +(color_reference + command: _ @function.macro + name: (curly_group_text + (_) @markup.link)?) -;; Sectioning +; Sectioning (title_declaration - command: _ @namespace - options: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + options: (brack_group + (_) @markup.heading.1)? + text: (curly_group + (_) @markup.heading.1)) (author_declaration - command: _ @namespace + command: _ @module authors: (curly_group_author_list - ((author)+ @text.title))) + (author)+ @markup.heading.1)) (chapter - command: _ @namespace - toc: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + toc: (brack_group + (_) @markup.heading.2)? + text: (curly_group + (_) @markup.heading.2)) (part - command: _ @namespace - toc: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + toc: (brack_group + (_) @markup.heading.2)? + text: (curly_group + (_) @markup.heading.2)) (section - command: _ @namespace - toc: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + toc: (brack_group + (_) @markup.heading.3)? + text: (curly_group + (_) @markup.heading.3)) (subsection - command: _ @namespace - toc: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + toc: (brack_group + (_) @markup.heading.4)? + text: (curly_group + (_) @markup.heading.4)) (subsubsection - command: _ @namespace - toc: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + toc: (brack_group + (_) @markup.heading.5)? + text: (curly_group + (_) @markup.heading.5)) (paragraph - command: _ @namespace - toc: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + toc: (brack_group + (_) @markup.heading.6)? + text: (curly_group + (_) @markup.heading.6)) (subparagraph - command: _ @namespace - toc: (brack_group (_) @text.title)? - text: (curly_group (_) @text.title)) + command: _ @module + toc: (brack_group + (_) @markup.heading.6)? + text: (curly_group + (_) @markup.heading.6)) -;; Beamer frames +; Beamer frames (generic_environment (begin name: (curly_group_text - (text) @text.environment.name) - (#any-of? @text.environment.name "frame")) + (text) @label) + (#any-of? @label "frame")) . - (curly_group (_) @text.title)) + (curly_group + (_) @markup.heading)) ((generic_command command: (command_name) @_name arg: (curly_group - (text) @text.title)) - (#eq? @_name "\\frametitle")) + (_) @markup.heading)) + (#eq? @_name "\\frametitle")) -;; Formatting ((generic_command command: (command_name) @_name - arg: (curly_group (_) @text.emphasis)) - (#eq? @_name "\\emph")) + arg: (curly_group + (_) @markup.italic)) + (#any-of? @_name "\\emph" "\\textit" "\\mathit")) ((generic_command command: (command_name) @_name - arg: (curly_group (_) @text.emphasis)) - (#match? @_name "^(\\\\textit|\\\\mathit)$")) + arg: (curly_group + (_) @markup.strong)) + (#any-of? @_name "\\textbf" "\\mathbf")) -((generic_command - command: (command_name) @_name - arg: (curly_group (_) @text.strong)) - (#match? @_name "^(\\\\textbf|\\\\mathbf)$")) +(generic_command + (command_name) @keyword.conditional + (#lua-match? @keyword.conditional "^\\if[a-zA-Z@]+$")) -((generic_command - command: (command_name) @_name - . - arg: (curly_group (_) @text.uri)) - (#match? @_name "^(\\\\url|\\\\href)$")) +(generic_command + (command_name) @keyword.conditional + (#any-of? @keyword.conditional "\\fi" "\\else")) -;; File inclusion commands +; File inclusion commands (class_include - command: _ @include + command: _ @keyword.import path: (curly_group_path) @string) (package_include - command: _ @include + command: _ @keyword.import paths: (curly_group_path_list) @string) (latex_include - command: _ @include - path: (curly_group_path) @string) + command: _ @keyword.import + path: (curly_group_path) @string.special.path) + +(verbatim_include + command: _ @keyword.import + path: (curly_group_path) @string.special.path) + (import_include - command: _ @include - directory: (curly_group_path) @string - file: (curly_group_path) @string) + command: _ @keyword.import + directory: (curly_group_path) @string.special.path + file: (curly_group_path) @string.special.path) -(bibtex_include - command: _ @include +(bibstyle_include + command: _ @keyword.import path: (curly_group_path) @string) + +(bibtex_include + command: _ @keyword.import + paths: (curly_group_path_list) @string.special.path) + (biblatex_include - "\\addbibresource" @include - glob: (curly_group_glob_pattern) @string.regex) + "\\addbibresource" @keyword.import + glob: (curly_group_glob_pattern) @string.regexp) (graphics_include - command: _ @include - path: (curly_group_path) @string) + command: _ @keyword.import + path: (curly_group_path) @string.special.path) + +(svg_include + command: _ @keyword.import + path: (curly_group_path) @string.special.path) + +(inkscape_include + command: _ @keyword.import + path: (curly_group_path) @string.special.path) + (tikz_library_import - command: _ @include + command: _ @keyword.import paths: (curly_group_path_list) @string) -(text) @spell -(inline_formula) @nospell -(displayed_equation) @nospell -(key_value_pair) @nospell -(generic_environment - begin: _ @nospell - end: _ @nospell) -(citation - keys: _ @nospell) -(command_name) @nospell +; Turn spelling off for whole nodes +[ + (label_reference) + (label_reference_range) + (label_number) + (glossary_entry_reference) + (acronym_reference) + (color_definition) + (color_reference) + (class_include) + (package_include) + (latex_include) + (verbatim_include) + (import_include) + (bibstyle_include) + (bibtex_include) + (biblatex_include) + (graphics_include) + (svg_include) + (inkscape_include) + (tikz_library_import) +] @nospell + +; Math +[ + (displayed_equation) + (inline_formula) +] @markup.math @nospell + +(math_environment + (_) @markup.math) + +; Comments +[ + (line_comment) + (block_comment) + (comment_environment) +] @comment @spell + +((line_comment) @keyword.directive @nospell + (#lua-match? @keyword.directive "^%% !TeX")) + +((line_comment) @keyword.directive @nospell + (#lua-match? @keyword.directive "^%%&")) diff --git a/vendored_parsers/tree-sitter-latex/package.json b/vendored_parsers/tree-sitter-latex/package.json index c5c095f3f..6bc45fda6 100644 --- a/vendored_parsers/tree-sitter-latex/package.json +++ b/vendored_parsers/tree-sitter-latex/package.json @@ -50,16 +50,5 @@ "prettier": "^3.0.3", "tree-sitter-cli": "^0.24.1", "prebuildify": "^6.0.0" - }, - "tree-sitter": [ - { - "scope": "source.tex", - "file-types": [ - "tex", - "sty", - "cls", - "aux" - ] - } - ] + } } diff --git a/vendored_parsers/tree-sitter-latex/src/grammar.json b/vendored_parsers/tree-sitter-latex/src/grammar.json index a2ebfe26d..c1fa7df0c 100644 --- a/vendored_parsers/tree-sitter-latex/src/grammar.json +++ b/vendored_parsers/tree-sitter-latex/src/grammar.json @@ -1,4 +1,5 @@ { + "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", "name": "latex", "word": "command_name", "rules": { diff --git a/vendored_parsers/tree-sitter-latex/src/node-types.json b/vendored_parsers/tree-sitter-latex/src/node-types.json index 31c057156..b074b3d23 100644 --- a/vendored_parsers/tree-sitter-latex/src/node-types.json +++ b/vendored_parsers/tree-sitter-latex/src/node-types.json @@ -6624,6 +6624,7 @@ { "type": "source_file", "named": true, + "root": true, "fields": {}, "children": { "multiple": true, diff --git a/vendored_parsers/tree-sitter-latex/tree-sitter.json b/vendored_parsers/tree-sitter-latex/tree-sitter.json new file mode 100644 index 000000000..b5d34307a --- /dev/null +++ b/vendored_parsers/tree-sitter-latex/tree-sitter.json @@ -0,0 +1,38 @@ +{ + "grammars": [ + { + "name": "@pfoerster/latex", + "camelcase": "PfoersterLatex", + "scope": "source.tex", + "path": ".", + "file-types": [ + "tex", + "sty", + "cls", + "aux" + ] + } + ], + "metadata": { + "version": "0.4.0", + "license": "MIT", + "description": "LaTeX grammar for the tree-sitter parsing library", + "authors": [ + { + "name": "Patrick Förster", + "email": "patrick.foerster@outlook.de" + } + ], + "links": { + "repository": "git+https://github.com/latex-lsp/tree-sitter-latex.git" + } + }, + "bindings": { + "c": true, + "go": true, + "node": true, + "python": true, + "rust": true, + "swift": true + } +}