Mercurial > emacs
view lisp/cedet/srecode/cpp.el @ 110309:14a601b405fc
SQL Mode, Version 2.6
* progmodes/sql.el: Version 2.6
(sql-dialect): Synonym for "sql-product".
(sql-find-sqli-buffer, sql-set-sqli-buffer-generally)
(sql-set-sqli-buffer, sql-show-sqli-buffer, sql-interactive-mode):
Set "sql-buffer" to buffer name not buffer object so multiple sql
interactive buffers work properly. Reverts misguided changes in
earlier work.
(sql-comint): Make sure different buffer name is used if "*SQL*"
buffer is for a different product.
(sql-make-alternate-buffer-name): Fix bug with "sql-database"
login param.
(sql-oracle, sql-sybase, sql-informix, sql-sqlite, sql-mysql)
(sql-solid, sql-ingres, sql-ms, sql-postgres, sql-interbase)
(sql-db2, sql-linter, sql-product-interactive, sql-rename-buffer):
Accept new buffer name or prompt for one.
(sql-port): Default to zero.
(sql-comint-mysql): Handle "sql-port" as a numeric.
(sql-port-history): Delete unused variable.
(sql-get-login): Default "sql-port" to a number.
(sql-product-alist): Correct Postgres prompt and terminator
regexp.
(sql-sqlite-program): Dynamically detect presence of "sqlite" or
"sqlite3" executables.
(sql-sqlite-login-params): Add "*.sqlite[23]?" database name
pattern.
(sql-buffer-live-p): New function.
(sql-mode-menu, sql-send-string): Use it.
(sql-mode-oracle-font-lock-keywords): Improve SQL*Plus REMARK
syntax pattern.
(sql-mode-postgres-font-lock-keywords): Support Postgres V9.
(sql-mode-sqlite-font-lock-keywords): Hilight sqlite commands.
author | Michael Mauger <mmaug@yahoo.com> |
---|---|
date | Fri, 10 Sep 2010 23:17:02 -0400 |
parents | 1d1d5d9bd884 |
children | 67ff8ad45bd5 |
line wrap: on
line source
;;; srecode/cpp.el --- C++ specific handlers for Semantic Recoder ;; Copyright (C) 2007, 2009, 2010 Free Software Foundation, Inc. ;; Author: Eric M. Ludlam <eric@siege-engine.com> ;; Jan Moringen <scymtym@users.sourceforge.net> ;; This file is part of GNU Emacs. ;; GNU Emacs 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 3 of the License, or ;; (at your option) any later version. ;; GNU Emacs 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. If not, see <http://www.gnu.org/licenses/>. ;;; Commentary: ;; ;; Supply some C++ specific dictionary fillers and helpers ;;; Code: ;;; :cpp ARGUMENT HANDLING ;; ;; When a :cpp argument is required, fill the dictionary with ;; information about the current C++ file. ;; ;; Error if not in a C++ mode. (require 'srecode) (require 'srecode/dictionary) (require 'srecode/semantic) ;;;###autoload (defun srecode-semantic-handle-:cpp (dict) "Add macros into the dictionary DICT based on the current c++ file. Adds the following: FILENAME_SYMBOL - filename converted into a C compat symbol. HEADER - Shown section if in a header file." ;; A symbol representing (let ((fsym (file-name-nondirectory (buffer-file-name))) (case-fold-search t)) ;; Are we in a header file? (if (string-match "\\.\\(h\\|hh\\|hpp\\|h\\+\\+\\)$" fsym) (srecode-dictionary-show-section dict "HEADER") (srecode-dictionary-show-section dict "NOTHEADER")) ;; Strip out bad characters (while (string-match "\\.\\| " fsym) (setq fsym (replace-match "_" t t fsym))) (srecode-dictionary-set-value dict "FILENAME_SYMBOL" fsym) ) ) (define-mode-local-override srecode-semantic-apply-tag-to-dict c++-mode (tag-wrapper dict) "Apply C++ specific features from TAG-WRAPPER into DICT. Calls `srecode-semantic-apply-tag-to-dict-default' first. Adds special behavior for tag of classes include, using and function." ;; Use default implementation to fill in the basic properties. (srecode-semantic-apply-tag-to-dict-default tag-wrapper dict) ;; Pull out the tag for the individual pieces. (let* ((tag (oref tag-wrapper :prime)) (class (semantic-tag-class tag))) ;; Add additional information based on the class of the tag. (cond ;; ;; INCLUDE ;; ((eq class 'include) ;; For include tags, we have to discriminate between system-wide ;; and local includes. (if (semantic-tag-include-system-p tag) (srecode-dictionary-show-section dict "SYSTEM") (srecode-dictionary-show-section dict "LOCAL"))) ;; ;; USING ;; ((eq class 'using) ;; Insert the subject (a tag) of the include statement as VALUE ;; entry into the dictionary. (let ((value-tag (semantic-tag-get-attribute tag :value)) (value-dict (srecode-dictionary-add-section-dictionary dict "VALUE"))) (srecode-semantic-apply-tag-to-dict (srecode-semantic-tag (semantic-tag-name value-tag) :prime value-tag) value-dict)) ;; Discriminate using statements referring to namespaces and ;; types. (when (eq (semantic-tag-get-attribute tag :kind) 'namespace) (srecode-dictionary-show-section dict "NAMESPACE"))) ;; ;; FUNCTION ;; ((eq class 'function) ;; @todo It would be nice to distinguish member functions from ;; free functions and only apply the const and pure modifiers, ;; when they make sense. My best bet would be ;; (semantic-tag-function-parent tag), but it is not there, when ;; the function is defined in the scope of a class. (let ((member 't) (modifiers (semantic-tag-modifiers tag))) ;; Add modifiers into the dictionary (dolist (modifier modifiers) (let ((modifier-dict (srecode-dictionary-add-section-dictionary dict "MODIFIERS"))) (srecode-dictionary-set-value modifier-dict "NAME" modifier))) ;; When the function is a member function, it can have ;; additional modifiers. (when member ;; For member functions, constness is called ;; 'methodconst-flag'. (when (semantic-tag-get-attribute tag :methodconst-flag) (srecode-dictionary-show-section dict "CONST")) ;; If the member function is pure virtual, add a dictionary ;; entry. (when (semantic-tag-get-attribute tag :pure-virtual-flag) (srecode-dictionary-show-section dict "PURE")) ) )) )) ) (provide 'srecode/cpp) ;; Local variables: ;; generated-autoload-file: "loaddefs.el" ;; generated-autoload-load-name: "srecode/cpp" ;; End: ;; arch-tag: 4659755c-88b4-405e-818f-bb1f776a8e82 ;;; srecode/cpp.el ends here