]> code.delx.au - gnu-emacs/blobdiff - lisp/cedet/semantic/decorate/mode.el
Update copyright year to 2015
[gnu-emacs] / lisp / cedet / semantic / decorate / mode.el
index ea4df472afdb234511179ddb8d00bd04e8b4ee8f..2a88eb7337bc59301530b06b9de660ad662d48de 100644 (file)
@@ -1,6 +1,6 @@
 ;;; semantic/decorate/mode.el --- Minor mode for decorating tags
 
-;; Copyright (C) 2000-2005, 2007-201 Free Software Foundation, Inc.
+;; Copyright (C) 2000-2005, 2007-2015 Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: syntax
@@ -64,6 +64,14 @@ add items to this list."
   "Return the STYLE's highlighter function."
   (intern (format "%s-highlight" style)))
 
+(defsubst semantic-decorate-style-predicate-default (style)
+  "Return the STYLE's predicate function."
+  (intern (format "%s-p-default" style)))
+
+(defsubst semantic-decorate-style-highlighter-default (style)
+  "Return the STYLE's highlighter function."
+  (intern (format "%s-highlight-default" style)))
+
 ;;; Base decoration API
 ;;
 (defsubst semantic-decoration-p (object)
@@ -267,7 +275,13 @@ minor mode is enabled."
                   'semantic-decorate-tags-after-full-reparse nil t)
         ;; Add decorations to available tags.  The above hooks ensure
         ;; that new tags will be decorated when they become available.
-        (semantic-decorate-add-decorations (semantic-fetch-available-tags)))
+        ;; However, don't do this immediately, because EDE will be
+        ;; activated later by find-file-hook, and includes might not
+        ;; be found yet.
+       (run-with-idle-timer
+        0.1 nil
+        (lambda ()
+          (semantic-decorate-add-decorations (semantic-fetch-available-tags)))))
     ;; Remove decorations from available tags.
     (semantic-decorate-clear-decorations (semantic-fetch-available-tags))
     ;; Cleanup any leftover crap too.
@@ -323,6 +337,8 @@ Return non-nil if the decoration style is enabled."
            (flag  (if arg
                       (> (prefix-numeric-value arg) 0)
                     (not (cdr style)))))
+      (when (null style)
+       (error "Unknown decoration style %s" name))
       (unless (eq (cdr style) flag)
         ;; Store the new flag.
         (setcdr style flag)
@@ -364,9 +380,10 @@ IGNORE any input arguments."
   "Define a new decoration style with NAME.
 DOC is a documentation string describing the decoration style NAME.
 It is appended to auto-generated doc strings.
-An Optional list of FLAGS can also be specified.  Flags are:
+An optional list of FLAGS can also be specified.  Flags are:
   :enabled <value>  - specify the default enabled value for NAME.
-
+  :load <value>     - specify a feature (as a string) with the rest of
+                      the definition for decoration mode NAME.
 
 This defines two new overload functions respectively called `NAME-p'
 and `NAME-highlight', for which you must provide a default
@@ -384,9 +401,14 @@ To add other kind of decorations on a tag, `NAME-highlight' must use
 decoration API found in this library."
   (let ((predicate   (semantic-decorate-style-predicate   name))
         (highlighter (semantic-decorate-style-highlighter name))
+       (predicatedef   (semantic-decorate-style-predicate-default   name))
+       (highlighterdef (semantic-decorate-style-highlighter-default name))
        (defaultenable (if (plist-member flags :enabled)
                           (plist-get flags :enabled)
                         t))
+       (loadfile (if (plist-member flags :load)
+                     (plist-get flags :load)
+                   nil))
        )
     `(progn
        ;; Clear the menu cache so that new items are added when
@@ -406,7 +428,18 @@ decoration API found in this library."
        (add-to-list 'semantic-decoration-styles
                     (cons ',(symbol-name name)
                          ,defaultenable))
-       )))
+       ;; If there is a load file, then create the autoload tokens for
+       ;; those functions to load the token, but only if the fsym
+       ;; doesn't exist yet.
+       (when (stringp ,loadfile)
+        (unless (fboundp ',predicatedef)
+          (autoload ',predicatedef ',loadfile "Return non-nil to decorate TAG."
+            ))
+
+        (unless (fboundp ',highlighterdef)
+          (autoload ',highlighterdef ',loadfile "Decorate TAG."))
+        ))
+    ))
 \f
 ;;; Predefined decoration styles
 ;;
@@ -512,6 +545,20 @@ Use a primary decoration."
   (semantic-set-tag-face
    tag 'semantic-decoration-on-protected-members-face))
 
+;;; Decoration Modes in other files
+;;
+(declare-function semantic-decoration-on-includes-p-default
+                 "semantic/decorate/include")
+(declare-function semantic-decoration-on-includes-highlight-default
+                 "semantic/decorate/include")
+(define-semantic-decoration-style semantic-decoration-on-includes
+  "Highlight class members that are includes.
+This mode provides a nice context menu on the include statements."
+  :enabled t
+  :load "semantic/decorate/include")
+
+
+
 (provide 'semantic/decorate/mode)
 
 ;; Local variables: