Mercurial > hg > xemacs-beta
diff lisp/oobr/br-c-ft.el @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | 4103f0995bd7 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lisp/oobr/br-c-ft.el Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,111 @@ +;;!emacs +;; +;; FILE: br-c-ft.el +;; SUMMARY: OO-Browser C construct handling. +;; USAGE: GNU Emacs Lisp Library +;; KEYWORDS: c, tools +;; +;; AUTHOR: Bob Weiner +;; ORG: Motorola, Inc. +;; +;; ORIG-DATE: 3-May-95 at 16:47:05 +;; LAST-MOD: 21-Oct-95 at 04:30:51 by Bob Weiner +;; +;; Copyright (C) 1995 Free Software Foundation, Inc. +;; See the file BR-COPY for license information. +;; +;; This file is part of the OO-Browser. +;; +;; DESCRIPTION: +;; DESCRIP-END. + +;;; ************************************************************************ +;;; Other required Elisp libraries +;;; ************************************************************************ + +;;; ************************************************************************ +;;; Public variables +;;; ************************************************************************ + +(defvar c-default-classes + '("[constant]" "[enumeration]" "[function]" "[macro]" + "[structure]" "[type]" "[union]") + "*List of default class names of C constructs handled by the OO-Browser. + +If you add a class to this list, you also need to add appropriate filtering +code for features of the class to \"br-c-tags\".") + +;;; ************************************************************************ +;;; Public functions +;;; ************************************************************************ + +(defun c-add-default-classes () + ;; Add to 'system' class table. + (mapcar + (function + (lambda (class) + (br-add-class class br-null-path nil))) + c-default-classes)) + +(defun c-build-element-tags () + "Create C constructs tags file for the current Environment. +This excludes functions. Call this after building the language-specific +feature tags file." + ;; If c-tags have already been added to feature tags, then the feature tags + ;; buffer ends with ^L. + (set-buffer (funcall br-find-file-noselect-function br-feature-tags-file)) + (if (or (not (stringp br-tags-file)) + (progn (goto-char (point-max)) + (skip-chars-backward "\n") + (if (/= (point) (point-min)) + (backward-char 1)) + (= (following-char) ?\^L))) + nil + (message "Building C construct index...") +; For debugging. +; (message "%s %s %s" +; (expand-file-name "br-c-tags" br-directory) +; br-tags-file +; (mapcar 'expand-file-name +; (delq nil (append br-sys-search-dirs +; br-lib-search-dirs)))) + (apply 'call-process (expand-file-name "br-c-tags" br-directory) + nil nil nil + ;; If no etags program in exec-directory, use one in user's $PATH. + (let ((etags (expand-file-name "etags" exec-directory))) + (if (file-executable-p etags) etags "etags")) + br-tags-file + (mapcar 'expand-file-name + (delq nil (append br-sys-search-dirs br-lib-search-dirs)))) + (goto-char (point-max)) + (let ((c-tags-start (point))) + (insert-file-contents br-tags-file) + (goto-char (point-max)) + (insert "\^L\n") ;; To mark end of C tags insertion. + (delete-file br-tags-file) + (goto-char c-tags-start) + ;; Remove tag files which have no entries. + (while (re-search-forward "^\^L\n.*\n\^L\n" nil t) + (replace-match "\^L\n") + (forward-line -1))) + (message "Building C construct index...Done"))) + +(defun c-within-comment-p () + "Return non-nil if point is within a multi-line C comment." + ;; Generally don't have to check whether patterns are matched on single line + ;; comments ( // ...) since the regexps to match to will preclude this. + ;; Ignore comments of the form //***, which look like C comments when + ;; searching backward but are actually single line comments. + (save-excursion + (and (re-search-backward "\\(^\\|[^/]\\)/\\*\\|\\*/" nil t) + (not (looking-at "\\*/"))))) + +;;; ************************************************************************ +;;; Private functions +;;; ************************************************************************ + +;;; ************************************************************************ +;;; Private variables +;;; ************************************************************************ + +(provide 'br-c-ft)