From becff06c71d277647eda4378203d03ab36e141eb Mon Sep 17 00:00:00 2001 From: mattkae Date: Tue, 17 May 2022 07:07:37 -0400 Subject: Evil mode and latex support --- elpa/auctex-13.1.3/style/fancyvrb.el | 772 +++++++++++++++++++++++++++++++++++ 1 file changed, 772 insertions(+) create mode 100644 elpa/auctex-13.1.3/style/fancyvrb.el (limited to 'elpa/auctex-13.1.3/style/fancyvrb.el') diff --git a/elpa/auctex-13.1.3/style/fancyvrb.el b/elpa/auctex-13.1.3/style/fancyvrb.el new file mode 100644 index 0000000..22e52c2 --- /dev/null +++ b/elpa/auctex-13.1.3/style/fancyvrb.el @@ -0,0 +1,772 @@ +;;; fancyvrb.el --- AUCTeX style for `fancyvrb.sty' version 3.6. -*- lexical-binding: t; -*- + +;; Copyright (C) 2013, 2014, 2016-2021 Free Software Foundation, Inc. + +;; Maintainer: auctex-devel@gnu.org +;; Author: Mosè Giordano +;; 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 `fancyvrb.sty' version 3.6. + +;; This style has some capabilities to parse user defined macros, +;; environments and saved blocks with `SaveVerbatim' environments and +;; offer them for completion. After defining a new macro or +;; environment, hit `C-c C-n' to parse the document. In case of +;; `SaveVerbatim', a second `C-c C-n' might be necessary. + +;; The command `\CustomVerbatimEnvironment' is not mentioned in the +;; documenation; hence this command is removed from this style. Use +;; `\DefineVerbatimEnvironment' for new environments and customize the +;; standard ones with `\RecustomVerbatimEnvironment'. + +;; The entries in `LaTeX-fancyvrb-key-val-options' cover also some +;; keys which are not mentioned in the manual of the package. + +;; Starting with version 3.6, fancyvrb.sty provides a `reflabel' key +;; in the optional arguments which acts like a `\label' macro. This +;; key makes mostly sense for `\pageref'; referencing number of +;; missing \caption's with `\ref' in a fancyvrb environment isn't +;; useful. This style provides support for AUCTeX and RefTeX in order +;; to add and reference these labels. When inserting an environment +;; with `C-c C-e', choose `reflabel' key during the completion. If +;; you're using RefTeX and want to pass the label insertion job to it, +;; simply leave the key value-less and proceed. Otherwise enter the +;; label value by yourself. AUCTeX and RefTeX will parse the value +;; and offer it for completion once a referencing macros is used. + +;;; Code: + +;; Needed for auto-parsing: +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) + +(declare-function font-latex-set-syntactic-keywords + "font-latex") + +(declare-function LaTeX-color-definecolor-list "color" ()) +(declare-function LaTeX-xcolor-definecolor-list "xcolor" ()) +(defvar LaTeX-fvextra-key-val-options) + +(defvar LaTeX-fancyvrb-key-val-options + `(("commentchar" ("none")) + ("gobble") + ("formatcom") + ("formatcom*") ; Undocumented key + ("fontfamily" ("tt" "courier" "helvetica")) + ("fontsize" ("auto" "\\tiny" "\\scriptsize" + "\\footnotesize" "\\small" "\\normalsize" + "\\large" "\\Large" "\\LARGE" "\\huge" "\\Huge")) + ("fontshape" ("auto" "n" "it" "sl" "sc" "scit")) + ("fontseries" ("auto" "m" "b" "bx" "sb" "c" "l" "lc")) + ("frame" ("none" "leftline" "topline" "bottomline" "lines" "single")) + ("framerule") + ("framesep") + ("rulecolor" ("none")) + ("fillcolor" ("none")) + ("label" ("none")) + ("labelposition" ("none" "topline" "bottomline" "all")) + ("numbers" ("none" "left" "right")) + ("numbersep") + ("firstnumber" ("auto" "last" "integer")) + ("stepnumber") + ("numberblanklines" ("true" "false")) + ("firstline") + ("lastline") + ("showspaces" ("true" "false")) + ("showtabs" ("true" "false")) + ("obeytabs" ("true" "false")) + ("tabsize") + ("baselinestretch" ("auto" "dimension")) + ("commandchars" ("none")) + ("xleftmargin") + ("xrightmargin") + ("resetmargins" ("true" "false")) + ("hfuzz") + ("samepage" ("true" "false")) + ("codes") + ("codes*") ; Undocumented key + ("defineactive") + ("defineactive*") ; Undocumented key + ("reflabel") + ;; Undocumented key and introduced in version 2.81 2011/04/06 + ("vspace" ,(mapcar (lambda (x) + (concat TeX-esc (car x))) + (LaTeX-length-list))) + ;; Actually, the following options are used only by the `BVerbatim' + ;; environment. + ("boxwidth" ("auto" "dimension")) + ("baseline" ("b" "c" "t")) + ;; The next key applies only to `\SaveVerb' macro. + ("aftersave")) + "Key=value options for fancyvrb macros and environments.") + +(defun LaTeX-fancyvrb-key-val-options () + "Return an updated list of key=vals from fancyvrb package. +This function also checks if the package fvextra is used and +takes its key=vals into account." + (append + ;; Check if fvextra is loaded in combination with x?color: + (when (and (member "fvextra" (TeX-style-list)) + (or (member "xcolor" TeX-active-styles) + (member "color" TeX-active-styles))) + (let* ((colorcmd (if (member "xcolor" TeX-active-styles) + #'LaTeX-xcolor-definecolor-list + #'LaTeX-color-definecolor-list)) + (keys '("highlightcolor" + "rulecolor" + "fillcolor" + "tabcolor" + "spacecolor")) + (colors (mapcar #'car (funcall colorcmd))) + result) + (dolist (key keys result) + (if (string= key "highlightcolor") + (push (list key colors) result) + (push (list key (cons "none" colors)) result))))) + + ;; Check if fvextra is loaded: + (when (member "fvextra" TeX-active-styles) + LaTeX-fvextra-key-val-options) + + ;; Check if fancyvrb is loaded in combination with x?color: + (when (and (not (member "fvextra" TeX-active-styles)) + (or (member "xcolor" TeX-active-styles) + (member "color" TeX-active-styles))) + (let* ((colorcmd (if (member "xcolor" TeX-active-styles) + #'LaTeX-xcolor-definecolor-list + #'LaTeX-color-definecolor-list)) + (colors (mapcar (lambda (x) + (concat TeX-esc "color" TeX-grop x TeX-grcl)) + (mapcar #'car (funcall colorcmd)))) + (keys '("rulecolor" "fillcolor")) + val result) + (dolist (key keys result) + (setq val (cadr (assoc key LaTeX-fancyvrb-key-val-options))) + (push (list key (append val colors)) result)))) + + ;; Plain fancyvrb: + LaTeX-fancyvrb-key-val-options)) + +(defvar LaTeX-fancyvrb-base-macros + '("VerbatimInput" "BVerbatimInput" "LVerbatimInput" + "SaveVerb" "UseVerb" "Verb") + "List of base macros available with fancyvrb package. +Starred versions are not included in this list.") + +(defvar LaTeX-fancyvrb-base-environments + '("Verbatim" "BVerbatim" "LVerbatim" "SaveVerbatim" "VerbatimOut") + "List of base environments available with fancyvrb package. +Starred versions are not included in this list.") + +(defvar LaTeX-fancyvrb-key-val-skip-regexp + (concat "\\(?:" (LaTeX-extract-key-value-label 'none) "\\)?") + "Helper regexp to skip over an optional argument.") + +;; Setup for defining new Verbatim commands: + +(TeX-auto-add-type "fancyvrb-macro" "LaTeX") + +(defvar LaTeX-fancyvrb-macro-regexp + `(,(concat "\\\\\\(Rec\\|C\\)ustomVerbatimCommand" + "[ \t\n\r]*{?[ \t\n\r]*\\\\\\([A-Za-z]+\\)[ \t\n\r]*}?" + "[ \t\n\r]*{[ \t\n\r]*\\([A-Za-z]+\\)[ \t\n\r]*}") + (2 3 1) LaTeX-auto-fancyvrb-macro) + "Matches macros by fancyvrb package.") + +;; Setup for defining new Verbatim environments: + +(TeX-auto-add-type "fancyvrb-environment" "LaTeX") + +(defvar LaTeX-fancyvrb-environment-regexp + `(,(concat "\\\\DefineVerbatimEnvironment" + "[ \t\n\r]*{[ \t\n\r]*\\([A-Za-z0-9]+\\)[ \t\n\r]*}" + "[ \t\n\r]*{[ \t\n\r]*\\([A-Za-z]+\\)[ \t\n\r]*}") + (1 2) LaTeX-auto-fancyvrb-environment) + "Matches new environments defined by fancyvrb package.") + +;; Setup for names in SaveVerb macros: + +(TeX-auto-add-type "fancyvrb-saveverb" "LaTeX") + +(defvar LaTeX-fancyvrb-saveverb-regexp + `(,(concat "\\\\SaveVerb" + LaTeX-fancyvrb-key-val-skip-regexp + "{\\([^}]+\\)}") + 1 LaTeX-auto-fancyvrb-saveverb) + "Match the name under which verbatim text is saved by SaveVerb macro.") + +;; Setup for names in SaveVerbatim environments: + +(TeX-auto-add-type "fancyvrb-saveverbatim" "LaTeX") + +(defvar LaTeX-fancyvrb-saveverbatim-regexp + `(,(concat "\\\\begin{SaveVerbatim}" + LaTeX-fancyvrb-key-val-skip-regexp + "{\\([^}]+\\)}") + 1 LaTeX-auto-fancyvrb-saveverbatim) + "Match the name under which verbatim text is saved by SaveVerbatim environment.") + +(defun LaTeX-fancyvrb-auto-prepare () + "Clear various LaTeX-auto-fancyvrb-* variables before parsing." + (setq LaTeX-auto-fancyvrb-macro nil + LaTeX-auto-fancyvrb-environment nil + LaTeX-auto-fancyvrb-saveverb nil + LaTeX-auto-fancyvrb-saveverbatim nil)) + +(defun LaTeX-fancyvrb-auto-cleanup () + "Process parsed elements for fancyvrb package." + (LaTeX-fancyvrb-arg-define-macro nil t) + (LaTeX-fancyvrb-arg-define-environment nil t)) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-fancyvrb-auto-prepare t) +(add-hook 'TeX-auto-cleanup-hook #'LaTeX-fancyvrb-auto-cleanup t) +(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) + +(defun LaTeX-fancyvrb-arg-define-macro (optional &optional cleanup recustom) + "Query and insert a new verbatim macro with fancyvrb package. +If OPTIONAL is non-nil, insert the arguments in brackets. If +CLEANUP is non-nil, do not insert any arguments in the buffer and +update only various AUCTeX variables for verbatim macros. If +RECUSTOM is non-nil, delete macros from the variable +`TeX-symbol-list' before adding the new ones." + ;; This part is only relevant when called by user: + (unless cleanup + (let ((new-mac (if recustom + (completing-read + (TeX-argument-prompt optional nil "Verbatim macro: \\" t) + (mapcar #'car (apply #'append LaTeX-fancyvrb-macro-list))) + (TeX-read-string + (TeX-argument-prompt optional nil "New verbatim macro: \\" t)))) + (base-mac (completing-read (TeX-argument-prompt optional nil "Based on macro") + LaTeX-fancyvrb-base-macros)) + (rec-flag (if recustom "Rec" "C"))) + ;; We are (re-)defining a macro: Insert user queried input and + ;; use `LaTeX-add-fancyvrb-macros' on the input. Do not enclose + ;; the first argument in braces as this will improve + ;; fontification. Otherwise, the part between 2 closing braces + ;; get fontified, i.e.: + ;; \CustomVerbatimCommand{\foo}{Verb}{} + ;; ^ ^ + (let ((TeX-arg-opening-brace "") + (TeX-arg-closing-brace "")) + (TeX-argument-insert new-mac optional TeX-esc)) + (TeX-argument-insert base-mac optional) + (TeX-argument-insert + (TeX-read-key-val optional (LaTeX-fancyvrb-key-val-options)) optional) + (LaTeX-add-fancyvrb-macros `(,new-mac ,base-mac ,rec-flag)))) + ;; + ;; Now run the procdure: Do not use the function + ;; `LaTeX-fancyvrb-macro-list' here which will remove dupes from the + ;; variable `LaTeX-fancyvrb-macro-list' depending on car; we need + ;; the variable as is, hence (apply #'append ...); + (dolist (elt (apply #'append LaTeX-fancyvrb-macro-list)) + (let ((mac-name (nth 0 elt)) + (base-mac (nth 1 elt)) + (flag (nth 2 elt))) + ;; If we're Rec-ustomizing, delete the entry first from + ;; `TeX-symbol-list': + (when (string= flag "Rec") + (setq TeX-symbol-list + (assq-delete-all (car (assoc mac-name (TeX-symbol-list))) TeX-symbol-list))) + ;; Now add the new item: Start with new macros for loading + ;; files: + (cond ((member base-mac '("VerbatimInput" "BVerbatimInput" "LVerbatimInput")) + (TeX-add-symbols + `(,mac-name + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-arg-file-relative)) + (when (and (fboundp 'font-latex-add-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,mac-name "[{")) + 'reference))) + ;; New macros for saving verbatim text: + ((string= base-mac "SaveVerb") + (TeX-add-symbols + `(,mac-name + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Save name")))) + (LaTeX-add-fancyvrb-saveverbs name) + (format "%s" name)))) + TeX-arg-verb)) + (when (and (fboundp 'font-latex-add-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,mac-name "[{")) + 'textual))) + ;; New macros for using previously saved text: + ((string= base-mac "UseVerb") + (TeX-add-symbols + `(,mac-name + (TeX-arg-eval + completing-read + (TeX-argument-prompt nil nil "Saved name") + (LaTeX-fancyvrb-saveverb-list)))) + (when (and (fboundp 'font-latex-add-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,mac-name "{")) + 'textual))) + ;; Anything else is considered as verbatim typesetting macro: + (t + (TeX-add-symbols + `(,mac-name + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + TeX-arg-verb) + ;; Defined macros have a starred version where the + ;; `showspaces' key is set to true + `(,(concat mac-name "*") + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + TeX-arg-verb)) + (add-to-list 'LaTeX-verbatim-macros-with-delims-local + mac-name t) + (add-to-list 'LaTeX-verbatim-macros-with-delims-local + (concat mac-name "*") t) + (when (and (fboundp 'font-latex-add-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,mac-name "*[")) + 'textual)))))) + ;; Update font-lock: + (when (and (fboundp 'font-latex-set-syntactic-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-set-syntactic-keywords))) + +(defun LaTeX-fancyvrb-arg-define-environment (optional &optional cleanup) + "Query and insert a new verbatim environment with fancyvrb package. +If OPTIONAL is non-nil, insert the arguments in brackets. If +CLEANUP is non-nil, do not insert any arguments in the buffer and +update only various AUCTeX variables for verbatim environments." + (unless cleanup + (let ((new-env (TeX-read-string + (TeX-argument-prompt optional nil "New verbatim environment"))) + (base-env (completing-read + (TeX-argument-prompt optional nil "Based on environment") + LaTeX-fancyvrb-base-environments))) + ;; We are defining a new env: First insert the arguments and then + ;; run `LaTeX-add-fancyvrb-environments' on '(new-env base-env). + ;; If base-env is SaveVerbatim, run + ;; `LaTeX-add-fancyvrb-saveverbatims' on new-env as well. + (TeX-argument-insert new-env optional) + (TeX-argument-insert base-env optional) + (TeX-argument-insert + (TeX-read-key-val optional (LaTeX-fancyvrb-key-val-options)) optional) + (LaTeX-add-fancyvrb-environments `(,new-env ,base-env)) + (when (string= base-env "SaveVerbatim") + (LaTeX-add-fancyvrb-saveverbatims new-env)))) + ;; + ;; Now run the procdure: + (dolist (elt (LaTeX-fancyvrb-environment-list)) + (let ((env (car elt)) + (type (cadr elt))) + (cond ((string= type "VerbatimOut") + (LaTeX-add-environments + `(,env (lambda (env) + (let ((options (TeX-read-key-val + t (LaTeX-fancyvrb-key-val-options))) + (file (TeX-read-string "Output file: "))) + (LaTeX-insert-environment + env + (concat + (unless (zerop (length options)) + (concat LaTeX-optop options LaTeX-optcl)) + (concat TeX-grop file TeX-grcl)))))))) + ((string= type "SaveVerbatim") + (TeX-auto-add-regexp `(,(concat "\\\\begin{" + env + "}" + LaTeX-fancyvrb-key-val-skip-regexp + "{\\([^}]+\\)}") + 1 LaTeX-auto-fancyvrb-saveverbatim))) + (t + ;; Regular verbatim environments have a starred + ;; version; so add them here; the non-starred additions + ;; to `LaTeX-verbatim-environments-local' and + ;; `LaTeX-indent-environment-list' are done outside + ;; (cond ...): + (LaTeX-add-environments + `(,env LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val)) + (LaTeX-add-environments + `(,(concat env "*") LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val)) + (add-to-list 'LaTeX-verbatim-environments-local (concat env "*")) + (add-to-list 'LaTeX-indent-environment-list + `(,(concat env "*") current-indentation) t) + ;; Tell AUCTeX about label values to reflabel key: + (add-to-list 'LaTeX-label-alist + (cons env 'LaTeX-listing-label) t) + (add-to-list 'LaTeX-label-alist + (cons (concat env "*") 'LaTeX-listing-label) t) + (TeX-auto-add-regexp + `(,(concat (regexp-quote TeX-esc) + "begin[[:space:]]*" + (regexp-quote TeX-grop) + env + "\\*?" + (regexp-quote TeX-grcl) + "[[:space:]]*" + (LaTeX-extract-key-value-label "reflabel")) + 1 LaTeX-auto-label)) + ;; Tell RefTeX: + (when (and (fboundp 'reftex-add-label-environments) + (boundp 'reftex-label-regexps)) + (reftex-add-label-environments + `((,env + ?l ,LaTeX-listing-label "~\\pageref{%s}" + LaTeX-fancyvrb-reftex-label-context-function + (regexp "[Ll]isting" "[Vv]erbatim" + "[Cc]ode" "Quell\\(code\\|text\\)")) + + (,(concat env "*") + ?l ,LaTeX-listing-label "~\\pageref{%s}" + LaTeX-fancyvrb-reftex-label-context-function + (regexp "[Ll]isting" "[Vv]erbatim" + "[Cc]ode" "Quell\\(code\\|text\\)")))) + (add-to-list 'reftex-label-regexps + (concat + (regexp-quote TeX-esc) + "begin[[:space:]]*" + (regexp-quote TeX-grop) + (concat env "\\*?") + (regexp-quote TeX-grcl) + "[[:space:]]*" + (LaTeX-extract-key-value-label "reflabel" 1)) + t)))) + ;; These apply for all environments defined: + (add-to-list 'LaTeX-verbatim-environments-local env) + (add-to-list 'LaTeX-indent-environment-list `(,env current-indentation) t))) + ;; Update RefTeX: + (when (fboundp 'reftex-compile-variables) + (reftex-compile-variables)) + ;; Update font-lock: + (when (and (fboundp 'font-latex-set-syntactic-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-set-syntactic-keywords))) + +(defun LaTeX-fancyvrb-arg-file-relative (optional) + "Query and insert a file name relative to current master file. +If OPTIONAL is non-nil, insert the file name in brackets." + (TeX-argument-insert + (file-relative-name + (read-file-name (TeX-argument-prompt optional nil "File")) + (TeX-master-directory)) + optional)) + +(defun LaTeX-fancyvrb-env-reflabel-key-val (_optional) + "Add a label value to reflabel key. +This function checks if the reflabel key is given in the optional +argument of a fancyvrb environment and then adds a label as value +to that key. The label value is inserted only if the key is +value-less; user entered label values are recognized and +respected. OPTIONAL is ignored." + (let ((p (point-marker)) + (s (make-marker))) + (set-marker s (save-excursion + (LaTeX-find-matching-begin) + (re-search-forward (regexp-quote LaTeX-optop) + (line-end-position) + t))) + ;; Search for the reflabel and a potential value: + (when (marker-position s) + (re-search-backward + (concat + "\\(\\\\)" + ;; Check if the key already has a label value: + "\\(" + "[[:space:]]*=[[:space:]]*" + (regexp-quote TeX-grop) + "?" + "[[:alnum:]:._-]" + "\\)?") + s t) + ;; Insert a label value only if the key is value-less: + (when (and (not (match-string 2)) + (match-string 1)) + (goto-char (match-end 1)) + (insert "=" + TeX-grop + (format "%s" (LaTeX-label (LaTeX-current-environment) + 'environment + t)) + TeX-grcl))) + ;; At any rate, go to where we started and clean up: + (goto-char p) + (set-marker p nil) + (set-marker s nil))) + +(defun LaTeX-fancyvrb-reftex-label-context-function (env) + "Extract and return a context string for RefTeX. +The context string is the first line of the verbatim environment. +If no reflabel key is found, an error is issued. +ENV is the name of current environment as a string." + (let* ((envstart (save-excursion + (re-search-backward (concat "\\\\begin[[:space:]]*{" + env + "}") + nil t))) + (label-key (save-excursion + (re-search-backward "\\