From: Stefan Monnier Date: Mon, 4 Dec 2006 08:08:06 +0000 (+0000) Subject: (sgml-font-lock-keywords-1): Fix pathological O(n^2) regexp-search by X-Git-Tag: emacs-pretest-22.0.92~325 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9bbceb74b4d1ac225fd9a2292d287810a6c90316;p=emacs.git (sgml-font-lock-keywords-1): Fix pathological O(n^2) regexp-search by anchoring the search. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 86d6f6acfd6..4d3e30b3452 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2006-12-04 Stefan Monnier + + * textmodes/sgml-mode.el (sgml-font-lock-keywords-1): Fix pathological + O(n^2) regexp-search by anchoring the search. + 2006-12-04 Dan Nicolaescu * whitespace.el (whitespace-cleanup-internal): Use current @@ -31,7 +36,7 @@ : Add "globally" to Help string. : MESSAGE arg need not say "globally". - (menu-bar-edit-menu ): Renamed from select-and-paste. + (menu-bar-edit-menu ): Rename from select-and-paste. 2006-12-03 Liam Healy (tiny change) @@ -45,7 +50,7 @@ docstring error. (allout-yank-processing): Fix depth shift of multiple-topic so yanks work again, using allout-ascend's new option. - (allout-setup-mode-map): Extracted from allout-mode to initialize + (allout-setup-mode-map): Extract from allout-mode to initialize allout-mode-map. Call it on file load, so the mode docstring substitutions work even if allout mode has not yet been invoked. (allout-mode): Use new allout-setup-mode-map to track any keybinding @@ -191,8 +196,8 @@ 2006-11-29 J.D. Smith - * progmodes/idlwave.el (idlwave-auto-fill): Remove - paragraph-start let to prevent auto-fill giving up. + * progmodes/idlwave.el (idlwave-auto-fill): + Remove paragraph-start let to prevent auto-fill giving up. 2006-11-28 Juanma Barranquero @@ -200,8 +205,8 @@ 2006-11-27 Andreas Seltenreich - * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation): Fix - interactive spec of the functions getting defined to make them + * emacs-lisp/easy-mmode.el (easy-mmode-define-navigation): + Fix interactive spec of the functions getting defined to make them work as documented. 2006-11-28 Chong Yidong diff --git a/lisp/textmodes/sgml-mode.el b/lisp/textmodes/sgml-mode.el index 6136d22e432..aa24a724877 100644 --- a/lisp/textmodes/sgml-mode.el +++ b/lisp/textmodes/sgml-mode.el @@ -265,7 +265,10 @@ Any terminating `>' or `/' is not matched.") (1 (if (match-end 2) sgml-namespace-face font-lock-function-name-face)) (2 font-lock-function-name-face nil t)) ;; FIXME: this doesn't cover the variables using a default value. - (,(concat "\\(" sgml-namespace-re "\\)\\(?::\\(" + ;; The first shy-group is an important anchor: it prevents an O(n^2) + ;; pathological case where we otherwise keep retrying a failing match + ;; against a very long word at every possible position within the word. + (,(concat "\\(?:^\\|[ \t]\\)\\(" sgml-namespace-re "\\)\\(?::\\(" sgml-name-re "\\)\\)?=[\"']") (1 (if (match-end 2) sgml-namespace-face font-lock-variable-name-face)) (2 font-lock-variable-name-face nil t))