branch: main commit 809797bbe9f9df9ded0693e225aea32c9be4541f Author: Arash Esbati <ar...@gnu.org> Commit: Arash Esbati <ar...@gnu.org>
Add new styles glossaries-extra.el and glossaries.el * NEWS.org (Added): Announce new files. * style/glossaries-extra.el: * style/glossaries.el: New files. --- NEWS.org | 3 +- style/glossaries-extra.el | 93 ++++++++++++ style/glossaries.el | 349 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 444 insertions(+), 1 deletion(-) diff --git a/NEWS.org b/NEWS.org index a873d211..4d794294 100644 --- a/NEWS.org +++ b/NEWS.org @@ -24,7 +24,8 @@ - Add new custom option ~TeX-fold-alert-color~ which determines the color used when folding the ~\alert~ macro, defaults to ~red~. -- Add new support files =style/inlinegraphicx.el=, =style/minted2.el= +- Add new support files =style/glossaries-extra.el=, + =style/glossaries.el=, =style/inlinegraphicx.el=, =style/minted2.el= (=style/minted.el= is updated to package v3.1.2) and =style/stocksize.el=. diff --git a/style/glossaries-extra.el b/style/glossaries-extra.el new file mode 100644 index 00000000..21998865 --- /dev/null +++ b/style/glossaries-extra.el @@ -0,0 +1,93 @@ +;;; glossaries-extra.el - AUCTeX style for `glossaries-extra.sty' (v1.53) -*- lexical-binding: t; -*- + +;; Copyright (C) 2024 Free Software Foundation, Inc. + +;; Author: Arash Esbati <ar...@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2024-11-11 +;; 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 this program. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This file adds uncomplete support for `glossaries-extra.sty' (v1.53) +;; from 2023/09/29. `glossaries-extra.sty' is huge, and this style +;; covers only part of the macros described in +;; `glossaries-extra-manual.pdf'. + +;; FIXME: Please make me more sophisticated! + +;;; Code: + +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(defvar LaTeX-glossaries-package-options-list) +(declare-function font-latex-add-keywords "font-latex" (keywords class)) + +(TeX-add-style-hook + "glossaries-extra" + (lambda () + + ;; Run the style hook `glossaries.sty': + (TeX-run-style-hooks "glossaries") + + (TeX-add-symbols + '("longnewglossaryentry*" LaTeX-glossaries-insert-newentry + (TeX-arg-key-val (LaTeX-glossaries-newentry-keyval-options) nil nil ?\s) + t) + + '("newabbreviation" + [TeX-arg-key-val (LaTeX-glossaries-newentry-keyval-options) nil nil ?\s] + LaTeX-glossaries-insert-newentry + "Short form" "Long form")) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("newabbreviation" "[{{{")) + 'function))) + TeX-dialect) + + +(defvar LaTeX-glossaries-extra-package-options-list + '(("undefaction" ("error" "warn")) + ("docdef" ("false" "restricted" "atom" "true")) + ("stylemods") + ("indexcrossrefs" ("true" "false")) + ("autoseeindex" ("true" "false")) + ("record" ("off" "only" "nameref" "hybrid")) + ("equation" ("true" "false")) + ("floats" ("true" "false")) + ("indexcounter") + ;; 2.7. Acronym and Abbreviation Options + ("abbreviations") + ;; 2.9. Other Options + ("accsupp") + ("prefix") + ("nomissingglstext" ("true" "false"))) + "Package options for the glossaries-extra package.") + +(defun LaTeX-glossaries-extra-package-options () + "Read the glossaries-extra package options from the user." + (TeX-load-style "glossaries") + (TeX-read-key-val t (append + LaTeX-glossaries-package-options-list + LaTeX-glossaries-extra-package-options-list))) + +;;; glossaries-extra.el ends here diff --git a/style/glossaries.el b/style/glossaries.el new file mode 100644 index 00000000..93f5b1e9 --- /dev/null +++ b/style/glossaries.el @@ -0,0 +1,349 @@ +;;; glossaries.el - AUCTeX style for `glossaries.sty' (v4.55) -*- lexical-binding: t; -*- + +;; Copyright (C) 2024 Free Software Foundation, Inc. + +;; Author: Arash Esbati <ar...@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2024-11-11 +;; 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 this program. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; This file adds uncomplete support for `glossaries.sty' (v4.55) from +;; 2024/11/01. `glossaries.sty' is huge, and this style covers only +;; part of the macros described in `glossaries-user.pdf'. + +;; FIXME: Please make me more sophisticated! + +;;; Code: + +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords "font-latex" (keywords class)) + +(defun LaTeX-glossaries-newentry-keyval-options () + "Return key=value options for glossaries defining macros." + (append + `(("parent" ,(mapcar #'car (LaTeX-glossaries-newentry-list)))) + (when (member "glossaries-extra" (TeX-style-list)) + '(("category") + ("seealso") + ("alias") + ("group") + ("location"))) + '(("name") + ("description") + ("descriptionplural") + ("text") + ("first") + ("plural") + ("firstplural") + ("symbol") + ("symbolplural") + ("sort") + ("type") + ("user1") + ("user2") + ("user3") + ("user4") + ("user5") + ("user6") + ("nonumberlist" ("true" "false")) + ("see") + ("counter") + ;; The following keys are reserved for \newacronym and + ;; \newabbreviation: + ("long") + ("longplural") + ("short") + ("shortplural")))) + +(defun LaTeX-glossaries-gls-keyval-options () + "Return key=value options for glossaries referencing macros." + (append + (when (member "glossaries-extra" (TeX-style-list)) + '(("noindex" ("true" "false")) + ("hyperoutside" ("true" "false")) + ("wrgloss" ("before" "after")) + ("textformat") + ("innertextformat") + ("prefix") + ("thevalue") + ("theHvalue") + ("prereset") + ("preunset") + ("postunset"))) + '(("hyper" ("true" "false")) + ("format") + ("counter") + ("local" ("true" "false"))))) + +;; Setup for defining macros: +(TeX-auto-add-type "glossaries-newentry" "LaTeX" "glossaries-newentries") + +(defvar LaTeX-glossaries-newentry-regexp + `(,(concat (regexp-quote TeX-esc) + (regexp-opt '("newglossaryentry" + "longnewglossaryentry" + "provideglossaryentry" + "longprovideglossaryentry" + "newacronym" + ;; These macros are defined in + ;; `glossaries-extra.sty', but we add them + ;; here in order to save some regexp groups: + "newabbreviation" + "glsxtrnewsymbol")) + ;; Allow one level of braces inside of the optional arg: + "\\(?:\\[[^][]*\\(?:{[^}{]*}[^}{]*\\)*\\]\\)?" + "{\\([^}]+\\)}") + 1 LaTeX-auto-glossaries-newentry) + "Match the label argument of glossaries macros for new labels.") + +(defun LaTeX-glossaries-insert-newentry (optional &optional prompt) + "Read and insert the new entry argument for glossaries macros." + (let ((entry (TeX-read-string + (TeX-argument-prompt optional prompt "New label")))) + (LaTeX-add-glossaries-newentries entry) + (TeX-argument-insert entry optional))) + +(TeX-add-style-hook + "glossaries" + (lambda () + + ;; Add regexp to the parser: + (TeX-auto-add-regexp LaTeX-glossaries-newentry-regexp) + + (TeX-add-symbols + '("newglossaryentry" LaTeX-glossaries-insert-newentry + (TeX-arg-key-val (LaTeX-glossaries-newentry-keyval-options) nil nil ?\s)) + + '("longnewglossaryentry" LaTeX-glossaries-insert-newentry + (TeX-arg-key-val (LaTeX-glossaries-newentry-keyval-options) nil nil ?\s) + t) + + '("provideglossaryentry" LaTeX-glossaries-insert-newentry + (TeX-arg-key-val (LaTeX-glossaries-newentry-keyval-options) nil nil ?\s)) + + '("longprovideglossaryentry" LaTeX-glossaries-insert-newentry + (TeX-arg-key-val (LaTeX-glossaries-newentry-keyval-options) nil nil ?\s) + t) + + '("newacronym" + [TeX-arg-key-val (LaTeX-glossaries-newentry-keyval-options) nil nil ?\s] + LaTeX-glossaries-insert-newentry + "Short form" "Long form") + + '("setupglossaries" + (TeX-arg-key-val + (lambda () + (seq-remove (lambda (elt) + (member (car elt) '("xindy" + "xindygloss" + "xindynoglsnumbers" + "makeindex" + "nolong" + "nosuper" + "nolist" + "notree" + "nostyles" + "nomain" + "compatible-2.07" + "translate" + "notranslate" + "languages" + "acronym"))) + LaTeX-glossaries-package-options-list)))) ) + + ;; Referencing macros: Don't ask for the final optional argument + ;; which is probably used not so often but will be annoying if + ;; queried after every macro. Provide fontification, though. + (let ((macs '("gls" "Gls" "GLS" + "glspl" "Glspl" "GLSpl" + "glstext" "Glstext" "GLStext" + "glsfirst" "Glsfirst" "GLSfirst" + "glsplural" "Glsplural" "GLSplural" + "glsfirstplural" "Glsfirstplural" "GLSfirstplural" + "glsname" "Glsname" "GLSname" + "glssymbol" "Glssymbol" "GLSsymbol" + "glsdesc" "Glsdesc" "GLSdesc" + "glsuseri" "Glsuseri" "GLSuseri" + "glsuserii" "Glsuserii" "GLSuserii" + "glsuseriii" "Glsuseriii" "GLSuseriii" + "glsuseriv" "Glsuseriv" "GLSuseriv" + "glsuserv" "Glsuserv" "GLSuserv" + "glsuservi" "Glsuservi" "GLSuservi")) + (args '([TeX-arg-key-val (LaTeX-glossaries-gls-keyval-options)] + (TeX-arg-completing-read (LaTeX-glossaries-newentry-list) + "Label"))) + (macs1 '("glsdisp" "Glsdisp" "glslink" "Glslink")) + (args1 '([TeX-arg-key-val (LaTeX-glossaries-gls-keyval-options)] + (TeX-arg-completing-read (LaTeX-glossaries-newentry-list) + "Label") + "Text")) + symbols) + (dolist (mac macs) + (push (cons mac args) symbols) + (push (cons (concat mac "*") args) symbols) + (push (cons (concat mac "+") args) symbols)) + (dolist (mac macs1) + (push (cons mac args1) symbols) + (push (cons (concat mac "*") args1) symbols) + (push (cons (concat mac "+") args1) symbols)) + (apply #'TeX-add-symbols symbols) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (setq symbols nil) + (dolist (mac macs) + (push `(,mac "*+[{[") symbols)) + (dolist (mac macs1) + (push `(,mac "*+[{{") symbols)) + (font-latex-add-keywords symbols 'reference))) + + ;; \setacronymstyle is not allowed when `glossaries-extra.sty' is + ;; loaded: + (unless (member "glossaries-extra" (TeX-style-list)) + (TeX-add-symbols + '("setacronymstyle" ["Glossary type"] + (TeX-arg-completing-read ("long-short" "short-long" + "sc-short-long" "sm-short-long" + "long-short-desc" "long-sc-short-desc" + "long-sm-short-desc" "long-sp-short-desc" + "short-long-desc" "sc-short-long-desc" + "sm-short-long-desc" + "long-sc-short" "long-sm-short" "long-sp-short" + "dua" "dua-desc" + "footnote" "footnote-sc" "footnote-sm" + "footnote-desc" "footnote-sc-desc" + "footnote-sm-desc") + "Style")))) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("newglossaryentry" "{{") + ;; Starred form is provided by + ;; `glossaries-extra.sty': + ("longnewglossaryentry" "*{{{") + ("provideglossaryentry" "{{") + ("longprovideglossaryentry" "{{{") + ("newacronym" "[{{{") + ("setupglossaries" "{")) + 'function) + + (unless (member "glossaries-extra" (TeX-style-list)) + (font-latex-add-keywords '(("setacronymstyle" "[{")) + 'function))) ) + TeX-dialect) + +(defvar LaTeX-glossaries-package-options-list + '(;; 2.1. General Options: Taken from glossaries-user.pdf: + ("nowarn") + ("nolangwarn") + ("noredefwarn") + ("debug" ("true" "false" "showtargets" "showaccsupp")) + ("savewrites" ("true" "false")) + ("translate" ("true" "false" "babel")) + ("notranslate") + ("languages") + ("locales") + ("hyperfirst" ("true" "false")) + ("writeglslabels") + ("writeglslabelnames") + ;; 2.2. Sectioning, Headings and TOC Options + ("toc" ("true" "false")) + ("numberline" ("true" "false")) + ("section" ("chapter" "section" "subsection")) + ("ucmark" ("true" "false")) + ("numberedsection" ("false" "nolabel" "autolabel" "nameref")) + ;; 2.3. Glossary Appearance Options + ("savenumberlist" ("true" "false")) + ("entrycounter" ("true" "false")) + ("counterwithin") + ("subentrycounter" ("true" "false")) + ("style") + ("nolong") + ("nosuper") + ("nolist") + ("notree") + ("nostyles") + ("nonumberlist") + ("seeautonumberlist") + ("counter") + ("nopostdot" ("true" "false")) + ("nogroupskip" ("true" "false")) + ;; 2.4. Indexing Options + ("seenoindex" ("error" "warn" "ignore")) + ("esclocations" ("true" "false")) + ("indexonlyfirst" ("true" "false")) + ;; 2.5. Sorting Options + ("sanitizesort" ("true" "false")) + ("sort" ("none" "clear" "def" "use" "standard")) + ("order" ("word" "letter")) + ("makeindex") + ("xindy" ("language" "codepage" "glsnumbers")) + ("xindygloss") + ("xindynoglsnumbers") + ("automake" ("true" "false" "delayed" "immediate" "makegloss" "lite")) + ("automakegloss") + ("automakeglosslite") + ("disablemakegloss") + ("restoremakegloss") + ;; 2.6. Glossary Type Options + ("nohypertypes") + ("nomain") + ("symbols") + ("numbers") + ("index") + ("noglossaryindex") + ;; 2.7. Acronym and Abbreviation Options + ("acronym" ("true" "false")) + ("acronyms") + ("acronymlists") + ("shortcuts" ("true" "false")) + ;; 2.9. Other Options + ("mfirstuc" ("expanded" "unexpanded")) + ("kernelglossredefs" ("true" "false" "nowarn"))) + "Package options for the glossaries package.") + +(defvar LaTeX-glossaries-extra-package-options-list + '(("undefaction" ("error" "warn")) + ("docdef" ("false" "restricted" "atom" "true")) + ("stylemods") + ("indexcrossrefs" ("true" "false")) + ("autoseeindex" ("true" "false")) + ("record" ("off" "only" "nameref" "hybrid")) + ("equation" ("true" "false")) + ("floats" ("true" "false")) + ("indexcounter") + ;; 2.7. Acronym and Abbreviation Options + ("abbreviations") + ;; 2.9. Other Options + ("accsupp") + ("prefix") + ("nomissingglstext" ("true" "false"))) + "Package options for the glossaries-extra package.") + +(defun LaTeX-glossaries-package-options () + "Read the glossaries package options from the user." + (TeX-read-key-val t LaTeX-glossaries-package-options-list)) + +;;; glossaries.el ends here