branch: master commit 38a883d37c43f4841342ed3ef8d95040d7cfc010 Author: Arash Esbati <ar...@gnu.org> Commit: Arash Esbati <ar...@gnu.org>
Save regexp groups in style/minted.el * style/minted.el (LaTeX-minted-pygmentize-program): Add docstring. (LaTeX-minted-language-list, LaTeX-minted-style-list): Add variables to `TeX-normal-mode-reset-list' so the variables aren't reset upon regular re-parsing. (LaTeX-minted-newmint-regexp): Extend regexp to cover all \newmint* variations. Delete other regexp additions to the parser. (LaTeX-minted-auto-prepare, LaTeX-minted-auto-cleanup): Adjust functions to the above regexp change. (LaTeX-minted-add-syntactic-keywords-extra): Improve docstring. ("minted"): Don't add deleted regexp's to the parser. Accept also braces as delimiters for \mint macro. --- style/minted.el | 172 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/style/minted.el b/style/minted.el index 2f39b782..10bc0b35 100644 --- a/style/minted.el +++ b/style/minted.el @@ -176,10 +176,16 @@ prepends them to variable `LaTeX-minted-key-val-options'." (push (list key colors) result)))) LaTeX-minted-key-val-options)) -(defvar LaTeX-minted-pygmentize-program (executable-find "pygmentize")) +(defvar LaTeX-minted-pygmentize-program (executable-find "pygmentize") + "Absolute file name to pygmentize program.") (defvar LaTeX-minted-language-list nil - "List containing languages provided by pymentize program.") + "List containing languages provided by pymentize program. +Initialized once at the first prompt for a Pygments language. +May be reset with `\\[universal-argument] \\[TeX-normal-mode]'.") + +;; Add the variable to `TeX-normal-mode-reset-list': +(add-to-list 'TeX-normal-mode-reset-list 'LaTeX-minted-language-list) (defun LaTeX-minted-language-list (&rest _ignored) "Return a list of languages provided by pymentize program. @@ -198,7 +204,12 @@ Update the variable `LaTeX-minted-language-list' if still nil." LaTeX-minted-language-list)))) (defvar LaTeX-minted-style-list nil - "List containing styles provided by pymentize program.") + "List containing styles provided by pymentize program. +Initialized once at the first prompt for a Pygments style. +May be reset with `\\[universal-argument] \\[TeX-normal-mode]'.") + +;; Add the variable to `TeX-normal-mode-reset-list': +(add-to-list 'TeX-normal-mode-reset-list 'LaTeX-minted-style-list) (defun LaTeX-minted-style-list (&rest _ignored) "Return a list of styles provided by pymentize program. @@ -216,91 +227,83 @@ Update the variable `LaTeX-minted-style-list' if still nil." (setq LaTeX-minted-style-list styles)) LaTeX-minted-style-list)))) -(defvar LaTeX-minted-auto-newminted nil) -(defvar LaTeX-minted-newminted-regexp - '("\\\\newminted\\(?:\\[\\([^]]+\\)\\]\\)?{\\([^}]+\\)}{[^}]*}" - (1 2) LaTeX-minted-auto-newminted)) +(TeX-auto-add-type "minted-newmint" "LaTeX") -(defvar LaTeX-minted-auto-newmint nil) (defvar LaTeX-minted-newmint-regexp - '("\\\\newmint\\(?:\\[\\([^]]+\\)\\]\\)?{\\([^}]+\\)}{[^}]*}" - (1 2) LaTeX-minted-auto-newmint)) - -(defvar LaTeX-minted-auto-newmintinline nil) -(defvar LaTeX-minted-newmintinline-regexp - '("\\\\newmintinline\\(?:\\[\\([^]]+\\)\\]\\)?{\\([^}]+\\)}{[^}]*}" - (1 2) LaTeX-minted-auto-newmintinline)) - -(defvar LaTeX-minted-auto-newmintedfile nil) -(defvar LaTeX-minted-newmintedfile-regexp - '("\\\\newmintedfile\\(?:\\[\\([^]]+\\)\\]\\)?{\\([^}]+\\)}{[^}]*}" - (1 2) LaTeX-minted-auto-newmintedfile)) + '("\\\\newmint\\(edfile\\|inline\\|ed\\)?\\(?:\\[\\([^]]+\\)\\]\\)?{\\([^}]+\\)}" + (2 3 1) LaTeX-auto-minted-newmint) + "Match the arguments of \\newmint* macros from minted package.") (defun LaTeX-minted-auto-prepare () - (setq LaTeX-minted-auto-newminted nil - LaTeX-minted-auto-newmint nil - LaTeX-minted-auto-newmintinline nil - LaTeX-minted-auto-newmintedfile nil - LaTeX-minted-language-list nil - LaTeX-minted-style-list nil)) + "Reset `LaTeX-auto-minted-newmint' before parsing." + (setq LaTeX-auto-minted-newmint nil)) (defun LaTeX-minted-auto-cleanup () - ;; \newminted{lang}{opts} => new langcode and langcode* envs. - ;; \newminted[envname]{lang}{opts} => new envname/envname* envs. - (dolist (name-lang LaTeX-minted-auto-newminted) - (let* ((env (if (> (length (car name-lang)) 0) - (car name-lang) - (concat (cadr name-lang) "code"))) - (env* (concat env "*"))) - (add-to-list 'LaTeX-auto-environment (list env)) - (add-to-list 'LaTeX-auto-environment - (list env* #'LaTeX-env-args - '(TeX-arg-key-val (LaTeX-minted-key-val-options)))) - (add-to-list 'LaTeX-indent-environment-list `(,env current-indentation) t) - (add-to-list 'LaTeX-indent-environment-list `(,env* current-indentation) t) - (add-to-list 'LaTeX-verbatim-environments-local env) - (add-to-list 'LaTeX-verbatim-environments-local env*))) - ;; \newmint{foo}{opts} => \foo[key=vals]|code| - ;; \newmint[macname]{foo}{opts} => \macname[key=vals]|code| - (dolist (name-lang LaTeX-minted-auto-newmint) - (let ((lang (if (> (length (car name-lang)) 0) - (car name-lang) - (cadr name-lang)))) - (add-to-list 'TeX-auto-symbol - `(,lang [TeX-arg-key-val (LaTeX-minted-key-val-options)] - TeX-arg-verb)) - (add-to-list 'LaTeX-verbatim-macros-with-delims-local lang) - (when (and (fboundp 'font-latex-add-keywords) - (eq TeX-install-font-lock 'font-latex-setup)) - (font-latex-add-keywords `((,lang "[")) 'textual)))) - ;; \newmintinline{foo}{opts} => \fooinline[key=vals]|code| or - ;; \fooinline[key=vals]{code} - ;; \newmintinline[macname]{foo}{opts} => \macname[key=vals]|code| or - ;; \macname[key=vals]{code} - (dolist (name-lang LaTeX-minted-auto-newmintinline) - (let ((lang (if (> (length (car name-lang)) 0) - (car name-lang) - (concat (cadr name-lang) "inline")))) - (add-to-list 'TeX-auto-symbol - `(,lang [TeX-arg-key-val (LaTeX-minted-key-val-options)] - TeX-arg-verb-delim-or-brace)) - (add-to-list 'LaTeX-verbatim-macros-with-delims-local lang) - (add-to-list 'LaTeX-verbatim-macros-with-braces-local lang) - (when (and (fboundp 'font-latex-add-keywords) - (eq TeX-install-font-lock 'font-latex-setup)) - (font-latex-add-keywords `((,lang "[")) 'textual)))) - ;; \newmintedfile{foo}{opts} => \foofile[key=vals]{file-name} - ;; \newmintedfile[macname]{foo}{opts} => \macname[key=vals]{file-name} - (dolist (name-lang LaTeX-minted-auto-newmintedfile) - (let ((lang (if (> (length (car name-lang)) 0) - (car name-lang) - (concat (cadr name-lang) "file")))) - (add-to-list 'TeX-auto-symbol - `(,lang [TeX-arg-key-val (LaTeX-minted-key-val-options)] - TeX-arg-file)))) - (when (and (fboundp 'font-latex-set-syntactic-keywords) + "Process the parsed results from minted package." + (dolist (mint (LaTeX-minted-newmint-list)) + (cond ((string= (nth 2 mint) "ed") + ;; \newminted{lang}{opts} => new langcode and langcode* envs. + ;; \newminted[envname]{lang}{opts} => new envname/envname* envs. + (let* ((env (if (string-empty-p (car mint)) + (concat (cadr mint) "code") + (car mint))) + (env* (concat env "*"))) + (LaTeX-add-environments (list env)) + (LaTeX-add-environments (list env* #'LaTeX-env-args + '(TeX-arg-key-val + (LaTeX-minted-key-val-options)))) + (add-to-list 'LaTeX-indent-environment-list + `(,env current-indentation) t) + (add-to-list 'LaTeX-indent-environment-list + `(,env* current-indentation) t) + (add-to-list 'LaTeX-verbatim-environments-local env) + (add-to-list 'LaTeX-verbatim-environments-local env*))) + ;; \newmintinline{foo}{opts} => \fooinline[key=vals]|code| or + ;; \fooinline[key=vals]{code} + ;; \newmintinline[macname]{foo}{opts} => \macname[key=vals]|code| or + ;; \macname[key=vals]{code} + ((string= (nth 2 mint) "inline") + (let ((lang (if (string-empty-p (car mint)) + (concat (cadr mint) "inline") + (car mint)))) + (TeX-add-symbols `(,lang + [TeX-arg-key-val (LaTeX-minted-key-val-options)] + TeX-arg-verb-delim-or-brace)) + (add-to-list 'LaTeX-verbatim-macros-with-delims-local lang) + (add-to-list 'LaTeX-verbatim-macros-with-braces-local lang) + (when (and (fboundp 'font-latex-add-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,lang "[")) 'textual)))) + ;; \newmintedfile{foo}{opts} => \foofile[key=vals]{file-name} + ;; \newmintedfile[macname]{foo}{opts} => \macname[key=vals]{file-name} + ((string= (nth 2 mint) "edfile") + (let ((lang (if (string-empty-p (car mint)) + (concat (cadr mint) "file") + (car mint)))) + (TeX-add-symbols `(,lang + [TeX-arg-key-val (LaTeX-minted-key-val-options)] + TeX-arg-file)))) + ;; \newmint{foo}{opts} => \foo[key=vals]|code| or + ;; \foo[key=vals]{code} + ;; \newmint[macname]{foo}{opts} => \macname[key=vals]|code| or + ;; \macname[key=vals]{code} + (t + (let ((lang (if (string-empty-p (car mint)) + (cadr mint) + (car mint)))) + (TeX-add-symbols `(,lang + [TeX-arg-key-val (LaTeX-minted-key-val-options)] + TeX-arg-verb-delim-or-brace)) + (add-to-list 'LaTeX-verbatim-macros-with-delims-local lang) + (add-to-list 'LaTeX-verbatim-macros-with-braces-local lang) + (when (and (fboundp 'font-latex-add-keywords) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,lang "[")) 'textual)))))) + ;; Refresh font-locking so that the verbatim envs take effect only + ;; when there are defined shortcuts: + (when (and (LaTeX-minted-newmint-list) + (fboundp 'font-latex-set-syntactic-keywords) (eq TeX-install-font-lock 'font-latex-setup)) - ;; Refresh font-locking so that the verbatim envs take effect. (font-latex-set-syntactic-keywords))) (add-hook 'TeX-auto-prepare-hook #'LaTeX-minted-auto-prepare t) @@ -308,7 +311,7 @@ Update the variable `LaTeX-minted-style-list' if still nil." (add-hook 'TeX-update-style-hook #'TeX-auto-parse t) (defun LaTeX-minted-add-syntactic-keywords-extra (type macro) - "Add MACRO from minted.sty to `font-latex-syntactic-keywords-extra'. + "Add TYPE of MACRO to `font-latex-syntactic-keywords-extra'. TYPE is one of the symbols `brace' or `delim' indicating how verbatim text is enclosed after the macro. MACRO is a string or a list of strings." @@ -356,7 +359,7 @@ a list of strings." '("mint" [TeX-arg-key-val (LaTeX-minted-key-val-options)] (TeX-arg-completing-read (LaTeX-minted-language-list) "Language") - TeX-arg-verb) + TeX-arg-verb-delim-or-brace) '("mintinline" [TeX-arg-key-val (LaTeX-minted-key-val-options)] (TeX-arg-completing-read (LaTeX-minted-language-list) "Language") @@ -417,10 +420,7 @@ a list of strings." '(("listing" ?l "lst:" "~\\ref{%s}" caption nil nil))))) ;; Add to the auto parser - (TeX-auto-add-regexp LaTeX-minted-newminted-regexp) (TeX-auto-add-regexp LaTeX-minted-newmint-regexp) - (TeX-auto-add-regexp LaTeX-minted-newmintinline-regexp) - (TeX-auto-add-regexp LaTeX-minted-newmintedfile-regexp) ;; Filling (add-to-list (make-local-variable 'LaTeX-indent-environment-list)