* [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