diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/enumitem.el')
| -rw-r--r-- | elpa/auctex-13.1.3/style/enumitem.el | 525 | 
1 files changed, 0 insertions, 525 deletions
diff --git a/elpa/auctex-13.1.3/style/enumitem.el b/elpa/auctex-13.1.3/style/enumitem.el deleted file mode 100644 index d8ad056..0000000 --- a/elpa/auctex-13.1.3/style/enumitem.el +++ /dev/null @@ -1,525 +0,0 @@ -;;; enumitem.el --- AUCTeX style for `enumitem.sty' (v3.9)  -*- lexical-binding: t; -*- - -;; Copyright (C) 2015--2021 Free Software Foundation, Inc. - -;; Author: Arash Esbati <arash@gnu.org> -;; Maintainer: auctex-devel@gnu.org -;; Created: 2014-10-20 -;; 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 `enumitem.sty' (v3.9) from 2019/06/20. -;; `enumitem.sty' is part of TeXLive. - -;; Tassilo Horn's `minted.el' was a major source of inspiration for -;; this style, many thanks to him (also for patiently answering my -;; many other questions, incl. the stupid ones.) - -;; If things do not work or when in doubt, press `C-c C-n'.  Comments -;; for improvement are welcome. - -;;; Code: - -(require 'tex) -(require 'latex) -(eval-when-compile -  (require 'cl-lib)) - -;; Silence the compiler: -(declare-function font-latex-add-keywords -                  "font-latex" -                  (keywords class)) - -(defvar LaTeX-enumitem-key-val-options -  `(;; 3.1 Label and cross references format -    ("label"  ("\\alph*"  "\\Alph*"  "\\arabic*" -               "\\roman*" "\\Roman*" "\\value*")) -    ("label*" ("\\alph*"  "\\Alph*"  "\\arabic*" -               "\\roman*" "\\Roman*" "\\value*")) -    ("ref"    ("\\alph*"  "\\Alph*"  "\\arabic*" -               "\\roman*" "\\Roman*" "\\value*")) -    ("font" ,(mapcar (lambda (mac) -                       (concat TeX-esc mac)) -                     '(;; family -                       "rmfamily" "sffamily" "ttfamily" -                       ;; series -                       "mdseries" "bfseries" -                       ;; shape -                       "upshape" "itshape" "slshape" "scshape" -                       ;; size -                       "tiny"  "scriptsize" "footnotesize" -                       "small" "normalsize" "large" -                       "Large" "LARGE" "huge" "Huge" -                       ;; reset macro -                       "normalfont"))) -    ("format" ,(mapcar (lambda (mac) -                         (concat TeX-esc mac)) -                       '(;; family -                         "rmfamily" "sffamily" "ttfamily" -                         ;; series -                         "mdseries" "bfseries" -                         ;; shape -                         "upshape" "itshape" "slshape" "scshape" -                         ;; size -                         "tiny"  "scriptsize" "footnotesize" -                         "small" "normalsize" "large" -                         "Large" "LARGE" "huge" "Huge" -                         ;; reset macro -                         "normalfont"))) -    ("align" ("left" "right" "parleft")) -    ;; 3.2 Horizontal spacing of labels -    ("labelindent" ("*" "!")) -    ("left") -    ("leftmargin"  ("*" "!")) -    ("itemindent"  ("*" "!")) -    ("labelsep"    ("*" "!")) -    ("labelwidth"  ("*" "!")) -    ("widest") -    ("widest*") -    ("labelsep*") -    ("labelindent*") -    ("rightmargin") -    ;; Vertical Spacing -    ("topsep") -    ("partopsep") -    ("parsep") -    ("itemsep") -    ;; 3.3 Numbering, stopping, and resuming -    ("start") -    ("resume") -    ("resume*") -    ;; 3.4 Series -    ("series") -    ;; 3.5 Penalties -    ("beginpenalty") -    ("midpenalty") -    ("endpenalty") -    ;; 3.6 Injecting code -    ("before") -    ("before*") -    ("after") -    ("after*") -    ("first") -    ("first*") -    ;; 3.7 Description styles -    ("style" ("standard" "unboxed" "nextline" "sameline" "multiline")) -    ;; 3.8 Compact lists -    ("noitemsep") -    ("nosep") -    ;; 3.9 Wide lists -    ("wide") -    ;; 4 Inline lists -    ("itemjoin") -    ("itemjoin*") -    ("afterlabel") -    ("mode" ("boxed" "unboxed"))) -  "Key=value options for enumitem macros and environments.") - -(defun LaTeX-enumitem-key-val-options () -  "Return an updated list of key=vals from enumitem package." -  (append -   ;; New keys are valueless, so take them as is: -   (when (LaTeX-enumitem-SetEnumitemKey-list) -     (LaTeX-enumitem-SetEnumitemKey-list)) -   ;; New values defined available keys: We have to collect predefined -   ;; values (if any) from `LaTeX-enumitem-key-val-options' (stored in -   ;; `vals-predefined') and user-defined values (stored in -   ;; `vals-parsed') which were parsed and added to `result' in the -   ;; previous run of `dolist' and then combine them as value to a -   ;; key. -   (when (LaTeX-enumitem-SetEnumitemValue-list) -     (let (result) -       (dolist (keyvals (LaTeX-enumitem-SetEnumitemValue-list) result) -         (let* ((key (nth 1 keyvals)) -                (val (nth 2 keyvals)) -                (vals-predefined -                 (cadr (assoc key LaTeX-enumitem-key-val-options))) -                (vals-parsed (cadr (assoc key result)))) -           ;; Remove entry in `result' if there is one for the `key': -           (when (assoc key result) -             (setq result (assq-delete-all (car (assoc key result)) -                                           result))) -           ;; Add the entry to `result'; also remove any duplicates -           (cl-pushnew (list key (TeX-delete-duplicate-strings -                                  (append vals-parsed -                                          vals-predefined -                                          (list val)))) -                       result :test #'equal))))) -   ;; New values to `align' key: We collect the predefined ones from -   ;; `LaTeX-enumitem-key-val-options' in `vals-predefined' and -   ;; prepend them to newly parsed ones: -   (when (LaTeX-enumitem-SetLabelAlign-list) -     (let* ((key "align") -            (vals (mapcar #'car (LaTeX-enumitem-SetLabelAlign-list))) -            (vals-predefined (cadr -                              (assoc key LaTeX-enumitem-key-val-options)))) -       `(("align" ,(TeX-delete-duplicate-strings -                    (append vals-predefined vals)))))) -   ;; Predefined key=vals: -   LaTeX-enumitem-key-val-options)) - -;; Setup for \newlist: - -(TeX-auto-add-type "enumitem-newlist" "LaTeX") - -(defvar LaTeX-enumitem-newlist-regexp -  '("\\\\newlist{\\([^}]+\\)}{\\([^}]+\\)}" -    (1 2) LaTeX-auto-enumitem-newlist) -  "Matches the arguments of `\\newlist' from `enumitem' package.") - -;; Setup for \SetLabelAlign: - -(TeX-auto-add-type "enumitem-SetLabelAlign" "LaTeX") - -(defvar LaTeX-enumitem-SetLabelAlign-regexp -  '("\\\\SetLabelAlign{\\([^}]+\\)}" -    1 LaTeX-auto-enumitem-SetLabelAlign) -  "Matches the argument of `\\SetLabelAlign' from `enumitem' package.") - -;; Setup for \SetEnumitemKey: - -(TeX-auto-add-type "enumitem-SetEnumitemKey" "LaTeX") - -(defvar LaTeX-enumitem-SetEnumitemKey-regexp -  '("\\\\SetEnumitemKey{\\([^}]+\\)}" -    1 LaTeX-auto-enumitem-SetEnumitemKey) -  "Matches the arguments of `\\SetEnumitemKey' from `enumitem' package.") - -;; Setup for \SetEnumitemValue: - -(TeX-auto-add-type "enumitem-SetEnumitemValue" "LaTeX") - -;; Upon Tassilo's recommendation, we include also `0' so that we can -;; use the function `LaTeX-enumitem-SetEnumitemValue-list' while we -;; make sure that `TeX-auto-list-information' doesn't remove multiple -;; defined values to a specific key.  For this reason, we also ignore -;; the 3. argument to the `\SetEnumitemValue' macro (i.e., a third -;; {\\([^}]+\\)} in regex) so that we don't pollute the generated -;; `docname.el' with unnecessary (La)TeX code. -(defvar LaTeX-enumitem-SetEnumitemValue-regexp -  '("\\\\SetEnumitemValue{\\([^}]+\\)}{\\([^}]+\\)}" -    (0 1 2) LaTeX-auto-enumitem-SetEnumitemValue) -  "Matches the arguments of `\\SetEnumitemValue' from `enumitem' package.") - -;; Plug them into the machinery. -(defun LaTeX-enumitem-auto-prepare () -  "Clear various `LaTeX-enumitem-*' before parsing." -  (setq LaTeX-auto-enumitem-newlist          nil -        LaTeX-auto-enumitem-SetLabelAlign    nil -        LaTeX-auto-enumitem-SetEnumitemKey   nil -        LaTeX-auto-enumitem-SetEnumitemValue nil)) - -(defun LaTeX-enumitem-auto-cleanup () -  "Move parsing results into right places for further usage." -  ;; \newlist{<name>}{<type>}{<max-depth>} -  ;; env=<name>, type=<type>, ignored=<max-depth> -  (dolist (env-type (LaTeX-enumitem-newlist-list)) -    (let* ((env  (car env-type)) -           (type (cadr env-type))) -      (LaTeX-add-environments (list env 'LaTeX-enumitem-env-with-opts)) -      ;; Tell AUCTeX about parsed description like environments. -      (when (or (string-equal type "description") -                (string-equal type "description*")) -        (add-to-list 'LaTeX-item-list `(,env . LaTeX-item-argument))) -      ;; Add new env's to `ispell-tex-skip-alist': skip the opt. arg: -      (TeX-ispell-skip-setcdr `((,env ispell-tex-arg-end 0)))))) - -(add-hook 'TeX-auto-prepare-hook #'LaTeX-enumitem-auto-prepare t) -(add-hook 'TeX-auto-cleanup-hook #'LaTeX-enumitem-auto-cleanup t) -(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) - -(defun LaTeX-enumitem-env-with-opts (env) -  "Insert ENV provided by `enumitem' package." -  (LaTeX-insert-environment -   env -   (let ((opts (TeX-read-key-val t (LaTeX-enumitem-key-val-options)))) -     (when (and opts (not (string-equal opts ""))) -       (format "[%s]" opts)))) -  (if (TeX-active-mark) -      (progn -        (LaTeX-find-matching-begin) -        (end-of-line 1)) -    (end-of-line 0)) -  (delete-char 1) -  (when (looking-at (concat "^[ \t]+$\\|" -                            "^[ \t]*" TeX-comment-start-regexp "+[ \t]*$")) -    (delete-region (point) (line-end-position))) -  (delete-horizontal-space) -  ;; Deactivate the mark here in order to prevent `TeX-parse-macro' -  ;; from swapping point and mark and the \item ending up right after -  ;; \begin{...}. -  (deactivate-mark) -  (LaTeX-insert-item) -  ;; The inserted \item may have outdented the first line to the -  ;; right.  Fill it, if appropriate. -  (when (and auto-fill-function -             (not (looking-at "$")) -             (not (assoc env LaTeX-indent-environment-list)) -             (> (- (line-end-position) (line-beginning-position)) -                (current-fill-column))) -    (LaTeX-fill-paragraph nil))) - -(defun LaTeX-arg-enumitem-SetLabelAlign (optional) -  "Ask and insert a new type (value) for the \"align\" key. -Insert value in brackets if OPTIONAL is non-nil." -  (let ((val (TeX-read-string "Alignment: "))) -    (TeX-argument-insert val optional) -    (LaTeX-add-enumitem-SetLabelAligns val))) - -(defun LaTeX-arg-enumitem-SetEnumitemKey (optional) -  "Ask and insert a new key and its replacement. -Insert key and value in brackets if OPTIONAL is non-nil." -  (let ((key     (TeX-read-string "New Key: ")) -        (replace (TeX-read-key-val optional -                                   (LaTeX-enumitem-key-val-options) -                                   "Replacement"))) -    (TeX-argument-insert key     optional) -    (TeX-argument-insert replace optional) -    (LaTeX-add-enumitem-SetEnumitemKeys key))) - -;; In `LaTeX-enumitem-SetEnumitemValue-regexp', we match (0 1 2). -;; When adding a new `key=val', we need something unique for `0'-match -;; until the next `C-c C-n'.  We mimic that regex-match bei concat'ing -;; the elements and pass the result to -;; `LaTeX-add-enumitem-SetEnumitemValues'.  It will vanish upon next -;; invocation of `C-c C-n'. -(defun LaTeX-arg-enumitem-SetEnumitemValue (optional) -  "Ask and insert for a new value added to an existing key. -Insert key and value in brackets if OPTIONAL is non-nil." -  (let ((key (completing-read  "Key: " LaTeX-enumitem-key-val-options)) -        (val (TeX-read-string "String value: "))) -    (TeX-argument-insert key optional) -    (TeX-argument-insert val optional) -    (LaTeX-add-enumitem-SetEnumitemValues -     (list (concat "\\SetEnumitemValue{" key "}{" val "}") -           key val)))) - -(defun LaTeX-arg-enumitem-setlist (_optional) -  "Insert the arguments of `\\setlist' macro from `enumitem' package. -This function inserts three arguments.  The first optional -argument is only available when the package option `sizes' is -provided.  OPTIONAL is ignored." -  ;; First opt. argument: -  (when (LaTeX-provided-package-options-member "enumitem" "sizes") -    (let* ((TeX-arg-opening-brace "<") -           (TeX-arg-closing-brace ">") -           (sizes '("script" "tiny" "footnote" "small" "normal" -                    "large" "Large" "LARGE" "huge" "Huge")) -           (size (completing-read -                  (TeX-argument-prompt t nil "Size") -                  (append -                   (mapcar (lambda (x) (concat "-" x)) sizes) -                   (mapcar (lambda (x) (concat x "-")) sizes) -                   sizes)))) -      (TeX-argument-insert size t))) -  ;; Second opt. argument: -  (TeX-argument-insert -   (mapconcat #'identity -              (TeX-completing-read-multiple -               (TeX-argument-prompt t nil "Environment(s), level(s)") -               (append -                (when (LaTeX-provided-package-options-member -                       "enumitem" "includedisplayed") -                  '("trivlist")) -                (mapcar #'car (LaTeX-enumitem-newlist-list)) -                '("1" "2" "3" "4"))) -              ",") -   t) -  ;; Mandatory argument: -  (TeX-argument-insert -   (TeX-read-key-val nil (LaTeX-enumitem-key-val-options)) -   nil)) - -(TeX-add-style-hook - "enumitem" - (lambda () - -   ;; Add enumitem to the parser. -   (TeX-auto-add-regexp LaTeX-enumitem-newlist-regexp) -   (TeX-auto-add-regexp LaTeX-enumitem-SetEnumitemKey-regexp) -   (TeX-auto-add-regexp LaTeX-enumitem-SetEnumitemValue-regexp) -   (TeX-auto-add-regexp LaTeX-enumitem-SetLabelAlign-regexp) - -   ;; Add the standard environments: -   (LaTeX-add-enumitem-newlists '("itemize"     "itemize") -                                '("enumerate"   "enumerate") -                                '("description" "description")) - -   ;; Add the starred versions with the 'inline' package option: -   (when (LaTeX-provided-package-options-member "enumitem" "inline") -     (LaTeX-add-enumitem-newlists '("itemize*"     "itemize*") -                                  '("enumerate*"   "enumerate*") -                                  '("description*" "description*"))) - -   ;; Standard env's take key-val as optional argument. -   (LaTeX-add-environments -    '("itemize"      LaTeX-enumitem-env-with-opts) -    '("enumerate"    LaTeX-enumitem-env-with-opts) -    '("description"  LaTeX-enumitem-env-with-opts)) - -   ;; Make inline env's available with package option "inline" -   (when (LaTeX-provided-package-options-member "enumitem" "inline") -     (LaTeX-add-environments -      '("itemize*"     LaTeX-enumitem-env-with-opts) -      '("enumerate*"   LaTeX-enumitem-env-with-opts) -      '("description*" LaTeX-enumitem-env-with-opts)) -     (add-to-list 'LaTeX-item-list '("description*" . LaTeX-item-argument))) - -   (TeX-add-symbols -    ;; 6 Size dependent settings -    '("SetEnumitemSize" 2) - -    ;; 7 Cloning the basic lists -    ;; The easy way would be: -    ;; '("newlist" -    ;;   "Name" (TeX-arg-eval -    ;;           completing-read "Type: " -    ;;                 '(("itemize")  ("enumerate")  ("description") -    ;;                   ("itemize*") ("enumerate*") ("description*"))) -    ;;  "Max-depth") -    ;; But we go the extra mile to improve the user experience and add -    ;; the arguments directly to appropriate lists. -    ;; \newlist{<name>}{<type>}{<max-depth>} -    '("newlist" -      (TeX-arg-eval -       (lambda () -         (let ((name (TeX-read-string "Name: ")) -               (type (completing-read -                      "Type: " -                      (mapcar #'cadr (LaTeX-enumitem-newlist-list)))) -               (depth (TeX-read-string "Max-depth: "))) -           (when (or (string-equal type "description") -                     (string-equal type "description*")) -             (add-to-list 'LaTeX-item-list `(,name . LaTeX-item-argument))) -           (LaTeX-add-environments `(,name LaTeX-enumitem-env-with-opts)) -           (LaTeX-add-enumitem-newlists (list name type)) -           (TeX-ispell-skip-setcdr `((,name ispell-tex-arg-end 0))) -           (TeX-argument-insert name nil) -           (TeX-argument-insert type nil) -           (format "%s" depth))))) - -    ;; \renewlist{<name>}{<type>}{<max-depth>} -    '("renewlist" -      (TeX-arg-eval completing-read "Name: " -                    (mapcar #'car (LaTeX-enumitem-newlist-list))) -      (TeX-arg-eval completing-read "Type: " -                    (mapcar #'cadr (LaTeX-enumitem-newlist-list))) -      "Max-depth") - -    ;; \setlist<size>[<names,levels>]{<key-vals>} -    '("setlist" LaTeX-arg-enumitem-setlist) - -    ;; \setlist*[<names,levels>]{<key-vals>} -    '("setlist*" -      [TeX-arg-eval mapconcat #'identity -                    (TeX-completing-read-multiple -                     (TeX-argument-prompt t nil "Environment(s), level(s)") -                     (append -                      (when (LaTeX-provided-package-options-member "enumitem" -                                                                   "includedisplayed") -                        '("trivlist")) -                      (mapcar #'car (LaTeX-enumitem-newlist-list)) -                      '("1" "2" "3" "4"))) -                    ","] -      (TeX-arg-key-val (LaTeX-enumitem-key-val-options))) ) - -   ;; General commands: -   (TeX-add-symbols - -    ;; Ask for an Integer and insert it. -    '("setlistdepth" "Integer") - -    ;; Just add the braces and let the user do the rest. -    '("AddEnumerateCounter" 3) -    '("AddEnumerateCounter*" 3) - -    ;; "\restartlist" only works for lists defined with "resume" key. -    ;; We will not extract that information and leave that to users. -    ;; For completion, extract enumerated environments from -    ;; `LaTeX-enumitem-newlist-list' and add "enumerate" to them. -    '("restartlist" -      (TeX-arg-eval -       (lambda () -         (let ((enums '("enumerate"))) -           (when (LaTeX-provided-package-options-member "enumitem" "inline") -             (cl-pushnew "enumerate*" enums :test #'equal)) -           (dolist (env-type (LaTeX-enumitem-newlist-list)) -             (let ((env   (car env-type)) -                   (type  (cadr env-type))) -               (when (or (string-equal type "enumerate") -                         (string-equal type "enumerate*")) -                 (cl-pushnew env enums :test #'equal)))) -           (completing-read "List name: " enums))))) - -    ;; "Align" is added as new value to "align" key in key-val list. -    '("SetLabelAlign" LaTeX-arg-enumitem-SetLabelAlign t) - -    ;; "Key" will be parsed and added to key-val list. -    '("SetEnumitemKey" LaTeX-arg-enumitem-SetEnumitemKey) - -    ;; "Key" and "Value" are added to our key-val list. -    '("SetEnumitemValue" LaTeX-arg-enumitem-SetEnumitemValue "Replacement") - -    ;; v3.6 has a macro for visual debugging. -    '("DrawEnumitemLabel" 0)) - -   ;; Setting enumerate short label -   (when (LaTeX-provided-package-options-member "enumitem" "shortlabels") -     (TeX-add-symbols -      '("SetEnumerateShortLabel" -        (TeX-arg-eval completing-read "Key: " -                      '("A" "a" "I" "i" "1")) -        "Replacement"))) - -   ;; Add \labelindent to list of known lengths: -   (LaTeX-add-lengths "labelindent") - -   ;; Fontification -   (when (and (featurep 'font-latex) -              (eq TeX-install-font-lock 'font-latex-setup)) -     (font-latex-add-keywords '(("newlist"             "{{{") -                                ("renewlist"           "{{{") -                                ("SetEnumitemSize"     "{{") -                                ("AddEnumerateCounter" "*{{{") -                                ("SetLabelAlign"       "{{") -                                ("SetEnumitemKey"      "{{" ) -                                ("SetEnumitemValue"    "{{{")) -                              'function) -     ;; Cater for additional optionals arg <size> based on package -     ;; option 'sizes': -     (font-latex-add-keywords -      (if (LaTeX-provided-package-options-member "enumitem" "sizes") -          '(("setlist" "*<[{")) -        '(("setlist" "*[{"))) -      'function) - -     (font-latex-add-keywords '(("restartlist"            "{" ) -                                ("setlistdepth"           "{" ) -                                ("SetEnumerateShortLabel" "{{")) -                              'variable))) - TeX-dialect) - -(defvar LaTeX-enumitem-package-options -  '("inline" "shortlabels" "loadonly" "sizes" -    "ignoredisplayed" "includedisplayed") -  "Package options for the enumitem package.") - -;;; enumitem.el ends here  | 
