]> code.delx.au - gnu-emacs/blobdiff - lisp/cedet/srecode/find.el
Update copyright year to 2015
[gnu-emacs] / lisp / cedet / srecode / find.el
index d9765ebd449e2fff747f7fcbe256f71e5bbc1373..fc1b79dfd52d7f594847f9bda677b3ebe2e8f4e4 100644 (file)
@@ -1,6 +1,6 @@
 ;;;; srecode/find.el --- Tools for finding templates in the database.
 
-;; Copyright (C) 2007-2011 Free Software Foundation, Inc.
+;; Copyright (C) 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <eric@siege-engine.com>
 
@@ -220,32 +220,37 @@ tables that do not belong to an application will be searched."
 (defvar srecode-read-template-name-history nil
   "History for completing reads for template names.")
 
-(defun srecode-all-template-hash (&optional mode hash)
+(defun srecode-user-template-p (template)
+  "Non-nil if TEMPLATE is intended for user insertion.
+Templates not matching this predicate are used for code
+generation or other internal purposes."
+  t)
+
+(defun srecode-all-template-hash (&optional mode hash predicate)
   "Create a hash table of all the currently available templates.
 Optional argument MODE is the major mode to look for.
-Optional argument HASH is the hash table to fill in."
-  (let* ((mhash (or hash (make-hash-table :test 'equal)))
-        (mmode (or mode major-mode))
-        (mp (get-mode-local-parent mmode))
-        )
+Optional argument HASH is the hash table to fill in.
+Optional argument PREDICATE can be used to filter the returned
+templates."
+  (let* ((mhash       (or hash (make-hash-table :test 'equal)))
+        (mmode       (or mode major-mode))
+        (parent-mode (get-mode-local-parent mmode)))
     ;; Get the parent hash table filled into our current hash.
-    (when (not (eq mode 'default))
-      (if mp
-         (srecode-all-template-hash mp mhash)
-       (srecode-all-template-hash 'default mhash)))
+    (unless (eq mode 'default)
+      (srecode-all-template-hash (or parent-mode 'default) mhash))
+
     ;; Load up the hash table for our current mode.
-    (let* ((mt (srecode-get-mode-table mmode))
-          (tabs (when mt (oref mt :tables)))
-          )
-      (while tabs
-       ;; Exclude templates for a perticular application.
-       (when (and (not (oref (car tabs) :application))
-                  (srecode-template-table-in-project-p (car tabs)))
+    (let* ((mt   (srecode-get-mode-table mmode))
+          (tabs (when mt (oref mt :tables))))
+      (dolist (tab tabs)
+       ;; Exclude templates for a particular application.
+       (when (and (not (oref tab :application))
+                  (srecode-template-table-in-project-p tab))
          (maphash (lambda (key temp)
-                    (puthash key temp mhash)
-                    )
-                  (oref (car tabs) namehash)))
-       (setq tabs (cdr tabs)))
+                    (when (or (not predicate)
+                              (funcall predicate temp))
+                      (puthash key temp mhash)))
+                  (oref tab namehash))))
       mhash)))
 
 (defun srecode-calculate-default-template-string (hash)