diff options
Diffstat (limited to 'elpa/auctex-13.1.3/tex-ispell.el')
-rw-r--r-- | elpa/auctex-13.1.3/tex-ispell.el | 449 |
1 files changed, 449 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/tex-ispell.el b/elpa/auctex-13.1.3/tex-ispell.el new file mode 100644 index 0000000..c743baf --- /dev/null +++ b/elpa/auctex-13.1.3/tex-ispell.el @@ -0,0 +1,449 @@ +;;; tex-ispell.el --- AUCTeX skip additions for Ispell -*- lexical-binding: t; -*- + +;; Copyright (C) 2016-2022 Free Software Foundation, Inc. + +;; Author: Arash Esbati <arash@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Keywords: tex, wp, convenience + +;; This file is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; This file is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GNU Emacs; see the file COPYING. If not, write to +;; the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; This file provides additions to skip list of Ispell (in this +;; context, Ispell is synonym for Ispell, Aspell and Hunspell spelling +;; checker programs). Macro arguments and environments skipped by +;; Ispell are stored in the car and/or cdr of +;; `ispell-tex-skip-alists'. This file uses two functions +;; `TeX-ispell-skip-setcar' and `TeX-ispell-skip-setcdr' defined in +;; `tex.el' to add new items to this variable. + +;; Ispell has a lot of LaTeX macros and environments already built-in. +;; E.g., check this link for Hunspell program: + +;; https://github.com/hunspell/hunspell/blob/master/src/parsers/latexparser.cxx + +;; Ispell does not check spelling in the preamble of a document. +;; Hence, only document macros and environments should be added here. +;; Currently, this file has support for the following macro packages: + +;; acro.sty +;; amsmath.sty +;; attachfile.sty +;; booktabs.sty +;; breqn.sty +;; caption.sty +;; cleveref.sty +;; empheq.sty +;; enumitem.sty +;; fancyref.sty +;; fancyvrb.sty +;; filecontents.sty +;; fontaxes.sty +;; fontspec.sty +;; hyperref.sty +;; listings.sty +;; ltxdoc.cls +;; ltxtable.sty +;; mdframed.sty +;; minted.sty +;; nameref.sty +;; pythontex.sty +;; siunitx.sty +;; splitidx.sty +;; stabular.sty +;; tabularx.sty +;; tabulary.sty +;; tcolorbox.sty +;; tikz.sty +;; varioref.sty +;; xltabular.sty + +;; If you have further additions, drop a line to <auctex-devel@gnu.org>. + +;;; Code: + +(require 'tex) + +;; Add new macros here: +(eval-when-compile + (defvar TeX-ispell-skip-cmds-list + '(;; acro.sty + ("ac" . 1) + ("ac*" . 1) + ("Ac" . 1) + ("Ac*" . 1) + ("acs" . 1) + ("acs*" . 1) + ("acl" . 1) + ("acl*" . 1) + ("Acl" . 1) + ("Acl*" . 1) + ("aca" . 1) + ("aca*" . 1) + ("acf" . 1) + ("acf*" . 1) + ("Acf" . 1) + ("Acf*" . 1) + ("acp" . 1) + ("acp*" . 1) + ("Acp" . 1) + ("Acp*" . 1) + ("acsp" . 1) + ("acsp*" . 1) + ("aclp" . 1) + ("aclp*" . 1) + ("Aclp" . 1) + ("Aclp*" . 1) + ("acap" . 1) + ("acap*" . 1) + ("acfp" . 1) + ("acfp*" . 1) + ("Acfp" . 1) + ("Acfp*" . 1) + ("Iac" . 1) + ("iacs" . 1) + ("iacl" . 1) + ("acflike" . 1) + ("acflike*" . 1) + ("acfplike" . 1) + ("acfplike*" . 1) + ("acsingle" . 1) + ("acsingle*" . 1) + ("Acsingle" . 1) + ("Acsingle*" . 1) + ("acreset" . 1) + ("acuse" . 1) + ("acsetup" . 1) + ;; attachfile.sty + ("attachfile" . 1) + ("attachfilesetup" . 1) + ("textattachfile" . 1) + ;; booktabs.sty + ("addlinespace" . 0) + ("specialrule" . 3) + ;; caption.sty + ("captionlistentry" . 0) + ("captionof" . 1) + ("captionof*" . 1) + ("captionsetup" . 1) + ("captionsetup*" . 1) + ("clearcaptionsetup" . 1) + ("clearcaptionsetup*" . 1) + ;; cleveref.sty + ("cref" . 1) + ("Cref" . 1) + ("cref*" . 1) + ("Cref*" . 1) + ("cpageref" . 1) + ("Cpageref" . 1) + ("namecref" . 1) + ("nameCref" . 1) + ("lcnamecref" . 1) + ("labelcref" . 1) + ("crefrange" . 2) + ("Crefrange" . 2) + ("cpagerefrange" . 2) + ("Cpagerefrange" . 2) + ("crefrange*" . 2) + ("Crefrange*" . 2) + ;; empheq.sty + ("empheqset" . 1) + ;; fancyref.sty + ("fref" . 1) + ("Fref" . 1) + ;; fancyvrb.sty + ("fvset" . 1) + ("VerbatimInput" . 1) + ;; fontaxes.sty + ("figureversion" . 1) + ;; fontspec.sty + ("addfontfeatures" . 1) + ;; hyperref.sty + ("hypersetup" . 1) + ("href" . 1) + ("url" . 1) + ("nolinkurl" . 1) + ("hyperbaseurl" . 1) + ("hyperimage" . 1) + ("hyperdef" . 2) + ("hyperref" . 3) + ("hyperlink" . 1) + ("hypertarget" . 1) + ("autoref" . 1) + ("autoref*" . 1) + ("autopageref" . 1) + ("autopageref*" . 1) + ;; listings.sty + ("lstinputlisting" . 1) + ("lstset" . 1) + ;; ltxdoc.cls + ("cs" . 1) + ;; ltxtable.sty + ("LTXtable" . 2) + ;; mdframed.sty + ("mdfsetup" . 1) + ("mdfapptodefinestyle" . 2) + ;; minted.sty + ("inputminted" . 2) + ("setminted" . 1) + ("setmintedinline" . 1) + ;; nameref.sty + ("nameref" . 1) + ("Nameref" . 1) + ;; pythontex.sty: Only add the macros which will be used in the + ;; document; others should be in the preamble + ("setpythontexfv" . 1) + ("useprintpythontex" . 1) + ("usestdoutpythontex" . 1) + ("inputpygments" . 1) + ("setpygmentsfv" . 1) + ("setpygmentspygopt" . 1) + ;; siunitx.sty + ("num" . 1) + ("si" . 1) + ("sisetup" . 1) + ("SI" . 2) + ;; splitidx.sty + ("sindex" . 1) + ;; tcolorbox.sty + ("tcbox" . 0) + ("tcbset" . 1) + ("tcbsetforeverylayer" . 1) + ;; tcolorbox.sty -- raster library + ("tcbitem" . 0) + ;; varioref.sty + ("vref" . 1) + ("Vref" . 1) + ("vref*" . 1) + ("Ref" . 1) + ("vpageref" . 1) + ("vpageref*" . 1) + ("fullref" . 1) + ("vrefrange" . 2) + ("vrefrange*" . 2) + ("vpagerefrange" . 2) + ("vpagerefrange*" . 2)) + "List of commands with arguments to be skipped. +Each element of the list is a cons cell with command name +\(string) as car and the number of mandatory arguments to be +skipped as cdr. If number is 0, then only skip over the optional +argument and spell check the mandatory one.")) + + +;; Add new environments with one optional argument here: +(eval-when-compile + (defvar TeX-ispell-skip-envs-opt-arg-list + '(;; enumitem.sty + "description" + "description*" + "enumerate" + "enumerate*" + "itemize" + "itemize*" + ;; mdframed.sty + "mdframed" + ;; tcolorbox.sty + "tcolorbox" + ;; tcolorbox.sty -- raster library + "tcbraster" + "tcbitemize") + "List of LaTeX environments with an opt argument to be skipped.")) + + +;; Add new environments which should be skipped entirely here: +(eval-when-compile + (defvar TeX-ispell-skip-envs-list + '(;; amsmath.sty + "align" + "align*" + "alignat" + "alignat*" + "flalign" + "flalign*" + "gather" + "gather*" + "multline" + "multline*" + ;; breqn.sty + "darray" + "darray*" + "dgroup" + "dgroup*" + "dmath" + "dmath*" + "dseries" + "dseries*" + ;; empheq.sty + "empheq" + ;; fancyvrb.sty + "BVerbatim" + "BVerbatim*" + "LVerbatim" + "LVerbatim*" + "SaveVerbatim" + "Verbatim" + "Verbatim*" + "VerbatimOut" + ;; listings.sty + "lstlisting" + ;; minted.sty + "minted" + ;; pythontex.sty + "pycode" + "pysub" + "pyverbatim" + "pyblock" + "pyconsole" + "pyconcode" + "pyconverbatim" + "pylabcode" + "pylabsub" + "pylabverbatim" + "pylabblock" + "pylabconsole" + "pylabconcode" + "pylabconverbatim" + "sympycode" + "sympysub" + "sympyverbatim" + "sympyblock" + "sympyconsole" + "sympyconcode" + "sympyconverbatim" + "pygments" + ;; tikz.sty + "tikzpicture") + "List of LaTeX environments which will be skipped entirely. +Environments for math or verbatim text are candidates for this list.")) + + +;; Add others delimited here: +(TeX-ispell-skip-setcar + `(;; LaTeX-base + ("\\\\(" . "\\\\)") + ("\\\\raisebox" TeX-ispell-tex-arg-end 1 2 0) + ;; booktabs.sty + ("\\\\cmidrule" . "{[-0-9]+}") + ;; fontspec.sty + ("\\\\fontspec" TeX-ispell-tex-arg-end 1 1 0))) + + +;; Special setup for verbatim macros: +(defcustom TeX-ispell-verb-delimiters "!|#~\"/+^-" + "String with all delimiters for verbatim macros. +Characters special in regexps like `^' and `-' must come last and +not be quoted. An opening brace `{', asterisk `*' and at-sign +`@' should not be used as they are not recognized by +`font-latex.el' correctly." + :group 'TeX-misc + :type 'string) + +;; listings.sty, fancyvrb.sty, pythontex.sty: With opt. argument only +;; before verb content: +(TeX-ispell-skip-setcar + `((,(concat "\\\\" (regexp-opt '("Verb" "lstinline" + "py" "pyc" "pys" "pyv" "pyb" + "pycon" "pyconc" "pyconv" + "pylab" "pylabc" "pylabs" "pylabv" "pylabb" + "pylabcon" "pylabconc" "pylabconv" + "sympy" "sympyc" "sympys" "sympyv" "sympyb" + "sympycon" "sympyconc" "sympyconv"))) + TeX-ispell-tex-arg-verb-end))) + +;; minted.sty: With opt. and mandatory argument before verb content. +;; pythontex.sty: With one mandatory argument before verb content: +(TeX-ispell-skip-setcar + `((,(concat "\\\\" (regexp-opt '("mint" "mintinline" "pygment"))) + TeX-ispell-tex-arg-verb-end 1))) + + +;; Add environments here: +(TeX-ispell-skip-setcdr + '(;; filecontents.sty + ("filecontents\\*?" ispell-tex-arg-end) + ;; stabular.sty + ("stabular" ispell-tex-arg-end) + ("stabular\\*" TeX-ispell-tex-arg-end) + ;; tabularx.sty, tabulary.sty, Standard LaTeX tabular*-env + ("tabular[*xy]" TeX-ispell-tex-arg-end) + ;; tcolorbox.sty -- raster library + ("tcboxed\\(raster\\|itemize\\)" ispell-tex-arg-end) + ;; xltabular.sty + ("xltabular" ispell-tex-arg-end 2))) + + +;; No customization below this line + +(eval-when-compile + (defun TeX-ispell-sort-skip-cmds-list (arg) + "Return elements from `TeX-ispell-skip-cmds-list' acc. to ARG." + (when (member arg '(0 1 2 3)) + (let (cmds) + (dolist (elt TeX-ispell-skip-cmds-list) + (when (= (cdr elt) arg) + (push (car elt) cmds))) + cmds)))) + +(defvar TeX-ispell-skip-cmds-opt-arg-regexp + (eval-when-compile + (concat "\\\\" + (regexp-opt (TeX-ispell-sort-skip-cmds-list 0) t))) + "Regexp of LaTeX commands with only optional arguments to be skipped.") + +(defvar TeX-ispell-skip-cmds-one-arg-regexp + (eval-when-compile + (concat "\\\\" + (regexp-opt (TeX-ispell-sort-skip-cmds-list 1) t))) + "Regexp of LaTeX commands with one argument to be skipped.") + +(defvar TeX-ispell-skip-cmds-two-args-regexp + (eval-when-compile + (concat "\\\\" + (regexp-opt (TeX-ispell-sort-skip-cmds-list 2) t))) + "Regexp of LaTeX commands with two arguments to be skipped.") + +(defvar TeX-ispell-skip-cmds-three-args-regexp + (eval-when-compile + (concat "\\\\" + (regexp-opt (TeX-ispell-sort-skip-cmds-list 3) t))) + "Regexp of LaTeX commands with three arguments to be skipped.") + +(defvar TeX-ispell-skip-envs-opt-arg-regexp + (eval-when-compile + (regexp-opt TeX-ispell-skip-envs-opt-arg-list t)) + "Regexp of LaTeX environments with an opt argument to be skipped.") + +(defvar TeX-ispell-skip-envs-regexp + (eval-when-compile + (regexp-opt TeX-ispell-skip-envs-list t)) + "Regexp of LaTeX environments which will be skipped entirely.") + +;; Make them available to Ispell: +(TeX-ispell-skip-setcar + `((,TeX-ispell-skip-cmds-opt-arg-regexp ispell-tex-arg-end 0) + (,TeX-ispell-skip-cmds-one-arg-regexp ispell-tex-arg-end) + (,TeX-ispell-skip-cmds-two-args-regexp ispell-tex-arg-end 2) + (,TeX-ispell-skip-cmds-three-args-regexp ispell-tex-arg-end 3))) + +(TeX-ispell-skip-setcdr + `((,TeX-ispell-skip-envs-opt-arg-regexp ispell-tex-arg-end 0) + ,(cons TeX-ispell-skip-envs-regexp + (concat "\\\\end{" TeX-ispell-skip-envs-regexp "}")))) + +(provide 'tex-ispell) + +;;; tex-ispell.el ends here |