summaryrefslogtreecommitdiff
path: root/elpa/auctex-13.1.3/tex-ispell.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/auctex-13.1.3/tex-ispell.el')
-rw-r--r--elpa/auctex-13.1.3/tex-ispell.el449
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