diff options
author | Roland McGrath <roland@gnu.org> | 1993-04-01 02:11:02 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 1993-04-01 02:11:02 +0000 |
commit | 4a92b718e07fd4f70f7efb5b806b97891f77edf9 (patch) | |
tree | ffd1e508fb439bde6225815a32abf6ebe60740ea | |
parent | 77328ee1d334aa0cf2c3ca9990c6fa568d5d02fa (diff) | |
download | emacs-4a92b718e07fd4f70f7efb5b806b97891f77edf9.tar.gz emacs-4a92b718e07fd4f70f7efb5b806b97891f77edf9.tar.bz2 emacs-4a92b718e07fd4f70f7efb5b806b97891f77edf9.zip |
(etags-tags-completion-table): Rewritten with a mondo regexp.
-rw-r--r-- | lisp/progmodes/etags.el | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index b1aae1b2db5..45528ccef8f 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -851,24 +851,24 @@ See documentation of variable `tags-file-name'." (let ((table (make-vector 511 0))) (save-excursion (goto-char (point-min)) - (while (search-forward "\177" nil t) - ;; Handle multiple \177's on a line. - (save-excursion - (skip-syntax-backward "w_") - (or (bolp) - (intern (buffer-substring - (point) - (progn - (skip-syntax-backward "w_") - ;; ??? New - ;; `::' in the middle of a C++ tag. - (and (= (preceding-char) ?:) - (= (char-after (- (point) 2)) ?:) - (progn - (backward-char 2) - (skip-syntax-backward "w_"))) - (point))) - table))))) + ;; This monster regexp matches an etags tag line. + ;; \1 is the string to match; + ;; \2 is not interesting; + ;; \3 is the guessed tag name; XXX guess should be better eg DEFUN + ;; \4 is the char to start searching at; + ;; \5 is the line to start searching at; + ;; \6 is not interesting; + ;; \7 is the explicitly-specified tag name. + (while (re-search-forward + "^\\(\\(.+[ \t]+\\)?\\([-a-zA-Z0-9_$]+\\)[^-a-zA-Z0-9_$]*\\)\177\ +\\([0-9]+\\),\\([0-9]+\\)\\(,\001\\([^\n]+\\)\\)?\n" + nil t) + (intern (if (match-beginning 6) + ;; There is an explicit tag name. + (buffer-substring (match-beginning 6) (match-end 6)) + ;; No explicit tag name. Best guess. + (buffer-substring (match-beginning 3) (match-end 3))) + table))) table)) (defun etags-snarf-tag () |