monnier pushed a commit to branch externals/auctex in repository elpa. commit 15943e0c7436cfa7ff77859231c9c08af5dab2a7 Author: Mosè Giordano <giordano.m...@libero.it> Date: Thu Apr 4 15:17:23 2013 +0200
Better management of package options. * latex.el (LaTeX-provided-class-options): New buffer-local variable. (LaTeX-provided-class-options-member): New function. (LaTeX-provided-package-options): New buffer-local variable. (LaTeX-provided-package-options-member): New function (LaTeX-auto-cleanup): Rewrite to support `LaTeX-provided-{class,package}-options' variables. (LaTeX-arg-usepackage): Ditto. * tex.el (TeX-auto-store): Write to parsed file values of `LaTeX-provided-{class,package}-options' variables. (TeX-auto-insert): Fix indentation of inserted lines. (TeX-search-files-by-type): Fix typo in doc-string. (TeX-add-to-alist): New function. (TeX-quote-language-alist): Fix typo in doc-string. * style/babel.el (LaTeX-babel-package-options): Add missing languages. (LaTeX-babel-package-options): Add options other than languages. (LaTeX-babel-active-languages): Use `LaTeX-provided-{class,package}-options'. Loop over actually used options instead of all babel languages. ("babel"): Run styles of active languages. * style/biblatex.el ("biblatex"): Use `LaTeX-provided-package-options-member'. (LaTeX-biblatex-package-options): Consider the `ask' value for 'TeX-arg-input-file-search'. * style/kpfonts.el ("kpfonts"): Use `LaTeX-provided-package-options-member'. * style/siunitx.el: Rename `TeX-siunitx-*' functions to `LaTeX-siunitx-*' for consistency. ("siunitx"): Use `LaTeX-provided-package-options-member'. --- ChangeLog | 39 +++++++++++++++++++++++ latex.el | 89 +++++++++++++++++++++++++++++++++++++--------------- style/babel.el | 48 ++++++++++++++++++----------- style/biblatex.el | 13 +++++--- style/kpfonts.el | 6 ++-- style/siunitx.el | 56 ++++++++++++++++---------------- tex.el | 45 +++++++++++++++++++++++--- 7 files changed, 210 insertions(+), 86 deletions(-) diff --git a/ChangeLog b/ChangeLog index ca24cf5..3ab0320 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,42 @@ +2013-04-03 Mos� Giordano <giordano.m...@libero.it> + + * latex.el (LaTeX-provided-class-options): New buffer-local + variable. + (LaTeX-provided-class-options-member): New function. + (LaTeX-provided-package-options): New buffer-local variable. + (LaTeX-provided-package-options-member): New function + (LaTeX-auto-cleanup): Rewrite to support + `LaTeX-provided-{class,package}-options' variables. + (LaTeX-arg-usepackage): Ditto. + + * tex.el (TeX-auto-store): Write to parsed file values of + `LaTeX-provided-{class,package}-options' variables. + (TeX-auto-insert): Fix indentation of inserted lines. + (TeX-search-files-by-type): Fix typo in doc-string. + (TeX-add-to-alist): New function. + (TeX-quote-language-alist): Fix typo in doc-string. + + * style/babel.el (LaTeX-babel-package-options): Add missing + languages. + (LaTeX-babel-package-options): Add options other than + languages. + (LaTeX-babel-active-languages): Use + `LaTeX-provided-{class,package}-options'. Loop over actually + used options instead of all babel languages. + ("babel"): Run styles of active languages. + + * style/biblatex.el ("biblatex"): Use + `LaTeX-provided-package-options-member'. + (LaTeX-biblatex-package-options): Consider the `ask' value for + 'TeX-arg-input-file-search'. + + * style/kpfonts.el ("kpfonts"): Use + `LaTeX-provided-package-options-member'. + + * style/siunitx.el: Rename `TeX-siunitx-*' functions to + `LaTeX-siunitx-*' for consistency. + ("siunitx"): Use `LaTeX-provided-package-options-member'. + 2013-03-29 Mos� Giordano <giordano.m...@libero.it> * latex.el (TeX-arg-document): Search for LaTeX classes. diff --git a/latex.el b/latex.el index ada12d4..a37ff98 100644 --- a/latex.el +++ b/latex.el @@ -1322,6 +1322,39 @@ The input string may include LaTeX comments and newlines." (delete-backward-char 1))))) opts)) +(defvar LaTeX-provided-class-options nil + "Alist of options provided to LaTeX classes. +For each element, the CAR is the name of the class, the CDR is +the list of options provided to it. + +E.g., its value will be + \(\(\"book\" \"a4paper\" \"11pt\" \"openany\" \"fleqn\"\) + ...\) +See also `LaTeX-provided-package-options'.") +(make-variable-buffer-local 'LaTeX-provided-class-options) + +(defun LaTeX-provided-class-options-member (class option) + "Return non-nil if OPTION has been given to CLASS at load time. +The value is actually the tail of the list of options given to CLASS." + (member option (cdr (assoc package LaTeX-provided-class-options)))) + +(defvar LaTeX-provided-package-options nil + "Alist of options provided to LaTeX packages. +For each element, the CAR is the name of the package, the CDR is +the list of options provided to it. + +E.g., its value will be + \(\(\"babel\" \"german\"\) + \(\"geometry\" \"a4paper\" \"top=2cm\" \"bottom=2cm\" \"left=2.5cm\" \"right=2.5cm\"\) + ...\) +See also `LaTeX-provided-class-options'.") +(make-variable-buffer-local 'LaTeX-provided-package-options) + +(defun LaTeX-provided-package-options-member (package option) + "Return non-nil if OPTION has been given to PACKAGE at load time. +The value is actually the tail of the list of options given to PACKAGE." + (member option (cdr (assoc package LaTeX-provided-package-options)))) + (defun LaTeX-auto-cleanup () "Cleanup after LaTeX parsing." @@ -1331,6 +1364,10 @@ The input string may include LaTeX comments and newlines." (TeX-split-string "," arg)) LaTeX-auto-bibliography))) + ;; Reset class and packages options for the current buffer + (setq LaTeX-provided-class-options nil) + (setq LaTeX-provided-package-options nil) + ;; Cleanup document classes and packages (unless (null LaTeX-auto-style) (while LaTeX-auto-style @@ -1345,18 +1382,18 @@ The input string may include LaTeX comments and newlines." ;; Get the options. (setq options (LaTeX-listify-package-options options)) - ;; Append them to the style list. - (dolist (elt options) - (add-to-list 'TeX-auto-file elt t)) - - ;; Treat documentclass/documentstyle specially. - (if (or (string-equal "package" class) - (string-equal "Package" class)) - (dolist (elt (TeX-split-string - "\\([ \t\r\n]\\|%[^\n\r]*[\n\r]\\|,\\)+" style)) - ;; Append style to the style list, so style files can check the - ;; values of the options given on load time to packages. - (add-to-list 'TeX-auto-file elt t)) + ;; Treat documentclass/documentstyle specially. + (if (or (string-equal "package" class) + (string-equal "Package" class)) + (dolist (elt (TeX-split-string + "\\([ \t\r\n]\\|%[^\n\r]*[\n\r]\\|,\\)+" style)) + ;; Append style to the style list. + (add-to-list 'TeX-auto-file elt t) + ;; Append to `LaTeX-provided-package-options' the name of the + ;; package and the options provided to it at load time. + (unless (equal options '("")) + (TeX-add-to-alist 'LaTeX-provided-package-options + (list (cons elt options))))) ;; And a special "art10" style file combining style and size. (add-to-list 'TeX-auto-file style t) (add-to-list 'TeX-auto-file @@ -1385,7 +1422,10 @@ The input string may include LaTeX comments and newlines." ((member "12pt" options) "12") (t - "10"))) t)) + "10"))) t) + (unless (equal options '("")) + (TeX-add-to-alist 'LaTeX-provided-class-options + (list (cons style options))))) ;; The third argument if "class" indicates LaTeX2e features. (cond ((equal class "class") @@ -1770,11 +1810,11 @@ OPTIONAL and IGNORE are ignored." "Insert arguments to usepackage. OPTIONAL is ignored." (let ((TeX-file-extensions '("sty")) - (TeX-input-file-search t)) + (TeX-arg-input-file-search (or TeX-arg-input-file-search 'ask))) (TeX-arg-input-file nil "Package") (save-excursion (search-backward-regexp "{\\(.*\\)}") - (let* ((package (match-string 1)) + (let* ((package (TeX-match-buffer 1)) (var (intern (format "LaTeX-%s-package-options" package))) (crm-separator ",") (TeX-arg-opening-brace LaTeX-optop) @@ -1793,17 +1833,14 @@ OPTIONAL is ignored." ",")))) (setq options (read-string "Options: "))) (when options - ;; XXX: The following statement will add the options - ;; supplied to the LaTeX package to the style list. This is - ;; consistent with the way the parser works (see - ;; `LaTeX-auto-cleanup'). But in a revamped style system - ;; such options should be associated with their LaTeX - ;; package to avoid confusion. For example a `german' entry - ;; in the style list can come from documentclass options and - ;; does not necessarily mean that the babel-related - ;; extensions should be activated. - (mapc 'TeX-run-style-hooks (LaTeX-listify-package-options options)) - (TeX-argument-insert options t)))))) + (let ((opts (LaTeX-listify-package-options options))) + (TeX-add-to-alist 'LaTeX-provided-package-options + (list (add-to-list 'opts package)))) + (TeX-argument-insert options t) + ;; When `babel' package is loaded with options, load also language + ;; style files. + (when (string-equal package "babel") + (mapc 'TeX-run-style-hooks (LaTeX-babel-active-languages)))))))) (defcustom LaTeX-search-files-type-alist '((texinputs "${TEXINPUTS.latex}" ("tex/generic/" "tex/latex/") diff --git a/style/babel.el b/style/babel.el index 3242d0e..cd97038 100755 --- a/style/babel.el +++ b/style/babel.el @@ -31,30 +31,39 @@ ;;; Code: (defvar LaTeX-babel-language-list - '("acadian" "afrikaans" "american" "austrian""bahasa" "basque" "brazil" - "brazilian" "breton" "british" "bulgarian" "canadian" "canadien" - "catalan" "croatian" "czech" "danish" "dutch" "english" "esperanto" - "estonian" "finnish" "francais" "frenchb" "french" "galician" - "german" "germanb" "greek" "polutonikogreek" "hebrew" "hungarian" - "icelandic" "irish" "italian" "latin" "lowersorbian" "magyar" - "naustrian" "ngerman" "norsk" "samin" "nynorsk" "polish" "portuges" - "portuguese" "romanian" "russian" "scottish" "serbian" "slovak" - "slovene" "spanish" "swedish" "turkish" "ukrainian" "uppersorbian" - "welsh" "UKenglish" "USenglish") + '("acadian" "albanian" "afrikaans" "american" "australian" "austrian" "bahasa" + "indonesian" "indon" "bahasai" "malay" "meyalu" "bahasam" "basque" "brazil" + "brazilian" "breton" "british" "bulgarian" "canadian" "canadien" "catalan" + "croatian" "czech" "danish" "dutch" "english" "esperanto" "estonian" "finnish" + "francais" "frenchb" "french" "galician" "german" "germanb" "greek" + "polutonikogreek" "hebrew" "hungarian" "icelandic" "interlingua" "irish" + "italian" "latin" "lowersorbian" "magyar" "naustrian" "newzealand" "ngerman" + "norsk" "samin" "nynorsk" "polish" "portuges" "portuguese" "romanian" + "russian" "scottish" "serbian" "slovak" "slovene" "spanish" "swedish" "turkish" + "ukrainian" "uppersorbian" "welsh" "UKenglish" "USenglish") "List of languages supported by the babel LaTeX package.") -(if (fboundp 'defvaralias) - (defvaralias 'LaTeX-babel-package-options 'LaTeX-babel-language-list) - (defvar LaTeX-babel-package-options LaTeX-babel-language-list - "Package options for the babel package.")) +(defvar LaTeX-babel-package-options + (append LaTeX-babel-language-list '("activeacute" "activegrave" + "KeepShorthandsActive")) + "Package options for the babel package.") (defun LaTeX-babel-active-languages () "Return a list of languages used in the document." (let (active-languages) - (dolist (elt LaTeX-babel-language-list) - (when (member elt TeX-active-styles) - (add-to-list 'active-languages (list elt)))) - active-languages)) + ;; Loop over options provided to class and `babel' package at load time. + (dolist (elt (append + ;; In most cases there is only one element in the alist, if + ;; there is more than one element, the first one should + ;; contain the class options of the current buffer. So we can + ;; take the car of `LaTeX-provided-class-options'. + (cdr (car LaTeX-provided-class-options)) + (cdr (assoc "babel" LaTeX-provided-package-options)))) + (when (member elt LaTeX-babel-language-list) + ;; Append element to `active-languages' to respect loading order. + ;; `babel' package uses as default language the last loaded one. + (add-to-list 'active-languages elt t))) + active-languages)) (defun TeX-arg-babel-lang (optional &optional prompt) "Prompt for a language with completion and insert it as an argument." @@ -70,6 +79,9 @@ (TeX-add-style-hook "babel" (lambda () + ;; Run style hooks for every active language in loading order, so + ;; `TeX-quote-language' will be correctly set. + (mapc 'TeX-run-style-hooks (LaTeX-babel-active-languages)) ;; New symbols (TeX-add-symbols '("selectlanguage" TeX-arg-babel-lang) diff --git a/style/biblatex.el b/style/biblatex.el index 18fdd23..e66f70a 100644 --- a/style/biblatex.el +++ b/style/biblatex.el @@ -67,9 +67,9 @@ string." (lambda () ;; Biblatex uses as default backend biber, run it unless biblatex `backend' ;; option value is one of `bibtex', `bibtex8', `bibtexu'. - (unless (or (member "backend=bibtex" TeX-active-styles) - (member "backend=bibtex8" TeX-active-styles) - (member "backend=bibtexu" TeX-active-styles)) + (unless (or (LaTeX-provided-package-options-member "biblatex" "backend=bibtex") + (LaTeX-provided-package-options-member "biblatex" "backend=bibtex8") + (LaTeX-provided-package-options-member "biblatex" "backend=bibtexu")) (setq LaTeX-using-Biber t)) (TeX-run-style-hooks @@ -187,13 +187,16 @@ string." (defun LaTeX-biblatex-package-options nil "Prompt for package options for the biblatex package." (unless BibLaTeX-global-style-files - (if (eq TeX-arg-input-file-search t) ;; Treat `ask' value as `nil'. + (if (if (eq TeX-arg-input-file-search 'ask) + (not (y-or-n-p "Find BibLaTeX style yourself? ")) + TeX-arg-input-file-search) ;; ...then, search for BibLaTeX styles. (progn (message "Searching for BibLaTeX styles...") (setq BibLaTeX-global-style-files (mapcar 'identity (TeX-search-files-by-type 'bbxinputs 'global t t)))) - ;; ...else, use default BibLaTeX styles. + ;; ...else, use for completion only standard BibLaTeX styles (see §3.3 of + ;; Biblatex reference manual). (setq BibLaTeX-global-style-files '("numeric" "numeric-comp" "numeric-verb" "alphabetic" "alphabetic-verb" "authoryear" "authoryear-comp" "authoryear-ibid" diff --git a/style/kpfonts.el b/style/kpfonts.el index 673c8d3..a93ba36 100644 --- a/style/kpfonts.el +++ b/style/kpfonts.el @@ -531,9 +531,9 @@ following commands are defined: (TeX-add-style-hook "kpfonts" (lambda () - (unless (member "notextcomp" TeX-active-styles) - (TeX-run-style-hooks "full" "textcomp")) - (unless (member "noamsmath" TeX-active-styles) + (unless (LaTeX-provided-package-options-member "kpfonts" "notextcomp") + (TeX-run-style-hooks "textcomp")) + (unless (LaTeX-provided-package-options-member "kpfonts" "noamsmath") (TeX-run-style-hooks "amsmath")) (TeX-add-symbols ;; Text fonts options diff --git a/style/siunitx.el b/style/siunitx.el index 80acc1b..c21f3ca 100644 --- a/style/siunitx.el +++ b/style/siunitx.el @@ -1,4 +1,4 @@ -;;; siunitx.el --- AUCTeX style for `siunitx.sty' version 2.5p. +;;; siunitx.el --- AUCTeX style for `siunitx.sty' version 2.5q. ;; Copyright (C) 2012-2013 Free Software Foundation, Inc. @@ -25,7 +25,7 @@ ;;; Commentary: -;; This file adds support for `siunitx.sty' version 2.5p. +;; This file adds support for `siunitx.sty' version 2.5q. ;;; Code: @@ -57,7 +57,7 @@ (add-hook 'TeX-auto-prepare-hook 'LaTeX-siunitx-prepare) (add-hook 'TeX-auto-cleanup-hook 'LaTeX-siunitx-cleanup) -(defun TeX-arg-siunitx-unit (optional &optional prompt initial-input definition) +(defun LaTeX-arg-siunitx-unit (optional &optional prompt initial-input definition) "Prompt for siunitx units, prefixes, powers, and qualifiers. If OPTIONAL is non-nil, insert the resulting value as an optional argument, otherwise as a mandatory one. Use PROMPT as the prompt @@ -79,16 +79,16 @@ non-nil, add the chosen unit to the list of defined units." (if (and definition (not (string-equal "" unit))) (LaTeX-add-siunitx-units unit)) (TeX-argument-insert unit optional)) - ;; Restore <SPC> key bindings in minibuffer. - (define-key minibuffer-local-completion-map " " space-completion) - (define-key minibuffer-local-must-match-map " " space-must-match))) + ;; Restore <SPC> key bindings in minibuffer. + (define-key minibuffer-local-completion-map " " space-completion) + (define-key minibuffer-local-must-match-map " " space-must-match))) -(defun TeX-arg-define-siunitx-unit (optional &optional prompt) +(defun LaTeX-arg-define-siunitx-unit (optional &optional prompt) "Prompt for a LaTeX siunitx unit, prefix, power, and qualifier. If OPTIONAL is non-nil, insert the resulting value as an optional argument, otherwise as a mandatory one. Use PROMPT as the prompt string." - (TeX-arg-siunitx-unit optional prompt "\\" t)) + (LaTeX-arg-siunitx-unit optional prompt "\\" t)) (defvar LaTeX-siunitx-package-options '(;; Detecting fonts @@ -266,26 +266,26 @@ string." (TeX-auto-add-regexp `(,LaTeX-siunitx-regexp 1 LaTeX-auto-siunitx-unit)) (TeX-add-symbols ;; Numbers - '("ang" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Angle") - '("num" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Number") - '("numlist" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Numbers") - '("numrange" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Number 1" "Number 2") + '("ang" [TeX-arg-key-val LaTeX-siunitx-package-options] "Angle") + '("num" [TeX-arg-key-val LaTeX-siunitx-package-options] "Number") + '("numlist" [TeX-arg-key-val LaTeX-siunitx-package-options] "Numbers") + '("numrange" [TeX-arg-key-val LaTeX-siunitx-package-options] "Number 1" "Number 2") ;; Units - '("si" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] TeX-arg-siunitx-unit) - '("SI" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Value" [ "Pre-unit"] TeX-arg-siunitx-unit) - '("SIlist" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Values" TeX-arg-siunitx-unit) - '("SIrange" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Value 1" "Value 2" TeX-arg-siunitx-unit) + '("si" [TeX-arg-key-val LaTeX-siunitx-package-options] LaTeX-arg-siunitx-unit) + '("SI" [TeX-arg-key-val LaTeX-siunitx-package-options] "Value" [ "Pre-unit"] LaTeX-arg-siunitx-unit) + '("SIlist" [TeX-arg-key-val LaTeX-siunitx-package-options] "Values" LaTeX-arg-siunitx-unit) + '("SIrange" [TeX-arg-key-val LaTeX-siunitx-package-options] "Value 1" "Value 2" LaTeX-arg-siunitx-unit) ;; Settings '("sisetup" (TeX-arg-key-val LaTeX-siunitx-package-options)) ;; Tabular material - '("tablenum" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] "Number") + '("tablenum" [TeX-arg-key-val LaTeX-siunitx-package-options] "Number") ;; Creating new macros (`DeclareSIUnitWithOptions' macro is deprecated) - '("DeclareSIUnit" [ (TeX-arg-key-val LaTeX-siunitx-package-options) ] (TeX-arg-define-siunitx-unit) "Symbol") - '("DeclareSIPrefix" (TeX-arg-define-siunitx-unit "Prefix") "Symbol" "Powers of 10") - '("DeclareBinaryPrefix" (TeX-arg-define-siunitx-unit "Prefix") "Symbol" "Powers of 2") - '("DeclareSIPostPower" (TeX-arg-define-siunitx-unit "Name") "Power") - '("DeclareSIPrePower" (TeX-arg-define-siunitx-unit "Name") "Power") - '("DeclareSIQualifier" (TeX-arg-define-siunitx-unit "Qualifier") "Symbol") + '("DeclareSIUnit" [TeX-arg-key-val LaTeX-siunitx-package-options] (LaTeX-arg-define-siunitx-unit) "Symbol") + '("DeclareSIPrefix" (LaTeX-arg-define-siunitx-unit "Prefix") "Symbol" "Powers of 10") + '("DeclareBinaryPrefix" (LaTeX-arg-define-siunitx-unit "Prefix") "Symbol" "Powers of 2") + '("DeclareSIPostPower" (LaTeX-arg-define-siunitx-unit "Name") "Power") + '("DeclareSIPrePower" (LaTeX-arg-define-siunitx-unit "Name") "Power") + '("DeclareSIQualifier" (LaTeX-arg-define-siunitx-unit "Qualifier") "Symbol") ;; Highlighting '("highlight" "Color") ;; Transferring settings to pgf @@ -390,7 +390,7 @@ string." "\\per" "\\of") ;; Abbreviated units (available unless `abbreviations' option is set to `false') - (unless (member "abbreviations=false" TeX-active-styles) + (unless (LaTeX-provided-package-options-member "siunitx" "abbreviations=false") (LaTeX-add-siunitx-units "\\fg" "\\pg" @@ -479,8 +479,8 @@ string." "\\K" "\\dB")) ;; Binary prefixes and units available when `binary-units' option is used - (when (or (member "binary-units" TeX-active-styles) - (member "binary-units=true" TeX-active-styles)) + (when (or (LaTeX-provided-package-options-member "siunitx" "binary-units") + (LaTeX-provided-package-options-member "siunitx" "binary-units=true")) (LaTeX-add-siunitx-units "\\kibi" "\\mebi" @@ -502,8 +502,8 @@ string." "\\SIUnitSymbolMicro" "\\SIUnitSymbolOhm") ;; Macros available when `version-1-compatibility' option is used - (when (or (member "version-1-compatibility" TeX-active-styles) - (member "version-1-compatibility=true" TeX-active-styles)) + (when (or (LaTeX-provided-package-options-member "siunitx" "version-1-compatibility") + (LaTeX-provided-package-options-member "siunitx" "version-1-compatibility=true")) (LaTeX-add-siunitx-units "\\Square" "\\ssquare" diff --git a/tex.el b/tex.el index e914572..6881509 100644 --- a/tex.el +++ b/tex.el @@ -3363,13 +3363,23 @@ If TEX is a directory, generate style files for all files in the directory." (TeX-auto-parse) (if (member nil (mapcar 'TeX-auto-entry-clear-p TeX-auto-parser)) - (let ((style (TeX-strip-extension nil TeX-all-extensions t))) + (let ((style (TeX-strip-extension nil TeX-all-extensions t)) + (class-opts (if (boundp 'LaTeX-provided-class-options) + LaTeX-provided-class-options)) + (pkg-opts (if (boundp 'LaTeX-provided-package-options) + LaTeX-provided-package-options))) (TeX-unload-style style) (save-excursion (set-buffer (generate-new-buffer file)) (erase-buffer) (insert "(TeX-add-style-hook\n \"" style "\"\n (lambda ()") + (when class-opts + (insert "\n (TeX-add-to-alist 'LaTeX-provided-class-options\n" + " '" (prin1-to-string class-opts) ")")) + (when pkg-opts + (insert "\n (TeX-add-to-alist 'LaTeX-provided-package-options\n" + " '" (prin1-to-string pkg-opts) ")")) (mapc (lambda (el) (TeX-auto-insert el style)) TeX-auto-parser) (insert "))\n\n") @@ -3392,13 +3402,13 @@ If SKIP is not-nil, don't insert code for SKIP." (let ((name (symbol-name (nth TeX-auto-parser-add entry))) (list (symbol-value (nth TeX-auto-parser-temporary entry)))) (unless (null list) - (insert "\n (" name) + (insert "\n (" name) (dolist (el list) (cond ((and (stringp el) (not (string= el skip))) - (insert "\n ") + (insert "\n ") (insert (prin1-to-string el))) ((not (stringp el)) - (insert "\n ") + (insert "\n ") (insert "'" (prin1-to-string el))))) (insert ")")))) @@ -3874,7 +3884,7 @@ example.") (defun TeX-search-files-by-type (filetype &optional scope nodir strip) "Return a list of files in TeX's search path with type FILETYPE. FILETYPE is a symbol used to choose the search paths and -extensions. See `TeX-search-file-type-alist' for supported +extensions. See `TeX-search-files-type-alist' for supported symbols. The optional argument SCOPE sets the scope for the search. @@ -4015,6 +4025,29 @@ mark which is sort of equivalent." (defalias 'TeX-run-mode-hooks (if (fboundp 'run-mode-hooks) 'run-mode-hooks 'run-hooks)) +(defun TeX-add-to-alist (alist-var new-alist) + "Add NEW-ALIST to the ALIST-VAR. +If an element with the same key as the key of an element of +NEW-ALIST is already present in ALIST-VAR, add the new values to +it; if a matching element is not already present, append the new +element to ALIST-VAR." + ;; Loop over all elements of NEW-ALIST. + (while new-alist + (let* ((new-element (car new-alist)) + ;; Get the element of ALIST-VAR with the same key of the current + ;; element of NEW-ALIST, if any. + (old-element (assoc (car new-element) (symbol-value alist-var)))) + (if old-element + (progn + (set alist-var (delete old-element (symbol-value alist-var))) + ;; Append to `old-element' the values of the current element of + ;; NEW-ALIST. + (mapc (lambda (elt) (add-to-list 'old-element elt t)) + (cdr new-element)) + (set alist-var (add-to-list alist-var old-element t))) + (add-to-list alist-var new-element t))) + ;; Next element of NEW-ALIST. + (setq new-alist (cdr new-alist)))) ;;; Syntax Table @@ -5264,7 +5297,7 @@ quotes are inserted only after \"." "Alist for overriding the default language-specific quote insertion. First element in each item is the name of the language as set by the language style file as a string. Second element is the -opening quotation mark. Third elemxent is the closing quotation +opening quotation mark. Third element is the closing quotation mark. Opening and closing quotation marks can be specified directly as strings or as functions returning a string. Fourth element is a boolean specifying insertion behavior, overriding