diff options
author | mattkae <mattkae@protonmail.com> | 2022-05-17 07:07:37 -0400 |
---|---|---|
committer | mattkae <mattkae@protonmail.com> | 2022-05-17 07:07:37 -0400 |
commit | becff06c71d277647eda4378203d03ab36e141eb (patch) | |
tree | a1f73bba3676f34e0faf76764f5de963321f5576 /elpa/auctex-13.1.3/style/doc.el | |
parent | 3f4a0d5370ae6c34afe180df96add3b8522f4af1 (diff) |
Evil mode and latex support
Diffstat (limited to 'elpa/auctex-13.1.3/style/doc.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/doc.el | 466 |
1 files changed, 466 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/doc.el b/elpa/auctex-13.1.3/style/doc.el new file mode 100644 index 0000000..63c6580 --- /dev/null +++ b/elpa/auctex-13.1.3/style/doc.el @@ -0,0 +1,466 @@ +;;; doc.el --- AUCTeX style for `doc.sty' -*- lexical-binding: t; -*- + +;; Copyright (C) 2004-2022 Free Software Foundation, Inc. + +;; Author: Frank Küster <frank@kuesterei.ch> +;; Maintainer: auctex-devel@gnu.org +;; 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 `doc.sty' (v3.0h) dated 2022/06/01. + +;;; Code: + +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) +(declare-function font-latex-add-to-syntax-alist + "font-latex" + (list)) + +(defun LaTeX-env-doc-no-comment (environment) + "Insert ENVIRONMENT and make sure there is no commented empty line inside." + (LaTeX-insert-environment environment) + (unless (TeX-active-mark) + (when (save-excursion + (beginning-of-line) + (looking-at (concat "[ \t]+$\\|[ \t]*" + TeX-comment-start-regexp "+[ \t]*$"))) + (delete-region (line-beginning-position) (line-end-position)) + (indent-according-to-mode)))) + +(defun LaTeX-env-doc-commented (environment) + "Insert ENVIRONMENT and make sure all parts are in comments. +This functions search for the begin and the end of the inserted +environment and makes sure those parts are in comments. The same +applies also to the point inside after the insertion." + (LaTeX-insert-environment + environment + (if (string= environment "macro") + ;; For 'macro' environment, elements will start with a + ;; backslash, so we insert them initially: + (progn + (let ((opt (mapconcat #'identity + (TeX-completing-read-multiple + (TeX-argument-prompt t nil "Suppress option") + '("noindex" "noprint")) + ",")) + (mac (TeX-read-string + (TeX-argument-prompt nil nil "Macro(s)") + TeX-esc))) + (concat (when (and opt (not (string= opt ""))) + (format "[%s]" opt)) + (format "{%s}" mac)))) + ;; For other environments, we don't know about the elements, + ;; so do nothing. For 'environment', we adjust the prompt in + ;; minibuffer. + (let ((opt (mapconcat #'identity + (TeX-completing-read-multiple + (TeX-argument-prompt t nil "Suppress option") + '("noindex" "noprint")) + ",")) + (env (TeX-read-string + (TeX-argument-prompt nil nil + (if (string= environment "environment") + "Environment(s)" + "Element(s)"))))) + (concat + (when (and opt (not (string= opt ""))) + (format "[%s]" opt)) + (format "{%s}" env))))) + ;; Now make sure everything is commented: + (let ((p (point-marker)) + (active-mark (and (TeX-active-mark) + (not (eq (mark) (point))))) + (func (lambda () + (if (TeX-in-line-comment) + (indent-according-to-mode) + (delete-horizontal-space) + (beginning-of-line) + (insert "%") + (indent-according-to-mode))))) + ;; Go to the start of the env we have inserted: + (search-backward (concat "\\begin" TeX-grop environment TeX-grcl) + (if active-mark nil (line-beginning-position 0)) + t) + ;; If the line is not commented, insert % + (funcall func) + (goto-char p) + ;; Do the same for the end of the environment + (search-forward (concat "\\end" TeX-grop environment TeX-grcl) + (if active-mark nil (line-end-position 2)) + t) + (goto-char (match-beginning 0)) + (funcall func) + ;; Finally for where we started and clean up only when region was + ;; not active: + (goto-char p) + (unless active-mark (funcall func)) + (set-marker p nil))) + +(defun LaTeX-doc-after-insert-macrocode (env start end) + "Make sure the macrocode environment is properly formatted after insertion." + (when (TeX-member env '("macrocode" "macrocode*") + #'string-equal) + (save-excursion + (goto-char end) + (skip-chars-backward " \t") + (when (bolp) + (insert "%") + (indent-according-to-mode)) + (goto-char start) + (skip-chars-backward " \t") + (when (bolp) + (insert "%") + (indent-according-to-mode))))) + +(defvar LaTeX-doc-newdocelement-key-val-options + '(("macrolike" ("true" "false")) + ("envlike" ("true" "false")) + ("toplevel" ("true" "false")) + ("notoplevel" ("true" "false")) + ("idxtype") + ("printtype") + ("idxgroup") + ("noindex" ("true" "false")) + ("noprint" ("true" "false"))) + "Key=value options for '\\NewDocElement' macro.") + +;; Setup for \NewDocElement: + +(TeX-auto-add-type "doc-NewDocElement" "LaTeX") + +(defvar LaTeX-doc-NewDocElement-regexp + `(,(concat "^[ \t%]*" + "\\\\NewDocElement" + "[ \t\n\r%]*" + "\\(?:" + (LaTeX-extract-key-value-label 'none) + "\\)?" + "[ \t\n\r%]*" + "{\\([^}]+\\)}" + "[ \t\n\r%]*" + "{\\([^}]+\\)}") + (1 2) LaTeX-auto-doc-NewDocElement) + "Matches the arguments of '\\NewDocElement' from doc package. +AUCTeX parser doesn't look for text parts commented out. +Therefore, the regexp in this variable explicitly looks for a +percent sign at the beginning of a line before +'\\NewDocElement'.") + +(defun LaTeX-doc-auto-prepare () + "Clear `LaTeX-auto-doc-NewDocElement' before parsing." + (setq LaTeX-auto-doc-NewDocElement nil)) + +(defun LaTeX-doc-auto-cleanup () + "Process elements defined with '\\NewDocElement'." + (when (LaTeX-doc-NewDocElement-list) + ;; Make sure `docTeX-indent-inner-fixed' is local: + (make-local-variable 'docTeX-indent-inner-fixed) + + ;; \NewDocElement[<options>]{<element-name>}{<env-name>} defines: + ;; 1. \Describe<element-name>[<options>]{<element>} + ;; 2. \begin{<env-name>}[<options>]{<element>} + ;; 3. \PrintDescribe<element-name>{<element>} + ;; 4. \Print<element-name>Name + (let (macs) + (dolist (elt (LaTeX-doc-NewDocElement-list)) + (let ((eltname (car elt)) + (envname (cadr elt))) + (TeX-add-symbols + ;; Cater for \Describe<eltname>[options]{<elements query>} + `(,(concat "Describe" eltname) + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Suppress option") + '("noindex" "noprint")] + "Element") + + ;; Cater for \PrintDescribe<eltname>{<elements query>} + `(,(concat "PrintDescribe" eltname) "Element") + + ;; Cater for \Print<eltname>Name + (concat "Print" eltname "Name")) + + ;; Add the \Describe<element-name> to macs + (push (concat "Describe" eltname) macs) + + ;; Cater for \begin{<envname>}[options]{<elements query>} + (LaTeX-add-environments + `(,envname LaTeX-env-doc-commented)) + + ;; Make sure we have fixed inner indent for our environments: + (add-to-list 'docTeX-indent-inner-fixed + `(,(concat (regexp-quote TeX-esc) + "\\(begin\\|end\\)[ \t]*" + (regexp-quote TeX-grop) + envname + (regexp-quote TeX-grcl)) + 0 nil) + t) + ;; Add fontification: + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,(concat "Describe" eltname) "[|{\\" )) + 'variable)))) + + ;; Let \Describe<element-name> stay in their own lines: + (LaTeX-paragraph-commands-add-locally macs)))) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-doc-auto-prepare t) +(add-hook 'TeX-auto-cleanup-hook #'LaTeX-doc-auto-cleanup t) +(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) + +(TeX-add-style-hook + "doc" + (lambda () + + ;; Add doc to the parser: + (TeX-auto-add-regexp LaTeX-doc-NewDocElement-regexp) + + (add-hook 'LaTeX-after-insert-env-hook #'LaTeX-doc-after-insert-macrocode + nil t) + + (LaTeX-add-environments + ;; 2.3 General conventions + '("macrocode" LaTeX-env-doc-no-comment) + '("macrocode*" LaTeX-env-doc-no-comment) + + ;; 2.5 Describing the definition of macros and environments + '("macro" LaTeX-env-doc-commented) + '("environment" LaTeX-env-doc-commented) + + '("theglossary" LaTeX-env-item)) + + (TeX-add-symbols + ;; 2.1 The driver file + '("DocInput" + (TeX-arg-eval + (lambda () + (let ((file (file-relative-name + (read-file-name + "File to input: " nil nil nil nil + (lambda (x) + (or (file-directory-p x) + (string-match "\\.\\(fdd\\|dtx\\)\\'" x)))) + (TeX-master-directory)))) + (format "%s" file))))) + + '("IndexInput" + (TeX-arg-eval + (lambda () + (let ((file (file-relative-name + (read-file-name + "File to input: " nil nil nil nil + (lambda (x) + (or (file-directory-p x) + (string-match "\\.\\(tex\\|ltx\\|fdd\\|dtx\\)\\'" x)))) + (TeX-master-directory)))) + (format "%s" file))))) + + ;; 2.2 Package options + '("SetupDoc" (TeX-arg-eval mapconcat #'identity + (TeX-completing-read-multiple + (TeX-argument-prompt nil nil "Options") + LaTeX-doc-package-options) + ",")) + + ;; 2.4 Describing the usage of macros and environments + '("DescribeMacro" + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Suppress option") + '("noindex" "noprint")] + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Macro") + TeX-esc))) + (format "%s" name))))) + '("DescribeEnv" + [TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Suppress option") + '("noindex" "noprint")] + "Environment") + + ;; 2.5 Describing the definition of macros and environments + "MacroFont" + + ;; 2.6 Formatting names in the margin + '("PrintDescribeMacro" "Element") + '("PrintDescribeEnv" "Element") + "PrintMacroName" + "PrintEnvName" + + ;; 2.7 Providing further documentation items + '("NewDocElement" + [TeX-arg-key-val LaTeX-doc-newdocelement-key-val-options] + "Element name" "Environment name") + + ;; 2.8 Displaying sample code verbatim + ;; "verbatim" environment and "verb" macro are provided by + ;; latex.el, so we don't add them here again. + + ;; 2.9 Using a special escape character + '("SpecialEscapechar" "Character") + + ;; 2.10 Cross-referencing all macros used + "DisableCrossrefs" + "EnableCrossrefs" + ;; We don't fontify the next macro since it is a one-liner anyway + '("DoNotIndex" t) + "CodelineIndex" + "PageIndex" + "theCodelineNo" + "CodelineNumbered" + + ;; 2.11 Producing the actual index entries + "actualchar" + "quotechar" + "encapchar" + "levelchar" + + "SpecialMainMacroIndex" + "SpecialMainEnvIndex" + "SpecialMacroIndex" + "SpecialEnvIndex" + "SpecialIndex" + "SpecialShortIndex" + "SortIndex" + "verbatimchar" + + "subitem" + "subsubitem" + "indexspace" + "efill" + "pfill" + + ;; 2.12 Setting the index entries: theindex environment is + ;; provided by latex.el. + "PrintIndex" + '("IndexPrologue" t) + "IndexParms" + "main" + "usage" + "code" + + ;; 2.13 Changing the default values of style parameters + "DocstyleParms" + + ;; 2.14 Short input of verbatim text pieces: These macros are + ;; provided by 'shortvrb.el' which is run later + + ;; 2.15 Additional bells and whistles + "Web" + "AmSTeX" + "BibTeX" + "SliTeX" + "PlainTeX" + '("meta" "Text") + "OnlyDescription" + '("StopEventually" t) + '("MaybeStop" t) + "Finale" + "AlsoImplementation" + "IndexInput" + '("changes" "version" TeX-arg-date t) + "generalname" + "RecordChanges" + "PrintChanges" + "GlossaryPrologue" + "GlossaryParms" + "bslash" + "MakePrivateLetters" + "DontCheckModules" + "CheckModules" + "Module" + '("AltMacroFont" t) + + ;; 5.1 makeindex bugs + "PercentIndex" + ;; 5.2 File transmission issues + '("CheckSum" t) + '("CharacterTable" t)) + + (TeX-run-style-hooks "shortvrb") + + (LaTeX-add-lengths "MacrocodeTopsep" "MacroTopsep" "MacroIndent" + "IndexMin" "GlossaryMin") + (LaTeX-add-counters "IndexColumns" "GlossaryColumns" "StandardModuleDepth") + + ;; Macros which should be on their own line: + (LaTeX-paragraph-commands-add-locally '("DescribeEnv" + "DescribeMacro" + "changes")) + + ;; Fontification + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("SetupDoc" "{") + ("NewDocElement" "[{{") + ("RenewDocElement" "[{{") + ("SpecialEscapechar" "{") + ("DisableCrossrefs" "") + ("EnableCrossrefs" "") + ("CodelineIndex" "") + ("PageIndex" "") + ("CodelineNumbered" "") + ("PrintIndex" "") + ("IndexPrologue" "") + ("AmSTeX" "") + ("BibTeX" "") + ("SliTeX" "") + ("PlainTeX" "") + ("OnlyDescription" "") + ("StopEventually" "") + ("MaybeStop" "") + ("Finale" "") + ("AlsoImplementation" "") + ("changes" "{{{") + ("PrintChanges" "") + ("RecordChanges" "")) + 'function) + (font-latex-add-keywords '(("DescribeMacro" "[|{\\") + ("DescribeEnv" "[{")) + 'variable) + (font-latex-add-keywords '(("meta" "{")) + 'textual) + (font-latex-add-keywords '(("DocInput" "{") + ("DocInclude" "{" ) + ("IndexInput" "{")) + 'reference))) + TeX-dialect) + +(defvar LaTeX-doc-package-options + '("hyperref" "nohyperref" + "multicol" "nomulticol" + "debugshow" + "noindex" "noprint" + "reportchangedates") + "Package options for the doc package.") + +;; Local Variables: +;; coding: utf-8 +;; End: + +;;; doc.el ends here |