branch: main commit 8e292a7740306788cf6a9ea9496610fc2c982046 Author: Arash Esbati <ar...@gnu.org> Commit: Arash Esbati <ar...@gnu.org>
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 <t...@gnu.org> ;; Maintainer: auctex-devel@gnu.org @@ -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)