2019-03-26 regex cleanup

Problems reported by Mattias Engdegård in:
https://lists.gnu.org/r/emacs-devel/2019-03/msg01028.html
* lisp/align.el (align-rules-list):
* lisp/speedbar.el (speedbar-check-read-only, speedbar-check-vc):
* lisp/vc/diff-mode.el (diff-add-change-log-entries-other-window):
* lisp/woman.el (woman-parse-numeric-arg):
Put "-" at end of character alternatives, since a range was not intended.
* lisp/erc/erc.el (font-lock):
* lisp/mail/footnote.el (cl-seq):
Avoid duplicate character alternatives by using cl-seq API.
* lisp/mail/footnote.el (footnote--current-regexp):
* lisp/textmodes/css-mode.el (css--font-lock-keywords):
Avoid repetition of repetition.
* lisp/net/webjump.el (webjump-url-encode):
Add ~ to character alternatives, and rewrite confusing range.
* lisp/progmodes/verilog-mode.el (verilog-compiler-directives)
(verilog-assignment-operator-re):
Remove duplicate.
* lisp/progmodes/verilog-mode.el (verilog-preprocessor-re):
* lisp/textmodes/css-mode.el (css--font-lock-keywords):
Don’t escape a char that doesn’t need it.
* lisp/textmodes/picture.el (picture-tab-chars): In docstring,
do not say regexp characters will be quoted; merely say in
another way that the syntax is that of character alternatives.
(picture-set-tab-stops, picture-tab-search): Don’t attempt
to regexp-quote picture-tab-chars.
(picture-tab-search): Quote \ in picture-tab-chars for
skip-chars-backwards, which treats \ differently than
regexp character alternatives do.
This commit is contained in:
Paul Eggert 2019-03-26 19:06:36 -07:00
parent c8ec3108a3
commit 5d6a314475
10 changed files with 34 additions and 27 deletions

View file

@ -438,7 +438,7 @@ The possible settings for `align-region-separate' are:
(tab-stop . nil))
(perl-assignment
(regexp . ,(concat "[^=!^&*-+<>/| \t\n]\\(\\s-*\\)=[~>]?"
(regexp . ,(concat "[^=!^&*+<>/| \t\n-]\\(\\s-*\\)=[~>]?"
"\\(\\s-*\\)\\([^>= \t\n]\\|$\\)"))
(group . (1 2))
(modes . align-perl-modes)

View file

@ -67,6 +67,7 @@
(load "erc-loaddefs" nil t)
(eval-when-compile (require 'cl-lib))
(require 'cl-seq)
(require 'font-lock)
(require 'pp)
(require 'thingatpt)
@ -2522,10 +2523,8 @@ Returns NICK unmodified unless `erc-lurker-trim-nicks' is
non-nil."
(if erc-lurker-trim-nicks
(replace-regexp-in-string
(format "[%s]"
(mapconcat (lambda (char)
(regexp-quote (char-to-string char)))
erc-lurker-ignore-chars ""))
(regexp-opt (cl-delete-duplicates
(mapcar #'char-to-string erc-lurker-ignore-chars)))
"" nick)
nick))

View file

@ -64,6 +64,7 @@
;;; Code:
(eval-when-compile (require 'cl-lib))
(require 'cl-seq)
(defvar filladapt-token-table)
(defgroup footnote nil
@ -363,7 +364,9 @@ Use Unicode characters for footnoting."
("ק" "ר" "ש" "ת" "תק" "תר" "תש" "תת" "תתק")))
(defconst footnote-hebrew-numeric-regex
(concat "[" (apply #'concat (apply #'append footnote-hebrew-numeric)) "']+"))
(concat "[" (cl-delete-duplicates
(apply #'concat (apply #'append footnote-hebrew-numeric)))
"']+"))
;; (defconst footnote-hebrew-numeric-regex "\\([אבגדהוזחט]'\\)?\\(ת\\)?\\(ת\\)?\\([קרשת]\\)?\\([טיכלמנסעפצ]\\)?\\([אבגדהוזחט]\\)?")
(defun footnote--hebrew-numeric (n)
@ -457,9 +460,14 @@ Conversion is done based upon the current selected style."
(defun footnote--current-regexp ()
"Return the regexp of the index of the current style."
(concat (nth 2 (or (assq footnote-style footnote-style-alist)
(nth 0 footnote-style-alist)))
"*"))
(let ((regexp (nth 2 (or (assq footnote-style footnote-style-alist)
(nth 0 footnote-style-alist)))))
(concat
;; Hack to avoid repetition of repetition.
(if (string-match "[^\\]\\\\\\{2\\}*[*+?]\\'" regexp)
(substring regexp 0 -1)
regexp)
"*")))
(defun footnote--refresh-footnotes (&optional index-regexp)
"Redraw all footnotes.

View file

@ -342,7 +342,7 @@ Please submit bug reports and other feedback to the author, Neil W. Van Dyke
(mapconcat (lambda (c)
(let ((s (char-to-string c)))
(cond ((string= s " ") "+")
((string-match "[a-zA-Z_.-/]" s) s)
((string-match "[a-zA-Z_./~-]" s) s)
(t (upcase (format "%%%02x" c))))))
(encode-coding-string str 'utf-8)
""))

View file

@ -2053,7 +2053,7 @@ find the errors."
"`resetall" "`timescale" "`unconnected_drive" "`undef" "`undefineall"
;; compiler directives not covered by IEEE 1800
"`case" "`default" "`endfor" "`endprotect" "`endswitch" "`endwhile" "`for"
"`format" "`if" "`let" "`protect" "`switch" "`timescale" "`time_scale"
"`format" "`if" "`let" "`protect" "`switch" "`time_scale"
"`while"
))
"List of Verilog compiler directives.")
@ -2414,9 +2414,7 @@ find the errors."
'(
;; blocking assignment_operator
"=" "+=" "-=" "*=" "/=" "%=" "&=" "|=" "^=" "<<=" ">>=" "<<<=" ">>>="
;; non blocking assignment operator
"<="
;; comparison
;; comparison (also nonblocking assignment "<=")
"==" "!=" "===" "!==" "<=" ">=" "==?" "!=?" "<->"
;; event_trigger
"->" "->>"
@ -2973,7 +2971,7 @@ find the errors."
"\\<\\(`pragma\\)\\>\\s-+.+$"
"\\)\\|\\(?:"
;; `timescale time_unit / time_precision
"\\<\\(`timescale\\)\\>\\s-+10\\{0,2\\}\\s-*[munpf]?s\\s-*\\/\\s-*10\\{0,2\\}\\s-*[munpf]?s"
"\\<\\(`timescale\\)\\>\\s-+10\\{0,2\\}\\s-*[munpf]?s\\s-*/\\s-*10\\{0,2\\}\\s-*[munpf]?s"
"\\)\\|\\(?:"
;; `define and `if can span multiple lines if line ends in '\'. NOTE: `if is not IEEE 1800-2012
;; from http://www.emacswiki.org/emacs/MultilineRegexp

View file

@ -2849,7 +2849,7 @@ indicator, then do not add a space."
(progn
(goto-char speedbar-ro-to-do-point)
(while (and (not (input-pending-p))
(re-search-forward "^\\([0-9]+\\):\\s-*[[<][+-?][]>] "
(re-search-forward "^\\([0-9]+\\):\\s-*[[<][+?-][]>] "
nil t))
(setq speedbar-ro-to-do-point (point))
(let ((f (speedbar-line-file)))
@ -2900,7 +2900,7 @@ to add more types of version control systems."
(progn
(goto-char speedbar-vc-to-do-point)
(while (and (not (input-pending-p))
(re-search-forward "^\\([0-9]+\\):\\s-*\\[[+-?]\\] "
(re-search-forward "^\\([0-9]+\\):\\s-*\\[[+?-]\\] "
nil t))
(setq speedbar-vc-to-do-point (point))
(if (speedbar-check-vc-this-line (match-string 1))

View file

@ -892,7 +892,7 @@ cannot be completed sensibly: `custom-ident',
(,(concat "@" css-ident-re) (0 font-lock-builtin-face))
;; Selectors.
;; Allow plain ":root" as a selector.
("^[ \t]*\\(:root\\)\\(?:[\n \t]*\\)*{" (1 'css-selector keep))
("^[ \t]*\\(:root\\)\\(?:[\n \t]*\\){" (1 'css-selector keep))
;; FIXME: attribute selectors don't work well because they may contain
;; strings which have already been highlighted as f-l-string-face and
;; thus prevent this highlighting from being applied (actually now that
@ -915,7 +915,7 @@ cannot be completed sensibly: `custom-ident',
"\\(?:\\(:" (regexp-opt (append css-pseudo-class-ids
css-pseudo-element-ids)
t)
"\\|\\::" (regexp-opt css-pseudo-element-ids t) "\\)"
"\\|::" (regexp-opt css-pseudo-element-ids t) "\\)"
"\\(?:([^)]+)\\)?"
(if (not sassy)
"[^:{}()\n]*"

View file

@ -387,7 +387,8 @@ Interactively, ARG is the numeric argument, and defaults to 1."
\\[picture-set-tab-stops] and \\[picture-tab-search].
The syntax for this variable is like the syntax used inside of `[...]'
in a regular expression--but without the `[' and the `]'.
It is NOT a regular expression, any regexp special characters will be quoted.
It is NOT a regular expression, and should follow the usual
rules for the contents of a character alternative.
It defines a set of \"interesting characters\" to look for when setting
\(or searching for) tab stops, initially \"!-~\" (all printing characters).
For example, suppose that you are editing a table which is formatted thus:
@ -425,7 +426,7 @@ stops computed are displayed in the minibuffer with `:' at each stop."
(if arg
(setq tabs (or (default-value 'tab-stop-list)
(indent-accumulate-tab-stops (window-width))))
(let ((regexp (concat "[ \t]+[" (regexp-quote picture-tab-chars) "]")))
(let ((regexp (concat "[ \t]+[" picture-tab-chars "]")))
(beginning-of-line)
(let ((bol (point)))
(end-of-line)
@ -433,8 +434,8 @@ stops computed are displayed in the minibuffer with `:' at each stop."
(skip-chars-forward " \t")
(setq tabs (cons (current-column) tabs)))
(if (null tabs)
(error "No characters in set %s on this line"
(regexp-quote picture-tab-chars))))))
(error "No characters in set [%s] on this line"
picture-tab-chars)))))
(setq tab-stop-list tabs)
(let ((blurb (make-string (1+ (nth (1- (length tabs)) tabs)) ?\ )))
(while tabs
@ -455,12 +456,13 @@ If no such character is found, move to beginning of line."
(progn
(beginning-of-line)
(skip-chars-backward
(concat "^" (regexp-quote picture-tab-chars))
(concat "^" (replace-regexp-in-string
"\\\\" "\\\\" picture-tab-chars nil t))
(point-min))
(not (bobp))))
(move-to-column target))
(if (re-search-forward
(concat "[ \t]+[" (regexp-quote picture-tab-chars) "]")
(concat "[ \t]+[" picture-tab-chars "]")
(line-end-position)
'move)
(setq target (1- (current-column)))

View file

@ -2213,7 +2213,7 @@ I.e. like `add-change-log-entry-other-window' but applied to all hunks."
;; `add-change-log-entry-other-window' works better in
;; that case.
(re-search-forward
(concat "\n[!+-<>]"
(concat "\n[!+<>-]"
;; If the hunk is a context hunk with an empty first
;; half, recognize the "--- NNN,MMM ----" line
"\\(-- [0-9]+\\(,[0-9]+\\)? ----\n"

View file

@ -3511,7 +3511,7 @@ The expression may be an argument in quotes."
(let ((value (if (looking-at "[+-]") 0 (woman-parse-numeric-value)))
op)
(while (cond
((looking-at "[+-/*%]") ; arithmetic operators
((looking-at "[+/*%-]") ; arithmetic operators
(forward-char)
(setq op (intern-soft (match-string 0)))
(setq value (funcall op value (woman-parse-numeric-value))))