annotate lisp/cedet/semantic/sb.el @ 104520:403fc49fd1a3

Minor comment tweak.
author Chong Yidong <cyd@stupidchicken.com>
date Sun, 27 Sep 2009 03:41:43 +0000
parents 273e528a9f9b
children bbd7017a25d9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
104435
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1 ;;; semantic/sb.el --- Semantic tag display for speedbar
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3 ;;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
4 ;;; 2007, 2008 Free Software Foundation, Inc.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Author: Eric M. Ludlam <zappo@gnu.org>
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7 ;; Keywords: syntax
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
14 ;; (at your option) any later version.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
15
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19 ;; GNU General Public License for more details.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
23
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24 ;;; Commentary:
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25 ;;
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26 ;; Convert a tag table into speedbar buttons.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28 ;;; TODO:
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30 ;; Use semanticdb to find which semanticdb-table is being used for each
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 ;; file/tag. Replace `semantic-sb-with-tag-buffer' to instead call
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32 ;; children with the new `with-mode-local' instead.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34 (require 'semantic)
104447
273e528a9f9b * emacs-lisp/autoload.el (generated-autoload-load-name): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 104446
diff changeset
35 (require 'semantic/format)
273e528a9f9b * emacs-lisp/autoload.el (generated-autoload-load-name): New var.
Chong Yidong <cyd@stupidchicken.com>
parents: 104446
diff changeset
36 (require 'semantic/sort)
104435
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37 (require 'semantic/util)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38 (require 'speedbar)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 (defcustom semantic-sb-autoexpand-length 1
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 "*Length of a semantic bucket to autoexpand in place.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
42 This will replace the named bucket that would have usually occured here."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 :group 'speedbar
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44 :type 'integer)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 (defcustom semantic-sb-button-format-tag-function 'semantic-format-tag-abbreviate
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47 "*Function called to create the text for a but from a token."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48 :group 'speedbar
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49 :type semantic-format-tag-custom-list)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
50
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
51 (defcustom semantic-sb-info-format-tag-function 'semantic-format-tag-summarize
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
52 "*Function called to create the text for info display from a token."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
53 :group 'speedbar
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
54 :type semantic-format-tag-custom-list)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
56 ;;; Code:
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57 ;;
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 ;;; Buffer setting for correct mode manipulation.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 (defun semantic-sb-tag-set-buffer (tag)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 "Set the current buffer to something associated with TAG.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
62 use the `speedbar-line-file' to get this info if needed."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63 (if (semantic-tag-buffer tag)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 (set-buffer (semantic-tag-buffer tag))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65 (let ((f (speedbar-line-file)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 (set-buffer (find-file-noselect f)))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
68 (defmacro semantic-sb-with-tag-buffer (tag &rest forms)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69 "Set the current buffer to the origin of TAG and execute FORMS.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 Restore the old current buffer when completed."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71 `(save-excursion
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72 (semantic-sb-tag-set-buffer ,tag)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
73 ,@forms))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74 (put 'semantic-sb-with-tag-buffer 'lisp-indent-function 1)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76 ;;; Button Generation
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 ;;
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78 ;; Here are some button groups:
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
79 ;;
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80 ;; +> Function ()
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 ;; @ return_type
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
82 ;; +( arg1
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83 ;; +| arg2
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 ;; +) arg3
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 ;;
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
86 ;; +> Variable[1] =
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87 ;; @ type
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 ;; = default value
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
89 ;;
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90 ;; +> keywrd Type
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91 ;; +> type part
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
92 ;;
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
93 ;; +> -> click to see additional information
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
94
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
95 (define-overloadable-function semantic-sb-tag-children-to-expand (tag)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96 "For TAG, return a list of children that TAG expands to.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97 If this returns a value, then a +> icon is created.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
98 If it returns nil, then a => icon is created.")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
100 (defun semantic-sb-tag-children-to-expand-default (tag)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
101 "For TAG, the children for type, variable, and function classes."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
102 (semantic-sb-with-tag-buffer tag
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103 (semantic-tag-components tag)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105 (defun semantic-sb-one-button (tag depth &optional prefix)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 "Insert TAG as a speedbar button at DEPTH.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
107 Optional PREFIX is used to specify special marker characters."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
108 (let* ((class (semantic-tag-class tag))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
109 (edata (semantic-sb-tag-children-to-expand tag))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
110 (type (semantic-tag-type tag))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 (abbrev (semantic-sb-with-tag-buffer tag
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 (funcall semantic-sb-button-format-tag-function tag)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 (start (point))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
114 (end (progn
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115 (insert (int-to-string depth) ":")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
116 (point))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
117 (insert-char ? (1- depth) nil)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
118 (put-text-property end (point) 'invisible nil)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 ;; take care of edata = (nil) -- a yucky but hard to clean case
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120 (if (and edata (listp edata) (and (<= (length edata) 1) (not (car edata))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121 (setq edata nil))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
122 (if (and (not edata)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123 (member class '(variable function))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 type)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125 (setq edata t))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 ;; types are a bit unique. Variable types can have special meaning.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127 (if edata
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128 (speedbar-insert-button (if prefix (concat " +" prefix) " +>")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129 'speedbar-button-face
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130 'speedbar-highlight-face
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131 'semantic-sb-show-extra
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 tag t)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133 (speedbar-insert-button (if prefix (concat " " prefix) " =>")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
134 nil nil nil nil t))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 (speedbar-insert-button abbrev
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136 'speedbar-tag-face
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137 'speedbar-highlight-face
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 'semantic-sb-token-jump
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
139 tag t)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
140 ;; This is very bizarre. When this was just after the insertion
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
141 ;; of the depth: text, the : would get erased, but only for the
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142 ;; auto-expanded short- buckets. Move back for a later version
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 ;; version of Emacs 21 CVS
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144 (put-text-property start end 'invisible t)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145 ))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147 (defun semantic-sb-speedbar-data-line (depth button text &optional
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 text-fun text-data)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149 "Insert a semantic token data element.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
150 DEPTH is the current depth. BUTTON is the text for the button.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151 TEXT is the actual info with TEXT-FUN to occur when it happens.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152 Argument TEXT-DATA is the token data to pass to TEXT-FUN."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 (let ((start (point))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154 (end (progn
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 (insert (int-to-string depth) ":")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 (point))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
157 (put-text-property start end 'invisible t)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158 (insert-char ? depth nil)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 (put-text-property end (point) 'invisible nil)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 (speedbar-insert-button button nil nil nil nil t)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161 (speedbar-insert-button text
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
162 'speedbar-tag-face
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163 (if text-fun 'speedbar-highlight-face)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164 text-fun text-data t)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165 ))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167 (defun semantic-sb-maybe-token-to-button (obj indent &optional
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 prefix modifiers)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 "Convert OBJ, which was returned from the semantic parser, into a button.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
170 This OBJ might be a plain string (simple type or untyped variable)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
171 or a complete tag.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 Argument INDENT is the indentation used when making the button.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173 Optional PREFIX is the character to use when marking the line.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 Optional MODIFIERS is additional text needed for variables."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 (let ((myprefix (or prefix ">")))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 (if (stringp obj)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177 (semantic-sb-speedbar-data-line indent myprefix obj)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178 (if (listp obj)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179 (progn
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 (if (and (stringp (car obj))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 (= (length obj) 1))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182 (semantic-sb-speedbar-data-line indent myprefix
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
183 (concat
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
184 (car obj)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 (or modifiers "")))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186 (semantic-sb-one-button obj indent prefix)))))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 (defun semantic-sb-insert-details (tag indent)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189 "Insert details about TAG at level INDENT."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 (let ((tt (semantic-tag-class tag))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 (type (semantic-tag-type tag)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 (cond ((eq tt 'type)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193 (let ((parts (semantic-tag-type-members tag))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 (newparts nil))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195 ;; Lets expect PARTS to be a list of either strings,
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196 ;; or variable tokens.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 (when (semantic-tag-p (car parts))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 ;; Bucketize into groups
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 (semantic-sb-with-tag-buffer (car parts)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 (setq newparts (semantic-bucketize parts)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
201 (when (> (length newparts) semantic-sb-autoexpand-length)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
202 ;; More than one bucket, insert inline
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 (semantic-sb-insert-tag-table (1- indent) newparts)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204 (setq parts nil))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205 ;; Dump the strings in.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206 (while parts
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 (semantic-sb-maybe-token-to-button (car parts) indent)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 (setq parts (cdr parts))))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 ((eq tt 'variable)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 (if type
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211 (semantic-sb-maybe-token-to-button type indent "@"))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212 (let ((default (semantic-tag-variable-default tag)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 (if default
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 (semantic-sb-maybe-token-to-button default indent "=")))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215 )
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216 ((eq tt 'function)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217 (if type
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 (semantic-sb-speedbar-data-line
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 indent "@"
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220 (if (stringp type) type
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221 (semantic-tag-name type))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222 ;; Arguments to the function
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
223 (let ((args (semantic-tag-function-arguments tag)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224 (if (and args (car args))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225 (progn
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
226 (semantic-sb-maybe-token-to-button (car args) indent "(")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
227 (setq args (cdr args))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
228 (while (> (length args) 1)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
229 (semantic-sb-maybe-token-to-button (car args)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
230 indent
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
231 "|")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
232 (setq args (cdr args)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
233 (if args
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
234 (semantic-sb-maybe-token-to-button
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
235 (car args) indent ")"))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
236 ))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
237 (t
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
238 (let ((components
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
239 (save-excursion
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
240 (when (and (semantic-tag-overlay tag)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
241 (semantic-tag-buffer tag))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
242 (set-buffer (semantic-tag-buffer tag)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
243 (semantic-sb-tag-children-to-expand tag))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
244 ;; Well, it wasn't one of the many things we expect.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
245 ;; Lets just insert them in with no decoration.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
246 (while components
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
247 (semantic-sb-one-button (car components) indent)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
248 (setq components (cdr components)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
249 ))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
250 )
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
251 ))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
252
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
253 (defun semantic-sb-detail-parent ()
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
254 "Return the first parent token of the current line that includes a location."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
255 (save-excursion
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
256 (beginning-of-line)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
257 (let ((dep (if (looking-at "[0-9]+:")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
258 (1- (string-to-number (match-string 0)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
259 0)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
260 (re-search-backward (concat "^"
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
261 (int-to-string dep)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
262 ":")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
263 nil t))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
264 (beginning-of-line)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
265 (if (looking-at "[0-9]+: +[-+][>()@|] \\([^\n]+\\)$")
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
266 (let ((prop nil))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
267 (goto-char (match-beginning 1))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
268 (setq prop (get-text-property (point) 'speedbar-token))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
269 (if (semantic-tag-with-position-p prop)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
270 prop
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
271 (semantic-sb-detail-parent)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
272 nil)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
273
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
274 (defun semantic-sb-show-extra (text token indent)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
275 "Display additional information about the token as an expansion.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
276 TEXT TOKEN and INDENT are the details."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
277 (cond ((string-match "+" text) ;we have to expand this file
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
278 (speedbar-change-expand-button-char ?-)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
279 (speedbar-with-writable
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
280 (save-excursion
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
281 (end-of-line) (forward-char 1)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
282 (save-restriction
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
283 (narrow-to-region (point) (point))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
284 ;; Add in stuff specific to this type of token.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
285 (semantic-sb-insert-details token (1+ indent))))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
286 ((string-match "-" text) ;we have to contract this node
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
287 (speedbar-change-expand-button-char ?+)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
288 (speedbar-delete-subblock indent))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
289 (t (error "Ooops... not sure what to do")))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
290 (speedbar-center-buffer-smartly))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
291
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
292 (defun semantic-sb-token-jump (text token indent)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
293 "Jump to the location specified in token.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
294 TEXT TOKEN and INDENT are the details."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
295 (let ((file
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
296 (or
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
297 (cond ((fboundp 'speedbar-line-path)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
298 (speedbar-line-directory indent))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
299 ((fboundp 'speedbar-line-directory)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
300 (speedbar-line-directory indent)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
301 ;; If speedbar cannot figure this out, extract the filename from
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
302 ;; the token. True for Analysis mode.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
303 (semantic-tag-file-name token)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
304 (parent (semantic-sb-detail-parent)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
305 (let ((f (selected-frame)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
306 (dframe-select-attached-frame speedbar-frame)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
307 (run-hooks 'speedbar-before-visiting-tag-hook)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
308 (select-frame f))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
309 ;; Sometimes FILE may be nil here. If you are debugging a problem
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
310 ;; when this happens, go back and figure out why FILE is nil and try
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
311 ;; and fix the source.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
312 (speedbar-find-file-in-frame file)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
313 (save-excursion (speedbar-stealthy-updates))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
314 (semantic-go-to-tag token parent)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
315 (switch-to-buffer (current-buffer))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
316 ;; Reset the timer with a new timeout when cliking a file
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
317 ;; in case the user was navigating directories, we can cancel
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
318 ;; that other timer.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
319 ;; (speedbar-set-timer dframe-update-speed)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
320 ;;(recenter)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
321 (speedbar-maybee-jump-to-attached-frame)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
322 (run-hooks 'speedbar-visiting-tag-hook)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
323
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
324 (defun semantic-sb-expand-group (text token indent)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
325 "Expand a group which has semantic tokens.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
326 TEXT TOKEN and INDENT are the details."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
327 (cond ((string-match "+" text) ;we have to expand this file
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
328 (speedbar-change-expand-button-char ?-)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
329 (speedbar-with-writable
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
330 (save-excursion
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
331 (end-of-line) (forward-char 1)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
332 (save-restriction
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
333 (narrow-to-region (point-min) (point))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
334 (semantic-sb-buttons-plain (1+ indent) token)))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
335 ((string-match "-" text) ;we have to contract this node
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
336 (speedbar-change-expand-button-char ?+)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
337 (speedbar-delete-subblock indent))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
338 (t (error "Ooops... not sure what to do")))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
339 (speedbar-center-buffer-smartly))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
340
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
341 (defun semantic-sb-buttons-plain (level tokens)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
342 "Create buttons at LEVEL using TOKENS."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
343 (let ((sordid (speedbar-create-tag-hierarchy tokens)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
344 (while sordid
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
345 (cond ((null (car-safe sordid)) nil)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
346 ((consp (car-safe (cdr-safe (car-safe sordid))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
347 ;; A group!
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
348 (speedbar-make-tag-line 'curly ?+ 'semantic-sb-expand-group
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
349 (cdr (car sordid))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
350 (car (car sordid))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
351 nil nil 'speedbar-tag-face
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
352 level))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
353 (t ;; Assume that this is a token.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
354 (semantic-sb-one-button (car sordid) level)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
355 (setq sordid (cdr sordid)))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
356
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
357 (defun semantic-sb-insert-tag-table (level table)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
358 "At LEVEL, insert the tag table TABLE.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
359 Use arcane knowledge about the semantic tokens in the tagged elements
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
360 to create much wiser decisions about how to sort and group these items."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
361 (semantic-sb-buttons level table))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
362
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
363 (defun semantic-sb-buttons (level lst)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
364 "Create buttons at LEVEL using LST sorting into type buckets."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
365 (save-restriction
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
366 (narrow-to-region (point-min) (point))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
367 (let (tmp)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
368 (while lst
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
369 (setq tmp (car lst))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
370 (if (cdr tmp)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
371 (if (<= (length (cdr tmp)) semantic-sb-autoexpand-length)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
372 (semantic-sb-buttons-plain (1+ level) (cdr tmp))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
373 (speedbar-make-tag-line 'curly ?+ 'semantic-sb-expand-group
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
374 (cdr tmp)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
375 (car (car lst))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
376 nil nil 'speedbar-tag-face
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
377 (1+ level))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
378 (setq lst (cdr lst))))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
379
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
380 (defun semantic-sb-fetch-tag-table (file)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
381 "Load FILE into a buffer, and generate tags using the Semantic parser.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
382 Returns the tag list, or t for an error."
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
383 (let ((out nil))
104446
df08b7ab0ba0 lisp/cedet/semantic/analyze.el: Add local vars for autoloading.
Chong Yidong <cyd@stupidchicken.com>
parents: 104435
diff changeset
384 (if (and (featurep 'semantic/db)
df08b7ab0ba0 lisp/cedet/semantic/analyze.el: Add local vars for autoloading.
Chong Yidong <cyd@stupidchicken.com>
parents: 104435
diff changeset
385 (semanticdb-minor-mode-p)
104435
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
386 (not speedbar-power-click)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
387 ;; If the database is loaded and running, try to get
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
388 ;; tokens from it.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
389 (setq out (semanticdb-file-stream file)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
390 ;; Successful DB query.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
391 nil
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
392 ;; No database, do it the old way.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
393 (save-excursion
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
394 (set-buffer (find-file-noselect file))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
395 (if (or (not (featurep 'semantic))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
396 (not semantic--parse-table))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
397 (setq out t)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
398 (if speedbar-power-click (semantic-clear-toplevel-cache))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
399 (setq out (semantic-fetch-tags)))))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
400 (if (listp out)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
401 (condition-case nil
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
402 (progn
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
403 ;; This brings externally defind methods into
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
404 ;; their classes, and creates meta classes for
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
405 ;; orphans.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
406 (setq out (semantic-adopt-external-members out))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
407 ;; Dump all the tokens into buckets.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
408 (semantic-sb-with-tag-buffer (car out)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
409 (semantic-bucketize out)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
410 (error t))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
411 t)))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
412
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
413 ;; Link ourselves into the tagging process.
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
414 (add-to-list 'speedbar-dynamic-tags-function-list
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
415 '(semantic-sb-fetch-tag-table . semantic-sb-insert-tag-table))
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
416
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
417 (provide 'semantic/sb)
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
418
52067a6bf088 semantic/cedet/db-global.el, semantic/cedet/ia-sb.el,
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
419 ;;; semantic/sb.el ends here