[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/auctex a375093 20/35: New style enumitem.el
From: |
Tassilo Horn |
Subject: |
[elpa] externals/auctex a375093 20/35: New style enumitem.el |
Date: |
Sun, 22 Mar 2015 09:27:04 +0000 |
branch: externals/auctex
commit a375093713f57826e2bc2ca723094f873800e069
Author: Arash Esbati <address@hidden>
Commit: Tassilo Horn <address@hidden>
New style enumitem.el
* Makefile.in (STYLESRC): Add new style.
* style/enumitem.el: New file.
Signed-off-by: Tassilo Horn <address@hidden>
---
ChangeLog | 6 +
Makefile.in | 3 +-
style/enumitem.el | 442 +++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 450 insertions(+), 1 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 52f31c2..7925bfd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2015-03-08 Arash Esbati <address@hidden>
+
+ * Makefile.in (STYLESRC): Add new style.
+
+ * style/enumitem.el: New file.
+
2015-03-08 Tassilo Horn <address@hidden>
* tex.el (TeX-style-path): Replace add-to-list on local with
diff --git a/Makefile.in b/Makefile.in
index aa2d40d..6873e01 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -145,7 +145,8 @@ STYLESRC = style/prosper.el \
style/newtxtext.el style/newtxttt.el style/minted.el \
style/wrapfig.el style/relsize.el style/currvita.el \
style/tcolorbox.el style/color.el style/expl3.el \
- style/bidibeamer.el
+ style/bidibeamer.el style/enumitem.el
+
STYLEELC = $(STYLESRC:.el=.elc)
ifeq (@preview_enabled@,yes)
diff --git a/style/enumitem.el b/style/enumitem.el
new file mode 100644
index 0000000..760a145
--- /dev/null
+++ b/style/enumitem.el
@@ -0,0 +1,442 @@
+;;; enumitem.el --- AUCTeX style for `enumitem.sty' (v3.5.2)
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Arash Esbati <esbati'at'gmx.de>
+;; Maintainer: address@hidden
+;; 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.5.2) from 2011/09/28.
+;; `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:
+
+;; Needed for compiling `pushnew':
+(eval-when-compile (require 'cl))
+
+;; Needed for auto-parsing.
+(require 'tex)
+
+(defvar LaTeX-enumitem-key-val-options
+ '(;; Vertical Spacing
+ ("topsep")
+ ("partopsep")
+ ("parsep")
+ ("itemsep")
+ ;; Horizontal Spacing
+ ("leftmargin" ("*" "!"))
+ ("itemindent" ("*" "!"))
+ ("labelsep" ("*" "!"))
+ ("labelwidth" ("*" "!"))
+ ("labelindent" ("*" "!"))
+ ("labelsep*")
+ ("labelindent*")
+ ("widest")
+ ("widest*")
+ ("rightmargin")
+ ;; Labels and cross reference format
+ ("label")
+ ("label*")
+ ("ref")
+ ("font")
+ ("format")
+ ("align" ("left" "right" "parleft"))
+ ;; Numbering, stopping, resuming
+ ("start")
+ ("resume")
+ ("resume*")
+ ;; Series
+ ("series")
+ ;; Penalties
+ ("beginpenalty")
+ ("midpenalty")
+ ("endpenalty")
+ ("before")
+ ("before*")
+ ("after")
+ ("after*")
+ ;; Description styles
+ ("style" ("standard" "multiline" "nextline" "sameline" "unboxed"))
+ ;; Compact lists
+ ("noitemsep")
+ ("nosep")
+ ;; Wide lists
+ ("wide")
+ ;; Inline lists
+ ("itemjoin")
+ ("itemjoin*")
+ ("afterlabel")
+ ("mode" ("boxed" "unboxed")))
+ "Key=value options for enumitem macros and environments.")
+
+(defvar LaTeX-enumitem-key-val-options-local nil
+ "Buffer-local key=value options for enumitem macros and environments.")
+(make-variable-buffer-local 'LaTeX-enumitem-key-val-options-local)
+
+;; Variables needed for \newlist: This command is not hooked into
+;; the parser via `TeX-auto-add-type', we mimic that behaviour.
+
+(defvar LaTeX-enumitem-newlist-list nil
+ "List of environments defined by command `\\newlist' from
+`enumitem' package.")
+
+(defvar LaTeX-enumitem-newlist-list-local nil
+ "Local list of all environments definded with `\\newlist'
+plus available through `enumitem' package.")
+(make-variable-buffer-local 'LaTeX-enumitem-newlist-list-local)
+
+(defvar LaTeX-enumitem-newlist-list-item-arg nil
+ "List of description like environments defined by command
+`\\newlist' from `enumitem' package.")
+
+(defvar LaTeX-enumitem-newlist-list-item-arg-local nil
+ "Local list of all description like environments defined by command
+`\\newlist' plus available through `enumitem' package.")
+(make-variable-buffer-local 'LaTeX-enumitem-newlist-list-item-arg-local)
+
+(defvar LaTeX-auto-enumitem-newlist nil
+ "Temporary for parsing the arguments of `\\newlist' from
+`enumitem' package.")
+
+(defvar LaTeX-enumitem-newlist-regexp
+ '("\\\\newlist{\\([^}]+\\)}{\\([^}]+\\)}"
+ (1 2) LaTeX-auto-enumitem-newlist)
+ "Matches the arguments of `\\newlist' 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.
+(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-enumitem-newlist-list nil
+ LaTeX-enumitem-newlist-list-item-arg 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-auto-enumitem-newlist)
+ (let* ((env (car env-type))
+ (type (cadr env-type)))
+ (add-to-list 'LaTeX-auto-environment
+ (list env 'LaTeX-enumitem-env-with-opts))
+ (add-to-list 'LaTeX-enumitem-newlist-list
+ (list env))
+ (when (or (string-equal type "description")
+ (string-equal type "description*"))
+ (add-to-list 'LaTeX-enumitem-newlist-list-item-arg
+ (list env))))))
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-enumitem-auto-prepare t)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-enumitem-auto-cleanup t)
+
+(defun LaTeX-enumitem-env-with-opts (env)
+ "Update available key-val options, then insert ENV and optional
+key-val and the first item."
+ (LaTeX-enumitem-update-key-val-options)
+ (LaTeX-insert-environment
+ env
+ (let ((opts (TeX-read-key-val t LaTeX-enumitem-key-val-options-local)))
+ (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{...}.
+ (TeX-deactivate-mark)
+ (LaTeX-insert-item)
+ ;; The inserted \item may have outdented the first line to the
+ ;; right. Fill it, if appropriate.
+ (when (and (not (looking-at "$"))
+ (not (assoc environment LaTeX-indent-environment-list))
+ (> (- (line-end-position) (line-beginning-position))
+ (current-fill-column)))
+ (LaTeX-fill-paragraph nil)))
+
+(defun LaTeX-arg-SetEnumitemKey (optional &optional prompt)
+ "Ask for a new key to be defined and add it to
+`LaTeX-enumitem-key-val-options-local'."
+ (LaTeX-enumitem-update-key-val-options)
+ (let ((key (TeX-read-string "New Key: "))
+ (replace (TeX-read-key-val optional
+ LaTeX-enumitem-key-val-options-local
"Replacement")))
+ (TeX-argument-insert key optional)
+ (TeX-argument-insert replace optional)
+ (add-to-list 'LaTeX-enumitem-key-val-options-local (list key))
+ (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 use a random number for this purpose
+;; which will then disappear.
+(defun LaTeX-arg-SetEnumitemValue (optional &optional prompt)
+ "Ask for a new value added to an existing key incl. the final
+replacement of the value."
+ (LaTeX-enumitem-update-key-val-options)
+ (let* ((key (TeX-read-key-val optional LaTeX-enumitem-key-val-options-local
"Key"))
+ (val (TeX-read-string "String value: "))
+ ;; (key-match (car (assoc key LaTeX-enumitem-key-val-options-local)))
+ (val-match (cdr (assoc key LaTeX-enumitem-key-val-options-local)))
+ (temp (copy-alist LaTeX-enumitem-key-val-options-local))
+ (opts (assq-delete-all (car (assoc key temp)) temp)))
+ (if val-match
+ (pushnew (list key (delete-dups (apply 'append (list val) val-match)))
+ opts :test #'equal)
+ (pushnew (list key (list val)) opts :test #'equal))
+ (setq LaTeX-enumitem-key-val-options-local (copy-alist opts))
+ (TeX-argument-insert key optional)
+ (TeX-argument-insert val optional)
+ (LaTeX-add-enumitem-SetEnumitemValues
+ `(,(number-to-string (random)) ,key ,val))))
+
+(defun LaTeX-enumitem-update-key-val-options ()
+ "Update the buffer-local key-val options before offering them
+in `enumitem'-completions."
+ (dolist (key (LaTeX-enumitem-SetEnumitemKey-list))
+ (add-to-list 'LaTeX-enumitem-key-val-options-local key))
+ (dolist (keyvals (LaTeX-enumitem-SetEnumitemValue-list))
+ (let* ((key (nth 1 keyvals))
+ (val (nth 2 keyvals))
+ ;; (key-match (car (assoc key LaTeX-enumitem-key-val-options-local)))
+ (val-match (cdr (assoc key LaTeX-enumitem-key-val-options-local)))
+ (temp (copy-alist LaTeX-enumitem-key-val-options-local))
+ (opts (assq-delete-all (car (assoc key temp)) temp)))
+ (if val-match
+ (pushnew (list key (delete-dups (apply 'append (list val) val-match)))
+ opts :test #'equal)
+ (pushnew (list key (list val)) opts :test #'equal))
+ (setq LaTeX-enumitem-key-val-options-local (copy-alist opts)))))
+
+
+(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)
+
+ ;; Activate the buffer-local version of key-vals.
+ (setq LaTeX-enumitem-key-val-options-local
+ (copy-alist LaTeX-enumitem-key-val-options))
+
+ ;; Set the standard env's to the local list.
+ (setq LaTeX-enumitem-newlist-list-local
+ '(("itemize") ("enumerate") ("description")))
+
+ ;; Add the starred versions to the local list.
+ (when (LaTeX-provided-package-options-member "enumitem" "inline")
+ (setq LaTeX-enumitem-newlist-list-local
+ (append '(("itemize*") ("enumerate*") ("description*"))
+ LaTeX-enumitem-newlist-list-local)))
+
+ ;; Now add the parsed env's to the local list.
+ (setq LaTeX-enumitem-newlist-list-local
+ (append LaTeX-enumitem-newlist-list
+ LaTeX-enumitem-newlist-list-local))
+
+ ;; Move parsed description like env's into a local variable.
+ (setq LaTeX-enumitem-newlist-list-item-arg-local
+ LaTeX-enumitem-newlist-list-item-arg)
+
+ ;; Tell AUCTeX about special items parsed
+ (dolist (env LaTeX-enumitem-newlist-list-item-arg-local)
+ (add-to-list 'LaTeX-item-list `(,(car env) . LaTeX-item-argument)))
+
+ ;; 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)))
+
+ ;; Cloning lists
+ (TeX-add-symbols
+ ;; 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: "
+ '(("itemize") ("enumerate") ("description")
+ ("itemize*") ("enumerate*") ("description*"))))
+ (depth (TeX-read-string "Max-depth: ")))
+ (setq LaTeX-enumitem-newlist-list-local
+ (append `(,(list name)) LaTeX-enumitem-newlist-list-local))
+ (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))
+ (insert (format "{%s}" name)
+ (format "{%s}" type))
+ (format "%s" depth)))))
+
+ ;; \renewlist{<name>}{<type>}{<max-depth>}
+ '("renewlist"
+ (TeX-arg-eval completing-read "Name: "
+ LaTeX-enumitem-newlist-list-local)
+ (TeX-arg-eval completing-read "Type: "
+ '(("itemize") ("enumerate") ("description")
+ ("itemize*") ("enumerate*") ("description*")))
+ "Max-depth")
+
+ ;; \setlist{<names,levels>}{<key-vals>}
+ '("setlist"
+ [TeX-arg-eval mapconcat 'identity
+ (TeX-completing-read-multiple
+ "Environment(s), level(s): "
+ `(,@LaTeX-enumitem-newlist-list-local
+ ("1") ("2") ("3") ("4"))) ","]
+ (TeX-arg-eval
+ (lambda ()
+ (LaTeX-enumitem-update-key-val-options)
+ (let ((opts (TeX-read-key-val nil
LaTeX-enumitem-key-val-options-local)))
+ (format "%s" opts)))))
+
+ ;; \setlist*{<names,levels>}{<key-vals>}
+ '("setlist*"
+ [TeX-arg-eval mapconcat 'identity
+ (TeX-completing-read-multiple
+ "Environment, level: "
+ `(,@LaTeX-enumitem-newlist-list-local
+ ("1") ("2") ("3") ("4"))) ","]
+ (TeX-arg-eval
+ (lambda ()
+ (LaTeX-enumitem-update-key-val-options)
+ (let ((opts (TeX-read-key-val nil
LaTeX-enumitem-key-val-options-local)))
+ (format "%s" opts))))) )
+
+ ;; 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)
+
+ ;; This command only makes sense for enumerate type environments.
+ ;; Currently, we offer all defined env's -- to be improved
+ ;; sometimes.
+ '("restartlist"
+ (TeX-arg-eval completing-read "List name: "
+ LaTeX-enumitem-newlist-list-local))
+
+ ;; "Key" will be parsed and added to key-val list.
+ '("SetEnumitemKey" LaTeX-arg-SetEnumitemKey)
+
+ ;; "Key" and "Value" are added to our key-val list
+ '("SetEnumitemValue" LaTeX-arg-SetEnumitemValue "Replacement"))
+
+ ;; 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")))
+
+ ;; Fontification
+ (when (and (featurep 'font-latex)
+ (eq TeX-install-font-lock 'font-latex-setup))
+ (font-latex-add-keywords '(("newlist" "{{{")
+ ("renewlist" "{{{")
+ ("setlist" "*[{")
+ ("AddEnumerateCounter" "{{{")
+ ("SetEnumitemKey" "{{" )
+ ("SetEnumitemValue" "{{{"))
+ 'function)
+ (font-latex-add-keywords '(("restartlist" "{" )
+ ("setlistdepth" "{" )
+ ("SetEnumerateShortLabel" "{{"))
+ 'variable)))
+ LaTeX-dialect)
+
+(defvar LaTeX-enumitem-package-options
+ '("inline" "ignoredisplayed" "shortlabels" "loadonly")
+ "Package options for the enumitem package.")
+
+;;; enumitem.el ends here
- [elpa] externals/auctex 83306b4 13/35: Add some expl3 support, (continued)
- [elpa] externals/auctex 83306b4 13/35: Add some expl3 support, Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 074af82 16/35: Add docs for LaTeX-fill-excluded-macros, Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 61ed48c 19/35: Replace add-to-list with pushnew, Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 31c42ca 23/35: Indent \[...\] display math as a normal environment., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 41c5f9a 24/35: Improve error/warning reporting when file cannot be determined., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 59f9440 26/35: Fix void-function error occuring if cl is not loaded, Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 4034de2 21/35: New style for caption.sty., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex a2a4777 25/35: Add TeX-after-TeX-LaTeX-command-finished-hook, Tassilo Horn, 2015/03/22
- [elpa] externals/auctex b853739 17/35: Add uninstall rules to Makefiles., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex d23de0a 18/35: Style for bidibeamer which delegates to beamer, Tassilo Horn, 2015/03/22
- [elpa] externals/auctex a375093 20/35: New style enumitem.el,
Tassilo Horn <=
- [elpa] externals/auctex 69b02a0 22/35: New style for geometry.sty., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 003f475 28/35: New style ltablex.el., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex f16c051 31/35: Fix header of style/mn2e.el., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 8d7fef3 27/35: Improve styles enumitem.el and caption.el., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 6896a4c 32/35: Fix of the fix. Really., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex fd04166 29/35: New style ltxtable.el., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex b1e9217 30/35: Style file for mn2e.cls., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex ca40c6a 33/35: Fix a broken link in documentation., Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 6620d8c 35/35: Merge from upstream master; release 11.88.3, Tassilo Horn, 2015/03/22
- [elpa] externals/auctex 17f5888 34/35: Merge branch 'master' into elpa, Tassilo Horn, 2015/03/22