public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] emacs r1347 - gentoo-syntax
@ 2009-08-17  6:48 Ulrich Mueller (ulm)
  0 siblings, 0 replies; only message in thread
From: Ulrich Mueller (ulm) @ 2009-08-17  6:48 UTC (permalink / raw
  To: gentoo-commits

Author: ulm
Date: 2009-08-17 06:48:51 +0000 (Mon, 17 Aug 2009)
New Revision: 1347

Modified:
   gentoo-syntax/ChangeLog
   gentoo-syntax/gentoo-syntax.el
Log:
Collect all keywords for a font first, before computing their regexp.

Modified: gentoo-syntax/ChangeLog
===================================================================
--- gentoo-syntax/ChangeLog	2009-08-16 23:02:40 UTC (rev 1346)
+++ gentoo-syntax/ChangeLog	2009-08-17 06:48:51 UTC (rev 1347)
@@ -1,3 +1,12 @@
+2009-08-17  Ulrich Mueller  <ulm@gentoo.org>
+
+	* gentoo-syntax.el (ebuild-mode-font-lock-keywords)
+	(eselect-mode-font-lock-keywords): It is more efficient to collect
+	all keywords for a font first, before computing their regexp.
+	Thanks to Elias Pipping for pointing this out.
+	(ebuild-mode-collect-equal-cdrs): New function.
+	(ebuild-mode-make-keywords-list): Define also at compile time.
+
 2009-08-16  Christian Faulhammer  <fauli@gentoo.org>
 
 	* ebuild-mode-keywords.el (ebuild-mode-keywords-python):

Modified: gentoo-syntax/gentoo-syntax.el
===================================================================
--- gentoo-syntax/gentoo-syntax.el	2009-08-16 23:02:40 UTC (rev 1346)
+++ gentoo-syntax/gentoo-syntax.el	2009-08-17 06:48:51 UTC (rev 1347)
@@ -55,31 +55,50 @@
 ;; suppress byte-compiler warning
 (defvar ebuild-mode-menu)
 
-(defun ebuild-mode-make-keywords-list (keywords-list face
-						     &optional prefix suffix)
-  ;; based on `generic-make-keywords-list' from generic.el
-  ;; Note: XEmacs doesn't have generic.el
-  (unless (listp keywords-list)
-    (error "Keywords argument must be a list of strings"))
-  (cons (concat prefix "\\<"
-		(regexp-opt keywords-list t)
-		"\\>" suffix)
-	face))
+(eval-and-compile
+  (defun ebuild-mode-make-keywords-list (keywords-list face
+						       &optional prefix suffix)
+    ;; based on `generic-make-keywords-list' from generic.el
+    ;; Note: XEmacs doesn't have generic.el
+    (unless (listp keywords-list)
+      (error "Keywords argument must be a list of strings"))
+    (cons (concat prefix "\\<"
+		  (regexp-opt keywords-list t)
+		  "\\>" suffix)
+	  face))
 
-(load "ebuild-mode-keywords" nil t)
-(load "eselect-mode-keywords" nil t)
+  (defun ebuild-mode-collect-equal-cdrs (src)
+    "For alist SRC, collect elements with equal cdr and concat their cars."
+    (let (dst e)
+      (dolist (c src dst)
+	(if (setq e (rassoc (cdr c) dst))
+	    (setcar e (append (car e) (car c)))
+	  (setq dst (cons (copy-sequence c) dst))))))
+)
 
+(eval-when-compile
+  (load "ebuild-mode-keywords" nil t)
+  (load "eselect-mode-keywords" nil t))
+
 (defvar ebuild-mode-font-lock-keywords
-  (mapcar
-   (lambda (x)
-     (apply 'ebuild-mode-make-keywords-list (symbol-value (intern x))))
-   (all-completions "ebuild-mode-keywords-" obarray 'boundp)))
+  (eval-when-compile
+    (mapcar
+     (lambda (x)
+       (apply 'ebuild-mode-make-keywords-list x))
+     (ebuild-mode-collect-equal-cdrs
+      (mapcar
+       (lambda (x) (symbol-value (intern x)))
+       (all-completions "ebuild-mode-keywords-" obarray 'boundp))))))
 
 (defvar eselect-mode-font-lock-keywords
-  (mapcar
-   (lambda (x)
-     (apply 'ebuild-mode-make-keywords-list (symbol-value (intern x))))
-   (all-completions "eselect-mode-keywords-" obarray 'boundp)))
+  (eval-when-compile
+    (mapcar
+     (lambda (x)
+       (apply 'ebuild-mode-make-keywords-list x))
+     (ebuild-mode-collect-equal-cdrs
+      (mapcar
+       (lambda (x) (symbol-value (intern x)))
+       (all-completions "eselect-mode-keywords-" obarray 'boundp))))))
 
 (font-lock-add-keywords 'ebuild-mode ebuild-mode-font-lock-keywords)
 (font-lock-add-keywords 'eselect-mode eselect-mode-font-lock-keywords)




^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-08-17  6:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-08-17  6:48 [gentoo-commits] emacs r1347 - gentoo-syntax Ulrich Mueller (ulm)

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox