diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/splitidx.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/splitidx.el | 315 |
1 files changed, 315 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/splitidx.el b/elpa/auctex-13.1.3/style/splitidx.el new file mode 100644 index 0000000..edf52c2 --- /dev/null +++ b/elpa/auctex-13.1.3/style/splitidx.el @@ -0,0 +1,315 @@ +;;; splitidx.el --- AUCTeX style for `splitidx.sty' (v1.2a) -*- lexical-binding: t; -*- + +;; Copyright (C) 2016, 2018, 2020 Free Software Foundation, Inc. + +;; Author: Arash Esbati <arash@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2015-09-19 +;; Keywords: tex + +;; This file is part of AUCTeX. + +;; AUCTeX 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. + +;; AUCTeX 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 AUCTeX; 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 adds support for `splitidx.sty' (v1.2a) from 2013/04/09. +;; `splitidx.sty' is part of TeXLive. + +;; The main index macro provided by `splitidx.sty' is +;; +;; \sindex[<shortcut>]{<index-entry>} +;; +;; where <shortcut> identifies the target where <index-entry> is going +;; into. This style checks if RefTeX is loaded and adds "\sindex" to +;; index macros known by RefTeX; this is described in RefTeX manual +;; section 5.5 Defining Index Macros: +;; +;; (setq reftex-index-macros '(("\\sindex[]{*}" 1 ?s "" nil t))) +;; +;; To make things more user friendly, this style does not hard-code +;; the key `?s' and offers a customizable variable called +;; `LaTeX-splitidx-sindex-reftex-quick-id-key'. Customize this +;; variable to another unique key if you have other preference. Also +;; note the integer 1 after "\\sindex[]{*}". This tells RefTeX to +;; look in first optional argument to find out which index the entry +;; belongs to. If omitted, RefTeX puts the index entry into "idx". + +;; `splitidx.sty' provides also the option `idxcommands' where a +;; command with the name of the <shortcut> is defined for each +;; declared index. An example from splitidx.pdf: +;; +;; \documentclass{article} +;; \usepackage[idxcommands]{splitidx} +;; +;; \newindex[General Index]{idx} % Name and shortcut of the 1st index +;; \newindex[Index of Animals]{ani} % ... 2nd index +;; \newindex[Index of Fruits]{fru} % ... 3rd index +;; \newindex[Index of Vegetables]{veg} % ... 4th index +;; ... +;; +;; Now four index commands \idx, \ani, \fru and \veg are available. +;; This style adds these commands to AUCTeX and RefTeX (check function +;; `LaTeX-splitidx-auto-cleanup'). The only thing missing is adding +;; these commands to `reftex-index-macros' since the unique keys must +;; be set by user. To get full advantage from RefTeX, remember that +;; ?i, ?I, and ?g are reserved and set something like this in your +;; init-file: +;; +;; (add-to-list 'reftex-index-macros '("\\idx" "idx" ?x "" nil t)) +;; (add-to-list 'reftex-index-macros '("\\ani" "ani" ?a "" nil t)) +;; (add-to-list 'reftex-index-macros '("\\fru" "fru" ?f "" nil t)) +;; (add-to-list 'reftex-index-macros '("\\veg" "veg" ?v "" nil t)) +;; +;; Or you can do this in your tex file: +;; +;; %%% Local Variables: +;; %%% mode: latex +;; %%% TeX-master: t +;; %%% eval: (add-to-list 'reftex-index-macros '("\\idx" "idx" ?x "" nil t)) +;; %%% eval: (add-to-list 'reftex-index-macros '("\\ani" "ani" ?a "" nil t)) +;; %%% eval: (add-to-list 'reftex-index-macros '("\\fru" "fru" ?f "" nil t)) +;; %%% eval: (add-to-list 'reftex-index-macros '("\\veg" "veg" ?v "" nil t)) +;; %%% End: +;; + +;;; Code: + +;; Needed for auto-parsing: +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) + +;; Setup parsing for \newindex: +(TeX-auto-add-type "splitidx-newindex" "LaTeX" "splitidx-newindices") + +(defvar LaTeX-splitidx-newindex-regex + `(,(concat "\\\\new\\(?:protected\\)?index" + "\\(?:\\[[^]]*\\]\\)?" + "{\\([^}]+\\)}") + 1 LaTeX-auto-splitidx-newindex) + "Matches the argument of `\\newindex' from `splitidx.sty'.") + +(defun LaTeX-splitidx-auto-prepare () + "Clear `LaTeX-auto-splitidx-newindex' before parsing." + (setq LaTeX-auto-splitidx-newindex nil)) + +(defun LaTeX-splitidx-auto-cleanup () + "Process parsed results for \"splitidx.sty\"." + (when (LaTeX-provided-package-options-member "splitidx" "idxcommands") + (dolist (elt (mapcar #'car (LaTeX-splitidx-newindex-list))) + ;; Make every element available as a command + (TeX-add-symbols `(,elt TeX-arg-index)) + ;; Add new macros's to `ispell-tex-skip-alist': skip one argument + (TeX-ispell-skip-setcar `((,elt ispell-tex-arg-end))) + ;; font-locking + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,elt "{")) + 'reference)) + ;; Prepare for parsing + (add-to-list 'LaTeX-auto-regexp-list + `(,(concat + "\\\\" + elt + "{\\([^}{]*\\({[^}{]*\\({[^}{]*\\({[^}{]*}[^}{]*\\)*" + "}[^}{]*\\)*}[^}{]*\\)*\\)}") + 1 LaTeX-auto-index-entry)) + ;; Cater for completion + (add-to-list 'TeX-complete-list + `(,(concat "\\\\" elt "{\\([^{}\n\r]*\\)") + 1 LaTeX-index-entry-list "}")) ))) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-splitidx-auto-prepare t) +(add-hook 'TeX-auto-cleanup-hook #'LaTeX-splitidx-auto-cleanup t) +(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) + +(TeX-add-style-hook + "splitidx" + (lambda () + + (TeX-add-symbols + + ;; 3.1 Setup + '("newindex" + [ "Index name" ] + (TeX-arg-eval + (lambda () + (let ((shortcut (TeX-read-string + (TeX-argument-prompt nil nil "Short cut")))) + (LaTeX-add-splitidx-newindices shortcut) + (format "%s" shortcut))))) + + ;; 3.2 Marking up index entries + '("sindex" + ;; I don't use `[ TeX-arg-index-tag ]' here + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Short cut") + (LaTeX-splitidx-newindex-list) ] + TeX-arg-index) + + ;; 3.4 Customizing index entries + '("AtWriteToIndex" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Short cut") + (LaTeX-splitidx-newindex-list)) + t) + + '("AtNextWriteToIndex" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Short cut") + (LaTeX-splitidx-newindex-list)) + t) + + ;; 3.6 Preventing premature expansion of index entries + '("newprotectedindex" + [ "Index name" ] + (TeX-arg-eval + (lambda () + (let ((shortcut (TeX-read-string + (TeX-argument-prompt nil nil "Short cut")))) + (LaTeX-add-splitidx-newindices shortcut) + (format "%s" shortcut))))) + + ;; 3.7 Including the generated indices in your document + '("printindex" + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Short cut") + (LaTeX-splitidx-newindex-list) ] + [ "Index name" ]) + + '("printindex*" 0) + + '("printsubindex" + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Short cut") + (LaTeX-splitidx-newindex-list) ] + [ "Index name" ]) + + '("printsubindex*" 0) + + '("setindexpreamble" + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Short cut") + (LaTeX-splitidx-newindex-list) ] + t) + + '("useindexpreamble" [ TeX-arg-macro ]) + + '("indexshortcut" 0) + + '("extendtheindex" 4) ) + + ;; Add splitidx to the parser. + (TeX-auto-add-regexp LaTeX-splitidx-newindex-regex) + + ;; Borrowed from index.el + (add-to-list 'LaTeX-auto-regexp-list + `(,(concat "\\\\sindex\\(?:\\[[^{}]*\\]\\)?" + "{\\([^}{]*\\({[^}{]*\\({[^}{]*\\({[^}{]*}[^}{]*\\)*" + "}[^}{]*\\)*}[^}{]*\\)*\\)}") + 1 LaTeX-auto-index-entry)) + + ;; Completion for \sindex entries + (add-to-list 'TeX-complete-list + '("\\\\sindex\\(\\[[^][{}]*\\]\\)?{\\([^{}\n\r]*\\)" + 2 LaTeX-index-entry-list "}")) + + ;; Completion for the |see macro + (add-to-list 'TeX-complete-list + '("|see{\\([^{}\n\r]*\\)" 1 LaTeX-index-entry-list)) + + ;; Tell RefTeX with `reftex-add-index-macros' + (when (fboundp 'reftex-add-index-macros) + (reftex-add-index-macros + `(("\\sindex[]{*}" 1 ,LaTeX-splitidx-sindex-reftex-quick-id-key "" nil t)))) + + ;; 3.2 Marking up index entries + ;; \index should be an alias for \sindex + (when (LaTeX-provided-package-options-member "splitidx" "useindex") + (TeX-add-symbols + '("index" + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Short cut") + (LaTeX-splitidx-newindex-list) ] + (TeX-arg-index))) + ;; Tell RefTeX to look in the optional arg. for the index short cut + (when (fboundp 'reftex-add-index-macros) + (reftex-add-index-macros '(("\\index[]{*}" 1 ?i "" nil t)))) + (add-to-list 'LaTeX-auto-regexp-list + `(,(concat + "\\\\index\\(?:\\[[^{}]*\\]\\)?" + "{\\([^}{]*\\({[^}{]*\\({[^}{]*\\({[^}{]*}[^}{]*\\)*" + "}[^}{]*\\)*}[^}{]*\\)*\\)}") + 1 LaTeX-auto-index-entry)) + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("index" "[{")) + 'reference))) + + ;; 3.5 Automatic custom index commands + ;; With package option `idxcommands', one can write \foo{<entry>} + ;; instead of \sindex[foo]{<entry>} + (when (and (LaTeX-provided-package-options-member "splitidx" "idxcommands") + (LaTeX-splitidx-newindex-list)) + (dolist (elt (mapcar #'car (LaTeX-splitidx-newindex-list))) + ;; Make every `foo' available as a command + (TeX-add-symbols `(,elt TeX-arg-index)) + ;; Add new macros's to `ispell-tex-skip-alist': skip one argument + (TeX-ispell-skip-setcar `((,elt ispell-tex-arg-end))) + ;; Cater for font-locking + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,elt "{")) + 'reference)) + ;; Add defined <entry> to `LaTeX-index-entry-list' + (add-to-list 'LaTeX-auto-regexp-list + `(,(concat + "\\\\" + elt + "{\\([^}{]*\\({[^}{]*\\({[^}{]*\\({[^}{]*}[^}{]*\\)*" + "}[^}{]*\\)*}[^}{]*\\)*\\)}") + 1 LaTeX-auto-index-entry)) )) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("newindex" "[{") + ("AtWriteToIndex" "{{") + ("AtNextWriteToIndex" "{{") + ("newprotectedindex" "[{") + ("setindexpreamble" "[{") + ("useindexpreamble" "[") + ("extendtheindex" "{{{{")) + 'function) + (font-latex-add-keywords '(("sindex" "[{")) + 'reference))) + TeX-dialect) + +(defvar LaTeX-splitidx-package-options + '("makeindex" + "useindex" + "allintoone" + "split" + "protected" + "idxcommands") + "Prompt for package options for the splitidx package.") + +;;; splitidx.el ends here |