(require (quote TeX-mode)) (defvar tex-semi-done nil) (defconst tex-zone-prefix "") (defconst tex-word-prefix "") (defconst tex-word-forward-prefix (concat tex-word-prefix "4")) (defun tex-mkgrp-semi nil (byte-code "H  C @ GU* B\"\"5 \"! T AƉ+" [tex-semi-done nil semi tex-delimiters-semi n args t 1 4 apply tex-make-semi append (t) ding message "WARNING: Incorrect format found in entry #%d of tex-delimiters-semi" sit-for 3] 8)) (defun tex-make-semi (l-sym r-sym name letter &optional n &optional quiet) "\ Register a new set of semi-automatic delimiter pairs whose open delimiter is L-SYM and right delimiter is R-SYM under the name NAME. The functions tex-zone-NAME, tex-word-NAME, and tex-word-forward-NAME will be generated and be respectively bound to C-c ESC-LETTER, C-c LETTER, and C-c-4 LETTER." (interactive "sOpen delimiter: sClose delimiter: sName: sLetter (to be incorporated in key bindings): ") (byte-code "Ɉ $ $ $ $+ + + _ P P# P P# P P#Zɂ_ #," [l-sym n r-sym name letter tex-zone-prefix quiet tex-word-prefix tex-word-forward-prefix nil tex-check-empty "open delimiter" "tex-delimiters-semi" "close delimiter" "name" "letter" tex-mkzone "tex-zone-" tex-mkword "tex-word-" tex-mkword-forward "tex-word-forward-" message "%s...%s registered as a semi-automatic matching pair."] 11)) (defun tex-mkzone (name key quiet) (byte-code " ! ,!? Q!, !?, !R!DE% FE!*" [symbol name func quiet key nil l-sym r-sym intern fboundp y-or-n-p "Function " " already exists, overwrite? " key-binding " already bound to " symbol-name ", overwrite? " eval progn list defun (interactive) tex-zone define-key tex-mode-map] 16)) (defun tex-mkword (name key quiet) (byte-code " ! ,!? Q!, !?, !R!D F% FE!*" [symbol name func quiet key l-sym r-sym intern nil fboundp y-or-n-p "Function " " already exists, overwrite? " key-binding " already bound to " symbol-name ", overwrite? " eval progn list defun (n) (interactive "P") tex-word (if n (- n) -1) define-key tex-mode-map] 17)) (defun tex-mkword-forward (name key quiet) (byte-code " ! ,!? Q!, !?, !R!D F% FE!*" [symbol name func quiet key l-sym r-sym intern nil fboundp y-or-n-p "Function " " already exists, overwrite? " key-binding " already bound to " symbol-name ", overwrite? " eval progn list defun (n) (interactive "P") tex-word n define-key tex-mode-map] 17)) (defvar tex-auto-done nil) (defconst tex-toggle-prefix "") (defun tex-mkgrp-auto nil (byte-code "H  C @ GU* B\"\"5 \"! T AƉ+" [tex-auto-done nil auto tex-delimiters-auto n args t 1 2 apply tex-make-auto append (t) ding message "WARNING: Incorrect format found in entry #%d of tex-delimiters-auto" sit-for 3] 8)) (defun tex-make-auto (sym name &optional n &optional quiet) "\ Register a new automatic matching delimiter pair whose open and close delimiters are identical (SYM). The functions tex-NAME and tex-toggle-NAME will be generated and be bound to the symbol itself and C-c C-t SYM respectively." (interactive "sDelimiter: sName: ") (byte-code "ˈ $ $ P ! OJ!=J =?J !%! Q! Q! P! DEDE D DDR!&%F DD D&% PF& !˂#+-" [sym n name fn func sym-func quiet match-on lst toggle t nil tex-toggle-prefix tex-check-empty "delimiter" "tex-delimiter-auto" "name" "tex-" intern 0 1 key-binding self-insert-command y-or-n-p concat "Symbol `" "' already bound to function " symbol-name ", overwrite? " "tex-match-" "-on" "-list" "tex-toggle-" eval list progn make-local-variable setq defun (interactive) tex-delimiter quote "^" "\\|[^\\]" string-to-char define-key tex-mode-map (&optional quiet) (interactive) tex-toggle-delimiter message "%s...%s registered as an automatic matching pair."] 34)) (defvar tex-latex-done nil) (defconst tex-latex-prefix " ") (defun tex-mkgrp-env nil "\ Register every element of tex-latex-envs by calling tex-make-env quietly." (byte-code "H  C @ GU* B\"\"5 \"! T AƉ+" [tex-latex-done nil envs tex-latex-envs n args t 1 3 apply tex-make-env append (t) ding message "WARNING: Incorrect format found in entry #%d of tex-latex-envs" sit-for] 8)) (defun tex-make-env (env letter &optional argp &optional n &optional quiet) "\ Register a new LaTeX environment delimiter pair under the name ENV. A new function tex-latex-ENV will be generated and be bound to C-c C-l LETTER. ARGP should be t (TRUE) if optional LaTeX environment argument is required, nil otherwise. N the current count of the (ENV LETTER ARGP) tuple in tex-latex-envs. No message is given if QUIET is true." (interactive "sName of LaTeX environment: sLetter (to be incorporated in key binding): ") (byte-code "Ɉ $ $P ! P% 1ɂ7! a !?J Q!a !?a !R!  F% FE!ɂ# #." [env n letter fn funsym key tex-latex-prefix func quiet nil argp tex-check-empty "environment name" "tex-latex-envs" "letter" "tex-latex-" intern y-or-n-p "Any arguments? " fboundp "Function " " already exists, overwrite? " key-binding " already bound to " symbol-name ", overwrite? " eval progn list defun (&optional n) (interactive "P") tex-latex-putenv define-key tex-mode-map message "\\begin{%s}...\\end{%s} registered as a delimiter pair..." "%s not bound to %s"] 20)) (defun tex-check-empty (string name &optional lst &optional n) (byte-code "GV %  $ \"!ć" [string n name lst nil 0 ding message "WARNING: Null %s found in entry #%d of %s...ignored" "WARNING: %s shouldn't be null..." sit-for 3] 6))