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/fancyvrb.el | |
parent | 3f4a0d5370ae6c34afe180df96add3b8522f4af1 (diff) |
Evil mode and latex support
Diffstat (limited to 'elpa/auctex-13.1.3/style/fancyvrb.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/fancyvrb.el | 772 |
1 files changed, 772 insertions, 0 deletions
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 <mose@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 `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 + "\\(\\<reflabel\\>\\)" + ;; 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 "\\<reflabel[ \t\n\r%]*=[ \t\n\r%]*" + envstart t)))) + (if label-key + (save-excursion + (goto-char envstart) + (re-search-forward (regexp-quote LaTeX-optop) label-key t) + (up-list) + (forward-line) + ;; Return the first line of verbatim env: + (buffer-substring-no-properties (point) + (line-end-position))) + (error "No label found")))) + +(defvar LaTeX-fancyvrb-key-val-label-regexp + `(,(concat + (regexp-quote TeX-esc) + "begin[[:space:]]*" + (regexp-quote TeX-grop) + "[BL]?Verbatim\\*?" + (regexp-quote TeX-grcl) + "[[:space:]]*" + (LaTeX-extract-key-value-label "reflabel")) + 1 LaTeX-auto-label) + "Matches the label inside an optional argument of fancyvrb environments.") + +(TeX-add-style-hook + "fancyvrb" + (lambda () + (TeX-auto-add-regexp LaTeX-fancyvrb-macro-regexp) + (TeX-auto-add-regexp LaTeX-fancyvrb-environment-regexp) + (TeX-auto-add-regexp LaTeX-fancyvrb-saveverb-regexp) + (TeX-auto-add-regexp LaTeX-fancyvrb-saveverbatim-regexp) + (TeX-auto-add-regexp LaTeX-fancyvrb-key-val-label-regexp) + (TeX-run-style-hooks + "keyval") + + (TeX-add-symbols + ;; Verbatim material in footnotes + "VerbatimFootnotes" + ;; Improved verbatim commands + '("Verb" [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] TeX-arg-verb) + ;; \Verb also has a starred version: + '("Verb*" [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] TeX-arg-verb) + '("DefineShortVerb" (TeX-arg-eval + TeX-read-string + (TeX-argument-prompt nil nil "Character") + TeX-esc)) + '("UndefineShortVerb" (TeX-arg-eval + TeX-read-string + (TeX-argument-prompt nil nil "Character") + TeX-esc)) + ;; Verbatim environments + '("fvset" (TeX-arg-key-val (LaTeX-fancyvrb-key-val-options))) + ;; Changing individual line formatting + "FancyVerbFormatLine" + ;; Line numbering + "theFancyVerbLine" + ;; Selection of lines to print + "FancyVerbStartString" + "FancyVerbStopString" + + ;; Personalized environments + '("DefineVerbatimEnvironment" + LaTeX-fancyvrb-arg-define-environment) + '("RecustomVerbatimEnvironment" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Verbatim environment") + LaTeX-fancyvrb-base-environments) + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Based on environment") + LaTeX-fancyvrb-base-environments) + (TeX-arg-key-val (LaTeX-fancyvrb-key-val-options))) + + '("CustomVerbatimCommand" + LaTeX-fancyvrb-arg-define-macro) + '("RecustomVerbatimCommand" + (LaTeX-fancyvrb-arg-define-macro nil t)) + + ;; Saving and restoring verbatim text and environments + '("SaveVerb" + [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) + '("UseVerb" (TeX-arg-eval + completing-read + (TeX-argument-prompt nil nil "Saved name") + (LaTeX-fancyvrb-saveverb-list))) + '("UseVerbatim" (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Saved name") + (LaTeX-fancyvrb-saveverbatim-list))) + '("LUseVerbatim" (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Saved name") + (LaTeX-fancyvrb-saveverbatim-list))) + '("BUseVerbatim" (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Saved name") + (LaTeX-fancyvrb-saveverbatim-list))) + + ;; Writing and reading verbatim files + '("VerbatimInput" [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-arg-file-relative) + '("BVerbatimInput" [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-arg-file-relative) + '("LVerbatimInput" [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-arg-file-relative)) + + (LaTeX-add-environments + '("Verbatim" LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val) + '("Verbatim*" LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val) + '("BVerbatim" LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val) + '("BVerbatim*" LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val) + '("LVerbatim" LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val) + '("LVerbatim*" LaTeX-env-args + [TeX-arg-key-val (LaTeX-fancyvrb-key-val-options)] + LaTeX-fancyvrb-env-reflabel-key-val) + '("SaveVerbatim" + (lambda (env) + (let ((options (TeX-read-key-val t (LaTeX-fancyvrb-key-val-options))) + (name (TeX-read-string "Save name: "))) + (LaTeX-insert-environment + env + (concat + (unless (zerop (length options)) + (concat LaTeX-optop options LaTeX-optcl)) + (concat TeX-grop name TeX-grcl))) + (LaTeX-add-fancyvrb-saveverbatims name)))) + '("VerbatimOut" + (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))))))) + + (let ((envs '("BVerbatim" "BVerbatim*" + "LVerbatim" "LVerbatim*" + "Verbatim" "Verbatim*"))) + ;; Add pre-defined environments to `LaTeX-label-alist': + (dolist (env envs) + (add-to-list 'LaTeX-label-alist (cons env 'LaTeX-listing-label) t)) + + ;; Tell RefTeX + (when (and (fboundp 'reftex-add-label-environments) + (fboundp 'reftex-compile-variables) + (boundp 'reftex-label-regexps)) + (dolist (env envs) + (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\\)"))))) + + (unless (string-match "\\<reflabel" + (mapconcat #'identity + reftex-label-regexps + "|")) + (make-local-variable 'reftex-label-regexps) + (add-to-list 'reftex-label-regexps + (concat + (regexp-quote TeX-esc) + "begin[[:space:]]*" + (regexp-quote TeX-grop) + "[BL]?Verbatim\\*?" + (regexp-quote TeX-grcl) + "[[:space:]]*" + (LaTeX-extract-key-value-label "reflabel" 1)) + t) + (reftex-compile-variables)))) + + (LaTeX-add-counters + "FancyVerbLine") + + ;; Filling + (add-to-list 'LaTeX-verbatim-environments-local "Verbatim") + (add-to-list 'LaTeX-verbatim-environments-local "Verbatim*") + (add-to-list 'LaTeX-verbatim-environments-local "BVerbatim") + (add-to-list 'LaTeX-verbatim-environments-local "BVerbatim*") + (add-to-list 'LaTeX-verbatim-environments-local "LVerbatim") + (add-to-list 'LaTeX-verbatim-environments-local "LVerbatim*") + (add-to-list 'LaTeX-verbatim-environments-local "SaveVerbatim") + (add-to-list 'LaTeX-verbatim-environments-local "VerbatimOut") + (make-local-variable 'LaTeX-indent-environment-list) + (add-to-list 'LaTeX-indent-environment-list '("Verbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("Verbatim*" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("BVerbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("BVerbatim*" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("LVerbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("LVerbatim*" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("SaveVerbatim" current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list '("VerbatimOut" current-indentation) t) + (add-to-list 'LaTeX-verbatim-macros-with-delims-local "Verb") + (add-to-list 'LaTeX-verbatim-macros-with-delims-local "Verb*") + + ;; Fontification + (when (and (fboundp 'font-latex-add-keywords) + (fboundp 'font-latex-set-syntactic-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("CustomVerbatimCommand" "|{\\{{") + ("RecustomVerbatimCommand" "|{\\{{") + ("DefineVerbatimEnvironment" "{{{") + ("RecustomVerbatimEnvironment" "{{{") + ("DefineShortVerb" "{") + ("UndefineShortVerb" "{") + ("fvset" "{")) + 'function) + (font-latex-add-keywords '(("VerbatimInput" "[{") + ("BVerbatimInput" "[{") + ("LVerbatimInput" "[{")) + 'reference) + (font-latex-add-keywords '(("Verb" "*[") ; The second argument is verbatim. + ("SaveVerb" "[{") + ("UseVerb" "{") + ("UseVerbatim" "{") + ("LUseVerbatim" "{") + ("BUseVerbatim" "{")) + 'textual) + (font-latex-set-syntactic-keywords))) + TeX-dialect) + +(defvar LaTeX-fancyvrb-package-options nil + "Package options for the fancyvrb package.") + +;;; fancyvrb.el ends here |