diff options
Diffstat (limited to 'elpa/auctex-13.1.3/style/menukeys.el')
-rw-r--r-- | elpa/auctex-13.1.3/style/menukeys.el | 547 |
1 files changed, 547 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/style/menukeys.el b/elpa/auctex-13.1.3/style/menukeys.el new file mode 100644 index 0000000..ac375ea --- /dev/null +++ b/elpa/auctex-13.1.3/style/menukeys.el @@ -0,0 +1,547 @@ +;;; menukeys.el --- AUCTeX style for `menukeys.sty' (v1.4) -*- lexical-binding: t; -*- + +;; Copyright (C) 2016, 2018, 2020 Free Software Foundation, Inc. + +;; Author: Arash Esbati <arash@gnu.org> +;; Maintainer: auctex-devel@gnu.org +;; Created: 2016-02-07 +;; 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 `menukeys.sty' (v1.4) from 2016/04/18. +;; `menukeys.sty' is part of TeXLive. + +;;; Code: + +;; Needed for auto-parsing: +(require 'tex) +(require 'latex) + +;; Silence the compiler: +(declare-function font-latex-add-keywords + "font-latex" + (keywords class)) + +(declare-function LaTeX-xcolor-definecolor-list "xcolor" ()) + +(defvar LaTeX-menukeys-input-separators-list + '("/" "=" "*" "+" "," ";" ":" "-" ">" "<" "bslash") + "List of input separators for macros of menukeys package.") + +(defvar LaTeX-menukeys-predefined-styles-list + '("menus" "roundedmenus" "angularmenus" "roundedkeys" + "shadowedroundedkeys" "angularkeys" "shadowedangularkeys" + "typewriterkeys" "paths" "pathswithfolder" + "pathswithblackfolder" "hyphenatepaths" + "hyphenatepathswithfolder" + "hyphenatepathswithblackfolder") + "List of predefined styles for macros from menukeys package.") + +;; Setup for \newmenustyle(simple): +(TeX-auto-add-type "menukeys-newmenustyle" "LaTeX") + +(defvar LaTeX-menukeys-newmenustyle-regexp + '("\\\\\\(?:new\\|copy\\)menustyle\\(?:simple\\)?*?{\\([^}]+\\)}" + 1 LaTeX-auto-menukeys-newmenustyle) + "Matches the argument of \\newmenustyle and +\\newmenustylesimple from menukeys package.") + +;; Setup for \newmenucolortheme: +(TeX-auto-add-type "menukeys-newmenucolortheme" "LaTeX") + +(defvar LaTeX-menukeys-newmenucolortheme-regexp + '("\\\\\\(?:new\\|copy\\)menucolortheme{\\([^}]+\\)}" + 1 LaTeX-auto-menukeys-newmenucolortheme) + "Matches the argument of \\newmenucolortheme from menukeys package.") + +;; Setup for \newmenumacro: +(TeX-auto-add-type "menukeys-newmenumacro" "LaTeX") + +(defvar LaTeX-menukeys-newmenumacro-regexp + `(,(concat + "\\\\\\(new\\|renew\\|provide\\)menumacro" + "{?" + (regexp-quote TeX-esc) + "\\([a-zA-Z]+\\)" + "}?" + "\\(?:\\[\\([^]]*\\)\\]\\)?") + (2 3 1) LaTeX-auto-menukeys-newmenumacro) + "Matches the arguments of \\newmenumacro from menukeys package.") + +(defun LaTeX-menukeys-auto-prepare () + "Clear various `LaTeX-auto-menukeys-*' variables before parsing." + (setq LaTeX-auto-menukeys-newmenustyle nil + LaTeX-auto-menukeys-newmenucolortheme nil + LaTeX-auto-menukeys-newmenumacro nil)) + +(defun LaTeX-menukeys-auto-cleanup () + "Process the parsed elements for menukeys package. +This function adds parsed elements from the variable +`LaTeX-menukeys-newmenumacro-list' to AUCTeX via the function +`TeX-add-symbols'. The variable +`LaTeX-menukeys-newmenumacro-list' and not the function with the +same name is used since this function looks for the order of +commands which are set by \\renewmenumacro in order to pick the +current separator. These renew-commands are also removed first +from the variable `TeX-symbol-list' before being re-added." + (dolist (x (apply #'append LaTeX-menukeys-newmenumacro-list)) + (let ((macro (nth 0 x)) + (sep (nth 1 x)) + (renew (when (string= (nth 2 x) "renew") + (nth 2 x)))) + ;; When we are renewmenumacro'ing, delete the entry first from the + ;; variable `TeX-symbol-list' and then add the new spec: + (when renew + (setq TeX-symbol-list + (assq-delete-all (car (assoc macro (TeX-symbol-list))) TeX-symbol-list))) + (TeX-add-symbols + `(,macro [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil + ,(concat "Input separator " + "(default " + (if (and sep (not (string= sep ""))) + sep + ",") + ")")) + LaTeX-menukeys-input-separators-list ] t )) + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,macro "[{")) + 'textual))))) + +(add-hook 'TeX-auto-prepare-hook #'LaTeX-menukeys-auto-prepare t) +(add-hook 'TeX-auto-cleanup-hook #'LaTeX-menukeys-auto-cleanup t) +(add-hook 'TeX-update-style-hook #'TeX-auto-parse t) + +(defun TeX-arg-menukeys-newmenumacro (optional &optional renew) + "Query and insert the arguments of \\newmenumacro from menukeys package. +After inserting, add the name of macro and the optional separator +to the name of known macros via `TeX-add-symbols'. If +font-latex.el is loaded, also use `font-latex-add-keywords' on +macro. If RENEW is non-nil, query for an already defined macro." + (let ((macro (if renew + (completing-read + (concat "Macro: " TeX-esc) + (TeX-delete-duplicate-strings (mapcar #'car (LaTeX-menukeys-newmenumacro-list)))) + (TeX-read-string (concat "Macro: " TeX-esc)))) + (sep (completing-read + (TeX-argument-prompt optional nil "Input separator (default ,)") + LaTeX-menukeys-input-separators-list)) + (style (completing-read + (TeX-argument-prompt optional nil "Style") + (LaTeX-menukeys-newmenustyle-list)))) + (TeX-argument-insert (concat TeX-esc macro) optional) + (when (and sep (not (string= sep ""))) + (insert (format "[%s]" sep))) + (TeX-argument-insert style optional) + ;; When we are renewmenumacro'ing, delete the entry first from the + ;; variable `TeX-symbol-list' and then add the new spec: + (when renew + (setq TeX-symbol-list + (assq-delete-all (car (assoc macro (TeX-symbol-list))) TeX-symbol-list))) + (TeX-add-symbols + `(,macro [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil + ,(concat "Input separator " + "(default " + (if (and sep (not (string= sep ""))) + sep + ",") + ")")) + LaTeX-menukeys-input-separators-list ] t )) + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords `((,macro "[{")) + 'textual)))) + +(TeX-add-style-hook + "menukeys" + (lambda () + + ;; Add menukeys to the parser + (TeX-auto-add-regexp LaTeX-menukeys-newmenustyle-regexp) + (TeX-auto-add-regexp LaTeX-menukeys-newmenucolortheme-regexp) + (TeX-auto-add-regexp LaTeX-menukeys-newmenumacro-regexp) + + ;; Activate predefined stuff + (apply #'LaTeX-add-menukeys-newmenustyles LaTeX-menukeys-predefined-styles-list) + (LaTeX-add-menukeys-newmenucolorthemes "gray" "blacknwhite") + + ;; Run style hooks for xcolor, tikz and relsize + (TeX-run-style-hooks "xcolor" "tikz" "relsize") + + ;; 4.1 Basic macros: These are not defined if the package option + ;; definemenumacros ist set to false (default is true). We check + ;; for the package option here and add them. + (unless (LaTeX-provided-package-options-member "menukeys" "definemenumacros=false") + (TeX-add-symbols + ;; \menu [<separator>]{<sequence>} + ;; \directory [<separator>]{path} + ;; \keys [<separator>]{keystrokes} + '("menu" + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Input separator") + LaTeX-menukeys-input-separators-list ] + t) + + '("directory" + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Input separator") + LaTeX-menukeys-input-separators-list ] + t) + + '("keys" + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Input separator") + LaTeX-menukeys-input-separators-list ] + t))) + + (TeX-add-symbols + ;; 4.2.1 Predefined styles + ;; \drawtikzfolder[<front fill>][<draw>] + '("drawtikzfolder" + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Front color") + (LaTeX-xcolor-definecolor-list) ] + [ TeX-arg-eval completing-read + (TeX-argument-prompt t nil "Line color") + (LaTeX-xcolor-definecolor-list) ] ) + + ;; 4.2.2 Declaring styles + ;; \newmenustylesimple*{<name>}[<pre>]{<style>}[<sep>][<post>]{<theme>} + '("newmenustylesimple" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenustyles name) + (format "%s" name)))) + [ t ] nil [ nil ] [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + '("newmenustylesimple*" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenustyles name) + (format "%s" name)))) + [ t ] nil [ nil ] [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + ;; \newmenustyle*{<name>}[<pre>]{<first>}[<sep>]{<mid>}{<last>}{<single>}[<post>]{<theme>} + '("newmenustyle" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenustyles name) + (format "%s" name)))) + [ t ] nil [ nil ] nil nil nil [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + '("newmenustyle*" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenustyles name) + (format "%s" name)))) + [ t ] nil [ nil ] nil nil nil [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + '("CurrentMenuElement" 0) + + ;; 4.2.3 Copying styles + '("copymenustyle" + (TeX-arg-eval + (lambda () + (let ((copy (TeX-read-string + (TeX-argument-prompt nil nil "Copy"))) + (orig (completing-read + (TeX-argument-prompt nil nil "Original") + (LaTeX-menukeys-newmenustyle-list)))) + (LaTeX-add-menukeys-newmenustyles copy) + (TeX-argument-insert copy nil) + (format "%s" orig))))) + + ;; 4.2.4 Changing styles + ;; \changemenuelement*{name}{element}{definition} + '("changemenuelement" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Name") + (LaTeX-menukeys-newmenustyle-list)) + 2) + + '("changemenuelement*" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Name") + (LaTeX-menukeys-newmenustyle-list)) + 2) + + ;; Same arguments as \newmenustylesimple + '("renewmenustylesimple" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Name") + (LaTeX-menukeys-newmenustyle-list)) + [ t ] nil [ nil ] [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + '("providemenustylesimple" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenustyles name) + (format "%s" name)))) + [ t ] nil [ nil ] [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + ;; Same arguments as \newmenustyle + '("providemenustyle" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Name") + (LaTeX-menukeys-newmenustyle-list)) + [ t ] nil [ nil ] nil nil nil [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + '("renewmenustyle" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenustyles name) + (format "%s" name)))) + [ t ] nil [ nil ] nil nil nil [ nil ] + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Color theme") + (LaTeX-menukeys-newmenucolortheme-list))) + + ;; 4.3 Color themes + ;; 4.3.2 Create a theme + ;; \newmenucolortheme{<name>}{<model>}{<bg>}{<br>}{<txt>}[<a>][<b>][<c>] + '("newmenucolortheme" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenucolorthemes name) + (format "%s" name)))) + (TeX-arg-eval + (lambda () + (let ((model (completing-read + (TeX-argument-prompt nil nil "Model") + (LaTeX-xcolor-color-models)))) + (TeX-argument-insert model nil) + (if (string= model "named") + (let ((bg (completing-read + (TeX-argument-prompt nil nil "Node background color") + (LaTeX-xcolor-definecolor-list))) + (br (completing-read + (TeX-argument-prompt nil nil "Node border color") + (LaTeX-xcolor-definecolor-list))) + (txt (completing-read + (TeX-argument-prompt nil nil "Node text color") + (LaTeX-xcolor-definecolor-list)))) + (TeX-argument-insert bg nil) + (TeX-argument-insert br nil) + (format "%s" txt)) + (let ((bg (TeX-read-string + (TeX-argument-prompt nil nil "Node background color spec"))) + (br (TeX-read-string + (TeX-argument-prompt nil nil "Node border color spec"))) + (txt (TeX-read-string + (TeX-argument-prompt nil nil "Node text color spec")))) + (TeX-argument-insert bg nil) + (TeX-argument-insert br nil) + (format "%s" txt)))))) + (TeX-arg-conditional (y-or-n-p "With additional optional arguments? ") + ( [ 3 ] ) + (ignore))) + + ;; 4.3.3 Copy a theme + '("copymenucolortheme" + (TeX-arg-eval + (lambda () + (let ((copy (TeX-read-string + (TeX-argument-prompt nil nil "Copy"))) + (orig (completing-read + (TeX-argument-prompt nil nil "Original") + (LaTeX-menukeys-newmenucolortheme-list)))) + (LaTeX-add-menukeys-newmenucolorthemes copy) + (TeX-argument-insert copy nil) + (format "%s" orig))))) + + ;; 4.3.4 Change a theme + '("changemenucolor" + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Name") + (LaTeX-menukeys-newmenucolortheme-list)) + (TeX-arg-eval completing-read + (TeX-argument-prompt nil nil "Element") + '("bg" "br" "txt")) + (TeX-arg-eval + (lambda () + (let ((model (completing-read + (TeX-argument-prompt nil nil "Model") + (LaTeX-xcolor-color-models)))) + (TeX-argument-insert model nil) + (if (string= model "named") + (let ((color (completing-read + (TeX-argument-prompt nil nil "Color") + (LaTeX-xcolor-definecolor-list)))) + (format "%s" color)) + (let ((color (TeX-read-string + (TeX-argument-prompt nil nil "Color spec")))) + (format "%s" color))))))) + + ;; Same arguments as \newmenucolortheme + '("renewmenucolortheme" + (TeX-arg-eval + (lambda () + (let ((name (TeX-read-string + (TeX-argument-prompt nil nil "Name")))) + (LaTeX-add-menukeys-newmenucolorthemes name) + (format "%s" name)))) + (TeX-arg-eval + (lambda () + (let ((model (completing-read + (TeX-argument-prompt nil nil "Model") + (LaTeX-xcolor-color-models)))) + (TeX-argument-insert model nil) + (if (string= model "named") + (let ((bg (completing-read + (TeX-argument-prompt nil nil "Node background color") + (LaTeX-xcolor-definecolor-list))) + (br (completing-read + (TeX-argument-prompt nil nil "Node border color") + (LaTeX-xcolor-definecolor-list))) + (txt (completing-read + (TeX-argument-prompt nil nil "Node text color") + (LaTeX-xcolor-definecolor-list)))) + (TeX-argument-insert bg nil) + (TeX-argument-insert br nil) + (format "%s" txt)) + (let ((bg (TeX-read-string + (TeX-argument-prompt nil nil "Node background color spec"))) + (br (TeX-read-string + (TeX-argument-prompt nil nil "Node border color spec"))) + (txt (TeX-read-string + (TeX-argument-prompt nil nil "Node text color spec")))) + (TeX-argument-insert bg nil) + (TeX-argument-insert br nil) + (format "%s" txt)))))) + (TeX-arg-conditional (y-or-n-p "With additional optional arguments? ") + ( [ 3 ] ) + (ignore))) + + ;; 4.4 Menu macros + ;; 4.4.2 Defining or changing menu macros + ;; \newmenumacro{<macro>} [<input sep>]{<style>} + '("newmenumacro" TeX-arg-menukeys-newmenumacro) + '("providemenumacro" TeX-arg-menukeys-newmenumacro) + '("renewmenumacro" (TeX-arg-menukeys-newmenumacro t))) + + ;; 4.5 Keys: These macros are defined when definekeys option is not + ;; false. + ;; 0 : No argment, one macro + ;; 1 : One argument, with completion + ;; 2 : No argment, three macros: \<key>, \<key>win, \<key>mac + (unless (LaTeX-provided-package-options-member "menukeys" "definekeys=false") + (let ((keycmds '(("shift" . 0) ("capslock" . 2) ("tab" . 2) + ("esc" . 2) ("ctrl" . 2) ("alt" . 2) + ("AltGr" . 0) ("cmd" . 0) ("Space" . 0) + ("SPACE" . 0) ("return" . 2) ("enter" . 2) + ("winmenu" . 0) ("backspace" . 0) ("del" . 0) + ("arrowkeyup" . 0) ("arrowkeydown" . 0) + ("arrowkeyleft" . 0) ("arrowkeyright" . 0) + ("arrowkey" . 1) + ;; Text inside some keys: + ("ctrlname" . 0) ("delname" . 0) ("spacename" . 0))) + (os '("mac" "win")) + collector) + (dolist (cmd keycmds) + (cond + ((= (cdr cmd) 0) + (push (car cmd) collector)) + ((= (cdr cmd) 1) + (push (list (car cmd) '(TeX-arg-eval completing-read + "Direction: " + '("^" "v" ">" "<"))) + collector)) + ((= (cdr cmd) 2) + (push (car cmd) collector) + (dolist (x os) + (push (concat (car cmd) x) collector))))) + (apply #'TeX-add-symbols collector))) + + ;; Fontification: + (when (and (featurep 'font-latex) + (eq TeX-install-font-lock 'font-latex-setup)) + (font-latex-add-keywords '(("menu" "[{") + ("directory" "[{") + ("keys" "[{") + ("drawtikzfolder" "[[")) + 'textual) + (font-latex-add-keywords '(("newmenustylesimple" "*{[{[[{") + ("newmenustyle" "*{[{[{{{[{") + ("copymenustyle" "{{") + ("changemenuelement" "*{{{") + ("renewmenustylesimple" "{[{[[{") + ("providemenustylesimple" "{[{[[{") + ("providemenustyle" "{[{[{{{[{") + ("renewmenustyle" "{[{[{{{[{") + ("newmenucolortheme" "{{{{{[[[") + ("copymenucolortheme" "{{") + ("changemenucolor" "{{{{") + ("renewmenucolortheme" "{{{{{[[[") + ("newmenumacro" "|{\\[{") + ("providemenumacro" "|{\\[{") + ("renewmenumacro" "|{\\[{")) + 'function))) + TeX-dialect) + +(defvar LaTeX-menukeys-package-options-list + '(("definemenumacros" ("true" "false")) + ("definekeys" ("true" "false")) + ("mackeys" ("text" "symbols")) + ("os" ("mac" "win"))) + "Package options for menukeys package.") + +(defun LaTeX-menukeys-package-options () + "Prompt for package options for the menukeys package." + (TeX-read-key-val t LaTeX-menukeys-package-options-list)) + +;;; menukeys.el ends here |