auctex-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[AUCTeX-diffs] GNU AUCTeX branch, master, updated. 2ccd88ac3e5f00fa3a1f7


From: Arash Esbati
Subject: [AUCTeX-diffs] GNU AUCTeX branch, master, updated. 2ccd88ac3e5f00fa3a1f7b98ad4b6da23021336e
Date: Mon, 29 Jun 2020 13:39:36 -0400 (EDT)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU AUCTeX".

The branch, master has been updated
       via  2ccd88ac3e5f00fa3a1f7b98ad4b6da23021336e (commit)
      from  b21f26507da2232e62ae63b34bc36ad645b4dc29 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 2ccd88ac3e5f00fa3a1f7b98ad4b6da23021336e
Author: Arash Esbati <arash@gnu.org>
Date:   Sun Jun 28 22:43:44 2020 +0200

    Update style/xparse.el to package dated 2020-03-06
    
    * style/xparse.el: Update style to package version 2020-03-06
    incl. auto-parsing capabilities.  Fix fontification of provided
    macros.

diff --git a/style/xparse.el b/style/xparse.el
index 271ec61..79ab604 100644
--- a/style/xparse.el
+++ b/style/xparse.el
@@ -1,9 +1,9 @@
-;;; xparse.el --- AUCTeX style for `xparse.sty' version 4467.
+;;; xparse.el --- AUCTeX style for `xparse.sty' version 2020-03-06
 
-;; Copyright (C) 2013, 2018 Free Software Foundation, Inc.
+;; Copyright (C) 2013, 2020 Free Software Foundation, Inc.
 
 ;; Maintainer: auctex-devel@gnu.org
-;; Author: Mosè Giordano <giordano.mose@libero.it>
+;; Author: Mosè Giordano <mose@gnu.org>
 ;; Keywords: tex
 
 ;; This file is part of AUCTeX.
@@ -25,8 +25,13 @@
 
 ;;; Commentary:
 
-;; This file adds basic support for `xparse.sty' version 4467.  It
-;; doesn't parse argument specification of macros and environments.
+;; This file adds basic support for `xparse.sty' version 2020-03-06.
+;; It parses argument specification of macros and environments.
+
+;; Currently, this style doesn't parse the embellishments specifiers
+;; `e' and `E'.  The "yet not more supported" specifiers `l', `u', `g'
+;; and `G' are ignored completely and may lead to wrong parsing
+;; results.
 
 ;;; Code:
 
@@ -35,33 +40,206 @@
                  "font-latex"
                  (keywords class))
 
+;; Needed for auto-parsing.
+(require 'tex)
+
+(TeX-auto-add-type "xparse-macro" "LaTeX")
+
 (defvar LaTeX-xparse-macro-regexp
-  (concat "\\\\\\(?:Declare\\|New\\|Renew\\|Provide\\|DeclareExpandable\\)"
-         "DocumentCommand[ \t\n\r]*{?[ \t\n\r]*\\\\\\([A-Za-z]+\\)[ \t\n\r]*}?"
-         ;; The following is the opening brace of argument specification and is
-         ;; needed to skip internal macros containing `:' or `_'.
-         "[ \t\n\r]*{")
+  `(,(concat
+      (regexp-quote TeX-esc)
+      "\\(?:New\\|Renew\\|Provide\\|Declare\\)"
+      "\\(?:Expandable\\)?"
+      "DocumentCommand"
+      "[ \t\n\r]*"
+      "{?"
+      "[ \t\n\r]*"
+      (regexp-quote TeX-esc)
+      "\\([A-Za-z]+\\)"
+      "[ \t\n\r]*"
+      "}?"
+      "[ \t\n\r]*"
+      
"{\\([^}{]*\\({[^}{]*\\({[^}{]*\\({[^}{]*}[^}{]*\\)*}[^}{]*\\)*}[^}{]*\\)*\\)}")
+    (1 2) LaTeX-auto-xparse-macro)
   "Matches macros by xparse package.")
 
+(TeX-auto-add-type "xparse-environment" "LaTeX")
+
 (defvar LaTeX-xparse-environment-regexp
-  (concat "\\\\\\(?:Declare\\|New\\|Renew\\|Provide\\)DocumentEnvironment"
-         "[ \t\n\r]*{[ \t\n\r]*\\([A-Za-z]+\\)[ \t\n\r]*}")
+  `(,(concat
+      (regexp-quote TeX-esc)
+      "\\(?:New\\|Renew\\|Provide\\|Declare\\)"
+      "DocumentEnvironment"
+      "[ \t\n\r]*"
+      "{"
+      "[ \t\n\r]*"
+      "\\([A-Za-z]+\\)"
+      "[ \t\n\r]*"
+      "}"
+      "[ \t\n\r]*"
+      
"{\\([^}{]*\\({[^}{]*\\({[^}{]*\\({[^}{]*}[^}{]*\\)*}[^}{]*\\)*}[^}{]*\\)*\\)}")
+    (1 2) LaTeX-auto-xparse-environment)
   "Matches environments by xparse package.")
 
+(defun LaTeX-arg-xparse-query (optional op-brace cl-brace &optional prompt)
+  "Special query function for parsed elements from xparse package.
+If OPTIONAL is non-nil, indicate it in minibuffer.  OP-BRACE sets
+the opening brace, CL-BRACE sets the closing one.  PROMPT
+replaces the standard one."
+  (let ((TeX-arg-opening-brace op-brace)
+       (TeX-arg-closing-brace cl-brace))
+    (TeX-argument-insert
+     (TeX-read-string (TeX-argument-prompt optional prompt "Text"))
+     optional)))
+
+(defun LaTeX-xparse-macro-parse (type)
+  "Process parsed macro and environment definitions.
+TYPE is one of the symobols mac or env."
+  (dolist (xcmd (if (eq type 'mac)
+                   (LaTeX-xparse-macro-list)
+                 (LaTeX-xparse-environment-list)))
+    (let ((name (car xcmd))
+         (spec (cadr xcmd))
+         args opt-star opt-token)
+      (with-temp-buffer
+       (set-syntax-table LaTeX-mode-syntax-table)
+       ;; This one is probably not really needed?
+       (goto-char (point-min))
+       (insert (replace-regexp-in-string "[ \t\r\n%]" "" spec))
+       (goto-char (point-min))
+       (while (looking-at-p "[+!>bmrRvodODsteE]")
+         (cond (;; + or !: Long argument or space aware: Move over
+                ;; them.  b is special; only available for
+                ;; enviroments
+                (looking-at-p "[+!b]")
+                (forward-char 1))
+               ((looking-at-p ">")
+                ;; Argument processors: Move over > and a balanced
+                ;; {}
+                (forward-char 1)
+                (forward-sexp))
+               ;; Mandatory arguments:
+               ;; m: Ask for input with "Text" as prompt
+               ((looking-at-p "m")
+                (forward-char 1)
+                (push "Text" args))
+               ;; r<token1><token2>
+               ((looking-at-p "r")
+                (re-search-forward "r\\(?:\\(.\\)\\(.\\)\\)" (+ (point) 3) t)
+                (push `(LaTeX-arg-xparse-query
+                        ,(match-string-no-properties 1)
+                        ,(match-string-no-properties 2))
+                      args))
+               ;; R<token1><token2>{default}
+               ((looking-at-p "R")
+                (re-search-forward "R\\(?:\\(.\\)\\(.\\)\\)" (+ (point) 3) t)
+                (forward-sexp)
+                (push `(LaTeX-arg-xparse-query
+                        ,(match-string-no-properties 1)
+                        ,(match-string-no-properties 2))
+                      args))
+               ;; v: Use `TeX-arg-verb-delim-or-brace'
+               ((looking-at-p "v")
+                (forward-char 1)
+                (push 'TeX-arg-verb-delim-or-brace args))
+               ;; Optional arguments:
+               ;; o standard LaTeX optional in square brackets
+               ((looking-at-p "o")
+                (forward-char 1)
+                (push (vector "Text") args))
+               ;; d<token1><token2>
+               ((looking-at-p "d")
+                (re-search-forward "d\\(?:\\(.\\)\\(.\\)\\)" (+ (point) 3) t)
+                (push (vector 'LaTeX-arg-xparse-query
+                              (match-string-no-properties 1)
+                              (match-string-no-properties 2))
+                      args))
+               ;; O{default}
+               ((looking-at-p "O")
+                (forward-char 1)
+                (forward-sexp)
+                (push (vector "Text") args))
+               ;; D<token1><token2>{default}
+               ((looking-at-p "D")
+                (re-search-forward "D\\(?:\\(.\\)\\(.\\)\\)" (+ (point) 3) t)
+                (forward-sexp)
+                (push (vector 'LaTeX-arg-xparse-query
+                              (match-string-no-properties 1)
+                              (match-string-no-properties 2))
+                      args))
+               ;; s: optional star
+               ((looking-at-p "s")
+                (forward-char 1)
+                (setq opt-star t))
+               ;; t: optional <token>
+               ((looking-at-p "t")
+                (re-search-forward "t\\(.\\)" (+ (point) 2) t)
+                (setq opt-token (match-string-no-properties 1)))
+               ;; e & E are currently ignored.  e: If looking at a
+               ;; {, move one balanced expression, otherwise only
+               ;; one character.
+               ((looking-at-p "e")
+                (forward-char)
+                (if (looking-at-p TeX-grop)
+                    (forward-sexp)
+                  (forward-char)))
+               ;; E
+               ((looking-at-p "E")
+                (forward-char)
+                (if (looking-at-p TeX-grop)
+                    (forward-sexp)
+                  (forward-char))
+                (if (looking-at-p TeX-grop)
+                    (forward-sexp)
+                  (forward-char)))
+               ;; Finished:
+               (t nil))))
+      (if (eq type 'env)
+         (LaTeX-add-environments `(,name
+                                   LaTeX-env-args
+                                   ,@(reverse (copy-sequence args))))
+       (TeX-add-symbols (cons name
+                              (reverse (copy-sequence args))))
+       (when opt-star
+         (TeX-add-symbols (cons (concat name "*")
+                                (reverse (copy-sequence args)))))
+       (when opt-token
+         (TeX-add-symbols (cons (concat name opt-token)
+                                (reverse (copy-sequence args)))))))))
+
+(defun LaTeX-xparse-auto-prepare ()
+  "Clear various `LaTeX-auto-xparse-*' variables before parsing."
+  (setq LaTeX-auto-xparse-macro nil
+       LaTeX-auto-xparse-environment nil))
+
+(defun LaTeX-xparse-auto-cleanup ()
+  "Process parsed elements for xparse package."
+  (LaTeX-xparse-macro-parse 'mac)
+  (LaTeX-xparse-macro-parse 'env))
+
+(add-hook 'TeX-auto-prepare-hook #'LaTeX-xparse-auto-prepare t)
+(add-hook 'TeX-auto-cleanup-hook #'LaTeX-xparse-auto-cleanup t)
+(add-hook 'TeX-update-style-hook #'TeX-auto-parse t)
+
 (TeX-add-style-hook
  "xparse"
  (lambda ()
-   (TeX-auto-add-regexp `(,LaTeX-xparse-macro-regexp 1 TeX-auto-symbol))
-   (TeX-auto-add-regexp
-    `(,LaTeX-xparse-environment-regexp 1 LaTeX-auto-environment))
+   (TeX-auto-add-regexp LaTeX-xparse-macro-regexp)
+   (TeX-auto-add-regexp LaTeX-xparse-environment-regexp)
    (TeX-run-style-hooks
     "expl3")
    (TeX-add-symbols
+    ;; Declaring commands
+    '("DeclareDocumentCommand"
+      TeX-arg-define-macro "Argument specification" t)
+    '("NewDocumentCommand"
+      TeX-arg-define-macro "Argument specification" t)
+    '("RenewDocumentCommand"
+      TeX-arg-macro "Argument specification" t)
+    '("ProvideDocumentCommand"
+      TeX-arg-define-macro "Argument specification" t)
+
     ;; Declaring commands and environments
-    '("DeclareDocumentCommand" TeX-arg-define-macro "Argument specification" t)
-    '("NewDocumentCommand" TeX-arg-define-macro "Argument specification" t)
-    '("RenewDocumentCommand" TeX-arg-macro "Argument specification" t)
-    '("ProvideDocumentCommand" TeX-arg-define-macro "Argument specification" t)
     '("DeclareDocumentEnvironment" TeX-arg-define-environment
       "Argument specification" t t)
     '("NewDocumentEnvironment" TeX-arg-define-environment
@@ -70,9 +248,17 @@
       "Argument specification" t t)
     '("ProvideDocumentEnvironment" TeX-arg-define-environment
       "Argument specification" t t)
+
     ;; Fully-expandable document commands
     '("DeclareExpandableDocumentCommand"
       TeX-arg-define-macro "Argument specification" t)
+    '("NewExpandableDocumentCommand"
+      TeX-arg-define-macro "Argument specification" t)
+    '("RenewExpandableDocumentCommand"
+      TeX-arg-macro "Argument specification" t)
+    '("ProvideExpandableDocumentCommand"
+      TeX-arg-define-macro "Argument specification" t)
+
     ;; Testing special values
     '("IfBooleanTF" 3)
     '("IfBooleanT" 3)
@@ -97,18 +283,24 @@
     '("GetDocumentEnvironmmentArgSpec" TeX-arg-environment)
     '("ShowDocumentCommandArgSpec" TeX-arg-macro)
     '("ShowDocumentEnvironmentArgSpec" TeX-arg-environment))
+
    ;; Fontification
    (when (and (featurep 'font-latex)
              (eq TeX-install-font-lock 'font-latex-setup))
      (font-latex-add-keywords '(("DeclareDocumentCommand" "|{\\{{")
-                               ("NewDocumentCommand" "|{\\{{")
-                               ("RenewDocumentCommand" "|{\\{{")
+                               ("NewDocumentCommand"     "|{\\{{")
                                ("ProvideDocumentCommand" "|{\\{{")
+                               ("RenewDocumentCommand"   "|{\\{{")
+                               ;;
                                ("DeclareExpandableDocumentCommand" "|{\\{{")
+                               ("NewExpandableDocumentCommand"     "|{\\{{")
+                               ("ProvideExpandableDocumentCommand" "|{\\{{")
+                               ("RenewExpandableDocumentCommand"   "|{\\{{")
+                               ;;
                                ("DeclareDocumentEnvironment" "{{{{")
-                               ("NewDocumentEnvironment" "{{{{")
-                               ("RenewDocumentEnvironment" "{{{{")
-                               ("ProvideDocumentEnvironment" "{{{{"))
+                               ("NewDocumentEnvironment"     "{{{{")
+                               ("ProvideDocumentEnvironment" "{{{{")
+                               ("RenewDocumentEnvironment"   "{{{{"))
                              'function)))
  LaTeX-dialect)
 

-----------------------------------------------------------------------

Summary of changes:
 style/xparse.el | 240 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 216 insertions(+), 24 deletions(-)


hooks/post-receive
-- 
GNU AUCTeX



reply via email to

[Prev in Thread] Current Thread [Next in Thread]