Source

semantic / semantic-example.el

youngs c3f6af5 

michaels 636b1ed 
youngs c3f6af5 


















michaels 636b1ed 

youngs c3f6af5 




michaels 636b1ed 
youngs c3f6af5 



















michaels 636b1ed 
youngs c3f6af5 



michaels 636b1ed 
youngs c3f6af5 

michaels 636b1ed 
youngs c3f6af5 







michaels 636b1ed 
youngs c3f6af5 










michaels 636b1ed 
youngs c3f6af5 



michaels 636b1ed 
youngs c3f6af5 



michaels 636b1ed 
youngs c3f6af5 

michaels 636b1ed 
youngs c3f6af5 






michaels 636b1ed 

youngs c3f6af5 













michaels 636b1ed 
youngs c3f6af5 






























;;; semanto-example.el --- Examples using the semantic API

;;; Copyright (C) 2002, 2003, 2004, 2005 Eric M. Ludlam

;; Author: Eric M. Ludlam <zappo@gnu.org>
;; Keywords: syntax
;; X-RCS: $Id$

;; This file is not part of GNU Emacs.

;; Semantic is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 2, or (at your option)
;; any later version.

;; This software is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;; GNU General Public License for more details.

;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING.  If not, write to the
;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
;; Boston, MA 02110-1301, USA.

;;; Commentary:
;;
;; Simplified example programs that use the semantic API.

;;; Code:
(defun se-jump (name)
  "Jump to the token with NAME.
Shows how to:
 * Interactivly finding a token name from a stream.
 * Getting symbols under point.
 * Getting the main token list
 * Finding a token by name.
 * Highlighting a token"
  (interactive
   (list
    ;; Helpful way of interactivly querying for a token name.
    (semantic-read-symbol
     "Jump to: "
     ;; The default can be the text under the cursor.
     ;; It returns a list such that:
     ;;  this.that.th
     ;; is
     ;; ( "this" "that" "th" )
     (car (reverse (semantic-ctxt-current-symbol)))
     ;; The stream is from this buffer
     (semantic-fetch-tags)
     ;; We don't need a filter.
     nil )))
  (let (tok pos)
    ;; Search for the token
    (setq tok (semantic-find-first-tag-by-name
	       name
	       ;; Get the stream.  May be a buffer too.
	       (semantic-fetch-tags)
	       ;; Look inside structures
	       t
	       ;; Don't search include files. Perhaps a later
	       ;; revision?
	       nil))
    (if tok
	(progn
	  ;; Get the position of the token.
	  (setq pos (semantic-tag-start tok))
	  ;; Jump.
	  ;; Because we only searched this buffer, we can assume the token is
	  ;; also in this buffer.
	  (goto-char pos)
	  ;; Fancy stuff: Hightlight the token we jumped to.
	  ;; This will automatically unhighlight the token later.
	  (semantic-momentary-highlight-token tok)
	  )
      (error "No tag %s found" name)
      )))

(defcustom se-summary-function 'semantic-format-tag-uml-prototype
  "*Function to use when showing info about a token for Examples.
Shows how to:
  * Create a customization variable."
  :group 'semantic
  :type semantic-format-tag-custom-list)

(defun se-show (name)
  "Show important information about some token with NAME.
Shows how to:
 * Create a variable with `semantic-format-tag-functions'.
 * Create the colorized text."
  (interactive (list (semantic-read-symbol "Symbol: ")))
  (let ((tok (semantic-find-first-tag-by-name name (current-buffer) t))
	parent
	msg)
    (if tok
	(save-excursion
	  ;; Token text functions can take a PARENT argument.  To find this
	  ;; really quickly, jump to TOK, then use the overlay mechanism to
	  ;; Find it.
	  (goto-char (semantic-tag-start tok))
	  (setq parent (semantic-current-tag-parent))
	  ;; Create a message
	  (setq msg (funcall se-summary-function tok parent t))
	  ;; Display it
	  (message msg)))))

(defun se-db-apropos-show (name)
  "Show information about several tokens matching NAME using semanticdb.
Shows how to:
  * Query the database.
  * Decode the databases' output."
  (interactive
   (list (read-string "Symbol: "
		      ;; Current symbol is the default
		      (car (reverse (semantic-ctxt-current-symbol))))))
  (let ((tok (semanticdb-deep-find-tags-by-name-regexp
	      name
	      ;; The current list of active databases for this file.
	      ;; This is the same as passing `nil'
	      (semanticdb-current-database-list)
	      t   ;; When a token is found, make sure it is
	          ;; an active buffer.
	      )))
    ;; Each entry in the database is a list
    ;; starting with the database a token was found in,
    ;; followed by the tokens found.
    (message
     (mapconcat
      ;; Outer lambda: Decode the database search format.
      (lambda (db-list)
	(mapconcat
	 ;; Inner lambda: Convert found tokens into text.
	 (lambda (tok)
	   (funcall se-summary-function
		    tok
		    nil
		    t))
	 ;; The first element is the database.  The second is a token.
	 (cdr db-list)
	 "\n"))
      tok
      "\n"))
    ))


(provide 'semantic-example)

;;; semantic-example.el ends here
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.