unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
@ 2019-06-11 11:59 Konstantin Kharlamov
  2019-06-11 12:03 ` bug#36167: Acknowledgement ([PATCH] Replace manually crafted hex regexes with [[:xdigit:]]) Konstantin Kharlamov
                   ` (6 more replies)
  0 siblings, 7 replies; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-11 11:59 UTC (permalink / raw)
  To: 36167

Hopefully, this is more readable compared to older "[0-9a-fA-F]", 
because the intention is immediately obvious.

Fun fact: initially I started it because on my older Emacs this 
resulted in better performance; the difference was about 10x times. But 
I can't reproduce this on the current master anymore, i.e. the 
performance matches. Oh, well. I'm thus not sending the patch replacing 
[0-9] with [[:digit:]] because in terms of readability the intention is 
clear there, however replacing the hex regexes should still make code 
more readable.

P.S.: I'm not sure if the commit message looks okay, comments are 
welcome.







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: Acknowledgement ([PATCH] Replace manually crafted hex regexes with [[:xdigit:]])
  2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
@ 2019-06-11 12:03 ` Konstantin Kharlamov
  2019-06-11 12:29 ` bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]] Konstantin Kharlamov
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-11 12:03 UTC (permalink / raw)
  To: 36167

Eh, sorry, git send-email is broken, complains on something about perl 
SSL. This may take some time.







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
  2019-06-11 12:03 ` bug#36167: Acknowledgement ([PATCH] Replace manually crafted hex regexes with [[:xdigit:]]) Konstantin Kharlamov
@ 2019-06-11 12:29 ` Konstantin Kharlamov
  2019-06-11 13:03   ` Robert Pluim
  2019-06-11 14:26 ` bug#36167: [PATCH] Replace manually crafted hex regexes " Paul Eggert
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-11 12:29 UTC (permalink / raw)
  To: 36167

* etc/schema/od-schema-v1.2-os.rnc: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/calc/calc-aent.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/calc/calc-ext.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/calc/calc-lang.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/cedet/semantic/java.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/cedet/semantic/lex.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/emulation/cua-rect.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/gnus/gnus-art.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/gnus/mml-sec.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/gnus/nneething.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/international/mule-cmds.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/net/shr-color.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/nxml/rng-cmpct.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/nxml/rng-uri.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/nxml/rng-xsd.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/nxml/xmltok.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/org/org-mobile.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/progmodes/ada-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/progmodes/cc-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/progmodes/cperl-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/progmodes/ebnf-dtd.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/progmodes/hideif.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/progmodes/prolog.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/textmodes/css-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/textmodes/sgml-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/version.el: replace [0-9a-fA-F] with [[:xdigit:]]
* lisp/xml.el: replace [0-9a-fA-F] with [[:xdigit:]]
* test/src/emacs-module-tests.el: replace [0-9a-fA-F] with [[:xdigit:]]
---
 etc/schema/od-schema-v1.2-os.rnc |  2 +-
 lisp/calc/calc-aent.el           |  2 +-
 lisp/calc/calc-ext.el            |  4 ++--
 lisp/calc/calc-lang.el           |  2 +-
 lisp/cedet/semantic/java.el      |  4 ++--
 lisp/cedet/semantic/lex.el       |  4 ++--
 lisp/emulation/cua-rect.el       |  2 +-
 lisp/gnus/gnus-art.el            |  8 ++++----
 lisp/gnus/mml-sec.el             |  2 +-
 lisp/gnus/nneething.el           |  2 +-
 lisp/international/mule-cmds.el  |  2 +-
 lisp/net/shr-color.el            |  2 +-
 lisp/nxml/rng-cmpct.el           |  2 +-
 lisp/nxml/rng-uri.el             | 10 +++++-----
 lisp/nxml/rng-xsd.el             |  2 +-
 lisp/nxml/xmltok.el              |  2 +-
 lisp/org/org-mobile.el           |  2 +-
 lisp/progmodes/ada-mode.el       |  2 +-
 lisp/progmodes/cc-mode.el        | 16 ++++++++--------
 lisp/progmodes/cperl-mode.el     |  8 ++++----
 lisp/progmodes/ebnf-dtd.el       | 14 +++++++-------
 lisp/progmodes/hideif.el         |  4 ++--
 lisp/progmodes/prolog.el         |  2 +-
 lisp/textmodes/css-mode.el       |  6 +++---
 lisp/textmodes/sgml-mode.el      |  2 +-
 lisp/version.el                  |  2 +-
 lisp/xml.el                      |  8 ++++----
 test/src/emacs-module-tests.el   |  2 +-
 28 files changed, 60 insertions(+), 60 deletions(-)

diff --git a/etc/schema/od-schema-v1.2-os.rnc b/etc/schema/od-schema-v1.2-os.rnc
index 8d679d62e4e..36e4645d7ee 100644
--- a/etc/schema/od-schema-v1.2-os.rnc
+++ b/etc/schema/od-schema-v1.2-os.rnc
@@ -6233,7 +6233,7 @@ signedZeroToHundredPercent =
 relativeLength = xsd:string { pattern = "[0-9]+\*" }
 coordinate = length
 distance = length
-color = xsd:string { pattern = "#[0-9a-fA-F]{6}" }
+color = xsd:string { pattern = "#[[:xdigit:]]{6}" }
 angle = xsd:string
 CURIE =
   xsd:string { pattern = "(([\i-[:]][\c-[:]]*)?:)?.+" minLength = "1" }
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index f16e665fc34..f1ef5c170bc 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -728,7 +728,7 @@ math-read-token
 						 math-exp-str (1- math-exp-pos))
 				   (1- math-exp-pos))))))
 	     (or (and (memq calc-language calc-lang-c-type-hex)
-		      (eq (string-match "0[xX][0-9a-fA-F]+" math-exp-str
+		      (eq (string-match "0[xX][[:xdigit:]]+" math-exp-str
                                         math-exp-pos)
                           math-exp-pos))
 		 (string-match "_?\\([0-9]+.?0*@ *\\)?\\([0-9]+.?0*' *\\)?\\(0*\\([2-9]\\|1[0-4]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-dA-D.]+[eE][-+_]?[0-9]+\\|0*\\([2-9]\\|[0-2][0-9]\\|3[0-6]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-zA-Zα-ωΑ-Ω:.]+\\|[0-9]+:[0-9:]+\\|[0-9.]+\\([eE][-+_]?[0-9]+\\)?\"?\\)?"
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index 1456fb28570..c7b4c3b091d 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -3019,13 +3019,13 @@ math-read-number-fancy
 
    ;; C language hexadecimal notation
    ((and (eq calc-language 'c)
-	 (string-match "^0[xX]\\([0-9a-fA-F]+\\)$" s))
+	 (string-match "^0[xX]\\([[:xdigit:]]+\\)$" s))
     (let ((digs (math-match-substring s 1)))
       (math-read-radix digs 16)))
 
    ;; Pascal language hexadecimal notation
    ((and (eq calc-language 'pascal)
-	 (string-match "^\\$\\([0-9a-fA-F]+\\)$" s))
+	 (string-match "^\\$\\([[:xdigit:]]+\\)$" s))
     (let ((digs (math-match-substring s 1)))
       (math-read-radix digs 16)))
 
diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el
index ee107df39c1..4a9771d7438 100644
--- a/lisp/calc/calc-lang.el
+++ b/lisp/calc/calc-lang.el
@@ -243,7 +243,7 @@ calc-pascal-language
 (put 'pascal 'math-lang-read-symbol
      '((?\$
         (eq (string-match
-             "\\(\\$[0-9a-fA-F]+\\)\\($\\|[^0-9a-zA-Zα-ωΑ-Ω]\\)"
+             "\\(\\$[[:xdigit:]]+\\)\\($\\|[^0-9a-zA-Zα-ωΑ-Ω]\\)"
              math-exp-str math-exp-pos)
             math-exp-pos)
         (setq math-exp-token 'number
diff --git a/lisp/cedet/semantic/java.el b/lisp/cedet/semantic/java.el
index 54cce965459..7f9c93b906f 100644
--- a/lisp/cedet/semantic/java.el
+++ b/lisp/cedet/semantic/java.el
@@ -51,7 +51,7 @@ semantic-java-number-regexp
             "\\|"
             "\\<[0-9]+[eE][-+]?[0-9]+[fFdD]?\\>"
             "\\|"
-            "\\<0[xX][0-9a-fA-F]+[lL]?\\>"
+            "\\<0[xX][[:xdigit:]]+[lL]?\\>"
             "\\|"
             "\\<[0-9]+[lLfFdD]?\\>"
             "\\)"
@@ -63,7 +63,7 @@ semantic-java-number-regexp
     [1-9][0-9]*
   ;
 HEX_LITERAL:
-    0[xX][0-9a-fA-F]+
+    0[xX][[:xdigit:]]+
   ;
 OCTAL_LITERAL:
     0[0-7]*
diff --git a/lisp/cedet/semantic/lex.el b/lisp/cedet/semantic/lex.el
index 2690122f067..f1c6b014182 100644
--- a/lisp/cedet/semantic/lex.el
+++ b/lisp/cedet/semantic/lex.el
@@ -596,7 +596,7 @@ semantic-lex-number-expression
             "\\|"
             "\\<[0-9]+[eE][-+]?[0-9]+[fFdD]?\\>"
             "\\|"
-            "\\<0[xX][0-9a-fA-F]+[lL]?\\>"
+            "\\<0[xX][[:xdigit:]]+[lL]?\\>"
             "\\|"
             "\\<[0-9]+[lLfFdD]?\\>"
             "\\)"
@@ -609,7 +609,7 @@ semantic-lex-number-expression
     [1-9][0-9]*
   ;
 HEX_LITERAL:
-    0[xX][0-9a-fA-F]+
+    0[xX][[:xdigit:]]+
   ;
 OCTAL_LITERAL:
     0[0-7]*
diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el
index 706634a5017..1a19cc2910e 100644
--- a/lisp/emulation/cua-rect.el
+++ b/lisp/emulation/cua-rect.el
@@ -1127,7 +1127,7 @@ cua-incr-rectangle
   (cua--rectangle-operation 'keep nil t 1 nil
      (lambda (_s e _l _r)
         (cond
-         ((re-search-forward "0x\\([0-9a-fA-F]+\\)" e t)
+         ((re-search-forward "0x\\([[:xdigit:]]+\\)" e t)
           (let* ((txt (cua--filter-buffer-noprops (match-beginning 1) (match-end 1)))
                  (n (string-to-number txt 16))
                  (fmt (format "0x%%0%dx" (length txt))))
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index d826faca5bd..e6a75660fe8 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -7426,10 +7426,10 @@ gnus-button-mid-or-mail-heuristic-alist
     (-2.0  . "^[0-9]")
     (-1.0  . "^[0-9][0-9]")
     ;;
-    ;; -3.0 /^[0-9][0-9a-fA-F]{2,2}/;
-    (-3.0  . "^[0-9][0-9a-fA-F][0-9a-fA-F][^0-9a-fA-F]")
-    ;; -5.0 /^[0-9][0-9a-fA-F]{3,3}/;
-    (-5.0  . "^[0-9][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][^0-9a-fA-F]")
+    ;; -3.0 /^[0-9][[:xdigit:]]{2,2}/;
+    (-3.0  . "^[0-9][[:xdigit:]][[:xdigit:]][^0-9a-fA-F]")
+    ;; -5.0 /^[0-9][[:xdigit:]]{3,3}/;
+    (-5.0  . "^[0-9][[:xdigit:]][[:xdigit:]][[:xdigit:]][^0-9a-fA-F]")
     ;;
     (-3.0  .  "[0-9][0-9][0-9][0-9][0-9][^0-9].*@") ;; "[0-9]{5,}.*\@"
     (-3.0  .  "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9].*@")
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index db7489fbf1c..02a27b367cd 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -725,7 +725,7 @@ mml-secure-find-usable-keys
 is expired or revoked.
 If optional JUSTONE is not nil, return the first key instead of a list."
   (let* ((keys (epg-list-keys context name))
-	 (iskeyid (string-match "\\(0x\\)?\\([0-9a-fA-F]\\{8,\\}\\)" name))
+	 (iskeyid (string-match "\\(0x\\)?\\([[:xdigit:]]\\{8,\\}\\)" name))
 	 (fingerprint (match-string 2 name))
 	 result)
     (when (and iskeyid (>= (length keys) 2))
diff --git a/lisp/gnus/nneething.el b/lisp/gnus/nneething.el
index f64007aaf79..c3d511bc6e0 100644
--- a/lisp/gnus/nneething.el
+++ b/lisp/gnus/nneething.el
@@ -297,7 +297,7 @@ nneething-encode-file-name
 (defun nneething-decode-file-name (file &optional coding-system)
   "Decode the name of the FILE is encoded in CODING-SYSTEM."
   (let ((pos 0) buf)
-    (while (string-match "%\\([0-9a-fA-F][0-9a-fA-F]\\)" file pos)
+    (while (string-match "%\\([[:xdigit:]][[:xdigit:]]\\)" file pos)
       (setq buf (cons (string (string-to-number (match-string 1 file) 16))
 		      (cons (substring file pos (match-beginning 0)) buf))
 	    pos (match-end 0)))
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 47b07479c3c..1edf80d14c8 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -3079,7 +3079,7 @@ read-char-by-name
 	 (char
           (cond
            ((char-from-name input t))
-           ((string-match-p "\\`[0-9a-fA-F]+\\'" input)
+           ((string-match-p "\\`[[:xdigit:]]+\\'" input)
             (ignore-errors (string-to-number input 16)))
            ((string-match-p "\\`#\\([bBoOxX]\\|[0-9]+[rR]\\)[0-9a-zA-Z]+\\'"
                             input)
diff --git a/lisp/net/shr-color.el b/lisp/net/shr-color.el
index 2d6cf68d8ff..af0b99c76f4 100644
--- a/lisp/net/shr-color.el
+++ b/lisp/net/shr-color.el
@@ -235,7 +235,7 @@ shr-color->hexadecimal
     (cond
      ;; Hexadecimal color: #abc or #aabbcc
      ((string-match
-       "\\(#[0-9a-fA-F]\\{3\\}[0-9a-fA-F]\\{3\\}?\\)"
+       "\\(#[[:xdigit:]]\\{3\\}[[:xdigit:]]\\{3\\}?\\)"
        color)
       (match-string 1 color))
      ;; rgb() or rgba() colors
diff --git a/lisp/nxml/rng-cmpct.el b/lisp/nxml/rng-cmpct.el
index d36f9d92f26..60c871990e1 100644
--- a/lisp/nxml/rng-cmpct.el
+++ b/lisp/nxml/rng-cmpct.el
@@ -369,7 +369,7 @@ rng-c-process-escapes
     (and pos
 	 (rng-c-error "Nul character found (binary file?)")))
   (let ((offset 0))
-    (while (re-search-forward "\\\\x+{\\([0-9a-fA-F]+\\)}"
+    (while (re-search-forward "\\\\x+{\\([[:xdigit:]]+\\)}"
 			      (point-max)
 			      t)
       (let* ((ch (decode-char 'ucs (string-to-number (match-string 1) 16))))
diff --git a/lisp/nxml/rng-uri.el b/lisp/nxml/rng-uri.el
index 798475bbc3d..5a67cc7f145 100644
--- a/lisp/nxml/rng-uri.el
+++ b/lisp/nxml/rng-uri.el
@@ -68,7 +68,7 @@ rng-uri-pattern-file-name-replace-match
 
 ;; pattern is either nil or match or replace
 (defun rng-uri-file-name-1 (uri pattern)
-  (unless (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F]{2}\\)*\\'" uri)
+  (unless (string-match "\\`\\(?:[^%]\\|%[[:xdigit:]]{2}\\)*\\'" uri)
     (rng-uri-error "Bad escapes in URI `%s'" uri))
   (setq uri (rng-uri-unescape-multibyte uri))
   (let* ((components
@@ -299,7 +299,7 @@ rng-join-path
        (mapconcat 'identity segments "/")))
 
 (defun rng-uri-unescape-multibyte (str)
-  (replace-regexp-in-string "\\(?:%[89a-fA-F][0-9a-fA-F]\\)+"
+  (replace-regexp-in-string "\\(?:%[89a-fA-F][[:xdigit:]]\\)+"
 			    'rng-multibyte-percent-decode
 			    str))
 
@@ -310,7 +310,7 @@ rng-multibyte-percent-decode
 			 'utf-8))
 
 (defun rng-uri-unescape-unibyte (str)
-  (replace-regexp-in-string "%[0-7][0-9a-fA-F]"
+  (replace-regexp-in-string "%[0-7][[:xdigit:]]"
 			    (lambda (h)
 			      (string-to-number (substring h 1) 16))
 			    str
@@ -318,7 +318,7 @@ rng-uri-unescape-unibyte
 			    t))
 
 (defun rng-uri-unescape-unibyte-match (str)
-  (replace-regexp-in-string "%[0-7][0-9a-fA-F]\\|[^%]"
+  (replace-regexp-in-string "%[0-7][[:xdigit:]]\\|[^%]"
 			    (lambda (match)
 			      (if (string= match "*")
 				  "\\([^/]*\\)"
@@ -333,7 +333,7 @@ rng-uri-unescape-unibyte-match
 
 (defun rng-uri-unescape-unibyte-replace (str next-match-index)
   (replace-regexp-in-string
-   "%[0-7][0-9a-fA-F]\\|[^%]"
+   "%[0-7][[:xdigit:]]\\|[^%]"
    (lambda (match)
      (if (string= match "*")
 	 (let ((n next-match-index))
diff --git a/lisp/nxml/rng-xsd.el b/lisp/nxml/rng-xsd.el
index f308b049f3b..c0c679532ac 100644
--- a/lisp/nxml/rng-xsd.el
+++ b/lisp/nxml/rng-xsd.el
@@ -360,7 +360,7 @@ rng-xsd-base64-binary-length
       n)))
 
 (defun rng-xsd-convert-any-uri (string)
-  (and (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F][0-9a-fA-F]\\)*\\'" string)
+  (and (string-match "\\`\\(?:[^%]\\|%[[:xdigit:]][[:xdigit:]]\\)*\\'" string)
        (string-match "\\`[^#]*\\(?:#[^#]*\\)?\\'" string)
        (string-match "\\`\\(?:[a-zA-Z][-+.A-Za-z0-9]*:.+\\|[^:]*\\(?:[#/?].*\\)?\\)\\'" string)
        string))
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el
index afa33e064f3..3cab5ed9b7b 100644
--- a/lisp/nxml/xmltok.el
+++ b/lisp/nxml/xmltok.el
@@ -413,7 +413,7 @@ xmltok-forward
 		   (xmltok-g decimal-ref-close ";") opt))
 	 (hex-ref
 	  (xmltok+ "x" open
-		   (xmltok-g hex "[0-9a-fA-F]" +)
+		   (xmltok-g hex "[[:xdigit:]]" +)
 		   (xmltok-g hex-ref-close ";") opt
 		   close opt))
 	 (char-ref
diff --git a/lisp/org/org-mobile.el b/lisp/org/org-mobile.el
index 8b4e8953889..e24ee8ed7c5 100644
--- a/lisp/org/org-mobile.el
+++ b/lisp/org/org-mobile.el
@@ -761,7 +761,7 @@ org-mobile-update-checksum-for-capture-file
 	 (buffer (find-file-noselect file)))
     (when buffer
       (with-current-buffer buffer
-	(when (re-search-forward (concat "\\([0-9a-fA-F]\\{30,\\}\\).*?"
+	(when (re-search-forward (concat "\\([[:xdigit:]]\\{30,\\}\\).*?"
 					 (regexp-quote org-mobile-capture-file)
 					 "[ \t]*$") nil t)
 	  (goto-char (match-beginning 1))
diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el
index 77c1e5e2d87..ded9a08d0ee 100644
--- a/lisp/progmodes/ada-mode.el
+++ b/lisp/progmodes/ada-mode.el
@@ -909,7 +909,7 @@ ada-mode-symbol-syntax-table
 			       change))
 	    (replace-match "'A'"))
 	  (goto-char from)
-	  (while (re-search-forward "\\(#[0-9a-fA-F]*#\\)" to t)
+	  (while (re-search-forward "\\(#[[:xdigit:]]*#\\)" to t)
 	    (setq change (cons (list (match-beginning 1)
 				     (length (match-string 1))
 				     (match-string 1))
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 6afcb08a7ca..6feb326cf16 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1415,7 +1415,7 @@ c-after-change-mark-abnormal-strings
 (defconst c-maybe-quoted-number-head
   (concat
    "\\(0\\("
-       "\\([Xx]\\([0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*'?\\)?\\)"
+       "\\([Xx]\\([[:xdigit:]]\\('[[:xdigit:]]\\|[[:xdigit:]]\\)*'?\\)?\\)"
        "\\|"
        "\\([Bb]\\([01]\\('[01]\\|[01]\\)*'?\\)?\\)"
        "\\|"
@@ -1449,7 +1449,7 @@ c-quoted-number-head-before-point
 (defconst c-maybe-quoted-number-tail
   (concat
    "\\("
-       "\\([xX']?[0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)"
+       "\\([xX']?[[:xdigit:]]\\('[[:xdigit:]]\\|[[:xdigit:]]\\)*\\)"
    "\\|"
        "\\([bB']?[01]\\('[01]\\|[01]\\)*\\)"
    "\\|"
@@ -1469,7 +1469,7 @@ c-quoted-number-tail-after-point
 (defconst c-maybe-quoted-number
   (concat
    "\\(0\\("
-       "\\([Xx][0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)"
+       "\\([Xx][[:xdigit:]]\\('[[:xdigit:]]\\|[[:xdigit:]]\\)*\\)"
        "\\|"
        "\\([Bb][01]\\('[01]\\|[01]\\)*\\)"
        "\\|"
@@ -1530,7 +1530,7 @@ c-parse-quotes-before-change
 	(if (>= (point) c-new-BEG)
 	    (setq c-new-BEG (match-beginning 0))))
        ((looking-at
-	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)'")
+	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\)'")
 	(goto-char (match-end 0))
 	(if (> (match-end 0) c-new-BEG)
 	    (setq c-new-BEG (1- (match-beginning 0)))))
@@ -1559,7 +1559,7 @@ c-parse-quotes-before-change
 	(if (> (match-end 0) c-new-END)
 	    (setq c-new-END (match-end 0))))
        ((looking-at
-	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)'")
+	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\)'")
 	(goto-char (match-end 0))
 	(if (> (match-end 0) c-new-END)
 	    (setq c-new-END (match-end 0))))
@@ -1579,8 +1579,8 @@ c-parse-quotes-before-change
      ((c-quoted-number-tail-after-point)
       (setq c-new-END (match-end 0)))
      ((looking-at
-       "\\(\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\|.\\)?\
-\\('\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)\\)*'")
+       "\\(\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\|.\\)?\
+\\('\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\)\\)*'")
       (setq c-new-END (match-end 0))))
 
     ;; Remove the '(1) syntax-table property from any "'"s within (c-new-BEG
@@ -1632,7 +1632,7 @@ c-parse-quotes-after-change
 					      'c-digit-separator t ?')
 	       (goto-char num-end))
 	      ((looking-at
-		"\\([^\\']\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\
+		"\\([^\\']\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\
 \\)'") ; balanced quoted expression.
 	       (goto-char (match-end 0)))
 	      ((looking-at "\\\\'")	; Anomalous construct.
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index ba007d67c0d..c58acf0c2ff 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -3507,18 +3507,18 @@ cperl-look-at-leading-count
 (defsubst cperl-highlight-charclass (endbracket dashface bsface onec-space)
   (let ((l '(1 5 7)) ll lle lll
 	;; 2 groups, the first takes the whole match (include \[trnfabe])
-	(singleChar (concat "\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)")))
+	(singleChar (concat "\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)")))
     (while				; look for unescaped - between non-classes
 	(re-search-forward
 	 ;; On 19.33, certain simplifications lead
 	 ;; to bugs (as in  [^a-z] \\| [trnfabe]  )
 	 (concat	       		; 1: SingleChar (include \[trnfabe])
 	  singleChar
-	  ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
+	  ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
 	  "\\("				; 3: DASH SingleChar (match optionally)
 	    "\\(-\\)"			; 4: DASH
 	    singleChar			; 5: SingleChar
-	    ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
+	    ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
 	  "\\)?"
 	  "\\|"
 	  "\\("				; 7: other escapes
@@ -4420,7 +4420,7 @@ cperl-find-pods-heres
 					    "\\=[0123456789]*" (1- e) 'to-end))
 				      (and (eq qtag ?x)
 					   (re-search-forward
-					    "\\=[0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}"
+					    "\\=[[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}"
 					    (1- e) 'to-end))
 				      (and (memq qtag (append "pPN" nil))
 					   (re-search-forward "\\={[^{}]+}\\|."
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el
index 94d96432614..17c7aebf2a9 100644
--- a/lisp/progmodes/ebnf-dtd.el
+++ b/lisp/progmodes/ebnf-dtd.el
@@ -324,7 +324,7 @@
 ;; /* Character Reference */
 ;;
 ;; CharRef ::= '&#' [0-9]+ ';'
-;;           | '&#x' [0-9a-fA-F]+ ';'
+;;           | '&#x' [[:xdigit:]]+ ';'
 ;;           [WFC: Legal Character]
 ;;
 ;;
@@ -915,9 +915,9 @@ ebnf-dtd-operators
 ;;; EntityRef ::= '&' Name ';'
 ;;;
 ;;; CharRef ::= '&#' [0-9]+ ';'
-;;;           | '&#x' [0-9a-fA-F]+ ';'
+;;;           | '&#x' [[:xdigit:]]+ ';'
 
-;;; "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
+;;; "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
 
 
 (defun ebnf-dtd-attlistdecl ()
@@ -945,7 +945,7 @@ ebnf-dtd-attlistdecl
 	     (setq token (ebnf-dtd-lex)))
 	(or (and (eq token 'string)
 		 (string-match
-		  "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
+		  "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
 		  ebnf-dtd-lex))
 	    (error "Invalid default value in ATTLIST declaration"))))
     (or (eq token 'end-decl)
@@ -986,9 +986,9 @@ ebnf-dtd-namelist
 ;;; EntityRef ::= '&' Name ';'
 ;;;
 ;;; CharRef ::= '&#' [0-9]+ ';'
-;;;           | '&#x' [0-9a-fA-F]+ ';'
+;;;           | '&#x' [[:xdigit:]]+ ';'
 
-;;; "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
+;;; "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
 
 
 (defun ebnf-dtd-entitydecl ()
@@ -1001,7 +1001,7 @@ ebnf-dtd-entitydecl
     (setq token (ebnf-dtd-lex))
     (if (eq token 'string)
 	(if (string-match
-	     "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
+	     "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
 	     ebnf-dtd-lex)
 	    (setq token (ebnf-dtd-lex))
 	  (error "Invalid ENTITY definition"))
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 32b0b7551f9..1b06077005c 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -540,7 +540,7 @@ hif-valid-token-list
 
 (defconst hif-token-regexp
   (concat (regexp-opt (mapcar 'car hif-token-alist))
-          "\\|0x[0-9a-fA-F]+\\.?[0-9a-fA-F]*"
+          "\\|0x[[:xdigit:]]+\\.?[[:xdigit:]]*"
           "\\|[0-9]+\\.?[0-9]*"  ;; decimal/octal
           "\\|\\w+"))
 
@@ -595,7 +595,7 @@ hif-tokenize
                    ;; 1. postfix 'l', 'll', 'ul' and 'ull'
                    ;; 2. floating number formats (like 1.23e4)
                    ;; 3. 098 is interpreted as octal conversion error
-                   (if (string-match "0x\\([0-9a-fA-F]+\\.?[0-9a-fA-F]*\\)"
+                   (if (string-match "0x\\([[:xdigit:]]+\\.?[[:xdigit:]]*\\)"
                                      token)
                        (hif-string-to-number (match-string 1 token) 16)) ;; hex
                    (if (string-match "\\`0[0-9]+\\(\\.[0-9]+\\)?\\'" token)
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 296a7ac3c95..780eff2d8a0 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -1071,7 +1071,7 @@ prolog-syntax-propertize-function
      ;; Supposedly, ISO-Prolog wants \NNN\ for octal and \xNNN\ for hexadecimal
      ;; escape sequences in atoms, so be careful not to let the terminating \
      ;; escape a subsequent quote.
-     ("\\\\[x0-7][0-9a-fA-F]*\\(\\\\\\)" (1 "_"))
+     ("\\\\[x0-7][[:xdigit:]]*\\(\\\\\\)" (1 "_"))
      )))
 
 (defun prolog-mode-variables ()
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 5d5d787945d..b0653bce81c 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -873,7 +873,7 @@ css-syntax-propertize-function
    (css--uri-re (1 "|") (2 "|"))))
 
 (defconst css-escapes-re
-  "\\\\\\(?:[^\000-\037\177]\\|[0-9a-fA-F]+[ \n\t\r\f]?\\)")
+  "\\\\\\(?:[^\000-\037\177]\\|[[:xdigit:]]+[ \n\t\r\f]?\\)")
 (defconst css-nmchar-re (concat "\\(?:[-[:alnum:]]\\|" css-escapes-re "\\)"))
 (defconst css-nmstart-re (concat "\\(?:[[:alpha:]]\\|" css-escapes-re "\\)"))
 (defconst css-ident-re ;; (concat css-nmstart-re css-nmchar-re "*")
@@ -1079,10 +1079,10 @@ css--colors-regexp
    (regexp-opt (mapcar #'car css--color-map) 'symbols)
    "\\|"
    ;; Short hex.  css-color-4 adds alpha.
-   "\\(#[0-9a-fA-F]\\{3,4\\}\\b\\)"
+   "\\(#[[:xdigit:]]\\{3,4\\}\\b\\)"
    "\\|"
    ;; Long hex.  css-color-4 adds alpha.
-   "\\(#\\(?:[0-9a-fA-F][0-9a-fA-F]\\)\\{3,4\\}\\b\\)"
+   "\\(#\\(?:[[:xdigit:]][[:xdigit:]]\\)\\{3,4\\}\\b\\)"
    "\\|"
    ;; RGB.
    "\\(\\_<rgba?(\\)"
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 0c5d5e56a69..602effe9afa 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1293,7 +1293,7 @@ sgml-quote
     (if unquotep
 	;; FIXME: We should unquote other named character references as well.
 	(while (re-search-forward
-		"\\(&\\(amp\\|quot\\|lt\\|gt\\|#\\([0-9]+\\|[xX][0-9a-fA-F]+\\)\\)\\)\\([][<>&;\n\t \"%!'(),/=?]\\|$\\)"
+		"\\(&\\(amp\\|quot\\|lt\\|gt\\|#\\([0-9]+\\|[xX][[:xdigit:]]+\\)\\)\\)\\([][<>&;\n\t \"%!'(),/=?]\\|$\\)"
 		nil t)
           (replace-match
            (string
diff --git a/lisp/version.el b/lisp/version.el
index d13d8c31e80..b9e2e50d1f7 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -120,7 +120,7 @@ emacs-repository-version-git
 	       (with-demoted-errors "Error running git rev-parse: %S"
 		 (call-process "git" nil '(t nil) nil "rev-parse" "HEAD")))
 	   (progn (goto-char (point-min))
-		  (looking-at "[0-9a-fA-F]\\{40\\}"))
+		  (looking-at "[[:xdigit:]]\\{40\\}"))
 	   (match-string 0)))))
 
 (defun emacs-repository-get-version (&optional dir external)
diff --git a/lisp/xml.el b/lisp/xml.el
index 09ec72f792f..833eb8aced2 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -194,13 +194,13 @@ xml-nmtoken-re
 ;; [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*
 (defconst xml-nmtokens-re (concat xml-nmtoken-re "\\(?: " xml-name-re "\\)*"))
 
-;; [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
-(defconst xml-char-ref-re  "\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)")
+;; [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [[:xdigit:]]+ ';'
+(defconst xml-char-ref-re  "\\(?:&#[0-9]+;\\|&#x[[:xdigit:]]+;\\)")
 
 ;; [68] EntityRef   ::= '&' Name ';'
 (defconst xml-entity-ref (concat "&" xml-name-re ";"))
 
-(defconst xml-entity-or-char-ref-re (concat "&\\(?:#\\(x\\)?\\([0-9a-fA-F]+\\)\\|\\("
+(defconst xml-entity-or-char-ref-re (concat "&\\(?:#\\(x\\)?\\([[:xdigit:]]+\\)\\|\\("
 					    xml-name-re "\\)\\);"))
 
 ;; [69] PEReference ::= '%' Name ';'
@@ -889,7 +889,7 @@ xml--entity-replacement-text
 The replacement text is obtained by replacing character
 references and parameter-entity references."
   (let ((ref-re (eval-when-compile
-		  (concat "\\(?:&#\\([0-9]+\\)\\|&#x\\([0-9a-fA-F]+\\)\\|%\\("
+		  (concat "\\(?:&#\\([0-9]+\\)\\|&#x\\([[:xdigit:]]+\\)\\|%\\("
 			  xml-name-re "\\)\\);")))
 	children)
     (while (string-match ref-re string)
diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el
index 5349de055ed..96a604f9824 100644
--- a/test/src/emacs-module-tests.el
+++ b/test/src/emacs-module-tests.el
@@ -60,7 +60,7 @@ mod-test-sum-test
     (should (eq 0
                 (string-match
                  (concat "#<module function "
-                         "\\(at \\(0x\\)?[0-9a-fA-F]+\\( from .*\\)?"
+                         "\\(at \\(0x\\)?[[:xdigit:]]+\\( from .*\\)?"
                          "\\|Fmod_test_sum from .*\\)>")
                  (prin1-to-string (nth 1 descr)))))
     (should (= (nth 2 descr) 3)))
-- 
2.22.0






^ permalink raw reply related	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-11 12:29 ` bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]] Konstantin Kharlamov
@ 2019-06-11 13:03   ` Robert Pluim
  2019-06-11 13:17     ` Konstantin Kharlamov
  2019-06-11 13:32     ` npostavs
  0 siblings, 2 replies; 42+ messages in thread
From: Robert Pluim @ 2019-06-11 13:03 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: 36167

>>>>> On Tue, 11 Jun 2019 15:29:25 +0300, Konstantin Kharlamov <Hi-Angel@yandex.ru> said:

If this is fixing a bug, then please put '(Bug#36167)' somewhere in
the commit message (I normally put it as the last thing in the
preamble, before the detailed list of changes). See 'Commit messages'
in CONTRIBUTE for extensive documentation.

    Konstantin> * etc/schema/od-schema-v1.2-os.rnc: replace
    Konstantin> [0-9a-fA-F] with [[:xdigit:]]
    
This is the org schema file for OpenDocument export, not emacs
lisp. Does that support :xdigit: syntax?

    Konstantin> * lisp/calc/calc-aent.el: replace [0-9a-fA-F] with
    Konstantin> [[:xdigit:]]
    
Normally, you'd mention the containing function in the ChangeLog
entry. Using 'C-x 4 a' (ie 'add-change-log-entry-other-window') with
point on the code youʼre changing does that for you.

    Konstantin> * lisp/calc/calc-ext.el: replace [0-9a-fA-F] with
    Konstantin> [[:xdigit:]]
    
And then on subsequent similar changes you can say 'Likewise.' (whilst
still mentioning the enclosing function)

    Konstantin> * lisp/calc/calc-lang.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/cedet/semantic/java.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/cedet/semantic/lex.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/emulation/cua-rect.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/gnus/gnus-art.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/gnus/mml-sec.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/gnus/nneething.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/international/mule-cmds.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/net/shr-color.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/nxml/rng-cmpct.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/nxml/rng-uri.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/nxml/rng-xsd.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/nxml/xmltok.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/org/org-mobile.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/progmodes/ada-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/progmodes/cc-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/progmodes/cperl-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/progmodes/ebnf-dtd.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/progmodes/hideif.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/progmodes/prolog.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/textmodes/css-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/textmodes/sgml-mode.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/version.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * lisp/xml.el: replace [0-9a-fA-F] with [[:xdigit:]]
    Konstantin> * test/src/emacs-module-tests.el: replace [0-9a-fA-F] with [[:xdigit:]]

Robert





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-11 13:03   ` Robert Pluim
@ 2019-06-11 13:17     ` Konstantin Kharlamov
  2019-06-11 13:30       ` Robert Pluim
  2019-06-11 13:32     ` npostavs
  1 sibling, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-11 13:17 UTC (permalink / raw)
  To: Robert Pluim; +Cc: 36167



On Вт, июн 11, 2019 at 15:03, Robert Pluim <rpluim@gmail.com> 
wrote:
>>>>>>  On Tue, 11 Jun 2019 15:29:25 +0300, Konstantin Kharlamov 
>>>>>> <Hi-Angel@yandex.ru> said:
> 
> If this is fixing a bug, then please put '(Bug#36167)' somewhere in
> the commit message (I normally put it as the last thing in the
> preamble, before the detailed list of changes). See 'Commit messages'
> in CONTRIBUTE for extensive documentation.
> 
>     Konstantin> * etc/schema/od-schema-v1.2-os.rnc: replace
>     Konstantin> [0-9a-fA-F] with [[:xdigit:]]
> 
> This is the org schema file for OpenDocument export, not emacs
> lisp. Does that support :xdigit: syntax?

Oh, okay, thanks, I couldn't figure out what it is because Wikipedia 
says that .rnc is just a variation of XML, and README just says it's 
something to map some xml schemas to documents. So I deemed these 
regexps are too used by ELisp.

Can I test it somehow? Either way, not a big deal, I can just drop that 
one.

>     Konstantin> * lisp/calc/calc-aent.el: replace [0-9a-fA-F] with
>     Konstantin> [[:xdigit:]]
> 
> Normally, you'd mention the containing function in the ChangeLog
> entry. Using 'C-x 4 a' (ie 'add-change-log-entry-other-window') with
> point on the code youʼre changing does that for you.

Ah, thanks. At this point I'll probably ask on emacs-devel about adding 
to prepare-commit-msg a code to pre-format the changes, because clearly 
that's a lot of manual work for something that should be automated.

>     Konstantin> * lisp/calc/calc-ext.el: replace [0-9a-fA-F] with
>     Konstantin> [[:xdigit:]]
> 
> And then on subsequent similar changes you can say 'Likewise.' (whilst
> still mentioning the enclosing function)
> 
>     Konstantin> * lisp/calc/calc-lang.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/cedet/semantic/java.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/cedet/semantic/lex.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/emulation/cua-rect.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/gnus/gnus-art.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/gnus/mml-sec.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/gnus/nneething.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/international/mule-cmds.el: replace 
> [0-9a-fA-F] with [[:xdigit:]]
>     Konstantin> * lisp/net/shr-color.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/nxml/rng-cmpct.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/nxml/rng-uri.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/nxml/rng-xsd.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/nxml/xmltok.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/org/org-mobile.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/progmodes/ada-mode.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/progmodes/cc-mode.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/progmodes/cperl-mode.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/progmodes/ebnf-dtd.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/progmodes/hideif.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/progmodes/prolog.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/textmodes/css-mode.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/textmodes/sgml-mode.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
>     Konstantin> * lisp/version.el: replace [0-9a-fA-F] with 
> [[:xdigit:]]
>     Konstantin> * lisp/xml.el: replace [0-9a-fA-F] with [[:xdigit:]]
>     Konstantin> * test/src/emacs-module-tests.el: replace [0-9a-fA-F] 
> with [[:xdigit:]]
> 
> Robert







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-11 13:17     ` Konstantin Kharlamov
@ 2019-06-11 13:30       ` Robert Pluim
  2019-06-12  0:29         ` Konstantin Kharlamov
  0 siblings, 1 reply; 42+ messages in thread
From: Robert Pluim @ 2019-06-11 13:30 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: 36167

>>>>> On Tue, 11 Jun 2019 16:17:10 +0300, Konstantin Kharlamov <hi-angel@yandex.ru> said:

    Konstantin> * etc/schema/od-schema-v1.2-os.rnc: replace
    Konstantin> [0-9a-fA-F] with [[:xdigit:]]
    >> 
    >> This is the org schema file for OpenDocument export, not emacs
    >> lisp. Does that support :xdigit: syntax?

    Konstantin> Oh, okay, thanks, I couldn't figure out what it is because Wikipedia
    Konstantin> says that .rnc is just a variation of XML, and README just says it's
    Konstantin> something to map some xml schemas to documents. So I deemed these
    Konstantin> regexps are too used by ELisp.

    Konstantin> Can I test it somehow? Either way, not a big deal, I can just drop
    Konstantin> that one.

If I remember correctly, the schema is copied into the resulting
OpenDocument file, so itʼs probably safest not to touch it.

    Konstantin> * lisp/calc/calc-aent.el: replace [0-9a-fA-F] with
    Konstantin> [[:xdigit:]]
    >> 
    >> Normally, you'd mention the containing function in the ChangeLog
    >> entry. Using 'C-x 4 a' (ie 'add-change-log-entry-other-window') with
    >> point on the code youʼre changing does that for you.

    Konstantin> Ah, thanks. At this point I'll probably ask on emacs-devel about
    Konstantin> adding to prepare-commit-msg a code to pre-format the changes, because
    Konstantin> clearly that's a lot of manual work for something that should be
    Konstantin> automated.

Itʼs pretty automated:

- Do M-x vc-dir in your emacs repository to see which files are changed
- Do C-x 4 a to prepare the ChangeLog entries
- Mark the files you want you commit
- Commit from the vc-dir buffer. This will copy the earlier ChangeLog
 entries into the commit message buffer

Unless you meant completely automatically generating the ChangeLog
entries, which is a wholly different can of worms.

Robert





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-11 13:03   ` Robert Pluim
  2019-06-11 13:17     ` Konstantin Kharlamov
@ 2019-06-11 13:32     ` npostavs
  2019-06-11 14:36       ` Eli Zaretskii
  1 sibling, 1 reply; 42+ messages in thread
From: npostavs @ 2019-06-11 13:32 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: 36167

Robert Pluim <rpluim@gmail.com> writes:

> And then on subsequent similar changes you can say 'Likewise.' (whilst
> still mentioning the enclosing function)

There's no need to say 'Likewise', just leave all but the last entry
without a message, see CONTRIBUTE:

    - Preferred form for several entries with the same content:

        * lisp/menu-bar.el (clipboard-yank, clipboard-kill-ring-save)
        (clipboard-kill-region):
        * lisp/eshell/esh-io.el (eshell-virtual-targets)
        (eshell-clipboard-append):
        Replace option gui-select-enable-clipboard with
        select-enable-clipboard; renamed October 2014.  (Bug#25145)

      (Rather than anything involving "ditto" and suchlike.)





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
  2019-06-11 12:03 ` bug#36167: Acknowledgement ([PATCH] Replace manually crafted hex regexes with [[:xdigit:]]) Konstantin Kharlamov
  2019-06-11 12:29 ` bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]] Konstantin Kharlamov
@ 2019-06-11 14:26 ` Paul Eggert
  2019-06-11 14:37   ` Konstantin Kharlamov
  2019-06-11 19:56 ` Andy Moreton
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 42+ messages in thread
From: Paul Eggert @ 2019-06-11 14:26 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: Mattias Engdegård, 36167

If we're going to make such a change we should be systematic about it. 
Unfortunately the currently-proposed patches don't handle examples like 
these:

[A-Fa-f0-9] (in dnd.el)

[0-9a-fA-F.] (in org/org-table.el)

[0-9a-fA-FxXzZ_] (in progmodes/vera-mode.el)

(skip-chars-backward "0-9a-fA-F'") (in progmodes/cc-mode.el)

I will cc this message to Mattias Engdegård, as he has a good scanner 
for regular expressions and patterns. Mattias, the bug-report thread is 
here:

https://debbugs.gnu.org/36167






^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-11 13:32     ` npostavs
@ 2019-06-11 14:36       ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-11 14:36 UTC (permalink / raw)
  To: npostavs; +Cc: 36167, Hi-Angel

> From: npostavs@gmail.com
> Date: Tue, 11 Jun 2019 09:32:23 -0400
> Cc: 36167@debbugs.gnu.org
> 
> Robert Pluim <rpluim@gmail.com> writes:
> 
> > And then on subsequent similar changes you can say 'Likewise.' (whilst
> > still mentioning the enclosing function)
> 
> There's no need to say 'Likewise', just leave all but the last entry
> without a message, see CONTRIBUTE:
> 
>     - Preferred form for several entries with the same content:
> 
>         * lisp/menu-bar.el (clipboard-yank, clipboard-kill-ring-save)
>         (clipboard-kill-region):
>         * lisp/eshell/esh-io.el (eshell-virtual-targets)
>         (eshell-clipboard-append):
>         Replace option gui-select-enable-clipboard with
>         select-enable-clipboard; renamed October 2014.  (Bug#25145)
> 
>       (Rather than anything involving "ditto" and suchlike.)

Yes, the above is the preferred format.  "Likewise", "ditto", etc. are
just useless noise, since you have to go to the first entry anyway to
understand what was done.

Also, please note that typing "C-x 4 a" in several functions without
adding any text after the colon will automatically extend the list of
names in parentheses, so all you have to do is write the description
of the change once after you type "C-x 4 a" in all the functions where
you made the same change.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 14:26 ` bug#36167: [PATCH] Replace manually crafted hex regexes " Paul Eggert
@ 2019-06-11 14:37   ` Konstantin Kharlamov
  2019-06-11 15:37     ` Paul Eggert
  0 siblings, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-11 14:37 UTC (permalink / raw)
  To: Paul Eggert; +Cc: Mattias Engdegård, 36167



On Вт, июн 11, 2019 at 07:26, Paul Eggert <eggert@cs.ucla.edu> 
wrote:
> If we're going to make such a change we should be systematic about 
> it. Unfortunately the currently-proposed patches don't handle 
> examples like these:
> 
> [A-Fa-f0-9] (in dnd.el)
> 
> [0-9a-fA-F.] (in org/org-table.el)
> 
> [0-9a-fA-FxXzZ_] (in progmodes/vera-mode.el)

This one doesn't look like hex. At least :xdigit: sure doesn't match X 
and Z. Although this probably could be replaced with [[[:digit:]]xXzZ] 
(didn't test this one). But I imagine such change may better be a 
separate patch, as it's somewhat different from all the other changes.


> (skip-chars-backward "0-9a-fA-F'") (in progmodes/cc-mode.el)

Same here.

> I will cc this message to Mattias Engdegård, as he has a good 
> scanner for regular expressions and patterns. Mattias, the bug-report 
> thread is here:
> 
> https://debbugs.gnu.org/36167

Either way, thanks, I already figured too that there are some regexes 
in a different order. I'm using ack to find them, this should work:

	ack "\[[-09afAF]{9}\]"

I'll post an updated patch later.







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 14:37   ` Konstantin Kharlamov
@ 2019-06-11 15:37     ` Paul Eggert
  2019-06-11 16:31       ` Mattias Engdegård
  0 siblings, 1 reply; 42+ messages in thread
From: Paul Eggert @ 2019-06-11 15:37 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: Mattias Engdegård, 36167

On 6/11/19 7:37 AM, Konstantin Kharlamov wrote:
> this probably could be replaced with [[[:digit:]]xXzZ] (didn't test 
> this one).

That's right, though it should be [[:xdigit:]xXzZ].

> But I imagine such change may better be a separate patch, as it's 
> somewhat different from all the other changes.

No, it's basically the same thing; we're looking for any place that 
[:xdigit:] would be useful in clarifying patterns intended to max 
hexadecimal digits (and perhaps some other things). Also, the skip-chars 
arguments are also the same thing. Let's do all these.






^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 15:37     ` Paul Eggert
@ 2019-06-11 16:31       ` Mattias Engdegård
  2019-06-11 16:50         ` Drew Adams
  0 siblings, 1 reply; 42+ messages in thread
From: Mattias Engdegård @ 2019-06-11 16:31 UTC (permalink / raw)
  To: Paul Eggert; +Cc: 36167, Konstantin Kharlamov

[-- Attachment #1: Type: text/plain, Size: 1149 bytes --]

11 juni 2019 kl. 17.37 skrev Paul Eggert <eggert@cs.ucla.edu>:
> 
> No, it's basically the same thing; we're looking for any place that [:xdigit:] would be useful in clarifying patterns intended to max hexadecimal digits (and perhaps some other things). Also, the skip-chars arguments are also the same thing. Let's do all these.

Since you asked, I've attached a relint run with xr modified to find parts of character alternatives and skip-sets that could be replaced with [:xdigit:], on Emacs .el files in master; it was quick work.

However, I'm not really convinced that the risks of making mistakes in the translation would outweigh the benefits. We could make an automatic verification, but [0-9A-Fa-f] still has one advantage: the reader, and the writer, know exactly which characters are included without looking it up. For example:

- whether upper case, lower case, or both are accepted
- whether non-ascii digits are accepted (included in [:digit:] on many platforms)

But it's not up to me; should your judgement tell you otherwise, go ahead! I don't mind the use of [:xdigit:] at all, it's just the wholesale replacement.


[-- Attachment #2: xdigit.log --]
[-- Type: application/octet-stream, Size: 47618 bytes --]

; -*- compilation -*-
lisp/calc/calc-aent.el:731:41: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 6)
  "0[xX][0-9a-fA-F]+"
   ......^
lisp/calc/calc-ext.el:3022:24: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 9)
  "^0[xX]\\([0-9a-fA-F]+\\)$"
   ..........^
lisp/calc/calc-ext.el:3028:24: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 6)
  "^\\$\\([0-9a-fA-F]+\\)$"
   ........^
lisp/calc/calc-lang.el:246:14: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 5)
  "\\(\\$[0-9a-fA-F]+\\)\\($\\|[^0-9a-zA-Zα-ωΑ-Ω]\\)"
   .......^
lisp/cedet/semantic/java.el:40:3: In semantic-java-number-regexp: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 203)
  "\\(\\<[0-9]+[.][0-9]+\\([eE][-+]?[0-9]+\\)?[fFdD]?\\>\\|\\<[0-9]+[.][eE][-+]?[0-9]+[fFdD]?\\>\\|\\<[0-9]+[.][fFdD]\\>\\|\\<[0-9]+[.]\\|[.][0-9]+\\([eE][-+]?[0-9]+\\)?[fFdD]?\\>\\|\\<[0-9]+[eE][-+]?[0-9]+[fFdD]?\\>\\|\\<0[xX][0-9a-fA-F]+[lL]?\\>\\|\\<[0-9]+[lLfFdD]?\\>\\)"
   .................................................................................................................................................................................................................................^
lisp/cedet/semantic/lex.el:1301:3: In call to define-lex-simple-regex-analyzer: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 203)
  "\\(\\<[0-9]+[.][0-9]+\\([eE][-+]?[0-9]+\\)?[fFdD]?\\>\\|\\<[0-9]+[.][eE][-+]?[0-9]+[fFdD]?\\>\\|\\<[0-9]+[.][fFdD]\\>\\|\\<[0-9]+[.]\\|[.][0-9]+\\([eE][-+]?[0-9]+\\)?[fFdD]?\\>\\|\\<[0-9]+[eE][-+]?[0-9]+[fFdD]?\\>\\|\\<0[xX][0-9a-fA-F]+[lL]?\\>\\|\\<[0-9]+[lLfFdD]?\\>\\)"
   .................................................................................................................................................................................................................................^
lisp/cedet/semantic/lex.el:1923:28: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 203)
  "\\(\\<[0-9]+[.][0-9]+\\([eE][-+]?[0-9]+\\)?[fFdD]?\\>\\|\\<[0-9]+[.][eE][-+]?[0-9]+[fFdD]?\\>\\|\\<[0-9]+[.][fFdD]\\>\\|\\<[0-9]+[.]\\|[.][0-9]+\\([eE][-+]?[0-9]+\\)?[fFdD]?\\>\\|\\<[0-9]+[eE][-+]?[0-9]+[fFdD]?\\>\\|\\<0[xX][0-9a-fA-F]+[lL]?\\>\\|\\<[0-9]+[lLfFdD]?\\>\\)"
   .................................................................................................................................................................................................................................^
lisp/emulation/cua-rect.el:1130:30: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 5)
  "0x\\([0-9a-fA-F]+\\)"
   ......^
lisp/gnus/mml-sec.el:728:33: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 10)
  "\\(0x\\)?\\([0-9a-fA-F]\\{8,\\}\\)"
   .............^
lisp/gnus/nneething.el:300:26: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 4)
  "%\\([0-9a-fA-F][0-9a-fA-F]\\)"
   .....^
lisp/gnus/nneething.el:300:26: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 15)
  "%\\([0-9a-fA-F][0-9a-fA-F]\\)"
   ................^
lisp/international/mule-cmds.el:3082:29: In call to string-match-p: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 3)
  "\\`[0-9a-fA-F]+\\'"
   ....^
lisp/mail/rfc2231.el:226:33: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 4)
  "%\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   .....^
lisp/mail/rfc2231.el:226:33: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 15)
  "%\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   ................^
lisp/net/shr-color.el:238:8: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 4)
  "\\(#[0-9a-fA-F]\\{3\\}[0-9a-fA-F]\\{3\\}?\\)"
   .....^
lisp/net/shr-color.el:238:8: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 20)
  "\\(#[0-9a-fA-F]\\{3\\}[0-9a-fA-F]\\{3\\}?\\)"
   .......................^
lisp/nxml/nxml-maint.el:37:33: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 6)
  "^ *\\([a-fA-F0-9]\\{2\\}\\)[ \t]+"
   .......^
lisp/nxml/nxml-maint.el:40:37: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 3)
  "\\([a-fA-F0-9]\\{2\\}\\)-\\([a-fA-F0-9]\\{2\\}\\)\\|\\([a-fA-F0-9]\\{2\\}\\)"
   ....^
lisp/nxml/nxml-maint.el:40:37: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 24)
  "\\([a-fA-F0-9]\\{2\\}\\)-\\([a-fA-F0-9]\\{2\\}\\)\\|\\([a-fA-F0-9]\\{2\\}\\)"
   .............................^
lisp/nxml/nxml-maint.el:40:37: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 46)
  "\\([a-fA-F0-9]\\{2\\}\\)-\\([a-fA-F0-9]\\{2\\}\\)\\|\\([a-fA-F0-9]\\{2\\}\\)"
   ........................................................^
lisp/nxml/rng-cmpct.el:372:31: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 8)
  "\\\\x+{\\([0-9a-fA-F]+\\)}"
   ...........^
lisp/nxml/rng-uri.el:71:25: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 14)
  "\\`\\(?:[^%]\\|%[0-9a-fA-F]{2}\\)*\\'"
   .................^
lisp/nxml/rng-uri.el:302:29: In call to replace-regexp-in-string: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 16)
  "\\(?:%[89a-fA-F][0-9a-fA-F]\\)+"
   .................^
lisp/nxml/rng-uri.el:313:29: In call to replace-regexp-in-string: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 7)
  "%[0-7][0-9a-fA-F]"
   .......^
lisp/nxml/rng-uri.el:321:29: In call to replace-regexp-in-string: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 7)
  "%[0-7][0-9a-fA-F]\\|[^%]"
   .......^
lisp/nxml/rng-uri.el:336:4: In call to replace-regexp-in-string: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 7)
  "%[0-7][0-9a-fA-F]\\|[^%]"
   .......^
lisp/nxml/rng-xsd.el:333:22: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 16)
  "\\`[ \r\n\t]*\\(\\(?:[0-9A-Fa-f][0-9A-Fa-f]\\)*\\)[ \r\n\t]*\\'"
   ......................^
lisp/nxml/rng-xsd.el:333:22: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 27)
  "\\`[ \r\n\t]*\\(\\(?:[0-9A-Fa-f][0-9A-Fa-f]\\)*\\)[ \r\n\t]*\\'"
   .................................^
lisp/nxml/rng-xsd.el:363:22: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 14)
  "\\`\\(?:[^%]\\|%[0-9a-fA-F][0-9a-fA-F]\\)*\\'"
   .................^
lisp/nxml/rng-xsd.el:363:22: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 25)
  "\\`\\(?:[^%]\\|%[0-9a-fA-F][0-9a-fA-F]\\)*\\'"
   ............................^
lisp/nxml/xsd-regexp.el:705:31: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 4)
  "^\\([0-9A-Fa-f]*\\);[^;]*;\\([A-Z][a-z]\\);"
   .....^
lisp/org/org-mobile.el:475:29: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 1)
  "[a-fA-F0-9]\\{30,40\\}"
   .^
lisp/org/org-mobile.el:764:34: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 3)
  "\\([0-9a-fA-F]\\{30,\\}\\).*?mobileorg\\.org[ \t]*$"
   ....^
lisp/org/org-table.el:158:3: In org-table-number-regexp: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 60)
  "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%:]*\\|[<>]?[-+]?0[xX][0-9a-fA-F.]+\\|[<>]?[-+]?[0-9]+#[0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$"
   ..............................................................^
lisp/progmodes/ada-mode.el:912:37: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 4)
  "\\(#[0-9a-fA-F]*#\\)"
   .....^
lisp/progmodes/ada-mode.el:1016:17: In call to looking-back: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 10)
  "\\([0-9]+#[0-9a-fA-F_]+\\)"
   ...........^
lisp/progmodes/ada-mode.el:5139:3: In ada-font-lock-keywords: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 10)
  "\\([0-9]+#[0-9a-fA-F_]+#\\)"
   ...........^
lisp/progmodes/cc-mode.el:1416:3: In c-maybe-quoted-number-head: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 14)
  "\\(0\\(\\([Xx]\\([0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*'?\\)?\\)\\|\\([Bb]\\([01]\\('[01]\\|[01]\\)*'?\\)?\\)\\|\\('[0-7]\\|[0-7]\\)*'?\\)\\|[1-9]\\('[0-9]\\|[0-9]\\)*'?\\)"
   ..................^
lisp/progmodes/cc-mode.el:1416:3: In c-maybe-quoted-number-head: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 28)
  "\\(0\\(\\([Xx]\\([0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*'?\\)?\\)\\|\\([Bb]\\([01]\\('[01]\\|[01]\\)*'?\\)?\\)\\|\\('[0-7]\\|[0-7]\\)*'?\\)\\|[1-9]\\('[0-9]\\|[0-9]\\)*'?\\)"
   .................................^
lisp/progmodes/cc-mode.el:1416:3: In c-maybe-quoted-number-head: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 41)
  "\\(0\\(\\([Xx]\\([0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*'?\\)?\\)\\|\\([Bb]\\([01]\\('[01]\\|[01]\\)*'?\\)?\\)\\|\\('[0-7]\\|[0-7]\\)*'?\\)\\|[1-9]\\('[0-9]\\|[0-9]\\)*'?\\)"
   ...............................................^
lisp/progmodes/cc-mode.el:1438:30: In call to skip-chars-backward: 0-9A-Fa-f in skip set could be [:xdigit:] (pos 0)
  "0-9a-fA-F'"
   ^
lisp/progmodes/cc-mode.el:1450:3: In c-maybe-quoted-number-tail: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 11)
  "\\(\\([xX']?[0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)\\|\\([bB']?[01]\\('[01]\\|[01]\\)*\\)\\|\\('?[0-9]\\('[0-9]\\|[0-9]\\)*\\)\\)"
   .............^
lisp/progmodes/cc-mode.el:1450:3: In c-maybe-quoted-number-tail: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 25)
  "\\(\\([xX']?[0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)\\|\\([bB']?[01]\\('[01]\\|[01]\\)*\\)\\|\\('?[0-9]\\('[0-9]\\|[0-9]\\)*\\)\\)"
   ............................^
lisp/progmodes/cc-mode.el:1450:3: In c-maybe-quoted-number-tail: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 38)
  "\\(\\([xX']?[0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)\\|\\([bB']?[01]\\('[01]\\|[01]\\)*\\)\\|\\('?[0-9]\\('[0-9]\\|[0-9]\\)*\\)\\)"
   ..........................................^
lisp/progmodes/cc-mode.el:1470:3: In c-maybe-quoted-number: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 12)
  "\\(0\\(\\([Xx][0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)\\|\\([Bb][01]\\('[01]\\|[01]\\)*\\)\\|\\('[0-7]\\|[0-7]\\)*\\)\\|[1-9]\\('[0-9]\\|[0-9]\\)*\\)"
   ...............^
lisp/progmodes/cc-mode.el:1470:3: In c-maybe-quoted-number: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 26)
  "\\(0\\(\\([Xx][0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)\\|\\([Bb][01]\\('[01]\\|[01]\\)*\\)\\|\\('[0-7]\\|[0-7]\\)*\\)\\|[1-9]\\('[0-9]\\|[0-9]\\)*\\)"
   ..............................^
lisp/progmodes/cc-mode.el:1470:3: In c-maybe-quoted-number: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 39)
  "\\(0\\(\\([Xx][0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)\\|\\([Bb][01]\\('[01]\\|[01]\\)*\\)\\|\\('[0-7]\\|[0-7]\\)*\\)\\|[1-9]\\('[0-9]\\|[0-9]\\)*\\)"
   ............................................^
lisp/progmodes/cc-mode.el:1490:47: In call to skip-chars-forward: 0-9A-Fa-f in skip set could be [:xdigit:] (pos 0)
  "0-9a-fA-F'"
   ^
lisp/progmodes/cc-mode.el:1492:39: In call to skip-chars-backward: 0-9A-Fa-f in skip set could be [:xdigit:] (pos 0)
  "0-9a-fA-F'"
   ^
lisp/progmodes/cc-mode.el:1533:10: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 33)
  "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)'"
   ..........................................^
lisp/progmodes/cc-mode.el:1562:10: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 33)
  "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)'"
   ..........................................^
lisp/progmodes/cc-mode.el:1582:8: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 26)
  "\\(\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\|.\\)?\\('\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)\\)*'"
   .................................^
lisp/progmodes/cc-mode.el:1582:8: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 84)
  "\\(\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\|.\\)?\\('\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)\\)*'"
   .........................................................................................................^
lisp/progmodes/cc-mode.el:1635:17: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 33)
  "\\([^\\']\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)'"
   ..........................................^
lisp/progmodes/cperl-mode.el:4423:45: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 3)
  "\\=[0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}"
   ....^
lisp/progmodes/cperl-mode.el:4423:45: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 14)
  "\\=[0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}"
   ...............^
lisp/progmodes/cperl-mode.el:4423:45: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 31)
  "\\=[0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}"
   ..................................^
lisp/progmodes/ebnf-dtd.el:948:19: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 39)
  "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
   ...........................................^
lisp/progmodes/ebnf-dtd.el:1004:14: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 69)
  "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
   ..........................................................................^
lisp/progmodes/ebnf-ebx.el:661:32: In call to skip-chars-forward: 0-9A-Fa-f in skip set could be [:xdigit:] (pos 0)
  "0-9A-Fa-f"
   ^
lisp/progmodes/hideif.el:542:3: In hif-token-regexp: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 71)
  "\\(?:!=\\|##\\|&&\\|\\.\\.\\.\\|<[<=]\\|==\\|>[=>]\\|||\\|[!#%&(-,/:<-?|~^-]\\)\\|0x[0-9a-fA-F]+\\.?[0-9a-fA-F]*\\|[0-9]+\\.?[0-9]*\\|\\w+"
   .....................................................................................^
lisp/progmodes/hideif.el:542:3: In hif-token-regexp: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 86)
  "\\(?:!=\\|##\\|&&\\|\\.\\.\\.\\|<[<=]\\|==\\|>[=>]\\|||\\|[!#%&(-,/:<-?|~^-]\\)\\|0x[0-9a-fA-F]+\\.?[0-9a-fA-F]*\\|[0-9]+\\.?[0-9]*\\|\\w+"
   .....................................................................................................^
lisp/progmodes/hideif.el:598:38: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 5)
  "0x\\([0-9a-fA-F]+\\.?[0-9a-fA-F]*\\)"
   ......^
lisp/progmodes/hideif.el:598:38: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 20)
  "0x\\([0-9a-fA-F]+\\.?[0-9a-fA-F]*\\)"
   ......................^
lisp/progmodes/vera-mode.el:605:3: In vera-font-lock-keywords: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 16)
  "\\([0-9]*'[bdoh][0-9a-fA-FxXzZ_]+\\)"
   .................^
lisp/progmodes/verilog-mode.el:2760:28: In verilog-delay-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 29)
  "#\\s-*\\(\\([0-9_]+\\('s?[hdxbo][0-9a-fA-F_xz]+\\)?\\)\\|\\(([^()]*)\\)\\|\\(\\sw+\\)\\)"
   .................................^
lisp/progmodes/verilog-mode.el:9180:32: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 25)
  "'[sS]?[hdxboHDXBO]?[ \t]*[0-9a-fA-F_xzXZ?]+"
   ..........................^
lisp/progmodes/verilog-mode.el:9870:21: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 20)
  "^[0-9 \t]+'s?[hdxbo][0-9a-fA-F_xz? \t]*$"
   .....................^
lisp/textmodes/css-mode.el:876:3: In css-escapes-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 16)
  "\\\\\\(?:[^\000-\037\177]\\|[0-9a-fA-F]+[ \n\t\r\f]?\\)"
   .............................^
lisp/textmodes/css-mode.el:877:25: In css-nmchar-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 34)
  "\\(?:[-[:alnum:]]\\|\\\\\\(?:[^\000-\037\177]\\|[0-9a-fA-F]+[ \n\t\r\f]?\\)\\)"
   .................................................^
lisp/textmodes/css-mode.el:878:26: In css-nmstart-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 33)
  "\\(?:[[:alpha:]]\\|\\\\\\(?:[^\000-\037\177]\\|[0-9a-fA-F]+[ \n\t\r\f]?\\)\\)"
   ................................................^
lisp/textmodes/css-mode.el:881:3: In css-ident-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 34)
  "\\(?:[-[:alnum:]]\\|\\\\\\(?:[^\000-\037\177]\\|[0-9a-fA-F]+[ \n\t\r\f]?\\)\\)+"
   .................................................^
lisp/textmodes/css-mode.el:884:23: In css-name-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 34)
  "\\(?:[-[:alnum:]]\\|\\\\\\(?:[^\000-\037\177]\\|[0-9a-fA-F]+[ \n\t\r\f]?\\)\\)+"
   .................................................^
lisp/textmodes/css-mode.el:1077:3: In css--colors-regexp: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 1644)
  "\\_<\\(a\\(?:liceblue\\|ntiquewhite\\|qua\\(?:marine\\)?\\|zure\\)\\|b\\(?:eige\\|isque\\|l\\(?:a\\(?:ck\\|nchedalmond\\)\\|ue\\(?:violet\\)?\\)\\|rown\\|urlywood\\)\\|c\\(?:adetblue\\|h\\(?:\\(?:artreus\\|ocolat\\)e\\)\\|or\\(?:al\\|n\\(?:flowerblue\\|silk\\)\\)\\|\\(?:rimso\\|ya\\)n\\)\\|d\\(?:ark\\(?:blue\\|cyan\\|g\\(?:oldenrod\\|r\\(?:ay\\|e\\(?:en\\|y\\)\\)\\)\\|khaki\\|magenta\\|o\\(?:livegreen\\|r\\(?:ange\\|chid\\)\\)\\|red\\|s\\(?:almon\\|eagreen\\|late\\(?:blue\\|gr\\(?:[ae]y\\)\\)\\)\\|turquoise\\|violet\\)\\|eep\\(?:pink\\|skyblue\\)\\|imgr\\(?:[ae]y\\)\\|odgerblue\\)\\|f\\(?:irebrick\\|loralwhite\\|orestgreen\\|uchsia\\)\\|g\\(?:ainsboro\\|hostwhite\\|old\\(?:enrod\\)?\\|r\\(?:ay\\|e\\(?:en\\(?:yellow\\)?\\|y\\)\\)\\)\\|ho\\(?:neydew\\|tpink\\)\\|i\\(?:ndi\\(?:anred\\|go\\)\\|vory\\)\\|khaki\\|l\\(?:a\\(?:vender\\(?:blush\\)?\\|wngreen\\)\\|emonchiffon\\|i\\(?:ght\\(?:blue\\|c\\(?:oral\\|yan\\)\\|g\\(?:oldenrodyellow\\|r\\(?:ay\\|e\\(?:en\\|y\\)\\)\\)\\|pink\\|s\\(?:almon\\|eagreen\\|kyblue\\|lategr\\(?:[ae]y\\)\\|teelblue\\)\\|yellow\\)\\|me\\(?:green\\)?\\|nen\\)\\)\\|m\\(?:a\\(?:genta\\|roon\\)\\|edium\\(?:aquamarine\\|blue\\|orchid\\|purple\\|s\\(?:eagreen\\|lateblue\\|pringgreen\\)\\|turquoise\\|violetred\\)\\|i\\(?:dnightblue\\|ntcream\\|styrose\\)\\|occasin\\)\\|nav\\(?:ajowhite\\|y\\)\\|o\\(?:l\\(?:dlace\\|ive\\(?:drab\\)?\\)\\|r\\(?:ange\\(?:red\\)?\\|chid\\)\\)\\|p\\(?:a\\(?:le\\(?:g\\(?:oldenrod\\|reen\\)\\|turquoise\\|violetred\\)\\|payawhip\\)\\|e\\(?:achpuff\\|ru\\)\\|ink\\|lum\\|\\(?:owderblu\\|urpl\\)e\\)\\|r\\(?:e\\(?:beccapurple\\|d\\)\\|o\\(?:sybrown\\|yalblue\\)\\)\\|s\\(?:a\\(?:\\(?:ddlebrow\\|lmo\\|ndybrow\\)n\\)\\|ea\\(?:green\\|shell\\)\\|i\\(?:enna\\|lver\\)\\|kyblue\\|late\\(?:blue\\|gr\\(?:[ae]y\\)\\)\\|now\\|pringgreen\\|teelblue\\)\\|t\\(?:an\\|eal\\|histle\\|omato\\|urquoise\\)\\|violet\\|wh\\(?:eat\\|ite\\(?:smoke\\)?\\)\\|yellow\\(?:green\\)?\\)\\_>\\|\\(#[0-9a-fA-F]\\{3,4\\}\\b\\)\\|\\(#\\(?:[0-9a-fA-F][0-9a-fA-F]\\)\\{3,4\\}\\b\\)\\|\\(\\_<rgba?(\\)\\|\\(\\_<hsla?(\\)"
   ...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/textmodes/css-mode.el:1077:3: In css--colors-regexp: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 1675)
  "\\_<\\(a\\(?:liceblue\\|ntiquewhite\\|qua\\(?:marine\\)?\\|zure\\)\\|b\\(?:eige\\|isque\\|l\\(?:a\\(?:ck\\|nchedalmond\\)\\|ue\\(?:violet\\)?\\)\\|rown\\|urlywood\\)\\|c\\(?:adetblue\\|h\\(?:\\(?:artreus\\|ocolat\\)e\\)\\|or\\(?:al\\|n\\(?:flowerblue\\|silk\\)\\)\\|\\(?:rimso\\|ya\\)n\\)\\|d\\(?:ark\\(?:blue\\|cyan\\|g\\(?:oldenrod\\|r\\(?:ay\\|e\\(?:en\\|y\\)\\)\\)\\|khaki\\|magenta\\|o\\(?:livegreen\\|r\\(?:ange\\|chid\\)\\)\\|red\\|s\\(?:almon\\|eagreen\\|late\\(?:blue\\|gr\\(?:[ae]y\\)\\)\\)\\|turquoise\\|violet\\)\\|eep\\(?:pink\\|skyblue\\)\\|imgr\\(?:[ae]y\\)\\|odgerblue\\)\\|f\\(?:irebrick\\|loralwhite\\|orestgreen\\|uchsia\\)\\|g\\(?:ainsboro\\|hostwhite\\|old\\(?:enrod\\)?\\|r\\(?:ay\\|e\\(?:en\\(?:yellow\\)?\\|y\\)\\)\\)\\|ho\\(?:neydew\\|tpink\\)\\|i\\(?:ndi\\(?:anred\\|go\\)\\|vory\\)\\|khaki\\|l\\(?:a\\(?:vender\\(?:blush\\)?\\|wngreen\\)\\|emonchiffon\\|i\\(?:ght\\(?:blue\\|c\\(?:oral\\|yan\\)\\|g\\(?:oldenrodyellow\\|r\\(?:ay\\|e\\(?:en\\|y\\)\\)\\)\\|pink\\|s\\(?:almon\\|eagreen\\|kyblue\\|lategr\\(?:[ae]y\\)\\|teelblue\\)\\|yellow\\)\\|me\\(?:green\\)?\\|nen\\)\\)\\|m\\(?:a\\(?:genta\\|roon\\)\\|edium\\(?:aquamarine\\|blue\\|orchid\\|purple\\|s\\(?:eagreen\\|lateblue\\|pringgreen\\)\\|turquoise\\|violetred\\)\\|i\\(?:dnightblue\\|ntcream\\|styrose\\)\\|occasin\\)\\|nav\\(?:ajowhite\\|y\\)\\|o\\(?:l\\(?:dlace\\|ive\\(?:drab\\)?\\)\\|r\\(?:ange\\(?:red\\)?\\|chid\\)\\)\\|p\\(?:a\\(?:le\\(?:g\\(?:oldenrod\\|reen\\)\\|turquoise\\|violetred\\)\\|payawhip\\)\\|e\\(?:achpuff\\|ru\\)\\|ink\\|lum\\|\\(?:owderblu\\|urpl\\)e\\)\\|r\\(?:e\\(?:beccapurple\\|d\\)\\|o\\(?:sybrown\\|yalblue\\)\\)\\|s\\(?:a\\(?:\\(?:ddlebrow\\|lmo\\|ndybrow\\)n\\)\\|ea\\(?:green\\|shell\\)\\|i\\(?:enna\\|lver\\)\\|kyblue\\|late\\(?:blue\\|gr\\(?:[ae]y\\)\\)\\|now\\|pringgreen\\|teelblue\\)\\|t\\(?:an\\|eal\\|histle\\|omato\\|urquoise\\)\\|violet\\|wh\\(?:eat\\|ite\\(?:smoke\\)?\\)\\|yellow\\(?:green\\)?\\)\\_>\\|\\(#[0-9a-fA-F]\\{3,4\\}\\b\\)\\|\\(#\\(?:[0-9a-fA-F][0-9a-fA-F]\\)\\{3,4\\}\\b\\)\\|\\(\\_<rgba?(\\)\\|\\(\\_<hsla?(\\)"
   .....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/textmodes/css-mode.el:1077:3: In css--colors-regexp: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 1686)
  "\\_<\\(a\\(?:liceblue\\|ntiquewhite\\|qua\\(?:marine\\)?\\|zure\\)\\|b\\(?:eige\\|isque\\|l\\(?:a\\(?:ck\\|nchedalmond\\)\\|ue\\(?:violet\\)?\\)\\|rown\\|urlywood\\)\\|c\\(?:adetblue\\|h\\(?:\\(?:artreus\\|ocolat\\)e\\)\\|or\\(?:al\\|n\\(?:flowerblue\\|silk\\)\\)\\|\\(?:rimso\\|ya\\)n\\)\\|d\\(?:ark\\(?:blue\\|cyan\\|g\\(?:oldenrod\\|r\\(?:ay\\|e\\(?:en\\|y\\)\\)\\)\\|khaki\\|magenta\\|o\\(?:livegreen\\|r\\(?:ange\\|chid\\)\\)\\|red\\|s\\(?:almon\\|eagreen\\|late\\(?:blue\\|gr\\(?:[ae]y\\)\\)\\)\\|turquoise\\|violet\\)\\|eep\\(?:pink\\|skyblue\\)\\|imgr\\(?:[ae]y\\)\\|odgerblue\\)\\|f\\(?:irebrick\\|loralwhite\\|orestgreen\\|uchsia\\)\\|g\\(?:ainsboro\\|hostwhite\\|old\\(?:enrod\\)?\\|r\\(?:ay\\|e\\(?:en\\(?:yellow\\)?\\|y\\)\\)\\)\\|ho\\(?:neydew\\|tpink\\)\\|i\\(?:ndi\\(?:anred\\|go\\)\\|vory\\)\\|khaki\\|l\\(?:a\\(?:vender\\(?:blush\\)?\\|wngreen\\)\\|emonchiffon\\|i\\(?:ght\\(?:blue\\|c\\(?:oral\\|yan\\)\\|g\\(?:oldenrodyellow\\|r\\(?:ay\\|e\\(?:en\\|y\\)\\)\\)\\|pink\\|s\\(?:almon\\|eagreen\\|kyblue\\|lategr\\(?:[ae]y\\)\\|teelblue\\)\\|yellow\\)\\|me\\(?:green\\)?\\|nen\\)\\)\\|m\\(?:a\\(?:genta\\|roon\\)\\|edium\\(?:aquamarine\\|blue\\|orchid\\|purple\\|s\\(?:eagreen\\|lateblue\\|pringgreen\\)\\|turquoise\\|violetred\\)\\|i\\(?:dnightblue\\|ntcream\\|styrose\\)\\|occasin\\)\\|nav\\(?:ajowhite\\|y\\)\\|o\\(?:l\\(?:dlace\\|ive\\(?:drab\\)?\\)\\|r\\(?:ange\\(?:red\\)?\\|chid\\)\\)\\|p\\(?:a\\(?:le\\(?:g\\(?:oldenrod\\|reen\\)\\|turquoise\\|violetred\\)\\|payawhip\\)\\|e\\(?:achpuff\\|ru\\)\\|ink\\|lum\\|\\(?:owderblu\\|urpl\\)e\\)\\|r\\(?:e\\(?:beccapurple\\|d\\)\\|o\\(?:sybrown\\|yalblue\\)\\)\\|s\\(?:a\\(?:\\(?:ddlebrow\\|lmo\\|ndybrow\\)n\\)\\|ea\\(?:green\\|shell\\)\\|i\\(?:enna\\|lver\\)\\|kyblue\\|late\\(?:blue\\|gr\\(?:[ae]y\\)\\)\\|now\\|pringgreen\\|teelblue\\)\\|t\\(?:an\\|eal\\|histle\\|omato\\|urquoise\\)\\|violet\\|wh\\(?:eat\\|ite\\(?:smoke\\)?\\)\\|yellow\\(?:green\\)?\\)\\_>\\|\\(#[0-9a-fA-F]\\{3,4\\}\\b\\)\\|\\(#\\(?:[0-9a-fA-F][0-9a-fA-F]\\)\\{3,4\\}\\b\\)\\|\\(\\_<rgba?(\\)\\|\\(\\_<hsla?(\\)"
   ................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/textmodes/sgml-mode.el:1296:17: In call to re-search-forward: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 40)
  "\\(&\\(amp\\|quot\\|lt\\|gt\\|#\\([0-9]+\\|[xX][0-9a-fA-F]+\\)\\)\\)\\([][<>&;\n\t \"%!'(),/=?]\\|$\\)"
   ................................................^
lisp/dnd.el:141:4: In call to replace-regexp-in-string: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 2)
  "%[A-Fa-f0-9][A-Fa-f0-9]"
   ..^
lisp/dnd.el:141:4: In call to replace-regexp-in-string: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 13)
  "%[A-Fa-f0-9][A-Fa-f0-9]"
   .............^
lisp/epg.el:952:21: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 37)
  "\\`\\([^ ]+\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9A-Fa-f][0-9A-Fa-f]\\) \\([^ ]+\\) \\([0-9]+\\)"
   .............................................^
lisp/epg.el:952:21: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 48)
  "\\`\\([^ ]+\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9A-Fa-f][0-9A-Fa-f]\\) \\([^ ]+\\) \\([0-9]+\\)"
   ........................................................^
lisp/epg.el:976:30: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 80)
  "\\`\\([^ ]+\\) [^ ]+ \\([^ ]+\\) \\([^ ]+\\) \\([0-9]+\\) [^ ]+ \\([0-9]+\\) \\([0-9]+\\) \\([0-9A-Fa-f][0-9A-Fa-f]\\) \\(.*\\)"
   ..............................................................................................^
lisp/epg.el:976:30: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 91)
  "\\`\\([^ ]+\\) [^ ]+ \\([^ ]+\\) \\([^ ]+\\) \\([0-9]+\\) [^ ]+ \\([0-9]+\\) \\([0-9]+\\) \\([0-9A-Fa-f][0-9A-Fa-f]\\) \\(.*\\)"
   .........................................................................................................^
lisp/epg.el:1146:21: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 37)
  "\\`\\([DCS]\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9A-Fa-f][0-9A-Fa-f]\\) \\(.*\\) "
   .............................................^
lisp/epg.el:1146:21: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 48)
  "\\`\\([DCS]\\) \\([0-9]+\\) \\([0-9]+\\) \\([0-9A-Fa-f][0-9A-Fa-f]\\) \\(.*\\) "
   ........................................................^
lisp/epg.el:2024:26: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 13)
  "%\\(\\(%\\)\\|\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)"
   ..................^
lisp/epg.el:2024:26: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 24)
  "%\\(\\(%\\)\\|\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)"
   .............................^
lisp/epg.el:2037:36: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 1)
  "[0-9A-Fa-f][0-9A-Fa-f]"
   .^
lisp/epg.el:2037:36: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 12)
  "[0-9A-Fa-f][0-9A-Fa-f]"
   ............^
lisp/epg.el:2046:26: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 24)
  "\\\\\\(\\([,=+<>#;\\\"]\\)\\|\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)"
   .................................^
lisp/epg.el:2046:26: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 35)
  "\\\\\\(\\([,=+<>#;\\\"]\\)\\|\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)"
   ............................................^
lisp/epg.el:2084:37: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 4)
  "#\\([0-9A-Fa-f]+\\)"
   .....^
lisp/faces.el:2000:35: In call to string-match-p: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 7)
  "^#\\(?:[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$"
   ........^
lisp/faces.el:2000:35: In call to string-match-p: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 18)
  "^#\\(?:[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$"
   ...................^
lisp/faces.el:2000:35: In call to string-match-p: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 29)
  "^#\\(?:[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$"
   ..............................^
lisp/htmlfontify.el:569:25: In hfy-hex-regex: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 1)
  "[0-9A-Fa-f]"
   .^
lisp/htmlfontify.el:572:3: In hfy-triplet-regex: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 3)
  "\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   ....^
lisp/htmlfontify.el:572:3: In hfy-triplet-regex: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 14)
  "\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   ...............^
lisp/htmlfontify.el:572:3: In hfy-triplet-regex: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 29)
  "\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   ................................^
lisp/htmlfontify.el:572:3: In hfy-triplet-regex: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 40)
  "\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   ...........................................^
lisp/htmlfontify.el:572:3: In hfy-triplet-regex: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 55)
  "\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   ............................................................^
lisp/htmlfontify.el:572:3: In hfy-triplet-regex: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 66)
  "\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\([0-9A-Fa-f][0-9A-Fa-f]\\)"
   .......................................................................^
lisp/version.el:123:31: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 1)
  "[0-9a-fA-F]\\{40\\}"
   .^
lisp/xml.el:198:28: In xml-char-ref-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 19)
  "\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)"
   .....................^
lisp/xml.el:203:37: In xml-entity-or-char-ref-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 15)
  "&\\(?:#\\(x\\)?\\([0-9a-fA-F]+\\)\\|\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)\\);"
   ...................^
lisp/xml.el:210:28: In xml-reference-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 63)
  "\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)"
   ...................................................................^
lisp/xml.el:214:28: In xml-att-value-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 79)
  "\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)"
   ........................................................................................^
lisp/xml.el:214:28: In xml-att-value-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 176)
  "\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)"
   ....................................................................................................................................................................................................^
lisp/xml.el:251:31: In xml-default-decl-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 121)
  "\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED\\s-+\\)*\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)"
   ........................................................................................................................................^
lisp/xml.el:251:31: In xml-default-decl-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 218)
  "\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED\\s-+\\)*\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)"
   ....................................................................................................................................................................................................................................................^
lisp/xml.el:256:26: In xml-att-def-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 452)
  "\\(?:\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\s-*\\(?:CDATA\\|\\(?:ID\\|IDREF\\|IDREFS\\|ENTITY\\|ENTITIES\\|NMTOKEN\\|NMTOKENS\\)\\|\\(?:\\(?:NOTATION\\s-+(\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\(?:\\s-*|\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)*\\s-*)\\)\\|\\(?:(\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\(?:\\s-*|\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\)*\\s-+)\\)\\)\\)\\s-*\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED\\s-+\\)*\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)\\)"
   .......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/xml.el:256:26: In xml-att-def-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 549)
  "\\(?:\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\s-*\\(?:CDATA\\|\\(?:ID\\|IDREF\\|IDREFS\\|ENTITY\\|ENTITIES\\|NMTOKEN\\|NMTOKENS\\)\\|\\(?:\\(?:NOTATION\\s-+(\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\(?:\\s-*|\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)*\\s-*)\\)\\|\\(?:(\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\(?:\\s-*|\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\)*\\s-+)\\)\\)\\)\\s-*\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED\\s-+\\)*\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)\\)"
   ...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/xml.el:262:31: In xml-entity-value-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 124)
  "\\(?:\"\\(?:[^%&\"]\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^%&']\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)"
   ........................................................................................................................................^
lisp/xml.el:262:31: In xml-entity-value-re: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 266)
  "\\(?:\"\\(?:[^%&\"]\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^%&']\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)"
   ....................................................................................................................................................................................................................................................................................................^
lisp/xml.el:804:28: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 517)
  "<!ATTLIST[ \t\n\r]*\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)[ \t\n\r]*\\(\\(?:\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\s-*\\(?:CDATA\\|\\(?:ID\\|IDREF\\|IDREFS\\|ENTITY\\|ENTITIES\\|NMTOKEN\\|NMTOKENS\\)\\|\\(?:\\(?:NOTATION\\s-+(\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\(?:\\s-*|\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)*\\s-*)\\)\\|\\(?:(\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\(?:\\s-*|\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\)*\\s-+)\\)\\)\\)\\s-*\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED\\s-+\\)*\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)\\)\\)*[ \t\n\r]*>"
   .................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/xml.el:804:28: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 614)
  "<!ATTLIST[ \t\n\r]*\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)[ \t\n\r]*\\(\\(?:\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\s-*\\(?:CDATA\\|\\(?:ID\\|IDREF\\|IDREFS\\|ENTITY\\|ENTITIES\\|NMTOKEN\\|NMTOKENS\\)\\|\\(?:\\(?:NOTATION\\s-+(\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\(?:\\s-*|\\s-*[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)*\\s-*)\\)\\|\\(?:(\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\(?:\\s-*|\\s-*[[:word:]:_.0-9·̀-ͯ‿⁀-]+\\)*\\s-+)\\)\\)\\)\\s-*\\(?:#REQUIRED\\|#IMPLIED\\|\\(?:#FIXED\\s-+\\)*\\(?:\"\\(?:[^&\"]\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^&']\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)\\)\\)*[ \t\n\r]*>"
   .............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................^
lisp/xml.el:823:28: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 201)
  "<!ENTITY[ \t\n\r]+\\(%[ \t\n\r]+\\)?\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)[ \t\n\r]*\\(\\(?:\"\\(?:[^%&\"]\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^%&']\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)[ \t\n\r]*>"
   ...................................................................................................................................................................................................................................^
lisp/xml.el:823:28: In call to looking-at: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 343)
  "<!ENTITY[ \t\n\r]+\\(%[ \t\n\r]+\\)?\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\)[ \t\n\r]*\\(\\(?:\"\\(?:[^%&\"]\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*\"\\|'\\(?:[^%&']\\|%\\([[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*\\);\\|\\(?:&[[:word:]:_][[:word:]:_.0-9·̀-ͯ‿⁀-]*;\\|\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)\\)\\)*'\\)\\)[ \t\n\r]*>"
   ...............................................................................................................................................................................................................................................................................................................................................................................................^
test/src/emacs-module-tests.el:62:18: In call to string-match: 0-9A-Fa-f in char alternative could be [:xdigit:] (pos 31)
  "#<module function \\(at \\(0x\\)?[0-9a-fA-F]+\\( from .*\\)?\\|Fmod_test_sum from .*\\)>"
   ..................................^

^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 16:31       ` Mattias Engdegård
@ 2019-06-11 16:50         ` Drew Adams
  2019-06-11 17:04           ` Eli Zaretskii
  0 siblings, 1 reply; 42+ messages in thread
From: Drew Adams @ 2019-06-11 16:50 UTC (permalink / raw)
  To: Mattias Engdegård, Paul Eggert; +Cc: 36167, Konstantin Kharlamov

> [0-9A-Fa-f] still has one advantage: the reader, and the
> writer, know exactly which characters are included without looking it up. For
> example:
> 
> - whether upper case, lower case, or both are accepted
> - whether non-ascii digits are accepted (included in [:digit:] on many
> platforms)

+1.  At least the doc for [:digit:] should say exactly
what it matches.  Then it'll be clear for readers and
writers.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 16:50         ` Drew Adams
@ 2019-06-11 17:04           ` Eli Zaretskii
  2019-06-11 17:18             ` Paul Eggert
                               ` (2 more replies)
  0 siblings, 3 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-11 17:04 UTC (permalink / raw)
  To: Drew Adams; +Cc: mattiase, eggert, 36167, hi-angel

> Date: Tue, 11 Jun 2019 09:50:24 -0700 (PDT)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: 36167@debbugs.gnu.org, Konstantin Kharlamov <hi-angel@yandex.ru>
> 
> > [0-9A-Fa-f] still has one advantage: the reader, and the
> > writer, know exactly which characters are included without looking it up. For
> > example:
> > 
> > - whether upper case, lower case, or both are accepted
> > - whether non-ascii digits are accepted (included in [:digit:] on many
> > platforms)
> 
> +1.  At least the doc for [:digit:] should say exactly
> what it matches.  Then it'll be clear for readers and
> writers.

Isn't it clear already?  Here's what the documentation says now:

  ‘[:digit:]’
       This matches ‘0’ through ‘9’.  Thus, ‘[-+[:digit:]]’ matches any
       digit, as well as ‘+’ and ‘-’.

Is anything missing here?  Where did the question about non-ASCII
digits come from, given this text?





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 17:04           ` Eli Zaretskii
@ 2019-06-11 17:18             ` Paul Eggert
  2019-06-11 17:32               ` Eli Zaretskii
  2019-06-11 17:19             ` Drew Adams
  2019-06-11 17:50             ` npostavs
  2 siblings, 1 reply; 42+ messages in thread
From: Paul Eggert @ 2019-06-11 17:18 UTC (permalink / raw)
  To: Eli Zaretskii, Drew Adams; +Cc: mattiase, 36167, hi-angel

On 6/11/19 10:04 AM, Eli Zaretskii wrote:
> Where did the question about non-ASCII
> digits come from, given this text?

It came from POSIX, where [:xdigit:] and [:digit:] might match other 
characters. Similarly, in POSIX [a-f] might match characters other than 
'a', 'b', 'c', 'd', 'e', 'f'. We don't need to worry about this in 
Emacs, since Emacs regexps don't have that particular misfeature of POSIX.

I'm on the fence about replacing 0-9A-Fa-f with [:xdigit:], as I can see 
both sides of the argument. If Mattias is dubious, then perhaps we 
should leave the regexps alone - he's had more experience than the rest 
of us when it comes to scanning for dubious regexp constructions.






^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 17:04           ` Eli Zaretskii
  2019-06-11 17:18             ` Paul Eggert
@ 2019-06-11 17:19             ` Drew Adams
  2019-06-11 17:34               ` Eli Zaretskii
  2019-06-11 17:50             ` npostavs
  2 siblings, 1 reply; 42+ messages in thread
From: Drew Adams @ 2019-06-11 17:19 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: mattiase, eggert, 36167, hi-angel

> > > [0-9A-Fa-f] still has one advantage: the reader, and the
> > > writer, know exactly which characters are included without looking it up.
> For
> > > example:
> > >
> > > - whether upper case, lower case, or both are accepted
> > > - whether non-ascii digits are accepted (included in [:digit:] on many
> > > platforms)
> >
> > +1.  At least the doc for [:digit:] should say exactly
> > what it matches.  Then it'll be clear for readers and
> > writers.
> 
> Isn't it clear already?

I meant [:xdigit:], not [:digit:], in my reply.  Sorry for
the typo.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 17:18             ` Paul Eggert
@ 2019-06-11 17:32               ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-11 17:32 UTC (permalink / raw)
  To: Paul Eggert; +Cc: mattiase, 36167, hi-angel

> Cc: mattiase@acm.org, 36167@debbugs.gnu.org, hi-angel@yandex.ru
> From: Paul Eggert <eggert@cs.ucla.edu>
> Date: Tue, 11 Jun 2019 10:18:44 -0700
> 
> On 6/11/19 10:04 AM, Eli Zaretskii wrote:
> > Where did the question about non-ASCII
> > digits come from, given this text?
> 
> It came from POSIX, where [:xdigit:] and [:digit:] might match other 
> characters.

Yes, but when using Emacs and coding for Emacs, one must read the
Emacs documentation, which clearly says what these do in Emacs.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 17:19             ` Drew Adams
@ 2019-06-11 17:34               ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-11 17:34 UTC (permalink / raw)
  To: Drew Adams; +Cc: mattiase, eggert, 36167, hi-angel

> Date: Tue, 11 Jun 2019 10:19:17 -0700 (PDT)
> From: Drew Adams <drew.adams@oracle.com>
> Cc: mattiase@acm.org, eggert@cs.ucla.edu, 36167@debbugs.gnu.org,
>         hi-angel@yandex.ru
> 
> > Isn't it clear already?
> 
> I meant [:xdigit:], not [:digit:], in my reply.  Sorry for
> the typo.

:xdigit: is also clearly documented:

  ‘[:xdigit:]’
       This matches the hexadecimal digits: ‘0’ through ‘9’, ‘a’ through
       ‘f’ and ‘A’ through ‘F’.






^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 17:04           ` Eli Zaretskii
  2019-06-11 17:18             ` Paul Eggert
  2019-06-11 17:19             ` Drew Adams
@ 2019-06-11 17:50             ` npostavs
  2019-06-11 17:53               ` Eli Zaretskii
  2 siblings, 1 reply; 42+ messages in thread
From: npostavs @ 2019-06-11 17:50 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: mattiase, eggert, 36167, hi-angel

Eli Zaretskii <eliz@gnu.org> writes:

>> > [0-9A-Fa-f] still has one advantage: the reader, and the
>> > writer, know exactly which characters are included without looking it up.
                                                        ^^^^^^^^^^^^^^^^^^^^^
>> > - whether non-ascii digits are accepted

>  ‘[:digit:]’
>       This matches ‘0’ through ‘9’.  Thus, ‘[-+[:digit:]]’ matches any
>       digit, as well as ‘+’ and ‘-’.

> Is anything missing here?  Where did the question about non-ASCII
> digits come from, given this text?

It came from (a hypothetical) user who doesn't remember (or hasn't read)
the documentation.  The advantage of [0-9A-Fa-f] vs [[:xdigit:]] here is
similar to explicit comparison against (point-min) vs (bobp) that you
pointed out in #35967.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 17:50             ` npostavs
@ 2019-06-11 17:53               ` Eli Zaretskii
  2019-06-11 18:14                 ` Eli Zaretskii
  0 siblings, 1 reply; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-11 17:53 UTC (permalink / raw)
  To: npostavs; +Cc: mattiase, eggert, 36167, hi-angel

> From: npostavs@gmail.com
> Cc: Drew Adams <drew.adams@oracle.com>,  mattiase@acm.org,  eggert@cs.ucla.edu,  36167@debbugs.gnu.org,  hi-angel@yandex.ru
> Date: Tue, 11 Jun 2019 13:50:49 -0400
> 
> The advantage of [0-9A-Fa-f] vs [[:xdigit:]] here is similar to
> explicit comparison against (point-min) vs (bobp) that you pointed
> out in #35967.

I'm not against the replacement, I responded to the request to have a
clear documentation of these character classes.  Which we do have, so
I was puzzled why people pretend we don't.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 17:53               ` Eli Zaretskii
@ 2019-06-11 18:14                 ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-11 18:14 UTC (permalink / raw)
  To: npostavs, mattiase, eggert; +Cc: 36167, hi-angel

> From: Eli Zaretskii <eliz@gnu.org>
> Cc: mattiase@acm.org, eggert@cs.ucla.edu, 36167@debbugs.gnu.org,
>  hi-angel@yandex.ru
> 
> I'm not against the replacement, I responded to the request to have a
> clear documentation of these character classes.

Specifically, this:

> > [0-9A-Fa-f] still has one advantage: the reader, and the
> > writer, know exactly which characters are included without looking it up. For
> > example:
> > 
> > - whether upper case, lower case, or both are accepted
> > - whether non-ascii digits are accepted (included in [:digit:] on many
> > platforms)
> 
> +1.  At least the doc for [:digit:] should say exactly
> what it matches.  Then it'll be clear for readers and
> writers.

The last part says "the doc should say" as if the doc doesn't already
say.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
                   ` (2 preceding siblings ...)
  2019-06-11 14:26 ` bug#36167: [PATCH] Replace manually crafted hex regexes " Paul Eggert
@ 2019-06-11 19:56 ` Andy Moreton
  2019-06-12  2:30   ` Eli Zaretskii
  2019-06-12 11:44 ` Andy Moreton
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 42+ messages in thread
From: Andy Moreton @ 2019-06-11 19:56 UTC (permalink / raw)
  To: 36167

On Tue 11 Jun 2019, Eli Zaretskii wrote:

>> Date: Tue, 11 Jun 2019 10:19:17 -0700 (PDT)
>> From: Drew Adams <drew.adams@oracle.com>
>> Cc: mattiase@acm.org, eggert@cs.ucla.edu, 36167@debbugs.gnu.org,
>>         hi-angel@yandex.ru
>> 
>> > Isn't it clear already?
>> 
>> I meant [:xdigit:], not [:digit:], in my reply.  Sorry for
>> the typo.
>
> :xdigit: is also clearly documented:
>
>   ‘[:xdigit:]’
>        This matches the hexadecimal digits: ‘0’ through ‘9’, ‘a’ through
>        ‘f’ and ‘A’ through ‘F’.

The docs for [:digit:] and [:xdigit:] seem clear enough, but there is
one other minor point that could be clarified.

The [:alnum:] and [:alpha:] are based on (unspecified values of) the Unicode
general-category property, but [:digit:] is not. Thus [:alnum:] includes
other numeric characters that are not matched by [:digit:].

    AndyM






^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-11 13:30       ` Robert Pluim
@ 2019-06-12  0:29         ` Konstantin Kharlamov
  2019-06-12  2:42           ` Eli Zaretskii
  2019-06-12  8:21           ` Robert Pluim
  0 siblings, 2 replies; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-12  0:29 UTC (permalink / raw)
  To: Robert Pluim; +Cc: 36167



В Вт, июн 11, 2019 at 15:30, Robert Pluim <rpluim@gmail.com> 
написал:
>>>>>>  On Tue, 11 Jun 2019 16:17:10 +0300, Konstantin Kharlamov 
>>>>>> <hi-angel@yandex.ru> said:
> 
>     Konstantin> * etc/schema/od-schema-v1.2-os.rnc: replace
>     Konstantin> [0-9a-fA-F] with [[:xdigit:]]
>     >>
>     >> This is the org schema file for OpenDocument export, not emacs
>     >> lisp. Does that support :xdigit: syntax?
> 
>     Konstantin> Oh, okay, thanks, I couldn't figure out what it is 
> because Wikipedia
>     Konstantin> says that .rnc is just a variation of XML, and README 
> just says it's
>     Konstantin> something to map some xml schemas to documents. So I 
> deemed these
>     Konstantin> regexps are too used by ELisp.
> 
>     Konstantin> Can I test it somehow? Either way, not a big deal, I 
> can just drop
>     Konstantin> that one.
> 
> If I remember correctly, the schema is copied into the resulting
> OpenDocument file, so itʼs probably safest not to touch it.
> 
>     Konstantin> * lisp/calc/calc-aent.el: replace [0-9a-fA-F] with
>     Konstantin> [[:xdigit:]]
>     >>
>     >> Normally, you'd mention the containing function in the 
> ChangeLog
>     >> entry. Using 'C-x 4 a' (ie 
> 'add-change-log-entry-other-window') with
>     >> point on the code youʼre changing does that for you.
> 
>     Konstantin> Ah, thanks. At this point I'll probably ask on 
> emacs-devel about
>     Konstantin> adding to prepare-commit-msg a code to pre-format the 
> changes, because
>     Konstantin> clearly that's a lot of manual work for something 
> that should be
>     Konstantin> automated.
> 
> Itʼs pretty automated:
> 
> - Do M-x vc-dir in your emacs repository to see which files are 
> changed
> - Do C-x 4 a to prepare the ChangeLog entries
> - Mark the files you want you commit
> - Commit from the vc-dir buffer. This will copy the earlier ChangeLog
>  entries into the commit message buffer

Okay, so, after I do the first 2 points, I end up in a buffer with the 
following content

 > 2019-06-12    <constantine@constantine-N61Ja>
 >
 > 	*  (Stash):

I am not sure what to do next, because I guess this buffer supposed to 
have changed function names? I also tried first marking files in vc-dir 
with "m" key, and then doing the 2nd point, to no avail.

> Unless you meant completely automatically generating the ChangeLog
> entries, which is a wholly different can of worms.

Yeah. It would be very useful, because had you not write that this 
could be automated, I'd never guessed. And even now that you wrote 
about it, I still don't understand how to make it work. I guess I'm not 
an unique contributor in such position.

But I think possibility of such change may be better to discuss in a 
separate thread.







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 19:56 ` Andy Moreton
@ 2019-06-12  2:30   ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-12  2:30 UTC (permalink / raw)
  To: Andy Moreton; +Cc: 36167

> From: Andy Moreton <andrewjmoreton@gmail.com>
> Date: Tue, 11 Jun 2019 20:56:09 +0100
> 
> The docs for [:digit:] and [:xdigit:] seem clear enough, but there is
> one other minor point that could be clarified.
> 
> The [:alnum:] and [:alpha:] are based on (unspecified values of) the Unicode
> general-category property, but [:digit:] is not. Thus [:alnum:] includes
> other numeric characters that are not matched by [:digit:].

It's true that [:alnum:] includes more numerical characters that
[:digit:], but what exactly needs to be clarified here?  Assuming you
mean clarified in the manual, that is.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12  0:29         ` Konstantin Kharlamov
@ 2019-06-12  2:42           ` Eli Zaretskii
  2019-06-12  8:21           ` Robert Pluim
  1 sibling, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-12  2:42 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: rpluim, 36167

> Date: Wed, 12 Jun 2019 03:29:29 +0300
> From: Konstantin Kharlamov <hi-angel@yandex.ru>
> Cc: 36167@debbugs.gnu.org
> 
> > Unless you meant completely automatically generating the ChangeLog
> > entries, which is a wholly different can of worms.
> 
> Yeah. It would be very useful, because had you not write that this 
> could be automated, I'd never guessed.

It's in CONTRIBUTE, btw.

> And even now that you wrote about it, I still don't understand how
> to make it work. I guess I'm not an unique contributor in such
> position.

If you have never used "C-x 4 a", you should indeed learn how to use
it efficiently.

> But I think possibility of such change may be better to discuss in a 
> separate thread.

I very much doubt that log-message creation could be automated.  For
starters, there's a human decision how to group the entries and what
to write as the description of the changes themselves.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12  0:29         ` Konstantin Kharlamov
  2019-06-12  2:42           ` Eli Zaretskii
@ 2019-06-12  8:21           ` Robert Pluim
  2019-06-12 11:19             ` Konstantin Kharlamov
  1 sibling, 1 reply; 42+ messages in thread
From: Robert Pluim @ 2019-06-12  8:21 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: 36167

>>>>> On Wed, 12 Jun 2019 03:29:29 +0300, Konstantin Kharlamov <hi-angel@yandex.ru> said:
    >> - Do M-x vc-dir in your emacs repository to see which files are
    >> changed
    >> - Do C-x 4 a to prepare the ChangeLog entries
    >> - Mark the files you want you commit
    >> - Commit from the vc-dir buffer. This will copy the earlier ChangeLog
    >> entries into the commit message buffer

    Konstantin> Okay, so, after I do the first 2 points, I end up in a buffer with the
    Konstantin> following content

    >> 2019-06-12    <constantine@constantine-N61Ja>
    >> 
    >> *  (Stash):

    Konstantin> I am not sure what to do next, because I guess this buffer supposed to
    Konstantin> have changed function names? I also tried first marking files in
    Konstantin> vc-dir with "m" key, and then doing the 2nd point, to no avail.

Sorry, I forgot a step: you have to visit the file you changed, and
make sure point is near where you made changes (C-x v = will show you
a *vc-diff* buffer containing the changes), and then do C-x 4 a
(possibly multiple times if you changed multiple things).

Robert





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12  8:21           ` Robert Pluim
@ 2019-06-12 11:19             ` Konstantin Kharlamov
  2019-06-12 14:55               ` Eli Zaretskii
  0 siblings, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-12 11:19 UTC (permalink / raw)
  To: Robert Pluim; +Cc: 36167



В Ср, июн 12, 2019 at 10:21, Robert Pluim <rpluim@gmail.com> 
написал:
>>>>>>  On Wed, 12 Jun 2019 03:29:29 +0300, Konstantin Kharlamov 
>>>>>> <hi-angel@yandex.ru> said:
>     >> - Do M-x vc-dir in your emacs repository to see which files are
>     >> changed
>     >> - Do C-x 4 a to prepare the ChangeLog entries
>     >> - Mark the files you want you commit
>     >> - Commit from the vc-dir buffer. This will copy the earlier 
> ChangeLog
>     >> entries into the commit message buffer
> 
>     Konstantin> Okay, so, after I do the first 2 points, I end up in 
> a buffer with the
>     Konstantin> following content
> 
>     >> 2019-06-12    <constantine@constantine-N61Ja>
>     >>
>     >> *  (Stash):
> 
>     Konstantin> I am not sure what to do next, because I guess this 
> buffer supposed to
>     Konstantin> have changed function names? I also tried first 
> marking files in
>     Konstantin> vc-dir with "m" key, and then doing the 2nd point, to 
> no avail.
> 
> Sorry, I forgot a step: you have to visit the file you changed, and
> make sure point is near where you made changes (C-x v = will show you
> a *vc-diff* buffer containing the changes), and then do C-x 4 a
> (possibly multiple times if you changed multiple things).

Oh, that doesn't sound automated, it's a lot of work. I had 28 files in 
the outdated patch, and there will be more, as noted Paul. And in the 
other patch, which I did not send as it turned out to be obsolete 
(which was replacing [0-9] with [[:digit:]]) I had around 4xx changed 
files. No way one could manually go through 400 files, stop by each 
change, and press a hotkey.







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
                   ` (3 preceding siblings ...)
  2019-06-11 19:56 ` Andy Moreton
@ 2019-06-12 11:44 ` Andy Moreton
  2019-06-12 16:07   ` Eli Zaretskii
  2019-06-13  0:18 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes wth [[:xdigit:]] Konstantin Kharlamov
  2019-07-08  9:34 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
  6 siblings, 1 reply; 42+ messages in thread
From: Andy Moreton @ 2019-06-12 11:44 UTC (permalink / raw)
  To: 36167

On Wed 12 Jun 2019, Eli Zaretskii wrote:

>> From: Andy Moreton <andrewjmoreton@gmail.com>
>> Date: Tue, 11 Jun 2019 20:56:09 +0100
>> 
>> The docs for [:digit:] and [:xdigit:] seem clear enough, but there is
>> one other minor point that could be clarified.
>> 
>> The [:alnum:] and [:alpha:] are based on (unspecified values of) the Unicode
>> general-category property, but [:digit:] is not. Thus [:alnum:] includes
>> other numeric characters that are not matched by [:digit:].
>
> It's true that [:alnum:] includes more numerical characters that
> [:digit:], but what exactly needs to be clarified here?  Assuming you
> mean clarified in the manual, that is.

As noted by Paul Eggert, the POSIX behaviour is different. It may be
worth a note in the manual to draw attention to this difference.

    AndyM






^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 11:19             ` Konstantin Kharlamov
@ 2019-06-12 14:55               ` Eli Zaretskii
  2019-06-12 16:39                 ` Konstantin Kharlamov
  0 siblings, 1 reply; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-12 14:55 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: rpluim, 36167

> Date: Wed, 12 Jun 2019 14:19:04 +0300
> From: Konstantin Kharlamov <hi-angel@yandex.ru>
> Cc: 36167@debbugs.gnu.org
> 
> > Sorry, I forgot a step: you have to visit the file you changed, and
> > make sure point is near where you made changes (C-x v = will show you
> > a *vc-diff* buffer containing the changes), and then do C-x 4 a
> > (possibly multiple times if you changed multiple things).
> 
> Oh, that doesn't sound automated, it's a lot of work. I had 28 files in 
> the outdated patch, and there will be more, as noted Paul.

The idea is to type "C-x 4 a" right after making each change, or set
up a keyboard macro that does this for you.

> And in the other patch, which I did not send as it turned out to be
> obsolete (which was replacing [0-9] with [[:digit:]]) I had around
> 4xx changed files. No way one could manually go through 400 files,
> stop by each change, and press a hotkey.

When you change 400 files, no one will expect you to mention each
instance, it's enough to describe the change itself and say "in all
files" or somesuch.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-12 11:44 ` Andy Moreton
@ 2019-06-12 16:07   ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-12 16:07 UTC (permalink / raw)
  To: Andy Moreton; +Cc: 36167

> From: Andy Moreton <andrewjmoreton@gmail.com>
> Date: Wed, 12 Jun 2019 12:44:12 +0100
> 
> >> The [:alnum:] and [:alpha:] are based on (unspecified values of) the Unicode
> >> general-category property, but [:digit:] is not. Thus [:alnum:] includes
> >> other numeric characters that are not matched by [:digit:].
> >
> > It's true that [:alnum:] includes more numerical characters that
> > [:digit:], but what exactly needs to be clarified here?  Assuming you
> > mean clarified in the manual, that is.
> 
> As noted by Paul Eggert, the POSIX behaviour is different. It may be
> worth a note in the manual to draw attention to this difference.

It's strange to say in the manual what we do NOT do.  The current text
says:

  ‘[:digit:]’
       This matches ‘0’ through ‘9’.  Thus, ‘[-+[:digit:]]’ matches any
       digit, as well as ‘+’ and ‘-’.

I believe you suggest to add to this something like "Note that Posix
interpretation of '[:digit:]' is different"?  Given the crystal
clarity of the current text, wouldn't such addition confuse the
reader?

Btw, where's the reference for a different interpretation by Posix?  I
cannot find anything to that effect; even the Unicode UTS18
(http://www.unicode.org/reports/tr18/) says, while describing the
Posix equivalent of the Unicode regexp notations: "Non-decimal numbers
(like Roman numerals) are normally excluded".  What am I missing?





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 14:55               ` Eli Zaretskii
@ 2019-06-12 16:39                 ` Konstantin Kharlamov
  2019-06-12 16:51                   ` Eli Zaretskii
  0 siblings, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-12 16:39 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: rpluim, 36167



В Ср, июн 12, 2019 at 17:55, Eli Zaretskii <eliz@gnu.org> 
написал:
>>  Date: Wed, 12 Jun 2019 14:19:04 +0300
>>  From: Konstantin Kharlamov <hi-angel@yandex.ru>
>>  Cc: 36167@debbugs.gnu.org
>> 
>>  > Sorry, I forgot a step: you have to visit the file you changed, 
>> and
>>  > make sure point is near where you made changes (C-x v = will show 
>> you
>>  > a *vc-diff* buffer containing the changes), and then do C-x 4 a
>>  > (possibly multiple times if you changed multiple things).
>> 
>>  Oh, that doesn't sound automated, it's a lot of work. I had 28 
>> files in
>>  the outdated patch, and there will be more, as noted Paul.
> 
> The idea is to type "C-x 4 a" right after making each change, or set
> up a keyboard macro that does this for you.

This indeed sounds somewhat easier, have I been making each xdigit 
replacement manually.

But I'm a fan of automation, this reduces a "human factor" and is 
faster. So the original xdigit patch was a matter of a single command:

	sp "\[0-9a-fA-F\]" "[[:xdigit:]]"

where "sp" is a "sed" replacement in perl¹. (okay, maybe then also to 
review and "git checkout" irrelevant files, like changelogs)

Having to do all 20 files manually would be a lot of work.

>>  And in the other patch, which I did not send as it turned out to be
>>  obsolete (which was replacing [0-9] with [[:digit:]]) I had around
>>  4xx changed files. No way one could manually go through 400 files,
>>  stop by each change, and press a hotkey.
> 
> When you change 400 files, no one will expect you to mention each
> instance, it's enough to describe the change itself and say "in all
> files" or somesuch.

Can I do that for 20 files?

1: 
https://github.com/Hi-Angel/dotfiles/blob/33eab4cc99ad06dbfa71fa0cf9c2822e5d824f24/.zshrc#L122







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 16:39                 ` Konstantin Kharlamov
@ 2019-06-12 16:51                   ` Eli Zaretskii
  2019-06-12 17:09                     ` Konstantin Kharlamov
  0 siblings, 1 reply; 42+ messages in thread
From: Eli Zaretskii @ 2019-06-12 16:51 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: rpluim, 36167

> Date: Wed, 12 Jun 2019 19:39:26 +0300
> From: Konstantin Kharlamov <hi-angel@yandex.ru>
> Cc: rpluim@gmail.com, 36167@debbugs.gnu.org
> 
> > When you change 400 files, no one will expect you to mention each
> > instance, it's enough to describe the change itself and say "in all
> > files" or somesuch.
> 
> Can I do that for 20 files?

Borderline, IMO.

Can't the command you use output the list of functions or at least
files where it made the changes?  Then you could massage that list
into a log message.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 16:51                   ` Eli Zaretskii
@ 2019-06-12 17:09                     ` Konstantin Kharlamov
  2019-06-12 21:33                       ` Lars Ingebrigtsen
  0 siblings, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-12 17:09 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: rpluim, 36167



В Ср, июн 12, 2019 at 19:51, Eli Zaretskii <eliz@gnu.org> 
написал:
>>  Date: Wed, 12 Jun 2019 19:39:26 +0300
>>  From: Konstantin Kharlamov <hi-angel@yandex.ru>
>>  Cc: rpluim@gmail.com, 36167@debbugs.gnu.org
>> 
>>  > When you change 400 files, no one will expect you to mention each
>>  > instance, it's enough to describe the change itself and say "in 
>> all
>>  > files" or somesuch.
>> 
>>  Can I do that for 20 files?
> 
> Borderline, IMO.
> 
> Can't the command you use output the list of functions or at least
> files where it made the changes?  Then you could massage that list
> into a log message.

Getting the list of files is trivial, I can just copy them from a `git 
diff --name-only` or some such. Getting the list of modified functions 
in code is harder.

Anyway, I'll try making some function later to apply recursively the 
(add-change-log-entry-other-window), that sounds good to have in 
general.







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 17:09                     ` Konstantin Kharlamov
@ 2019-06-12 21:33                       ` Lars Ingebrigtsen
  2019-06-12 21:39                         ` Lars Ingebrigtsen
  2019-06-12 22:17                         ` Andreas Schwab
  0 siblings, 2 replies; 42+ messages in thread
From: Lars Ingebrigtsen @ 2019-06-12 21:33 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: rpluim, 36167

Konstantin Kharlamov <hi-angel@yandex.ru> writes:

> Anyway, I'll try making some function later to apply recursively the
> (add-change-log-entry-other-window), that sounds good to have in
> general.

If it helps, I've got this that emulates hitting `C-x 4 a' on all
changes in a diff-mode (in probably the least efficient way possible)
which is handy if you're doing a lot of semi-automatic changes to many
functions. 

(defun lars-gather-changelog ()
  (interactive)
  (let* ((buf-file-name (funcall add-log-buffer-file-name-function))
	 (buffer-file (if buf-file-name (expand-file-name buf-file-name)))
	 (change-buffer 
	  (add-log-find-changelog-buffer 
	   (expand-file-name (find-change-log nil buffer-file)))))
    (with-current-buffer change-buffer
      (erase-buffer))
    (save-excursion
      (goto-char (point-min))
      (while (re-search-forward "^[-+] " nil t)
	(save-window-excursion
	  (diff-goto-source)
	  (add-change-log-entry-other-window))))
    (switch-to-buffer-other-window change-buffer)))

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 21:33                       ` Lars Ingebrigtsen
@ 2019-06-12 21:39                         ` Lars Ingebrigtsen
  2019-06-12 22:17                         ` Andreas Schwab
  1 sibling, 0 replies; 42+ messages in thread
From: Lars Ingebrigtsen @ 2019-06-12 21:39 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: rpluim, 36167

Lars Ingebrigtsen <larsi@gnus.org> writes:

>       (while (re-search-forward "^[-+] " nil t)

Should be

      (while (re-search-forward "^[-+][ \t]" nil t)

I think.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 21:33                       ` Lars Ingebrigtsen
  2019-06-12 21:39                         ` Lars Ingebrigtsen
@ 2019-06-12 22:17                         ` Andreas Schwab
  2019-06-12 22:22                           ` Lars Ingebrigtsen
  1 sibling, 1 reply; 42+ messages in thread
From: Andreas Schwab @ 2019-06-12 22:17 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: rpluim, 36167, Konstantin Kharlamov

On Jun 12 2019, Lars Ingebrigtsen <larsi@gnus.org> wrote:

> Konstantin Kharlamov <hi-angel@yandex.ru> writes:
>
>> Anyway, I'll try making some function later to apply recursively the
>> (add-change-log-entry-other-window), that sounds good to have in
>> general.
>
> If it helps, I've got this that emulates hitting `C-x 4 a' on all
> changes in a diff-mode

Isn't that what C-x 4 A (diff-add-change-log-entries-other-window) does?

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 7578 EB47 D4E5 4D69 2510  2552 DF73 E780 A9DA AEC1
"And now for something completely different."





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 22:17                         ` Andreas Schwab
@ 2019-06-12 22:22                           ` Lars Ingebrigtsen
  2019-06-12 22:48                             ` Konstantin Kharlamov
  0 siblings, 1 reply; 42+ messages in thread
From: Lars Ingebrigtsen @ 2019-06-12 22:22 UTC (permalink / raw)
  To: Andreas Schwab; +Cc: rpluim, 36167, Konstantin Kharlamov

Andreas Schwab <schwab@linux-m68k.org> writes:

> Isn't that what C-x 4 A (diff-add-change-log-entries-other-window) does?

Indeed it is -- I wasn't aware of that command.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]]
  2019-06-12 22:22                           ` Lars Ingebrigtsen
@ 2019-06-12 22:48                             ` Konstantin Kharlamov
  0 siblings, 0 replies; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-12 22:48 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: rpluim, Andreas Schwab, 36167

This is great, thanks everyone!

В Чт, июн 13, 2019 at 00:22, Lars Ingebrigtsen <larsi@gnus.org> 
написал:
> Andreas Schwab <schwab@linux-m68k.org> writes:
> 
>>  Isn't that what C-x 4 A (diff-add-change-log-entries-other-window) 
>> does?
> 
> Indeed it is -- I wasn't aware of that command.
> 
> --
> (domestic pets only, the antidote for overdose, milk.)
>    bloggy blog: http://lars.ingebrigtsen.no







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH v2] Replace manually crafted hex regexes wth [[:xdigit:]]
  2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
                   ` (4 preceding siblings ...)
  2019-06-12 11:44 ` Andy Moreton
@ 2019-06-13  0:18 ` Konstantin Kharlamov
  2019-07-06  8:04   ` Eli Zaretskii
  2019-07-08  9:34 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
  6 siblings, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-06-13  0:18 UTC (permalink / raw)
  To: 36167

* admin/charsets/mapconv:
* build-aux/gitlog-to-changelog (parse_amend_file) (git_dir_option):
* lisp/progmodes/verilog-mode.el (verilog-delay-re):
    (verilog-type-font-keywords) (verilog-read-always-signals-recurse):
    (verilog-is-number):
* lisp/progmodes/vera-mode.el (vera-font-lock-keywords):
* test/src/emacs-module-tests.el (mod-test-sum-test):
* lisp/xml.el: (xml--entity-replacement-text):
* lisp/version.el (emacs-repository-version-git):
* lisp/textmodes/sgml-mode.el (sgml-quote):
* lisp/textmodes/css-mode.el (css-escapes-re) (css--colors-regexp):
* lisp/progmodes/prolog.el (prolog-syntax-propertize-function):
* lisp/progmodes/hideif.el (hif-token-regexp) (hif-tokenize):
* lisp/progmodes/ebnf-dtd.el: (ebnf-dtd-attlistdecl)
    (ebnf-dtd-entitydecl) (ebnf-dtd-lex)
* lisp/progmodes/ebnf-ebx.el (ebnf-ebx-hex-character):
* lisp/progmodes/ebnf-abn.el (ebnf-abn-character):
* lisp/progmodes/cperl-mode.el (cperl-highlight-charclass) (cperl-find-pods-heres):
* lisp/progmodes/cc-mode.el (c-maybe-quoted-number-head)
    (c-maybe-quoted-number) (c-parse-quotes-before-change)
    (c-parse-quotes-after-change)
    (c-quoted-number-head-before-point) (c-quoted-number-straddling-point)
* lisp/progmodes/ada-mode.el (featurep) (ada-in-numeric-literal-p)
    (ada-font-lock-keywords):
* lisp/org/org-mobile.el (org-mobile-copy-agenda-files)
* lisp/org/org-table.el (org-table-number-regexp):
    (org-mobile-update-checksum-for-capture-file):
* lisp/nxml/xsd-regexp.el (xsdre-gen-categories):
* lisp/nxml/xmltok.el (let*):
* lisp/nxml/rng-xsd.el (rng-xsd-convert-hex-binary) (rng-xsd-convert-any-uri):
* lisp/nxml/rng-uri.el (rng-uri-file-name-1) (rng-uri-unescape-multibyte)
    (rng-uri-unescape-unibyte) (rng-uri-unescape-unibyte-match)
    (rng-uri-unescape-unibyte-replace):
* lisp/nxml/rng-cmpct.el (rng-c-process-escapes):
* lisp/nxml/nxml-maint.el (nxml-insert-target-repertoire-glyph-set):
* lisp/net/shr-color.el (shr-color->hexadecimal):
* lisp/mail/rfc2231.el (rfc2231-decode-encoded-string):
* lisp/international/mule-cmds.el (read-char-by-name):
* lisp/htmlfontify.el (hfy-hex-regex):
* lisp/gnus/nneething.el (nneething-decode-file-name):
* lisp/gnus/mml-sec.el (mml-secure-find-usable-keys):
* lisp/gnus/gnus-art.el (gnus-button-mid-or-mail-heuristic-alist):
* lisp/faces.el (read-color):
* lisp/epg.el (epg--status-ERRSIG) (epg--status-VALIDSIG)
    (epg--status-SIG_CREATED) (epg--decode-percent-escape)
    (epg--decode-hexstring) (epg--decode-quotedstring) (epg-dn-from-string):
* lisp/emulation/cua-rect.el (cua-incr-rectangle):
* lisp/dnd.el (dnd-unescape-uri):
* lisp/cedet/semantic/lex.el (semantic-lex-number-expression):
* lisp/cedet/semantic/java.el (semantic-java-number-regexp):
* lisp/calc/calc-lang.el (pascal):
* lisp/calc/calc-ext.el (math-read-number-fancy):
* lisp/calc/calc-aent.el (math-read-token):
    replace various combinations of [0-9a-fA-F] with [[:xdigit:]] (Bug#36167)
---

v2:
    * add changed function names.
    * more files changed.

I'm changing here 2 non-lisp files:
    1. mapconv — here I change "sed", sed supports xdigit
    2. gitlog-to-changelog: this one is perl. Perl supports xdigit too.

I compared whether I changed all files from Mattias's log, and turned
out I changed even more of them :) A regex I noted that logger didn't catch
was the change in lisp/progmodes/ebnf-abn.el file: the regex was
assigned there through let before being used with (skip-chars-forward)

 admin/charsets/mapconv          |  2 +-
 build-aux/gitlog-to-changelog   |  6 +++---
 lisp/calc/calc-aent.el          |  2 +-
 lisp/calc/calc-ext.el           |  4 ++--
 lisp/calc/calc-lang.el          |  2 +-
 lisp/cedet/semantic/java.el     |  4 ++--
 lisp/cedet/semantic/lex.el      |  4 ++--
 lisp/dnd.el                     |  2 +-
 lisp/emulation/cua-rect.el      |  2 +-
 lisp/epg.el                     | 14 +++++++-------
 lisp/faces.el                   |  2 +-
 lisp/gnus/gnus-art.el           |  8 ++++----
 lisp/gnus/mml-sec.el            |  2 +-
 lisp/gnus/nneething.el          |  2 +-
 lisp/htmlfontify.el             |  2 +-
 lisp/international/mule-cmds.el |  2 +-
 lisp/mail/rfc2231.el            |  2 +-
 lisp/net/shr-color.el           |  2 +-
 lisp/nxml/nxml-maint.el         |  4 ++--
 lisp/nxml/rng-cmpct.el          |  2 +-
 lisp/nxml/rng-uri.el            | 10 +++++-----
 lisp/nxml/rng-xsd.el            |  4 ++--
 lisp/nxml/xmltok.el             |  2 +-
 lisp/nxml/xsd-regexp.el         |  2 +-
 lisp/org/org-mobile.el          |  4 ++--
 lisp/org/org-table.el           |  6 +++---
 lisp/progmodes/ada-mode.el      |  6 +++---
 lisp/progmodes/cc-mode.el       | 22 +++++++++++-----------
 lisp/progmodes/cperl-mode.el    |  8 ++++----
 lisp/progmodes/ebnf-abn.el      |  2 +-
 lisp/progmodes/ebnf-dtd.el      | 16 ++++++++--------
 lisp/progmodes/ebnf-ebx.el      |  2 +-
 lisp/progmodes/hideif.el        |  4 ++--
 lisp/progmodes/prolog.el        |  2 +-
 lisp/progmodes/vera-mode.el     |  2 +-
 lisp/progmodes/verilog-mode.el  |  8 ++++----
 lisp/textmodes/css-mode.el      |  6 +++---
 lisp/textmodes/sgml-mode.el     |  2 +-
 lisp/version.el                 |  2 +-
 lisp/xml.el                     |  8 ++++----
 test/src/emacs-module-tests.el  |  2 +-
 41 files changed, 95 insertions(+), 95 deletions(-)

diff --git a/admin/charsets/mapconv b/admin/charsets/mapconv
index 8e19972f3d..2696b13a52 100755
--- a/admin/charsets/mapconv
+++ b/admin/charsets/mapconv
@@ -118,7 +118,7 @@ AWK=
     # Source format is:
     #   0xXX	0xYYYY
     sed -n -e "${2}p" < $1 \
-	| sed -e 's/\(0x[0-9A-Fa-f]*\)[^0]*\(0x[0-9A-Fa-f]*\).*/\1 \2/' \
+	| sed -e 's/\(0x[[:xdigit:]]*\)[^0]*\(0x[[:xdigit:]]*\).*/\1 \2/' \
 	| sort | ${AWKPROG}
 elif [ "$3" = "UNICODE" ] ; then
     # Source format is:
diff --git a/build-aux/gitlog-to-changelog b/build-aux/gitlog-to-changelog
index deddef2446..ebbcb522e8 100755
--- a/build-aux/gitlog-to-changelog
+++ b/build-aux/gitlog-to-changelog
@@ -174,7 +174,7 @@ sub parse_amend_file($)
 
       if (!$in_code)
         {
-          $line =~ /^([0-9a-fA-F]{40})$/
+          $line =~ /^([[:xdigit:]]{40})$/
             or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
               $fail = 1, next;
           $sha = lc $1;
@@ -288,7 +288,7 @@ sub git_dir_option($)
       my ($sha, $rest) = split ':', $log, 2;
       defined $sha
         or die "$ME:$.: malformed log entry\n";
-      $sha =~ /^[0-9a-fA-F]{40}$/
+      $sha =~ /^[[:xdigit:]]{40}$/
         or die "$ME:$.: invalid SHA1: $sha\n";
 
       my $skipflag = 0;
@@ -376,7 +376,7 @@ sub git_dir_option($)
                   @skipshas = ();
                   next;
               }
-              if ($found && $_ =~ /^([0-9a-fA-F]{7,}) [^ ]/)
+              if ($found && $_ =~ /^([[:xdigit:]]{7,}) [^ ]/)
               {
                   push ( @skipshas, $1 );
               }
diff --git a/lisp/calc/calc-aent.el b/lisp/calc/calc-aent.el
index f16e665fc3..f1ef5c170b 100644
--- a/lisp/calc/calc-aent.el
+++ b/lisp/calc/calc-aent.el
@@ -728,7 +728,7 @@ math-read-token
 						 math-exp-str (1- math-exp-pos))
 				   (1- math-exp-pos))))))
 	     (or (and (memq calc-language calc-lang-c-type-hex)
-		      (eq (string-match "0[xX][0-9a-fA-F]+" math-exp-str
+		      (eq (string-match "0[xX][[:xdigit:]]+" math-exp-str
                                         math-exp-pos)
                           math-exp-pos))
 		 (string-match "_?\\([0-9]+.?0*@ *\\)?\\([0-9]+.?0*' *\\)?\\(0*\\([2-9]\\|1[0-4]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-dA-D.]+[eE][-+_]?[0-9]+\\|0*\\([2-9]\\|[0-2][0-9]\\|3[0-6]\\)\\(#[#]?\\|\\^\\^\\)[0-9a-zA-Zα-ωΑ-Ω:.]+\\|[0-9]+:[0-9:]+\\|[0-9.]+\\([eE][-+_]?[0-9]+\\)?\"?\\)?"
diff --git a/lisp/calc/calc-ext.el b/lisp/calc/calc-ext.el
index 1456fb2857..c7b4c3b091 100644
--- a/lisp/calc/calc-ext.el
+++ b/lisp/calc/calc-ext.el
@@ -3019,13 +3019,13 @@ math-read-number-fancy
 
    ;; C language hexadecimal notation
    ((and (eq calc-language 'c)
-	 (string-match "^0[xX]\\([0-9a-fA-F]+\\)$" s))
+	 (string-match "^0[xX]\\([[:xdigit:]]+\\)$" s))
     (let ((digs (math-match-substring s 1)))
       (math-read-radix digs 16)))
 
    ;; Pascal language hexadecimal notation
    ((and (eq calc-language 'pascal)
-	 (string-match "^\\$\\([0-9a-fA-F]+\\)$" s))
+	 (string-match "^\\$\\([[:xdigit:]]+\\)$" s))
     (let ((digs (math-match-substring s 1)))
       (math-read-radix digs 16)))
 
diff --git a/lisp/calc/calc-lang.el b/lisp/calc/calc-lang.el
index ee107df39c..4a9771d743 100644
--- a/lisp/calc/calc-lang.el
+++ b/lisp/calc/calc-lang.el
@@ -243,7 +243,7 @@ calc-pascal-language
 (put 'pascal 'math-lang-read-symbol
      '((?\$
         (eq (string-match
-             "\\(\\$[0-9a-fA-F]+\\)\\($\\|[^0-9a-zA-Zα-ωΑ-Ω]\\)"
+             "\\(\\$[[:xdigit:]]+\\)\\($\\|[^0-9a-zA-Zα-ωΑ-Ω]\\)"
              math-exp-str math-exp-pos)
             math-exp-pos)
         (setq math-exp-token 'number
diff --git a/lisp/cedet/semantic/java.el b/lisp/cedet/semantic/java.el
index 54cce96545..7f9c93b906 100644
--- a/lisp/cedet/semantic/java.el
+++ b/lisp/cedet/semantic/java.el
@@ -51,7 +51,7 @@ semantic-java-number-regexp
             "\\|"
             "\\<[0-9]+[eE][-+]?[0-9]+[fFdD]?\\>"
             "\\|"
-            "\\<0[xX][0-9a-fA-F]+[lL]?\\>"
+            "\\<0[xX][[:xdigit:]]+[lL]?\\>"
             "\\|"
             "\\<[0-9]+[lLfFdD]?\\>"
             "\\)"
@@ -63,7 +63,7 @@ semantic-java-number-regexp
     [1-9][0-9]*
   ;
 HEX_LITERAL:
-    0[xX][0-9a-fA-F]+
+    0[xX][[:xdigit:]]+
   ;
 OCTAL_LITERAL:
     0[0-7]*
diff --git a/lisp/cedet/semantic/lex.el b/lisp/cedet/semantic/lex.el
index 2690122f06..f1c6b01418 100644
--- a/lisp/cedet/semantic/lex.el
+++ b/lisp/cedet/semantic/lex.el
@@ -596,7 +596,7 @@ semantic-lex-number-expression
             "\\|"
             "\\<[0-9]+[eE][-+]?[0-9]+[fFdD]?\\>"
             "\\|"
-            "\\<0[xX][0-9a-fA-F]+[lL]?\\>"
+            "\\<0[xX][[:xdigit:]]+[lL]?\\>"
             "\\|"
             "\\<[0-9]+[lLfFdD]?\\>"
             "\\)"
@@ -609,7 +609,7 @@ semantic-lex-number-expression
     [1-9][0-9]*
   ;
 HEX_LITERAL:
-    0[xX][0-9a-fA-F]+
+    0[xX][[:xdigit:]]+
   ;
 OCTAL_LITERAL:
     0[0-7]*
diff --git a/lisp/dnd.el b/lisp/dnd.el
index 459a7238dc..973af7e518 100644
--- a/lisp/dnd.el
+++ b/lisp/dnd.el
@@ -138,7 +138,7 @@ dnd-get-local-file-uri
 
 (defsubst dnd-unescape-uri (uri)
   (replace-regexp-in-string
-   "%[A-Fa-f0-9][A-Fa-f0-9]"
+   "%[[:xdigit:]][[:xdigit:]]"
    (lambda (arg)
      (let ((str (make-string 1 0)))
        (aset str 0 (string-to-number (substring arg 1) 16))
diff --git a/lisp/emulation/cua-rect.el b/lisp/emulation/cua-rect.el
index 706634a501..1a19cc2910 100644
--- a/lisp/emulation/cua-rect.el
+++ b/lisp/emulation/cua-rect.el
@@ -1127,7 +1127,7 @@ cua-incr-rectangle
   (cua--rectangle-operation 'keep nil t 1 nil
      (lambda (_s e _l _r)
         (cond
-         ((re-search-forward "0x\\([0-9a-fA-F]+\\)" e t)
+         ((re-search-forward "0x\\([[:xdigit:]]+\\)" e t)
           (let* ((txt (cua--filter-buffer-noprops (match-beginning 1) (match-end 1)))
                  (n (string-to-number txt 16))
                  (fmt (format "0x%%0%dx" (length txt))))
diff --git a/lisp/epg.el b/lisp/epg.el
index 0400716845..1d2f5be818 100644
--- a/lisp/epg.el
+++ b/lisp/epg.el
@@ -950,7 +950,7 @@ 'epg--time-from-seconds
 
 (defun epg--status-ERRSIG (context string)
   (if (string-match "\\`\\([^ ]+\\) \\([0-9]+\\) \\([0-9]+\\) \
-\\([0-9A-Fa-f][0-9A-Fa-f]\\) \\([^ ]+\\) \\([0-9]+\\)"
+\\([[:xdigit:]][[:xdigit:]]\\) \\([^ ]+\\) \\([0-9]+\\)"
 		    string)
       (let ((signature (epg-make-signature 'error)))
 	(epg-context-set-result-for
@@ -974,7 +974,7 @@ epg--status-VALIDSIG
     (when (and signature
 	       (eq (epg-signature-status signature) 'good)
 	       (string-match "\\`\\([^ ]+\\) [^ ]+ \\([^ ]+\\) \\([^ ]+\\) \
-\\([0-9]+\\) [^ ]+ \\([0-9]+\\) \\([0-9]+\\) \\([0-9A-Fa-f][0-9A-Fa-f]\\) \
+\\([0-9]+\\) [^ ]+ \\([0-9]+\\) \\([0-9]+\\) \\([[:xdigit:]][[:xdigit:]]\\) \
 \\(.*\\)"
 			   string))
       (setf (epg-signature-fingerprint signature)
@@ -1144,7 +1144,7 @@ epg--status-DELETE_PROBLEM
 
 (defun epg--status-SIG_CREATED (context string)
   (if (string-match "\\`\\([DCS]\\) \\([0-9]+\\) \\([0-9]+\\) \
-\\([0-9A-Fa-f][0-9A-Fa-f]\\) \\(.*\\) " string)
+\\([[:xdigit:]][[:xdigit:]]\\) \\(.*\\) " string)
       (epg-context-set-result-for
        context 'sign
        (cons (epg-make-new-signature
@@ -2021,7 +2021,7 @@ epg-edit-key
 
 (defun epg--decode-percent-escape (string)
   (let ((index 0))
-    (while (string-match "%\\(\\(%\\)\\|\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)"
+    (while (string-match "%\\(\\(%\\)\\|\\([[:xdigit:]][[:xdigit:]]\\)\\)"
 			 string index)
       (if (match-beginning 2)
 	  (setq string (replace-match "%" t t string)
@@ -2034,7 +2034,7 @@ epg--decode-percent-escape
 
 (defun epg--decode-hexstring (string)
   (let ((index 0))
-    (while (eq index (string-match "[0-9A-Fa-f][0-9A-Fa-f]" string index))
+    (while (eq index (string-match "[[:xdigit:]][[:xdigit:]]" string index))
       (setq string (replace-match (string (string-to-number
 					   (match-string 0 string) 16))
 				  t t string)
@@ -2044,7 +2044,7 @@ epg--decode-hexstring
 (defun epg--decode-quotedstring (string)
   (let ((index 0))
     (while (string-match "\\\\\\(\\([,=+<>#;\\\"]\\)\\|\
-\\([0-9A-Fa-f][0-9A-Fa-f]\\)\\)"
+\\([[:xdigit:]][[:xdigit:]]\\)\\)"
 			 string index)
       (if (match-beginning 2)
 	  (setq string (replace-match "\\2" t nil string)
@@ -2081,7 +2081,7 @@ epg-dn-from-string
 		     string index))
 	  (setq index (match-end 0)
 		value (epg--decode-quotedstring (match-string 0 string)))
-	(if (eq index (string-match "#\\([0-9A-Fa-f]+\\)" string index))
+	(if (eq index (string-match "#\\([[:xdigit:]]+\\)" string index))
 	    (setq index (match-end 0)
 		  value (epg--decode-hexstring (match-string 1 string)))
 	  (if (eq index (string-match "\"\\([^\\\"]\\|\\\\.\\)*\""
diff --git a/lisp/faces.el b/lisp/faces.el
index 89b598669c..f9e8c6c58b 100644
--- a/lisp/faces.el
+++ b/lisp/faces.el
@@ -1997,7 +1997,7 @@ read-color
       (when (and convert-to-RGB
 		 (not (string-equal color "")))
 	(let ((components (x-color-values color)))
-	  (unless (string-match-p "^#\\(?:[a-fA-F0-9][a-fA-F0-9][a-fA-F0-9]\\)+$" color)
+	  (unless (string-match-p "^#\\(?:[[:xdigit:]][[:xdigit:]][[:xdigit:]]\\)+$" color)
 	    (setq color (format "#%04X%04X%04X"
 				(logand 65535 (nth 0 components))
 				(logand 65535 (nth 1 components))
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index d826faca5b..11782998f5 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -7426,10 +7426,10 @@ gnus-button-mid-or-mail-heuristic-alist
     (-2.0  . "^[0-9]")
     (-1.0  . "^[0-9][0-9]")
     ;;
-    ;; -3.0 /^[0-9][0-9a-fA-F]{2,2}/;
-    (-3.0  . "^[0-9][0-9a-fA-F][0-9a-fA-F][^0-9a-fA-F]")
-    ;; -5.0 /^[0-9][0-9a-fA-F]{3,3}/;
-    (-5.0  . "^[0-9][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][^0-9a-fA-F]")
+    ;; -3.0 /^[0-9][[:xdigit:]]{2,2}/;
+    (-3.0  . "^[0-9][[:xdigit:]][[:xdigit:]][^[:xdigit:]]")
+    ;; -5.0 /^[0-9][[:xdigit:]]{3,3}/;
+    (-5.0  . "^[0-9][[:xdigit:]][[:xdigit:]][[:xdigit:]][^[:xdigit:]]")
     ;;
     (-3.0  .  "[0-9][0-9][0-9][0-9][0-9][^0-9].*@") ;; "[0-9]{5,}.*\@"
     (-3.0  .  "[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][^0-9].*@")
diff --git a/lisp/gnus/mml-sec.el b/lisp/gnus/mml-sec.el
index db7489fbf1..02a27b367c 100644
--- a/lisp/gnus/mml-sec.el
+++ b/lisp/gnus/mml-sec.el
@@ -725,7 +725,7 @@ mml-secure-find-usable-keys
 is expired or revoked.
 If optional JUSTONE is not nil, return the first key instead of a list."
   (let* ((keys (epg-list-keys context name))
-	 (iskeyid (string-match "\\(0x\\)?\\([0-9a-fA-F]\\{8,\\}\\)" name))
+	 (iskeyid (string-match "\\(0x\\)?\\([[:xdigit:]]\\{8,\\}\\)" name))
 	 (fingerprint (match-string 2 name))
 	 result)
     (when (and iskeyid (>= (length keys) 2))
diff --git a/lisp/gnus/nneething.el b/lisp/gnus/nneething.el
index f64007aaf7..c3d511bc6e 100644
--- a/lisp/gnus/nneething.el
+++ b/lisp/gnus/nneething.el
@@ -297,7 +297,7 @@ nneething-encode-file-name
 (defun nneething-decode-file-name (file &optional coding-system)
   "Decode the name of the FILE is encoded in CODING-SYSTEM."
   (let ((pos 0) buf)
-    (while (string-match "%\\([0-9a-fA-F][0-9a-fA-F]\\)" file pos)
+    (while (string-match "%\\([[:xdigit:]][[:xdigit:]]\\)" file pos)
       (setq buf (cons (string (string-to-number (match-string 1 file) 16))
 		      (cons (substring file pos (match-beginning 0)) buf))
 	    pos (match-end 0)))
diff --git a/lisp/htmlfontify.el b/lisp/htmlfontify.el
index f37a76cd7b..0466e7c024 100644
--- a/lisp/htmlfontify.el
+++ b/lisp/htmlfontify.el
@@ -566,7 +566,7 @@ hfy-facemap-assoc
 (defvar hfy-tmpfont-stack nil
   "An alist of derived fonts resulting from overlays.")
 
-(defconst hfy-hex-regex "[0-9A-Fa-f]")
+(defconst hfy-hex-regex "[[:xdigit:]]")
 
 (defconst hfy-triplet-regex
   (concat
diff --git a/lisp/international/mule-cmds.el b/lisp/international/mule-cmds.el
index 47b07479c3..1edf80d14c 100644
--- a/lisp/international/mule-cmds.el
+++ b/lisp/international/mule-cmds.el
@@ -3079,7 +3079,7 @@ read-char-by-name
 	 (char
           (cond
            ((char-from-name input t))
-           ((string-match-p "\\`[0-9a-fA-F]+\\'" input)
+           ((string-match-p "\\`[[:xdigit:]]+\\'" input)
             (ignore-errors (string-to-number input 16)))
            ((string-match-p "\\`#\\([bBoOxX]\\|[0-9]+[rR]\\)[0-9a-zA-Z]+\\'"
                             input)
diff --git a/lisp/mail/rfc2231.el b/lisp/mail/rfc2231.el
index 0a0983c25f..6ddb2964e5 100644
--- a/lisp/mail/rfc2231.el
+++ b/lisp/mail/rfc2231.el
@@ -223,7 +223,7 @@ rfc2231-decode-encoded-string
     (mm-with-unibyte-buffer
       (insert value)
       (goto-char (point-min))
-      (while (re-search-forward "%\\([0-9A-Fa-f][0-9A-Fa-f]\\)" nil t)
+      (while (re-search-forward "%\\([[:xdigit:]][[:xdigit:]]\\)" nil t)
 	(insert
 	 (prog1
 	     (string-to-number (match-string 1) 16)
diff --git a/lisp/net/shr-color.el b/lisp/net/shr-color.el
index 2d6cf68d8f..af0b99c76f 100644
--- a/lisp/net/shr-color.el
+++ b/lisp/net/shr-color.el
@@ -235,7 +235,7 @@ shr-color->hexadecimal
     (cond
      ;; Hexadecimal color: #abc or #aabbcc
      ((string-match
-       "\\(#[0-9a-fA-F]\\{3\\}[0-9a-fA-F]\\{3\\}?\\)"
+       "\\(#[[:xdigit:]]\\{3\\}[[:xdigit:]]\\{3\\}?\\)"
        color)
       (match-string 1 color))
      ;; rgb() or rgba() colors
diff --git a/lisp/nxml/nxml-maint.el b/lisp/nxml/nxml-maint.el
index 2956efb736..c524567a5b 100644
--- a/lisp/nxml/nxml-maint.el
+++ b/lisp/nxml/nxml-maint.el
@@ -34,10 +34,10 @@ nxml-insert-target-repertoire-glyph-set
   (let (lst head)
     (with-current-buffer (find-file-noselect file)
       (goto-char (point-min))
-      (while (re-search-forward "^ *\\([a-fA-F0-9]\\{2\\}\\)[ \t]+" nil t)
+      (while (re-search-forward "^ *\\([[:xdigit:]]\\{2\\}\\)[ \t]+" nil t)
 	(let ((row (match-string 1))
 	      (eol (line-end-position)))
-	  (while (re-search-forward "\\([a-fA-F0-9]\\{2\\}\\)-\\([a-fA-F0-9]\\{2\\}\\)\\|\\([a-fA-F0-9]\\{2\\}\\)" eol t)
+	  (while (re-search-forward "\\([[:xdigit:]]\\{2\\}\\)-\\([[:xdigit:]]\\{2\\}\\)\\|\\([[:xdigit:]]\\{2\\}\\)" eol t)
 	    (setq lst
 		  (cons (if (match-beginning 3)
 			    (concat "#x" row (match-string 3))
diff --git a/lisp/nxml/rng-cmpct.el b/lisp/nxml/rng-cmpct.el
index d36f9d92f2..60c871990e 100644
--- a/lisp/nxml/rng-cmpct.el
+++ b/lisp/nxml/rng-cmpct.el
@@ -369,7 +369,7 @@ rng-c-process-escapes
     (and pos
 	 (rng-c-error "Nul character found (binary file?)")))
   (let ((offset 0))
-    (while (re-search-forward "\\\\x+{\\([0-9a-fA-F]+\\)}"
+    (while (re-search-forward "\\\\x+{\\([[:xdigit:]]+\\)}"
 			      (point-max)
 			      t)
       (let* ((ch (decode-char 'ucs (string-to-number (match-string 1) 16))))
diff --git a/lisp/nxml/rng-uri.el b/lisp/nxml/rng-uri.el
index 798475bbc3..5a67cc7f14 100644
--- a/lisp/nxml/rng-uri.el
+++ b/lisp/nxml/rng-uri.el
@@ -68,7 +68,7 @@ rng-uri-pattern-file-name-replace-match
 
 ;; pattern is either nil or match or replace
 (defun rng-uri-file-name-1 (uri pattern)
-  (unless (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F]{2}\\)*\\'" uri)
+  (unless (string-match "\\`\\(?:[^%]\\|%[[:xdigit:]]{2}\\)*\\'" uri)
     (rng-uri-error "Bad escapes in URI `%s'" uri))
   (setq uri (rng-uri-unescape-multibyte uri))
   (let* ((components
@@ -299,7 +299,7 @@ rng-join-path
        (mapconcat 'identity segments "/")))
 
 (defun rng-uri-unescape-multibyte (str)
-  (replace-regexp-in-string "\\(?:%[89a-fA-F][0-9a-fA-F]\\)+"
+  (replace-regexp-in-string "\\(?:%[89a-fA-F][[:xdigit:]]\\)+"
 			    'rng-multibyte-percent-decode
 			    str))
 
@@ -310,7 +310,7 @@ rng-multibyte-percent-decode
 			 'utf-8))
 
 (defun rng-uri-unescape-unibyte (str)
-  (replace-regexp-in-string "%[0-7][0-9a-fA-F]"
+  (replace-regexp-in-string "%[0-7][[:xdigit:]]"
 			    (lambda (h)
 			      (string-to-number (substring h 1) 16))
 			    str
@@ -318,7 +318,7 @@ rng-uri-unescape-unibyte
 			    t))
 
 (defun rng-uri-unescape-unibyte-match (str)
-  (replace-regexp-in-string "%[0-7][0-9a-fA-F]\\|[^%]"
+  (replace-regexp-in-string "%[0-7][[:xdigit:]]\\|[^%]"
 			    (lambda (match)
 			      (if (string= match "*")
 				  "\\([^/]*\\)"
@@ -333,7 +333,7 @@ rng-uri-unescape-unibyte-match
 
 (defun rng-uri-unescape-unibyte-replace (str next-match-index)
   (replace-regexp-in-string
-   "%[0-7][0-9a-fA-F]\\|[^%]"
+   "%[0-7][[:xdigit:]]\\|[^%]"
    (lambda (match)
      (if (string= match "*")
 	 (let ((n next-match-index))
diff --git a/lisp/nxml/rng-xsd.el b/lisp/nxml/rng-xsd.el
index f308b049f3..582d08e149 100644
--- a/lisp/nxml/rng-xsd.el
+++ b/lisp/nxml/rng-xsd.el
@@ -330,7 +330,7 @@ rng-xsd-convert-token
        (match-string 1 string)))
 
 (defun rng-xsd-convert-hex-binary (string)
-  (and (string-match "\\`[ \r\n\t]*\\(\\(?:[0-9A-Fa-f][0-9A-Fa-f]\\)*\\)[ \r\n\t]*\\'"
+  (and (string-match "\\`[ \r\n\t]*\\(\\(?:[[:xdigit:]][[:xdigit:]]\\)*\\)[ \r\n\t]*\\'"
 		     string)
        (downcase (match-string 1 string))))
 
@@ -360,7 +360,7 @@ rng-xsd-base64-binary-length
       n)))
 
 (defun rng-xsd-convert-any-uri (string)
-  (and (string-match "\\`\\(?:[^%]\\|%[0-9a-fA-F][0-9a-fA-F]\\)*\\'" string)
+  (and (string-match "\\`\\(?:[^%]\\|%[[:xdigit:]][[:xdigit:]]\\)*\\'" string)
        (string-match "\\`[^#]*\\(?:#[^#]*\\)?\\'" string)
        (string-match "\\`\\(?:[a-zA-Z][-+.A-Za-z0-9]*:.+\\|[^:]*\\(?:[#/?].*\\)?\\)\\'" string)
        string))
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el
index afa33e064f..3cab5ed9b7 100644
--- a/lisp/nxml/xmltok.el
+++ b/lisp/nxml/xmltok.el
@@ -413,7 +413,7 @@ xmltok-forward
 		   (xmltok-g decimal-ref-close ";") opt))
 	 (hex-ref
 	  (xmltok+ "x" open
-		   (xmltok-g hex "[0-9a-fA-F]" +)
+		   (xmltok-g hex "[[:xdigit:]]" +)
 		   (xmltok-g hex-ref-close ";") opt
 		   close opt))
 	 (char-ref
diff --git a/lisp/nxml/xsd-regexp.el b/lisp/nxml/xsd-regexp.el
index 7ae169c19c..c002e6fd9f 100644
--- a/lisp/nxml/xsd-regexp.el
+++ b/lisp/nxml/xsd-regexp.el
@@ -702,7 +702,7 @@ xsdre-gen-categories
   (with-current-buffer (find-file-noselect file)
     (goto-char (point-min))
     (mapc (lambda (x) (put x 'xsdre-ranges nil)) xsdre-gen-categories)
-    (while (re-search-forward "^\\([0-9A-Fa-f]*\\);[^;]*;\\([A-Z][a-z]\\);"
+    (while (re-search-forward "^\\([[:xdigit:]]*\\);[^;]*;\\([A-Z][a-z]\\);"
 			      nil
 			      t)
       (let* ((sym (intern (match-string-no-properties 2)))
diff --git a/lisp/org/org-mobile.el b/lisp/org/org-mobile.el
index 8b4e895388..a1552606eb 100644
--- a/lisp/org/org-mobile.el
+++ b/lisp/org/org-mobile.el
@@ -472,7 +472,7 @@ org-mobile-copy-agenda-files
 		     (concat (shell-quote-argument org-mobile-checksum-binary)
 			     " "
 			     (shell-quote-argument (expand-file-name file)))))
-	(when (string-match "[a-fA-F0-9]\\{30,40\\}" check)
+	(when (string-match "[[:xdigit:]]\\{30,40\\}" check)
 	  (push (cons link-name (match-string 0 check))
 		org-mobile-checksum-files))))
 
@@ -761,7 +761,7 @@ org-mobile-update-checksum-for-capture-file
 	 (buffer (find-file-noselect file)))
     (when buffer
       (with-current-buffer buffer
-	(when (re-search-forward (concat "\\([0-9a-fA-F]\\{30,\\}\\).*?"
+	(when (re-search-forward (concat "\\([[:xdigit:]]\\{30,\\}\\).*?"
 					 (regexp-quote org-mobile-capture-file)
 					 "[ \t]*$") nil t)
 	  (goto-char (match-beginning 1))
diff --git a/lisp/org/org-table.el b/lisp/org/org-table.el
index 147527da1d..513a534d9b 100644
--- a/lisp/org/org-table.el
+++ b/lisp/org/org-table.el
@@ -155,7 +155,7 @@ org-table-default-size
   :type 'string)
 
 (defcustom org-table-number-regexp
-  "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%:]*\\|[<>]?[-+]?0[xX][0-9a-fA-F.]+\\|[<>]?[-+]?[0-9]+#[0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$"
+  "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%:]*\\|[<>]?[-+]?0[xX][[:xdigit:].]+\\|[<>]?[-+]?[0-9]+#[0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$"
   "Regular expression for recognizing numbers in table columns.
 If a table column contains mostly numbers, it will be aligned to the
 right.  If not, it will be aligned to the left.
@@ -180,9 +180,9 @@ org-table-number-regexp
 	  (const :tag "Exponential, Floating point, Integer"
 		 "^[-+]?[0-9.]+\\([eEdD][-+0-9]+\\)?$")
 	  (const :tag "Very General Number-Like, including hex and Calc radix"
-		 "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%]*\\|[<>]?[-+]?0[xX][0-9a-fA-F.]+\\|[<>]?[-+]?[0-9]+#[0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$")
+		 "^\\([<>]?[-+^.0-9]*[0-9][-+^.0-9eEdDx()%]*\\|[<>]?[-+]?0[xX][[:xdigit:].]+\\|[<>]?[-+]?[0-9]+#[0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$")
 	  (const :tag "Very General Number-Like, including hex and Calc radix, allows comma as decimal mark"
-		 "^\\([<>]?[-+^.,0-9]*[0-9][-+^.0-9eEdDx()%]*\\|[<>]?[-+]?0[xX][0-9a-fA-F.]+\\|[<>]?[-+]?[0-9]+#[0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$")
+		 "^\\([<>]?[-+^.,0-9]*[0-9][-+^.0-9eEdDx()%]*\\|[<>]?[-+]?0[xX][[:xdigit:].]+\\|[<>]?[-+]?[0-9]+#[0-9a-zA-Z.]+\\|nan\\|[-+u]?inf\\)$")
 	  (string :tag "Regexp:")))
 
 (defcustom org-table-number-fraction 0.5
diff --git a/lisp/progmodes/ada-mode.el b/lisp/progmodes/ada-mode.el
index 77c1e5e2d8..404e704373 100644
--- a/lisp/progmodes/ada-mode.el
+++ b/lisp/progmodes/ada-mode.el
@@ -909,7 +909,7 @@ ada-mode-symbol-syntax-table
 			       change))
 	    (replace-match "'A'"))
 	  (goto-char from)
-	  (while (re-search-forward "\\(#[0-9a-fA-F]*#\\)" to t)
+	  (while (re-search-forward "\\(#[[:xdigit:]]*#\\)" to t)
 	    (setq change (cons (list (match-beginning 1)
 				     (length (match-string 1))
 				     (match-string 1))
@@ -1013,7 +1013,7 @@ ada-in-string-or-comment-p
 
 (defsubst ada-in-numeric-literal-p ()
   "Return t if point is after a prefix of a numeric literal."
-  (looking-back "\\([0-9]+#[0-9a-fA-F_]+\\)" (line-beginning-position)))
+  (looking-back "\\([0-9]+#[[:xdigit:]_]+\\)" (line-beginning-position)))
 
 ;;------------------------------------------------------------------
 ;; Contextual menus
@@ -5213,7 +5213,7 @@ ada-font-lock-keywords
      '("<<\\(\\sw+\\)>>" 1 font-lock-constant-face)
 
      ;; Highlight based-numbers (R. Reagan <robin-reply@reagans.org>)
-     (list "\\([0-9]+#[0-9a-fA-F_]+#\\)" '(1 font-lock-constant-face t))
+     (list "\\([0-9]+#[[:xdigit:]_]+#\\)" '(1 font-lock-constant-face t))
 
      ;; Ada unnamed numerical constants
      (list "\\W\\([-+]?[0-9._]+\\)\\>" '(1 font-lock-constant-face))
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index 6afcb08a7c..6370c9c3a4 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -1415,7 +1415,7 @@ c-after-change-mark-abnormal-strings
 (defconst c-maybe-quoted-number-head
   (concat
    "\\(0\\("
-       "\\([Xx]\\([0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*'?\\)?\\)"
+       "\\([Xx]\\([[:xdigit:]]\\('[[:xdigit:]]\\|[[:xdigit:]]\\)*'?\\)?\\)"
        "\\|"
        "\\([Bb]\\([01]\\('[01]\\|[01]\\)*'?\\)?\\)"
        "\\|"
@@ -1435,7 +1435,7 @@ c-quoted-number-head-before-point
     (save-excursion
       (let ((here (point))
 	    found)
-	(skip-chars-backward "0-9a-fA-F'")
+	(skip-chars-backward "[:xdigit:]'")
 	(if (and (memq (char-before) '(?x ?X))
 		 (eq (char-before (1- (point))) ?0))
 	    (backward-char 2))
@@ -1449,7 +1449,7 @@ c-quoted-number-head-before-point
 (defconst c-maybe-quoted-number-tail
   (concat
    "\\("
-       "\\([xX']?[0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)"
+       "\\([xX']?[[:xdigit:]]\\('[[:xdigit:]]\\|[[:xdigit:]]\\)*\\)"
    "\\|"
        "\\([bB']?[01]\\('[01]\\|[01]\\)*\\)"
    "\\|"
@@ -1469,7 +1469,7 @@ c-quoted-number-tail-after-point
 (defconst c-maybe-quoted-number
   (concat
    "\\(0\\("
-       "\\([Xx][0-9a-fA-F]\\('[0-9a-fA-F]\\|[0-9a-fA-F]\\)*\\)"
+       "\\([Xx][[:xdigit:]]\\('[[:xdigit:]]\\|[[:xdigit:]]\\)*\\)"
        "\\|"
        "\\([Bb][01]\\('[01]\\|[01]\\)*\\)"
        "\\|"
@@ -1487,9 +1487,9 @@ c-quoted-number-straddling-point
   (when c-has-quoted-numbers
     (save-excursion
       (let ((here (point))
-	    (bound (progn (skip-chars-forward "0-9a-fA-F'") (point))))
+	    (bound (progn (skip-chars-forward "[:xdigit:]'") (point))))
 	(goto-char here)
-	(when (< (skip-chars-backward "0-9a-fA-F'") 0)
+	(when (< (skip-chars-backward "[:xdigit:]'") 0)
 	  (if (and (memq (char-before) '(?x ?X))
 		   (eq (char-before (1- (point))) ?0))
 	      (backward-char 2))
@@ -1530,7 +1530,7 @@ c-parse-quotes-before-change
 	(if (>= (point) c-new-BEG)
 	    (setq c-new-BEG (match-beginning 0))))
        ((looking-at
-	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)'")
+	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\)'")
 	(goto-char (match-end 0))
 	(if (> (match-end 0) c-new-BEG)
 	    (setq c-new-BEG (1- (match-beginning 0)))))
@@ -1559,7 +1559,7 @@ c-parse-quotes-before-change
 	(if (> (match-end 0) c-new-END)
 	    (setq c-new-END (match-end 0))))
        ((looking-at
-	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)'")
+	 "\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\)'")
 	(goto-char (match-end 0))
 	(if (> (match-end 0) c-new-END)
 	    (setq c-new-END (match-end 0))))
@@ -1579,8 +1579,8 @@ c-parse-quotes-before-change
      ((c-quoted-number-tail-after-point)
       (setq c-new-END (match-end 0)))
      ((looking-at
-       "\\(\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\|.\\)?\
-\\('\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\\)\\)*'")
+       "\\(\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\|.\\)?\
+\\('\\([^'\\]\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\\)\\)*'")
       (setq c-new-END (match-end 0))))
 
     ;; Remove the '(1) syntax-table property from any "'"s within (c-new-BEG
@@ -1632,7 +1632,7 @@ c-parse-quotes-after-change
 					      'c-digit-separator t ?')
 	       (goto-char num-end))
 	      ((looking-at
-		"\\([^\\']\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][0-9a-fA-F]+\\|.\\)\
+		"\\([^\\']\\|\\\\\\([0-7]\\{1,3\\}\\|[xuU][[:xdigit:]]+\\|.\\)\
 \\)'") ; balanced quoted expression.
 	       (goto-char (match-end 0)))
 	      ((looking-at "\\\\'")	; Anomalous construct.
diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index ba007d67c0..c58acf0c2f 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -3507,18 +3507,18 @@ cperl-look-at-leading-count
 (defsubst cperl-highlight-charclass (endbracket dashface bsface onec-space)
   (let ((l '(1 5 7)) ll lle lll
 	;; 2 groups, the first takes the whole match (include \[trnfabe])
-	(singleChar (concat "\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)")))
+	(singleChar (concat "\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)")))
     (while				; look for unescaped - between non-classes
 	(re-search-forward
 	 ;; On 19.33, certain simplifications lead
 	 ;; to bugs (as in  [^a-z] \\| [trnfabe]  )
 	 (concat	       		; 1: SingleChar (include \[trnfabe])
 	  singleChar
-	  ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
+	  ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
 	  "\\("				; 3: DASH SingleChar (match optionally)
 	    "\\(-\\)"			; 4: DASH
 	    singleChar			; 5: SingleChar
-	    ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
+	    ;;"\\(" "[^\\]" "\\|" "\\\\[^cdg-mo-qsu-zA-Z0-9_]" "\\|" "\\\\c." "\\|" "\\\\x" "\\([[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}\\)" "\\|" "\\\\0?[0-7][0-7]?[0-7]?" "\\|" "\\\\N{[^{}]*}" "\\)"
 	  "\\)?"
 	  "\\|"
 	  "\\("				; 7: other escapes
@@ -4420,7 +4420,7 @@ cperl-find-pods-heres
 					    "\\=[0123456789]*" (1- e) 'to-end))
 				      (and (eq qtag ?x)
 					   (re-search-forward
-					    "\\=[0-9a-fA-F][0-9a-fA-F]?\\|\\={[0-9a-fA-F]+}"
+					    "\\=[[:xdigit:]][[:xdigit:]]?\\|\\={[[:xdigit:]]+}"
 					    (1- e) 'to-end))
 				      (and (memq qtag (append "pPN" nil))
 					   (re-search-forward "\\={[^{}]+}\\|."
diff --git a/lisp/progmodes/ebnf-abn.el b/lisp/progmodes/ebnf-abn.el
index 53d37b689f..b00308591f 100644
--- a/lisp/progmodes/ebnf-abn.el
+++ b/lisp/progmodes/ebnf-abn.el
@@ -640,7 +640,7 @@ ebnf-abn-character
      (let* ((char  (following-char))
 	    (chars (cond ((or (= char ?B) (= char ?b)) "01")
 			 ((or (= char ?D) (= char ?d)) "0-9")
-			 ((or (= char ?X) (= char ?x)) "0-9A-Fa-f")
+			 ((or (= char ?X) (= char ?x)) "[:xdigit:]")
 			 (t (error "Invalid terminal value")))))
        (forward-char)
        (or (> (skip-chars-forward chars ebnf-limit) 0)
diff --git a/lisp/progmodes/ebnf-dtd.el b/lisp/progmodes/ebnf-dtd.el
index 94d9643261..74ff1f47d1 100644
--- a/lisp/progmodes/ebnf-dtd.el
+++ b/lisp/progmodes/ebnf-dtd.el
@@ -324,7 +324,7 @@
 ;; /* Character Reference */
 ;;
 ;; CharRef ::= '&#' [0-9]+ ';'
-;;           | '&#x' [0-9a-fA-F]+ ';'
+;;           | '&#x' [[:xdigit:]]+ ';'
 ;;           [WFC: Legal Character]
 ;;
 ;;
@@ -915,9 +915,9 @@ ebnf-dtd-operators
 ;;; EntityRef ::= '&' Name ';'
 ;;;
 ;;; CharRef ::= '&#' [0-9]+ ';'
-;;;           | '&#x' [0-9a-fA-F]+ ';'
+;;;           | '&#x' [[:xdigit:]]+ ';'
 
-;;; "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
+;;; "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
 
 
 (defun ebnf-dtd-attlistdecl ()
@@ -945,7 +945,7 @@ ebnf-dtd-attlistdecl
 	     (setq token (ebnf-dtd-lex)))
 	(or (and (eq token 'string)
 		 (string-match
-		  "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
+		  "^\\(&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^<&]\\)*$"
 		  ebnf-dtd-lex))
 	    (error "Invalid default value in ATTLIST declaration"))))
     (or (eq token 'end-decl)
@@ -986,9 +986,9 @@ ebnf-dtd-namelist
 ;;; EntityRef ::= '&' Name ';'
 ;;;
 ;;; CharRef ::= '&#' [0-9]+ ';'
-;;;           | '&#x' [0-9a-fA-F]+ ';'
+;;;           | '&#x' [[:xdigit:]]+ ';'
 
-;;; "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
+;;; "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
 
 
 (defun ebnf-dtd-entitydecl ()
@@ -1001,7 +1001,7 @@ ebnf-dtd-entitydecl
     (setq token (ebnf-dtd-lex))
     (if (eq token 'string)
 	(if (string-match
-	     "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[0-9a-fA-F]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
+	     "^\\(%[A-Za-z_:][-A-Za-z0-9._:]*;\\|&\\([A-Za-z_:][-A-Za-z0-9._:]*\\|#\\(x[[:xdigit:]]+\\|[0-9]+\\)\\);\\|[^%&]\\)*$"
 	     ebnf-dtd-lex)
 	    (setq token (ebnf-dtd-lex))
 	  (error "Invalid ENTITY definition"))
@@ -1242,7 +1242,7 @@ ebnf-dtd-lex
 	  (setq ebnf-dtd-lex (if (/= (following-char) ?x)
 				 (ebnf-dtd-char-ref "&#" "0-9")
 			       (forward-char)
-			       (ebnf-dtd-char-ref "&#x" "0-9a-fA-F")))
+			       (ebnf-dtd-char-ref "&#x" "[:xdigit:]")))
 	  'char-ref))
        ;; miscellaneous: (, ), [, ], =, |, *, +, >, `,'
        (t
diff --git a/lisp/progmodes/ebnf-ebx.el b/lisp/progmodes/ebnf-ebx.el
index 25500f1618..dc1a60f374 100644
--- a/lisp/progmodes/ebnf-ebx.el
+++ b/lisp/progmodes/ebnf-ebx.el
@@ -658,7 +658,7 @@ ebnf-ebx-hex-character
       (or no-error
 	  (error "Invalid hexadecimal character"))
     (forward-char)
-    (or (> (skip-chars-forward "0-9A-Fa-f" ebnf-limit) 0)
+    (or (> (skip-chars-forward "[:xdigit:]" ebnf-limit) 0)
 	(error "Invalid hexadecimal character"))))
 
 \f
diff --git a/lisp/progmodes/hideif.el b/lisp/progmodes/hideif.el
index 32b0b7551f..1b06077005 100644
--- a/lisp/progmodes/hideif.el
+++ b/lisp/progmodes/hideif.el
@@ -540,7 +540,7 @@ hif-valid-token-list
 
 (defconst hif-token-regexp
   (concat (regexp-opt (mapcar 'car hif-token-alist))
-          "\\|0x[0-9a-fA-F]+\\.?[0-9a-fA-F]*"
+          "\\|0x[[:xdigit:]]+\\.?[[:xdigit:]]*"
           "\\|[0-9]+\\.?[0-9]*"  ;; decimal/octal
           "\\|\\w+"))
 
@@ -595,7 +595,7 @@ hif-tokenize
                    ;; 1. postfix 'l', 'll', 'ul' and 'ull'
                    ;; 2. floating number formats (like 1.23e4)
                    ;; 3. 098 is interpreted as octal conversion error
-                   (if (string-match "0x\\([0-9a-fA-F]+\\.?[0-9a-fA-F]*\\)"
+                   (if (string-match "0x\\([[:xdigit:]]+\\.?[[:xdigit:]]*\\)"
                                      token)
                        (hif-string-to-number (match-string 1 token) 16)) ;; hex
                    (if (string-match "\\`0[0-9]+\\(\\.[0-9]+\\)?\\'" token)
diff --git a/lisp/progmodes/prolog.el b/lisp/progmodes/prolog.el
index 296a7ac3c9..780eff2d8a 100644
--- a/lisp/progmodes/prolog.el
+++ b/lisp/progmodes/prolog.el
@@ -1071,7 +1071,7 @@ prolog-syntax-propertize-function
      ;; Supposedly, ISO-Prolog wants \NNN\ for octal and \xNNN\ for hexadecimal
      ;; escape sequences in atoms, so be careful not to let the terminating \
      ;; escape a subsequent quote.
-     ("\\\\[x0-7][0-9a-fA-F]*\\(\\\\\\)" (1 "_"))
+     ("\\\\[x0-7][[:xdigit:]]*\\(\\\\\\)" (1 "_"))
      )))
 
 (defun prolog-mode-variables ()
diff --git a/lisp/progmodes/vera-mode.el b/lisp/progmodes/vera-mode.el
index f34b21e4cf..21d3db91ad 100644
--- a/lisp/progmodes/vera-mode.el
+++ b/lisp/progmodes/vera-mode.el
@@ -635,7 +635,7 @@ vera-font-lock-keywords
    (list (concat "^\\s-*" vera-rvm-types-regexp "\\s-*\\(\\[[^]]+\\]\\s-+\\)?")
 	 '(vera-font-lock-match-item nil nil (1 font-lock-variable-name-face)))
    ;; highlight numbers
-   '("\\([0-9]*'[bdoh][0-9a-fA-FxXzZ_]+\\)" 1 vera-font-lock-number)
+   '("\\([0-9]*'[bdoh][[:xdigit:]xXzZ_]+\\)" 1 vera-font-lock-number)
    ;; highlight filenames in #include directives
    '("^#\\s-*include\\s-*\\(<[^>\"\n]*>?\\)"
      1 font-lock-string-face)
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index eeed4c0d7c..12b7257ac2 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -2757,7 +2757,7 @@ verilog-optional-signed-range-re
    "\\s-*\\(\\<\\(reg\\|wire\\)\\>\\s-*\\)?\\(\\<\\(un\\)?signed\\>\\s-*\\)?\\(" verilog-range-re "\\)?"))
 (defconst verilog-macroexp-re "`\\sw+")
 
-(defconst verilog-delay-re "#\\s-*\\(\\([0-9_]+\\('s?[hdxbo][0-9a-fA-F_xz]+\\)?\\)\\|\\(([^()]*)\\)\\|\\(\\sw+\\)\\)")
+(defconst verilog-delay-re "#\\s-*\\(\\([0-9_]+\\('s?[hdxbo][[:xdigit:]_xz]+\\)?\\)\\|\\(([^()]*)\\)\\|\\(\\sw+\\)\\)")
 (defconst verilog-declaration-re-2-no-macro
   (concat "\\s-*" verilog-declaration-re
           "\\s-*\\(\\(" verilog-optional-signed-range-re "\\)\\|\\(" verilog-delay-re "\\)"
@@ -3287,7 +3287,7 @@ verilog-font-lock-grouping-keywords-face
                                                       'font-lock-preprocessor-face
                                                     'font-lock-type-face))
 		 ;; Fontify delays/numbers
-		 '("\\(@\\)\\|\\([ \t\n\f\r]#\\s-*\\(\\([0-9_.]+\\('s?[hdxbo][0-9a-fA-F_xz]*\\)?\\)\\|\\(([^()]+)\\|\\sw+\\)\\)\\)"
+		 '("\\(@\\)\\|\\([ \t\n\f\r]#\\s-*\\(\\([0-9_.]+\\('s?[hdxbo][[:xdigit:]_xz]*\\)?\\)\\|\\(([^()]+)\\|\\sw+\\)\\)\\)"
 		   0 font-lock-type-face append)
      ;; Fontify property/sequence cycle delays - these start with '##'
      '("\\(##\\(\\sw+\\|\\[[^]]+\\]\\)\\)"
@@ -9177,7 +9177,7 @@ verilog-read-always-signals-recurse
 	      (setq end-else-check t))
 	    (forward-char 1))
 	   ((equal keywd "'")
-	    (cond ((looking-at "'[sS]?[hdxboHDXBO]?[ \t]*[0-9a-fA-F_xzXZ?]+")
+	    (cond ((looking-at "'[sS]?[hdxboHDXBO]?[ \t]*[[:xdigit:]_xzXZ?]+")
                    (goto-char (match-end 0)))
                   ((looking-at "'{")
                    (forward-char 2)
@@ -9867,7 +9867,7 @@ verilog-is-number
   "Return true if SYMBOL is number-like."
   (or (string-match "^[0-9 \t:]+$" symbol)
       (string-match "^[---]*[0-9]+$" symbol)
-      (string-match "^[0-9 \t]+'s?[hdxbo][0-9a-fA-F_xz? \t]*$" symbol)))
+      (string-match "^[0-9 \t]+'s?[hdxbo][[:xdigit:]_xz? \t]*$" symbol)))
 
 (defun verilog-symbol-detick (symbol wing-it)
   "Return an expanded SYMBOL name without any defines.
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index 5d5d787945..b0653bce81 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -873,7 +873,7 @@ css-syntax-propertize-function
    (css--uri-re (1 "|") (2 "|"))))
 
 (defconst css-escapes-re
-  "\\\\\\(?:[^\000-\037\177]\\|[0-9a-fA-F]+[ \n\t\r\f]?\\)")
+  "\\\\\\(?:[^\000-\037\177]\\|[[:xdigit:]]+[ \n\t\r\f]?\\)")
 (defconst css-nmchar-re (concat "\\(?:[-[:alnum:]]\\|" css-escapes-re "\\)"))
 (defconst css-nmstart-re (concat "\\(?:[[:alpha:]]\\|" css-escapes-re "\\)"))
 (defconst css-ident-re ;; (concat css-nmstart-re css-nmchar-re "*")
@@ -1079,10 +1079,10 @@ css--colors-regexp
    (regexp-opt (mapcar #'car css--color-map) 'symbols)
    "\\|"
    ;; Short hex.  css-color-4 adds alpha.
-   "\\(#[0-9a-fA-F]\\{3,4\\}\\b\\)"
+   "\\(#[[:xdigit:]]\\{3,4\\}\\b\\)"
    "\\|"
    ;; Long hex.  css-color-4 adds alpha.
-   "\\(#\\(?:[0-9a-fA-F][0-9a-fA-F]\\)\\{3,4\\}\\b\\)"
+   "\\(#\\(?:[[:xdigit:]][[:xdigit:]]\\)\\{3,4\\}\\b\\)"
    "\\|"
    ;; RGB.
    "\\(\\_<rgba?(\\)"
diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el
index 0c5d5e56a6..602effe9af 100644
--- a/lisp/textmodes/sgml-mode.el
+++ b/lisp/textmodes/sgml-mode.el
@@ -1293,7 +1293,7 @@ sgml-quote
     (if unquotep
 	;; FIXME: We should unquote other named character references as well.
 	(while (re-search-forward
-		"\\(&\\(amp\\|quot\\|lt\\|gt\\|#\\([0-9]+\\|[xX][0-9a-fA-F]+\\)\\)\\)\\([][<>&;\n\t \"%!'(),/=?]\\|$\\)"
+		"\\(&\\(amp\\|quot\\|lt\\|gt\\|#\\([0-9]+\\|[xX][[:xdigit:]]+\\)\\)\\)\\([][<>&;\n\t \"%!'(),/=?]\\|$\\)"
 		nil t)
           (replace-match
            (string
diff --git a/lisp/version.el b/lisp/version.el
index d13d8c31e8..b9e2e50d1f 100644
--- a/lisp/version.el
+++ b/lisp/version.el
@@ -120,7 +120,7 @@ emacs-repository-version-git
 	       (with-demoted-errors "Error running git rev-parse: %S"
 		 (call-process "git" nil '(t nil) nil "rev-parse" "HEAD")))
 	   (progn (goto-char (point-min))
-		  (looking-at "[0-9a-fA-F]\\{40\\}"))
+		  (looking-at "[[:xdigit:]]\\{40\\}"))
 	   (match-string 0)))))
 
 (defun emacs-repository-get-version (&optional dir external)
diff --git a/lisp/xml.el b/lisp/xml.el
index 09ec72f792..833eb8aced 100644
--- a/lisp/xml.el
+++ b/lisp/xml.el
@@ -194,13 +194,13 @@ xml-nmtoken-re
 ;; [8] Nmtokens ::= Nmtoken (#x20 Nmtoken)*
 (defconst xml-nmtokens-re (concat xml-nmtoken-re "\\(?: " xml-name-re "\\)*"))
 
-;; [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';'
-(defconst xml-char-ref-re  "\\(?:&#[0-9]+;\\|&#x[0-9a-fA-F]+;\\)")
+;; [66] CharRef ::= '&#' [0-9]+ ';' | '&#x' [[:xdigit:]]+ ';'
+(defconst xml-char-ref-re  "\\(?:&#[0-9]+;\\|&#x[[:xdigit:]]+;\\)")
 
 ;; [68] EntityRef   ::= '&' Name ';'
 (defconst xml-entity-ref (concat "&" xml-name-re ";"))
 
-(defconst xml-entity-or-char-ref-re (concat "&\\(?:#\\(x\\)?\\([0-9a-fA-F]+\\)\\|\\("
+(defconst xml-entity-or-char-ref-re (concat "&\\(?:#\\(x\\)?\\([[:xdigit:]]+\\)\\|\\("
 					    xml-name-re "\\)\\);"))
 
 ;; [69] PEReference ::= '%' Name ';'
@@ -889,7 +889,7 @@ xml--entity-replacement-text
 The replacement text is obtained by replacing character
 references and parameter-entity references."
   (let ((ref-re (eval-when-compile
-		  (concat "\\(?:&#\\([0-9]+\\)\\|&#x\\([0-9a-fA-F]+\\)\\|%\\("
+		  (concat "\\(?:&#\\([0-9]+\\)\\|&#x\\([[:xdigit:]]+\\)\\|%\\("
 			  xml-name-re "\\)\\);")))
 	children)
     (while (string-match ref-re string)
diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el
index 5349de055e..96a604f982 100644
--- a/test/src/emacs-module-tests.el
+++ b/test/src/emacs-module-tests.el
@@ -60,7 +60,7 @@ mod-test-emacs
     (should (eq 0
                 (string-match
                  (concat "#<module function "
-                         "\\(at \\(0x\\)?[0-9a-fA-F]+\\( from .*\\)?"
+                         "\\(at \\(0x\\)?[[:xdigit:]]+\\( from .*\\)?"
                          "\\|Fmod_test_sum from .*\\)>")
                  (prin1-to-string (nth 1 descr)))))
     (should (= (nth 2 descr) 3)))
-- 
2.21.0






^ permalink raw reply related	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH v2] Replace manually crafted hex regexes wth [[:xdigit:]]
  2019-06-13  0:18 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes wth [[:xdigit:]] Konstantin Kharlamov
@ 2019-07-06  8:04   ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-07-06  8:04 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: 36167-done

> From: Konstantin Kharlamov <Hi-Angel@yandex.ru>
> Date: Thu, 13 Jun 2019 03:18:43 +0300
> 
> * admin/charsets/mapconv:
> * build-aux/gitlog-to-changelog (parse_amend_file) (git_dir_option):
> * lisp/progmodes/verilog-mode.el (verilog-delay-re):
>     (verilog-type-font-keywords) (verilog-read-always-signals-recurse):
>     (verilog-is-number):

Thanks, I pushed this.

The log message was mis-formatted, which required me to tediously fix
it by hand.  Please in the future format the entries using "C-x 4 a"
or similar commands, to avoid that, okay?  In particular, lines longer
than 78 characters abort "git am", so please verify this doesn't
happen in the patches you submit.  "C-x 4 a" and friends format the
entries with leading TABs which you can later remove with "C-x TAB",
and that produces the optimal results, including when the log messages
are later used to generate ChangeLog files in the release tarballs.





^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH v2] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
                   ` (5 preceding siblings ...)
  2019-06-13  0:18 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes wth [[:xdigit:]] Konstantin Kharlamov
@ 2019-07-08  9:34 ` Konstantin Kharlamov
  2019-07-08 12:11   ` Eli Zaretskii
  6 siblings, 1 reply; 42+ messages in thread
From: Konstantin Kharlamov @ 2019-07-08  9:34 UTC (permalink / raw)
  To: 36167

> Thanks, I pushed this.
> 
> The log message was mis-formatted, which required me to tediously fix
> it by hand. Please in the future format the entries using "C-x 4 a"
> or similar commands, to avoid that, okay? In particular, lines longer
> than 78 characters abort "git am", so please verify this doesn't
> happen in the patches you submit. "C-x 4 a" and friends format the
> entries with leading TABs which you can later remove with "C-x TAB",
> and that produces the optimal results, including when the log messages
> are later used to generate ChangeLog files in the release tarballs.

Thank you! And sorry about that. I wanted to take a look this weekend 
for problems you mentioned, but haven't got time. Anyway, IIRC I have 
used "C-x 4 a" to create the commit message, but then I re-formatted it 
to look more similar to other commits I've seen. Probably I shouldn't 
have touched it…

About git-am: this is unfortunate, I think I haven't seen this problem 
because apparently "git" refuses to execute local hooks if one have set 
global hooks with "hooksPath" variable (which since recently I use to 
pre-format commit message based on modified paths, etc). I'll see what 
can be done with it.

P.S.: I replied on top level since for some reason my email client 
(Geary) refused to reply the last message directly.







^ permalink raw reply	[flat|nested] 42+ messages in thread

* bug#36167: [PATCH v2] Replace manually crafted hex regexes with [[:xdigit:]]
  2019-07-08  9:34 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
@ 2019-07-08 12:11   ` Eli Zaretskii
  0 siblings, 0 replies; 42+ messages in thread
From: Eli Zaretskii @ 2019-07-08 12:11 UTC (permalink / raw)
  To: Konstantin Kharlamov; +Cc: 36167

> Date: Mon, 08 Jul 2019 12:34:32 +0300
> From: Konstantin Kharlamov <hi-angel@yandex.ru>
> Cc: Eli Zaretskii <eliz@gnu.org>
> 
> > The log message was mis-formatted, which required me to tediously fix
> > it by hand. Please in the future format the entries using "C-x 4 a"
> > or similar commands, to avoid that, okay? In particular, lines longer
> > than 78 characters abort "git am", so please verify this doesn't
> > happen in the patches you submit. "C-x 4 a" and friends format the
> > entries with leading TABs which you can later remove with "C-x TAB",
> > and that produces the optimal results, including when the log messages
> > are later used to generate ChangeLog files in the release tarballs.
> 
> Thank you! And sorry about that.

No sweat, mistakes do happen.

> Anyway, IIRC I have used "C-x 4 a" to create the commit message, but
> then I re-formatted it to look more similar to other commits I've
> seen. Probably I shouldn't have touched it…

Yes, my recommendation is to do only "C-u -8 C-x TAB" and nothing else
to reformat the entries into commit log messages.  This just removes
the leading whitespace.  Also, I recommend to have auto-fill-mode
enabled in the buffer where you edit the log messages.

> About git-am: this is unfortunate

It isn't git-am per se, it's our hooks.





^ permalink raw reply	[flat|nested] 42+ messages in thread

end of thread, other threads:[~2019-07-08 12:11 UTC | newest]

Thread overview: 42+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-11 11:59 bug#36167: [PATCH] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
2019-06-11 12:03 ` bug#36167: Acknowledgement ([PATCH] Replace manually crafted hex regexes with [[:xdigit:]]) Konstantin Kharlamov
2019-06-11 12:29 ` bug#36167: [PATCH] Replace [0-9a-fA-F] with [[:xdigit:]] Konstantin Kharlamov
2019-06-11 13:03   ` Robert Pluim
2019-06-11 13:17     ` Konstantin Kharlamov
2019-06-11 13:30       ` Robert Pluim
2019-06-12  0:29         ` Konstantin Kharlamov
2019-06-12  2:42           ` Eli Zaretskii
2019-06-12  8:21           ` Robert Pluim
2019-06-12 11:19             ` Konstantin Kharlamov
2019-06-12 14:55               ` Eli Zaretskii
2019-06-12 16:39                 ` Konstantin Kharlamov
2019-06-12 16:51                   ` Eli Zaretskii
2019-06-12 17:09                     ` Konstantin Kharlamov
2019-06-12 21:33                       ` Lars Ingebrigtsen
2019-06-12 21:39                         ` Lars Ingebrigtsen
2019-06-12 22:17                         ` Andreas Schwab
2019-06-12 22:22                           ` Lars Ingebrigtsen
2019-06-12 22:48                             ` Konstantin Kharlamov
2019-06-11 13:32     ` npostavs
2019-06-11 14:36       ` Eli Zaretskii
2019-06-11 14:26 ` bug#36167: [PATCH] Replace manually crafted hex regexes " Paul Eggert
2019-06-11 14:37   ` Konstantin Kharlamov
2019-06-11 15:37     ` Paul Eggert
2019-06-11 16:31       ` Mattias Engdegård
2019-06-11 16:50         ` Drew Adams
2019-06-11 17:04           ` Eli Zaretskii
2019-06-11 17:18             ` Paul Eggert
2019-06-11 17:32               ` Eli Zaretskii
2019-06-11 17:19             ` Drew Adams
2019-06-11 17:34               ` Eli Zaretskii
2019-06-11 17:50             ` npostavs
2019-06-11 17:53               ` Eli Zaretskii
2019-06-11 18:14                 ` Eli Zaretskii
2019-06-11 19:56 ` Andy Moreton
2019-06-12  2:30   ` Eli Zaretskii
2019-06-12 11:44 ` Andy Moreton
2019-06-12 16:07   ` Eli Zaretskii
2019-06-13  0:18 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes wth [[:xdigit:]] Konstantin Kharlamov
2019-07-06  8:04   ` Eli Zaretskii
2019-07-08  9:34 ` bug#36167: [PATCH v2] Replace manually crafted hex regexes with [[:xdigit:]] Konstantin Kharlamov
2019-07-08 12:11   ` Eli Zaretskii

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).