branch: main
commit 8e292a7740306788cf6a9ea9496610fc2c982046
Author: Arash Esbati <[email protected]>
Commit: Arash Esbati <[email protected]>
Improve style/expl3.el
* style/expl3.el (LaTeX-expl3--set-TeX-exit-mark)
(TeX-arg-expl3-macro, TeX-arg-expl3-define-macro): New functions.
(LaTeX-expl3-newmac-regexp): New variable for hooking into AUCTeX
parser.
("expl3"): Add some missing macros incl. fontification for
top-level macros only.
---
style/expl3.el | 647 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 639 insertions(+), 8 deletions(-)
diff --git a/style/expl3.el b/style/expl3.el
index d130a66b..9ce0e4b0 100644
--- a/style/expl3.el
+++ b/style/expl3.el
@@ -1,6 +1,6 @@
;;; expl3.el --- AUCTeX style for `expl3.sty' -*- lexical-binding: t; -*-
-;; Copyright (C) 2015--2024 Free Software Foundation, Inc.
+;; Copyright (C) 2015--2025 Free Software Foundation, Inc.
;; Author: Tassilo Horn <[email protected]>
;; Maintainer: [email protected]
@@ -24,19 +24,18 @@
;;; Commentary:
-;; This file adds support for `expl3.sty'.
+;; This file adds support for `expl3.sty'. The macros in this style are
+;; taken from `interface3.pdf'.
;;; Code:
;; Silence the compiler:
-(declare-function font-latex-add-keywords
- "font-latex" (keywords class))
+(declare-function font-latex-add-keywords "font-latex" (keywords class))
+(defvar font-latex-match-simple-include-list)
(require 'tex)
(require 'latex)
-(defvar font-latex-match-simple-include-list)
-
(defvar LaTeX-expl3-syntax-table
(let ((st (copy-syntax-table LaTeX-mode-syntax-table)))
;; Make _ and : symbol chars
@@ -44,6 +43,62 @@
(modify-syntax-entry ?\: "_" st)
st))
+(defun LaTeX-expl3--set-TeX-exit-mark (_optional &optional pos)
+ "Ignore OPTIONAL and set `TeX-exit-mark' to POS or current point."
+ (set-marker TeX-exit-mark (or pos (point))))
+
+(defun TeX-arg-expl3-macro (_optional &optional prompt definition no-param)
+ "Read and insert an expl3 macro.
+OPTIONAL is ignored. PROMPT replaces the standard one only when asking
+for the macro name. If DEFINITION is non-nil, add the chosen macro to
+the list of defined macros. Ask also for macro parameters if NO-PARAM
+is non-nil."
+ (let* ((macro (completing-read
+ (TeX-argument-prompt nil prompt
+ (concat "Function: " TeX-esc)
+ t)
+ (TeX-symbol-list)))
+ (params (progn
+ (when (string-empty-p macro)
+ (error "%s" "Function name missing"))
+ (if no-param
+ ""
+ (TeX-read-string
+ (TeX-argument-prompt t nil "Parameter")))))
+ (TeX-arg-opening-brace "")
+ (TeX-arg-closing-brace ""))
+ (when (and definition (not (string-empty-p macro)))
+ (TeX-add-symbols macro))
+ (just-one-space)
+ (TeX-argument-insert macro nil TeX-esc)
+ (just-one-space)
+ (unless (string-empty-p params)
+ (TeX-argument-insert params nil)
+ (just-one-space))))
+
+(defun TeX-arg-expl3-define-macro (optional &optional prompt no-param)
+ "Define a expl3 macro.
+Pass OPTIONAL, PROMPT and NO-PARAM to `TeX-arg-expl3-macro', which see."
+ (TeX-arg-expl3-macro optional prompt t no-param))
+
+(defvar LaTeX-expl3-newmac-regexp
+ (let ((macs '("cs_set" "cs_set_nopar"
+ "cs_set_protected" "cs_set_protected_nopar"
+ "cs_gset" "cs_gset_nopar"
+ "cs_gset_protected" "cs_gset_protected_nopar"
+ "cs_new" "cs_new_nopar"
+ "cs_new_protected" "cs_new_protected_nopar"
+ "cs_generate_from_arg_count"))
+ (toks "[a-zA-Z:@_]+"))
+ `(,(concat (regexp-quote TeX-esc)
+ (regexp-opt macs)
+ ":[Ncenpx]+"
+ "[ \t]*"
+ (regexp-quote TeX-esc)
+ "\\(" toks "\\)")
+ 1 TeX-auto-symbol))
+ "Matches new macros defined with various expl3 functions.")
+
(TeX-add-style-hook
"expl3"
(lambda ()
@@ -54,7 +109,12 @@
(add-to-list 'font-latex-match-simple-include-list "_" t)
(add-to-list 'font-latex-match-simple-include-list ":" t))
+ ;; Add expl3 macros to the parser.
+ (TeX-auto-add-regexp LaTeX-expl3-newmac-regexp)
+
(TeX-add-symbols
+
+ ;; 2.1 Using the LaTeX3 modules
'("ExplSyntaxOn" 0)
'("ExplSyntaxOff" 0)
@@ -68,7 +128,433 @@
'("ProvidesExplPackage"
(TeX-arg-file-name-sans-extension "Package name")
- TeX-arg-date TeX-arg-version "Description"))
+ TeX-arg-date TeX-arg-version "Description")
+
+ '("GetIdInfo"
+ (TeX-arg-literal " $Id: ")
+ (TeX-arg-free "SVN info field")
+ (TeX-arg-literal " $ ") "Description")
+
+ '("ExplFileName" 0)
+ '("ExplFileDate" 0)
+ '("ExplFileVersion" 0)
+ '("ExplFileDescription" 0)
+
+ ;; 4.1 No operation functions
+ "prg_do_nothing:" "scan_stop:"
+
+ ;; 4.2 Grouping material
+ "group_begin:" "group_end:"
+ "group_insert_after:N"
+ "group_show_list:" "group_log_list:"
+
+ ;; 4.3.2 Defining new functions using parameter text
+ '("cs_new:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_new:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_new:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_new:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_new:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_new:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_new_nopar:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_new_nopar:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_new_nopar:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_new_nopar:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_new_nopar:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_new_nopar:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected_nopar:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected_nopar:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected_nopar:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected_nopar:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected_nopar:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_new_protected_nopar:cpx" TeX-arg-expl3-define-macro t)
+
+ '("cs_set:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_set:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_set:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_set:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_set:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_set:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_set_nopar:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_set_nopar:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_set_nopar:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_set_nopar:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_set_nopar:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_set_nopar:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected_nopar:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected_nopar:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected_nopar:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected_nopar:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected_nopar:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_set_protected_nopar:cpx" TeX-arg-expl3-define-macro t)
+
+ '("cs_gset:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_gset:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_gset:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_gset:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_gset:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_gset:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_gset_nopar:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_gset_nopar:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_gset_nopar:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_gset_nopar:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_gset_nopar:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_gset_nopar:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected:cpx" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected_nopar:Npn" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected_nopar:cpn" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected_nopar:Npe" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected_nopar:cpe" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected_nopar:Npx" TeX-arg-expl3-define-macro t)
+ '("cs_gset_protected_nopar:cpx" TeX-arg-expl3-define-macro t)
+
+ ;; 4.3.3 Defining new functions using the signature
+ '("cs_new:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_nopar:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_nopar:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_nopar:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_nopar:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected_nopar:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected_nopar:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected_nopar:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_new_protected_nopar:ce" (TeX-arg-expl3-define-macro nil t) t)
+
+ '("cs_set:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_nopar:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_nopar:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_nopar:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_nopar:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected_nopar:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected_nopar:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected_nopar:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_set_protected_nopar:ce" (TeX-arg-expl3-define-macro nil t) t)
+
+ '("cs_gset:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_nopar:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_nopar:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_nopar:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_nopar:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected:ce" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected_nopar:Nn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected_nopar:cn" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected_nopar:Ne" (TeX-arg-expl3-define-macro nil t) t)
+ '("cs_gset_protected_nopar:ce" (TeX-arg-expl3-define-macro nil t) t)
+
+ '("cs_generate_from_arg_count:NNnn"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") "Number of arguments" t)
+
+ ;; 4.3.4 Copying control sequences
+ '("cs_new_eq:NN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_new_eq:Nc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_new_eq:NN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_new_eq:cN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_new_eq:cc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+
+ '("cs_set_eq:NN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_set_eq:Nc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_set_eq:cN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_set_eq:cc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_gset_eq:NN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_gset_eq:Nc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_gset_eq:cN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_gset_eq:cc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-define-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+
+ ;; 4.3.5 Deleting control sequences
+ '("cs_undefine:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_undefine:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+
+ ;; 4.3.6 Showing control sequences
+ '("cs_meaning:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_meaning:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_show:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_show:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_log:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_log:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+
+ ;; 4.3.7 Converting to and from control sequences
+ '("use:c" t)
+ '("cs_if_exist_use:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_exist_use:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_exist_use:NTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " ") nil)
+ '("cs_if_exist_use:cTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " ") nil)
+
+ '("cs:w"
+ (TeX-arg-literal " ")
+ LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\cs_end:"))
+
+ '("cs_to_str:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+
+ ;; 4.4 Analysing control sequences
+ '("cs_split_function:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_prefix_spec:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_parameter_spec:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_replacement_spec:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_replacement_spec:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+
+ ;; 4.5 Using or removing tokens and arguments
+ '("use:n" (TeX-arg-literal " ") t)
+ '("use:nn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+ '("use:nnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {}"))
+ '("use:nnnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {} {}"))
+
+ ;; \use_i:nn et al. missing here.
+
+ '("use_i_ii:nnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {}"))
+ '("use_ii_i:nn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+
+ '("use_none:n"
+ (TeX-arg-literal " ") t)
+ '("use_none:nn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+ '("use_none:nnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {}"))
+ '("use_none:nnnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {} {}"))
+ '("use_none:nnnnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {} {} {}"))
+ '("use_none:nnnnnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {} {} {} {}"))
+ '("use_none:nnnnnnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {} {} {} {} {}"))
+ '("use_none:nnnnnnnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {} {} {} {} {} {}"))
+ '("use_none:nnnnnnnnn"
+ (TeX-arg-literal " ") t (TeX-arg-literal " {} {} {} {} {} {} {} {}"))
+
+ '("use_:e"
+ (TeX-arg-literal " ") t)
+
+ ;; 4.5.1 Selecting tokens from delimited arguments
+ '("use_none_delimit_by_q_nil:w"
+ (TeX-arg-literal " ")
+ LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\q_nil"))
+ '("use_none_delimit_by_q_stop:w"
+ (TeX-arg-literal " ")
+ LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\q_stop"))
+ '("use_none_delimit_by_q_recursion_stop:w"
+ (TeX-arg-literal " ")
+ LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\q_recursion_stop"))
+
+ '("use_i_delimit_by_q_nil:nw"
+ (TeX-arg-literal " ") t (TeX-arg-literal " \\q_nil"))
+ '("use_i_delimit_by_q_stop:nw"
+ (TeX-arg-literal " ") t (TeX-arg-literal " \\q_stop"))
+ '("use_i_delimit_by_q_recursion_stop:nw"
+ (TeX-arg-literal " ") t (TeX-arg-literal " \\q_recursion_stop"))
+
+ ;; 4.6.1 Tests on control sequences
+ '("cs_if_eq_p:NN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_eq_p:Nc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_eq_p:cN"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_eq_p:cc"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+
+ '("cs_if_eq:NNTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+ '("cs_if_eq:NcTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+ '("cs_if_eq:cNTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+ '("cs_if_eq:ccTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+
+ '("cs_if_exist_p:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_exist_p:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_exist:NTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+ '("cs_if_exist:cTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+
+ '("cs_if_free_p:N"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_free_p:c"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro))
+ '("cs_if_free:NTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+ '("cs_if_free:cTF"
+ (TeX-arg-literal " ") (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " ") t (TeX-arg-literal " {}"))
+
+ ;; 4.6.2 Primitive conditionals
+ '("if_true:"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+ '("if_false:"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+
+ "else:" "fi:" "reverse_if:N"
+
+ '("if_meaning:w"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+
+ '("if:w"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+ '("if_charcode:w"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+ '("if_catcode:w"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+
+ '("if_cs_exist:N"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-free TeX-arg-macro)
+ (TeX-arg-literal " \\else: \\fi:"))
+ '("if_cs_exist:w"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\cs_end: \\else: \\fi:"))
+
+ '("if_mode_horizontal:"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+ '("if_mode_vertical:"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+ '("if_mode_math:"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+ '("if_mode_inner:"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\else: \\fi:"))
+
+ ;; 4.7 Starting a paragraph
+ '("mode_leave_vertical:")
+
+ ;; 4.8 Debugging support
+ '("debug_on:n"
+ (TeX-arg-literal " ")
+ (TeX-arg-completing-read-multiple ("check-declarations"
"check-expressions"
+ "deprecation" "log-functions" "all")
+ "Debug option(s)"))
+ '("debug_off:n"
+ (TeX-arg-literal " ")
+ (TeX-arg-completing-read-multiple ("check-declarations"
"check-expressions"
+ "deprecation" "log-functions" "all")
+ "Debug option(s)"))
+
+ '("debug_suspend:"
+ (TeX-arg-literal " ") LaTeX-expl3--set-TeX-exit-mark
+ (TeX-arg-literal " \\debug_resume:"))
+ "debug_resume:"
+
+ ;; 5.2 Methods for defining variants
+ )
;; Fontification
(when (and (featurep 'font-latex)
@@ -78,7 +564,152 @@
'warning)
(font-latex-add-keywords '(("ProvidesExplClass" "{{{{")
("ProvidesExplFile" "{{{{")
- ("ProvidesExplPackage" "{{{{"))
+ ("ProvidesExplPackage" "{{{{")
+ ("GetIdInfo" "")
+
+ ("cs_new:Npn" "\\")
+ ("cs_new:cpn" "\\")
+ ("cs_new:Npe" "\\")
+ ("cs_new:cpe" "\\")
+ ("cs_new:Npx" "\\")
+ ("cs_new:cpx" "\\")
+ ("cs_new_nopar:Npn" "\\")
+ ("cs_new_nopar:cpn" "\\")
+ ("cs_new_nopar:Npe" "\\")
+ ("cs_new_nopar:cpe" "\\")
+ ("cs_new_nopar:Npx" "\\")
+ ("cs_new_nopar:cpx" "\\")
+ ("cs_new_protected:Npn" "\\")
+ ("cs_new_protected:cpn" "\\")
+ ("cs_new_protected:Npe" "\\")
+ ("cs_new_protected:cpe" "\\")
+ ("cs_new_protected:Npx" "\\")
+ ("cs_new_protected:cpx" "\\")
+ ("cs_new_protected_nopar:Npn" "\\")
+ ("cs_new_protected_nopar:cpn" "\\")
+ ("cs_new_protected_nopar:Npe" "\\")
+ ("cs_new_protected_nopar:cpe" "\\")
+ ("cs_new_protected_nopar:Npx" "\\")
+ ("cs_new_protected_nopar:cpx" "\\")
+
+ ("cs_set:Npn" "\\")
+ ("cs_set:cpn" "\\")
+ ("cs_set:Npe" "\\")
+ ("cs_set:cpe" "\\")
+ ("cs_set:Npx" "\\")
+ ("cs_set:cpx" "\\")
+ ("cs_set_nopar:Npn" "\\")
+ ("cs_set_nopar:cpn" "\\")
+ ("cs_set_nopar:Npe" "\\")
+ ("cs_set_nopar:cpe" "\\")
+ ("cs_set_nopar:Npx" "\\")
+ ("cs_set_nopar:cpx" "\\")
+ ("cs_set_protected:Npn" "\\")
+ ("cs_set_protected:cpn" "\\")
+ ("cs_set_protected:Npe" "\\")
+ ("cs_set_protected:cpe" "\\")
+ ("cs_set_protected:Npx" "\\")
+ ("cs_set_protected:cpx" "\\")
+ ("cs_set_protected_nopar:Npn" "\\")
+ ("cs_set_protected_nopar:cpn" "\\")
+ ("cs_set_protected_nopar:Npe" "\\")
+ ("cs_set_protected_nopar:cpe" "\\")
+ ("cs_set_protected_nopar:Npx" "\\")
+ ("cs_set_protected_nopar:cpx" "\\")
+
+ ("cs_gset:Npn" "\\")
+ ("cs_gset:cpn" "\\")
+ ("cs_gset:Npe" "\\")
+ ("cs_gset:cpe" "\\")
+ ("cs_gset:Npx" "\\")
+ ("cs_gset:cpx" "\\")
+ ("cs_gset_nopar:Npn" "\\")
+ ("cs_gset_nopar:cpn" "\\")
+ ("cs_gset_nopar:Npe" "\\")
+ ("cs_gset_nopar:cpe" "\\")
+ ("cs_gset_nopar:Npx" "\\")
+ ("cs_gset_nopar:cpx" "\\")
+ ("cs_gset_protected:Npn" "\\")
+ ("cs_gset_protected:cpn" "\\")
+ ("cs_gset_protected:Npe" "\\")
+ ("cs_gset_protected:cpe" "\\")
+ ("cs_gset_protected:Npx" "\\")
+ ("cs_gset_protected:cpx" "\\")
+ ("cs_gset_protected_nopar:Npn" "\\")
+ ("cs_gset_protected_nopar:cpn" "\\")
+ ("cs_gset_protected_nopar:Npe" "\\")
+ ("cs_gset_protected_nopar:cpe" "\\")
+ ("cs_gset_protected_nopar:Npx" "\\")
+ ("cs_gset_protected_nopar:cpx" "\\")
+
+ ("cs_new:Nn" "\\")
+ ("cs_new:cn" "\\")
+ ("cs_new:Ne" "\\")
+ ("cs_new:ce" "\\")
+ ("cs_new_nopar:Nn" "\\")
+ ("cs_new_nopar:cn" "\\")
+ ("cs_new_nopar:Ne" "\\")
+ ("cs_new_nopar:ce" "\\")
+ ("cs_new_protected:Nn" "\\")
+ ("cs_new_protected:cn" "\\")
+ ("cs_new_protected:Ne" "\\")
+ ("cs_new_protected:ce" "\\")
+ ("cs_new_protected_nopar:Nn" "\\")
+ ("cs_new_protected_nopar:cn" "\\")
+ ("cs_new_protected_nopar:Ne" "\\")
+ ("cs_new_protected_nopar:ce" "\\")
+
+ ("cs_set:Nn" "\\")
+ ("cs_set:cn" "\\")
+ ("cs_set:Ne" "\\")
+ ("cs_set:ce" "\\")
+ ("cs_set_nopar:Nn" "\\")
+ ("cs_set_nopar:cn" "\\")
+ ("cs_set_nopar:Ne" "\\")
+ ("cs_set_nopar:ce" "\\")
+ ("cs_set_protected:Nn" "\\")
+ ("cs_set_protected:cn" "\\")
+ ("cs_set_protected:Ne" "\\")
+ ("cs_set_protected:ce" "\\")
+ ("cs_set_protected_nopar:Nn" "\\")
+ ("cs_set_protected_nopar:cn" "\\")
+ ("cs_set_protected_nopar:Ne" "\\")
+ ("cs_set_protected_nopar:ce" "\\")
+
+ ("cs_gset:Nn" "\\")
+ ("cs_gset:cn" "\\")
+ ("cs_gset:Ne" "\\")
+ ("cs_gset:ce" "\\")
+ ("cs_gset_nopar:Nn" "\\")
+ ("cs_gset_nopar:cn" "\\")
+ ("cs_gset_nopar:Ne" "\\")
+ ("cs_gset_nopar:ce" "\\")
+ ("cs_gset_protected:Nn" "\\")
+ ("cs_gset_protected:cn" "\\")
+ ("cs_gset_protected:Ne" "\\")
+ ("cs_gset_protected:ce" "\\")
+ ("cs_gset_protected_nopar:Nn" "\\")
+ ("cs_gset_protected_nopar:cn" "\\")
+ ("cs_gset_protected_nopar:Ne" "\\")
+ ("cs_gset_protected_nopar:ce" "\\")
+
+ ("cs_generate_from_arg_count:NNnn" "|{\\")
+
+ ("cs_new_eq:NN" "\\\\")
+ ("cs_new_eq:Nc" "\\\\")
+ ("cs_new_eq:cN" "\\\\")
+ ("cs_new_eq:cc" "\\\\")
+ ("cs_set_eq:NN" "\\\\")
+ ("cs_set_eq:Nc" "\\\\")
+ ("cs_set_eq:cN" "\\\\")
+ ("cs_set_eq:cc" "\\\\")
+ ("cs_gset_eq:NN" "\\\\")
+ ("cs_gset_eq:Nc" "\\\\")
+ ("cs_gset_eq:cN" "\\\\")
+ ("cs_gset_eq:cc" "\\\\")
+
+ ("cs_undefine:N" "\\")
+ ("cs_undefine:c" "\\"))
'function)))
TeX-dialect)