summaryrefslogtreecommitdiff
path: root/elpa/auctex-13.1.3/style/environ.el
diff options
context:
space:
mode:
Diffstat (limited to 'elpa/auctex-13.1.3/style/environ.el')
-rw-r--r--elpa/auctex-13.1.3/style/environ.el143
1 files changed, 143 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/environ.el b/elpa/auctex-13.1.3/style/environ.el
new file mode 100644
index 0000000..3a17f50
--- /dev/null
+++ b/elpa/auctex-13.1.3/style/environ.el
@@ -0,0 +1,143 @@
+;;; environ.el --- AUCTeX style for `environ.sty' version v0.3 -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2015, 2016, 2018, 2020 Free Software Foundation, Inc.
+
+;; Author: Arash Esbati <arash@gnu.org>
+;; Maintainer: auctex-devel@gnu.org
+;; Created: 2015-07-04
+;; 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 `environ.sty' version v0.3 from
+;; 2014/05/04. `environ.sty' is part of TeXLive.
+
+;; Name of new env's defined with `\NewEnviron' are automatically
+;; added to list of known env's, e.g.:
+;;
+;; \NewEnviron{test}{<macro code>}
+;;
+;; `test' will be in completion list upon `C-c C-e'.
+
+;; More sophisticated definions must go through AUCTeX's parser, e.g.:
+;;
+;; \NewEnviron{test}[2][]{<macro code>}
+;;
+;; After a definition like this, you have to invoke `C-c C-n' to get
+;; the correct completion.
+
+;;; Code:
+
+(require 'tex)
+(require 'latex)
+
+;; Silence the compiler:
+(declare-function font-latex-add-keywords
+ "font-latex"
+ (keywords class))
+
+(defvar LaTeX-auto-environ-NewEnviron nil
+ "Temporary for parsing the arguments of `\\NewEnviron'
+from `environ' package.")
+
+(defvar LaTeX-environ-NewEnviron-regexp
+ `(,(concat "\\\\\\(?:Ren\\|N\\)ewEnviron"
+ "[ \t\n\r]*{\\([A-Za-z0-9]+\\)}%?"
+ "[ \t\n\r]*\\[?\\([0-9]?\\)\\]?%?"
+ "[ \t\n\r]*\\(\\[\\)?")
+ (1 2 3) LaTeX-auto-environ-NewEnviron)
+ "Matches the argument of `\\NewEnviron' and `\\RenewEnviron'
+from `environ.sty'.")
+
+(defun LaTeX-environ-auto-prepare ()
+ "Clear temporary variable from `environ.sty' before parsing."
+ (setq LaTeX-auto-environ-NewEnviron nil))
+
+(defun LaTeX-environ-auto-cleanup ()
+ "Process the parsed results of `\\NewEnviron'."
+ (dolist (env-args LaTeX-auto-environ-NewEnviron)
+ (let ((env (car env-args))
+ (args (cadr env-args))
+ (opt (nth 2 env-args)))
+ (cond (;; opt. 1st argument and mandatory argument(s)
+ (and args (not (string-equal args ""))
+ opt (not (string-equal opt "")))
+ (add-to-list 'LaTeX-auto-environment
+ (list env 'LaTeX-env-args (vector "argument")
+ (1- (string-to-number args)))))
+ (;; mandatory argument(s) only
+ (and args (not (string-equal args ""))
+ (string-equal opt ""))
+ (add-to-list 'LaTeX-auto-environment
+ (list env (string-to-number args))))
+ (t ; No args
+ (add-to-list 'LaTeX-auto-environment (list env)))))))
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-environ-auto-prepare t)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-environ-auto-cleanup t)
+(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
+
+(defun TeX-arg-environ-final-code (_optional)
+ "Query for the presence of optional `final code' as argument to
+`\\NewEnviron' and insert the appropriate brackets."
+ (let ((fincode (y-or-n-p "With optional final code? ")))
+ (when fincode
+ (insert "[]"))))
+
+(TeX-add-style-hook
+ "environ"
+ (lambda ()
+
+ ;; Add it to the parser
+ (TeX-auto-add-regexp LaTeX-environ-NewEnviron-regexp)
+
+ (TeX-add-symbols
+
+ ;; \NewEnviron{<name>}[<No.args>][<Opt.arg.>]{<Macro code>}[<Final code>]
+ '("NewEnviron"
+ (TeX-arg-define-environment "Environment")
+ [ "Number of arguments" ] [ "argument" ] t TeX-arg-environ-final-code)
+
+ '("RenewEnviron"
+ (TeX-arg-environment "Environment")
+ [ "Number of arguments" ] [ "argument" ] t TeX-arg-environ-final-code)
+
+ ;; Insert a pair of braces and we're done
+ '("environfinalcode" t)
+
+ ;; Pre-defined
+ '("BODY")
+
+ ;; Define another macro instead of \BODY
+ '("environbodyname" TeX-arg-define-macro))
+
+ ;; Fontification
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("NewEnviron" "{[[{[")
+ ("RenewEnviron" "{[[{[")
+ ("environbodyname" "|{\\"))
+ 'function)))
+ TeX-dialect)
+
+(defvar LaTeX-environ-package-options nil
+ "Package options for the environ package.")
+
+;;; environ.el ends here