annotate lib-src/etags.c @ 53879:e3771c262410

New file. Move original fringe related declarations and code from dispextern.h and xdisp.c here. Rework code to support user defined fringe bitmaps, redefining standard bitmaps, ability to overlay user defined bitmap with overlay arrow bitmap, and add faces to bitmaps. (Voverflow_newline_into_fringe): Declare here. (enum fringe_bitmap_align): New enum. (..._bits): All bitmaps are now defined without bitswapping; that is now done in init_fringe_once (if necessary). (standard_bitmaps): New array with specifications for the standard fringe bitmaps. (fringe_faces): New array. (valid_fringe_bitmap_id_p): New function. (draw_fringe_bitmap_1): Rename from draw_fringe_bitmap. (draw_fringe_bitmap): New function which draws fringe bitmap, possibly overlaying bitmap with cursor in right fringe or the overlay arrow in the left fringe. (update_window_fringes): Do not handle overlay arrow here. Compare and copy fringe bitmap faces. (init_fringe_bitmap): New function. (Fdefine_fringe_bitmap, Fdestroy_fringe_bitmap): New DEFUNs to define and destroy user defined fringe bitmaps. (Fset_fringe_bitmap_face): New DEFUN to set face for a fringe bitmap. (Ffringe_bitmaps_at_pos): New DEFUN to read current fringe bitmaps. (syms_of_fringe): New function. Defsubr new DEFUNs. DEFVAR_LISP Voverflow_newline_into_fringe. (init_fringe_once, init_fringe): New functions. (w32_init_fringe, w32_reset_fringes) [WINDOWS_NT]: New functions.
author Kim F. Storm <storm@cua.dk>
date Sun, 08 Feb 2004 23:18:16 +0000
parents c6c2d0694257
children 1c425ce93ce9 375f2633d815
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
35653
96f71478797d Add a coding: tag.
Eli Zaretskii <eliz@gnu.org>
parents: 35574
diff changeset
1 /* Tags file maker to go with GNU Emacs -*- coding: latin-1 -*-
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2 Copyright (C) 1984, 1987-1989, 1993-1995, 1998-2001, 2002
11231
3cf67df24e7f Update copyright.
Karl Heuer <kwzh@gnu.org>
parents: 10990
diff changeset
3 Free Software Foundation, Inc. and Ken Arnold
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14144
diff changeset
4
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5 This file is not considered part of GNU Emacs.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
7 This program is free software; you can redistribute it and/or modify
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
8 it under the terms of the GNU General Public License as published by
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
9 the Free Software Foundation; either version 2 of the License, or
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
10 (at your option) any later version.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
11
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
12 This program is distributed in the hope that it will be useful,
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
15 GNU General Public License for more details.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
16
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
17 You should have received a copy of the GNU General Public License
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
18 along with this program; if not, write to the Free Software Foundation,
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
19 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 * Authors:
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 * Ctags originally by Ken Arnold.
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
24 * Fortran added by Jim Kleckner.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 * Ed Pelegri-Llopart added C typedefs.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 * Gnu Emacs TAGS format and modifications by RMS?
35740
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
27 * 1989 Sam Kendall added C++.
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
28 * 1992 Joseph B. Wells improved C and C++ parsing.
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
29 * 1993 Francesco Potort́ reorganised C and C++.
45925
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
30 * 1994 Line-by-line regexp tags by Tom Tromey.
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
31 * 2001 Nested classes by Francesco Potort́ (concept by Mykola Dzyuba).
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
32 * 2002 #line directives by Francesco Potort́.
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
33 *
45918
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
34 * Francesco Potort́ <pot@gnu.org> has maintained and improved it since 1993.
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
35 *
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 */
10761
7aa80669e697 * etags.c (C_entries): Bug corrected in xrealloc of token_str.
Francesco Potortì <pot@gnu.org>
parents: 10754
diff changeset
37
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
38 char pot_etags_version[] = "@(#) pot revision number is 16.56";
10801
32f98b512dd9 * etags.c (C_entries): token_saved removed. Initialise tok.valid and
Francesco Potortì <pot@gnu.org>
parents: 10761
diff changeset
39
32f98b512dd9 * etags.c (C_entries): token_saved removed. Initialise tok.valid and
Francesco Potortì <pot@gnu.org>
parents: 10761
diff changeset
40 #define TRUE 1
32f98b512dd9 * etags.c (C_entries): token_saved removed. Initialise tok.valid and
Francesco Potortì <pot@gnu.org>
parents: 10761
diff changeset
41 #define FALSE 0
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
42
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
43 #ifdef DEBUG
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
44 # undef DEBUG
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
45 # define DEBUG TRUE
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
46 #else
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
47 # define DEBUG FALSE
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
48 # define NDEBUG /* disable assert */
10801
32f98b512dd9 * etags.c (C_entries): token_saved removed. Initialise tok.valid and
Francesco Potortì <pot@gnu.org>
parents: 10761
diff changeset
49 #endif
10754
cd1c0b5e8634 * etags.c (C_entries): Initialise the new members of TOKEN.
Francesco Potortì <pot@gnu.org>
parents: 10623
diff changeset
50
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 24879
diff changeset
51 #ifdef HAVE_CONFIG_H
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 24879
diff changeset
52 # include <config.h>
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 24879
diff changeset
53 /* On some systems, Emacs defines static as nothing for the sake
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 24879
diff changeset
54 of unexec. We don't want that here since we don't use unexec. */
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 24879
diff changeset
55 # undef static
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
56 # define ETAGS_REGEXPS /* use the regexp features */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
57 # define LONG_OPTIONS /* accept long options */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
58 # ifndef PTR /* for Xemacs */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
59 # define PTR void *
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
60 # endif
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
61 # ifndef __P /* for Xemacs */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
62 # define __P(args) args
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
63 # endif
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
64 #else
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
65 # if defined(__STDC__) && (__STDC__ || defined(__SUNPRO_C))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
66 # define __P(args) args /* use prototypes */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
67 # define PTR void * /* for generic pointers */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
68 # else
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
69 # define __P(args) () /* no prototypes */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
70 # define const /* remove const for old compilers' sake */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
71 # define PTR long * /* don't use void* */
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
72 # endif
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
73 #endif /* !HAVE_CONFIG_H */
26083
134b57acef68 Add support for large files. Merge glibc 2.1.2.
Paul Eggert <eggert@twinsun.com>
parents: 24879
diff changeset
74
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
75 #ifndef _GNU_SOURCE
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
76 # define _GNU_SOURCE 1 /* enables some compiler checks on GNU */
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
77 #endif
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
78
35740
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
79 /* WIN32_NATIVE is for Xemacs.
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
80 MSDOS, WINDOWSNT, DOS_NT are for Emacs. */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
81 #ifdef WIN32_NATIVE
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
82 # undef MSDOS
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
83 # undef WINDOWSNT
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
84 # define WINDOWSNT
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
85 #endif /* WIN32_NATIVE */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
86
5448
18de002e47dd (main) [MSDOS]: Open all files as binary.
Richard M. Stallman <rms@gnu.org>
parents: 5044
diff changeset
87 #ifdef MSDOS
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
88 # undef MSDOS
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
89 # define MSDOS TRUE
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
90 # include <fcntl.h>
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
91 # include <sys/param.h>
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
92 # include <io.h>
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
93 # ifndef HAVE_CONFIG_H
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
94 # define DOS_NT
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
95 # include <sys/config.h>
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
96 # endif
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
97 #else
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
98 # define MSDOS FALSE
5448
18de002e47dd (main) [MSDOS]: Open all files as binary.
Richard M. Stallman <rms@gnu.org>
parents: 5044
diff changeset
99 #endif /* MSDOS */
18de002e47dd (main) [MSDOS]: Open all files as binary.
Richard M. Stallman <rms@gnu.org>
parents: 5044
diff changeset
100
9773
bd49556a7552 (main, etags_getcwd): Test DOS_NT instead of MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 9635
diff changeset
101 #ifdef WINDOWSNT
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
102 # include <stdlib.h>
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
103 # include <fcntl.h>
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
104 # include <string.h>
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
105 # include <direct.h>
14982
b470e33ce4a9 [WINDOWSNT]: Include io.h.
Richard M. Stallman <rms@gnu.org>
parents: 14924
diff changeset
106 # include <io.h>
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
107 # define MAXPATHLEN _MAX_PATH
35740
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
108 # undef HAVE_NTGUI
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
109 # undef DOS_NT
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
110 # define DOS_NT
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
111 # ifndef HAVE_GETCWD
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
112 # define HAVE_GETCWD
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
113 # endif /* undef HAVE_GETCWD */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
114 #else /* !WINDOWSNT */
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
115 # ifdef STDC_HEADERS
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
116 # include <stdlib.h>
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
117 # include <string.h>
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
118 # else
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
119 extern char *getenv ();
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
120 # endif
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
121 #endif /* !WINDOWSNT */
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
122
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
123 #ifdef HAVE_UNISTD_H
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
124 # include <unistd.h>
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
125 #else
35740
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
126 # if defined (HAVE_GETCWD) && !defined (WINDOWSNT)
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
127 extern char *getcwd (char *buf, size_t size);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
128 # endif
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
129 #endif /* HAVE_UNISTD_H */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
130
3921
e5e5b3634dd0 * etags.c: #include "config.h" and the alloca CPP tangle before
Jim Blandy <jimb@redhat.com>
parents: 3838
diff changeset
131 #include <stdio.h>
e5e5b3634dd0 * etags.c: #include "config.h" and the alloca CPP tangle before
Jim Blandy <jimb@redhat.com>
parents: 3838
diff changeset
132 #include <ctype.h>
9975
e21b0674f37c * etags.c (<errno.h>): #include added.
Francesco Potortì <pot@gnu.org>
parents: 9773
diff changeset
133 #include <errno.h>
e21b0674f37c * etags.c (<errno.h>): #include added.
Francesco Potortì <pot@gnu.org>
parents: 9773
diff changeset
134 #ifndef errno
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
135 extern int errno;
9975
e21b0674f37c * etags.c (<errno.h>): #include added.
Francesco Potortì <pot@gnu.org>
parents: 9773
diff changeset
136 #endif
3921
e5e5b3634dd0 * etags.c: #include "config.h" and the alloca CPP tangle before
Jim Blandy <jimb@redhat.com>
parents: 3838
diff changeset
137 #include <sys/types.h>
e5e5b3634dd0 * etags.c: #include "config.h" and the alloca CPP tangle before
Jim Blandy <jimb@redhat.com>
parents: 3838
diff changeset
138 #include <sys/stat.h>
e5e5b3634dd0 * etags.c: #include "config.h" and the alloca CPP tangle before
Jim Blandy <jimb@redhat.com>
parents: 3838
diff changeset
139
35758
aa069bbee4c8 Work around small preprocessor bugs in sunos4 pcc and MinGW.
Francesco Potortì <pot@gnu.org>
parents: 35741
diff changeset
140 #include <assert.h>
aa069bbee4c8 Work around small preprocessor bugs in sunos4 pcc and MinGW.
Francesco Potortì <pot@gnu.org>
parents: 35741
diff changeset
141 #ifdef NDEBUG
aa069bbee4c8 Work around small preprocessor bugs in sunos4 pcc and MinGW.
Francesco Potortì <pot@gnu.org>
parents: 35741
diff changeset
142 # undef assert /* some systems have a buggy assert.h */
aa069bbee4c8 Work around small preprocessor bugs in sunos4 pcc and MinGW.
Francesco Potortì <pot@gnu.org>
parents: 35741
diff changeset
143 # define assert(x) ((void) 0)
35741
e0acf4b43873 (assert) [__MINGW32__]: Redefine assert to work around a
Andrew Innes <andrewi@gnu.org>
parents: 35740
diff changeset
144 #endif
e0acf4b43873 (assert) [__MINGW32__]: Redefine assert to work around a
Andrew Innes <andrewi@gnu.org>
parents: 35740
diff changeset
145
4804
810826b6e19a * etags.c (process_file): dead code removed.
Francesco Potortì <pot@gnu.org>
parents: 4750
diff changeset
146 #if !defined (S_ISREG) && defined (S_IFREG)
810826b6e19a * etags.c (process_file): dead code removed.
Francesco Potortì <pot@gnu.org>
parents: 4750
diff changeset
147 # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
810826b6e19a * etags.c (process_file): dead code removed.
Francesco Potortì <pot@gnu.org>
parents: 4750
diff changeset
148 #endif
810826b6e19a * etags.c (process_file): dead code removed.
Francesco Potortì <pot@gnu.org>
parents: 4750
diff changeset
149
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
150 #ifdef LONG_OPTIONS
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
151 # include <getopt.h>
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
152 #else
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
153 # define getopt_long(argc,argv,optstr,lopts,lind) getopt (argc, argv, optstr)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
154 extern char *optarg;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
155 extern int optind, opterr;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
156 #endif /* LONG_OPTIONS */
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
157
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
158 #ifdef ETAGS_REGEXPS
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
159 # ifndef HAVE_CONFIG_H /* this is a standalone compilation */
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
160 # ifdef __CYGWIN__ /* compiling on Cygwin */
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
161 !!! NOTICE !!!
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
162 the regex.h distributed with Cygwin is not compatible with etags, alas!
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
163 If you want regular expression support, you should delete this notice and
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
164 arrange to use the GNU regex.h and regex.c.
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
165 # endif
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
166 # endif
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
167 # include <regex.h>
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
168 #endif /* ETAGS_REGEXPS */
3921
e5e5b3634dd0 * etags.c: #include "config.h" and the alloca CPP tangle before
Jim Blandy <jimb@redhat.com>
parents: 3838
diff changeset
169
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
170 /* Define CTAGS to make the program "ctags" compatible with the usual one.
17168
53314a257690 * etags.c (add_regex): reset *putbuf before using it.
Francesco Potortì <pot@gnu.org>
parents: 16733
diff changeset
171 Leave it undefined to make the program "etags", which makes emacs-style
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
172 tag tables and tags typedefs, #defines and struct/union/enum by default. */
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
173 #ifdef CTAGS
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
174 # undef CTAGS
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
175 # define CTAGS TRUE
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
176 #else
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
177 # define CTAGS FALSE
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 #endif
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 /* Exit codes for success and failure. */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 #ifdef VMS
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
182 # define GOOD 1
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
183 # define BAD 0
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 #else
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
185 # define GOOD 0
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
186 # define BAD 1
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 #endif
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
189 #define streq(s,t) (assert((s)!=NULL || (t)!=NULL), !strcmp (s, t))
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
190 #define strcaseeq(s,t) (assert((s)!=NULL && (t)!=NULL), !etags_strcasecmp (s, t))
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
191 #define strneq(s,t,n) (assert((s)!=NULL || (t)!=NULL), !strncmp (s, t, n))
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
192 #define strncaseeq(s,t,n) (assert((s)!=NULL && (t)!=NULL), !etags_strncasecmp (s, t, n))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
194 #define CHARS 256 /* 2^sizeof(char) */
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
195 #define CHAR(x) ((unsigned int)(x) & (CHARS - 1))
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
196 #define iswhite(c) (_wht[CHAR(c)]) /* c is white (see white) */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
197 #define notinname(c) (_nin[CHAR(c)]) /* c is not in a name (see nonam) */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
198 #define begtoken(c) (_btk[CHAR(c)]) /* c can start token (see begtk) */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
199 #define intoken(c) (_itk[CHAR(c)]) /* c can be in token (see midtk) */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
200 #define endtoken(c) (_etk[CHAR(c)]) /* c ends tokens (see endtk) */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
202 #define ISALNUM(c) isalnum (CHAR(c))
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
203 #define ISALPHA(c) isalpha (CHAR(c))
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
204 #define ISDIGIT(c) isdigit (CHAR(c))
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
205 #define ISLOWER(c) islower (CHAR(c))
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
206
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
207 #define lowcase(c) tolower (CHAR(c))
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
208 #define upcase(c) toupper (CHAR(c))
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
209
12344
7e7941d8cceb * etags.c (find_entries): rewind before rereading the input file.
Francesco Potortì <pot@gnu.org>
parents: 12242
diff changeset
210
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
211 /*
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
212 * xnew, xrnew -- allocate, reallocate storage
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
213 *
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
214 * SYNOPSIS: Type *xnew (int n, Type);
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
215 * void xrnew (OldPointer, int n, Type);
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
216 */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
217 #if DEBUG
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
218 # include "chkmalloc.h"
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
219 # define xnew(n,Type) ((Type *) trace_malloc (__FILE__, __LINE__, \
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
220 (n) * sizeof (Type)))
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
221 # define xrnew(op,n,Type) ((op) = (Type *) trace_realloc (__FILE__, __LINE__, \
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
222 (char *) (op), (n) * sizeof (Type)))
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
223 #else
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
224 # define xnew(n,Type) ((Type *) xmalloc ((n) * sizeof (Type)))
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
225 # define xrnew(op,n,Type) ((op) = (Type *) xrealloc ( \
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
226 (char *) (op), (n) * sizeof (Type)))
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
227 #endif
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
229 #define bool int
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
230
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
231 typedef void Lang_function __P((FILE *));
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
232
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
233 typedef struct
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
234 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
235 char *suffix; /* file name suffix for this compressor */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
236 char *command; /* takes one arg and decompresses to stdout */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
237 } compressor;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
238
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
239 typedef struct
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
240 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
241 char *name; /* language name */
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
242 char *help; /* detailed help for the language */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
243 Lang_function *function; /* parse function */
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
244 char **suffixes; /* name suffixes of this language's files */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
245 char **filenames; /* names of this language's files */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
246 char **interpreters; /* interpreters for this language */
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
247 bool metasource; /* source used to generate other sources */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
248 } language;
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
249
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
250 typedef struct fdesc
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
251 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
252 struct fdesc *next; /* for the linked list */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
253 char *infname; /* uncompressed input file name */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
254 char *infabsname; /* absolute uncompressed input file name */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
255 char *infabsdir; /* absolute dir of input file */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
256 char *taggedfname; /* file name to write in tagfile */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
257 language *lang; /* language of file */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
258 char *prop; /* file properties to write in tagfile */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
259 bool usecharno; /* etags tags shall contain char number */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
260 bool written; /* entry written in the tags file */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
261 } fdesc;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
262
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
263 typedef struct node_st
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
264 { /* sorting structure */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
265 struct node_st *left, *right; /* left and right sons */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
266 fdesc *fdp; /* description of file to whom tag belongs */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
267 char *name; /* tag name */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
268 char *regex; /* search regexp */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
269 bool valid; /* write this tag on the tag file */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
270 bool is_func; /* function tag: use regexp in CTAGS mode */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
271 bool been_warned; /* warning already given for duplicated tag */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
272 int lno; /* line number tag is on */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
273 long cno; /* character number line starts on */
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
274 } node;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
275
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
276 /*
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
277 * A `linebuffer' is a structure which holds a line of text.
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
278 * `readline_internal' reads a line from a stream into a linebuffer
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
279 * and works regardless of the length of the line.
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
280 * SIZE is the size of BUFFER, LEN is the length of the string in
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
281 * BUFFER after readline reads it.
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
282 */
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
283 typedef struct
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
284 {
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
285 long size;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
286 int len;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
287 char *buffer;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
288 } linebuffer;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
290 /* Used to support mixing of --lang and file names. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
291 typedef struct
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
292 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
293 enum {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
294 at_language, /* a language specification */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
295 at_regexp, /* a regular expression */
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
296 at_filename, /* a file name */
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
297 at_stdin, /* read from stdin here */
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
298 at_end /* stop parsing the list */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
299 } arg_type; /* argument type */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
300 language *lang; /* language associated with the argument */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
301 char *what; /* the argument itself */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
302 } argument;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
303
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
304 #ifdef ETAGS_REGEXPS
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
305 /* Structure defining a regular expression. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
306 typedef struct regexp
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
307 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
308 struct regexp *p_next; /* pointer to next in list */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
309 language *lang; /* if set, use only for this language */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
310 char *pattern; /* the regexp pattern */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
311 char *name; /* tag name */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
312 struct re_pattern_buffer *pat; /* the compiled pattern */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
313 struct re_registers regs; /* re registers */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
314 bool error_signaled; /* already signaled for this regexp */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
315 bool force_explicit_name; /* do not allow implict tag name */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
316 bool ignore_case; /* ignore case when matching */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
317 bool multi_line; /* do a multi-line match on the whole file */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
318 } regexp;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
319 #endif /* ETAGS_REGEXPS */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
320
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
321
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
322 /* Many compilers barf on this:
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
323 Lang_function Ada_funcs;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
324 so let's write it this way */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
325 static void Ada_funcs __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
326 static void Asm_labels __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
327 static void C_entries __P((int c_ext, FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
328 static void default_C_entries __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
329 static void plain_C_entries __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
330 static void Cjava_entries __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
331 static void Cobol_paragraphs __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
332 static void Cplusplus_entries __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
333 static void Cstar_entries __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
334 static void Erlang_functions __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
335 static void Fortran_functions __P((FILE *));
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
336 static void HTML_labels __P((FILE *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
337 static void Lisp_functions __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
338 static void Makefile_targets __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
339 static void Pascal_functions __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
340 static void Perl_functions __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
341 static void PHP_functions __P((FILE *));
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
342 static void PS_functions __P((FILE *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
343 static void Prolog_functions __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
344 static void Python_functions __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
345 static void Scheme_functions __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
346 static void TeX_commands __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
347 static void Texinfo_nodes __P((FILE *));
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
348 static void Yacc_entries __P((FILE *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
349 static void just_read_file __P((FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
350
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
351 static void print_language_names __P((void));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
352 static void print_version __P((void));
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
353 static void print_help __P((argument *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
354 int main __P((int, char **));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
355
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
356 static compressor *get_compressor_from_suffix __P((char *, char **));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
357 static language *get_language_from_langname __P((const char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
358 static language *get_language_from_interpreter __P((char *));
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
359 static language *get_language_from_filename __P((char *, bool));
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
360 static void readline __P((linebuffer *, FILE *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
361 static long readline_internal __P((linebuffer *, FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
362 static bool nocase_tail __P((char *));
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
363 static void get_tag __P((char *, char **));
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
364
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
365 #ifdef ETAGS_REGEXPS
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
366 static void analyse_regex __P((char *));
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
367 static void free_regexps __P((void));
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
368 static void regex_tag_multiline __P((void));
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
369 #endif /* ETAGS_REGEXPS */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
370 static void error __P((const char *, const char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
371 static void suggest_asking_for_help __P((void));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
372 void fatal __P((char *, char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
373 static void pfatal __P((char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
374 static void add_node __P((node *, node **));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
375
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
376 static void init __P((void));
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
377 static void process_file_name __P((char *, language *));
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
378 static void process_file __P((FILE *, char *, language *));
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
379 static void find_entries __P((FILE *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
380 static void free_tree __P((node *));
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
381 static void free_fdesc __P((fdesc *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
382 static void pfnote __P((char *, bool, char *, int, int, long));
45925
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
383 static void make_tag __P((char *, int, bool, char *, int, int, long));
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
384 static void invalidate_nodes __P((fdesc *, node **));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
385 static void put_entries __P((node *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
386
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
387 static char *concat __P((char *, char *, char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
388 static char *skip_spaces __P((char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
389 static char *skip_non_spaces __P((char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
390 static char *savenstr __P((char *, int));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
391 static char *savestr __P((char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
392 static char *etags_strchr __P((const char *, int));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
393 static char *etags_strrchr __P((const char *, int));
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
394 static int etags_strcasecmp __P((const char *, const char *));
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
395 static int etags_strncasecmp __P((const char *, const char *, int));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
396 static char *etags_getcwd __P((void));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
397 static char *relative_filename __P((char *, char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
398 static char *absolute_filename __P((char *, char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
399 static char *absolute_dirname __P((char *, char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
400 static bool filename_is_absolute __P((char *f));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
401 static void canonicalize_filename __P((char *));
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
402 static void linebuffer_init __P((linebuffer *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
403 static void linebuffer_setlen __P((linebuffer *, int));
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
404 static PTR xmalloc __P((unsigned int));
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
405 static PTR xrealloc __P((char *, unsigned int));
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
406
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
407
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
408 static char searchar = '/'; /* use /.../ searches */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
409
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
410 static char *tagfile; /* output file */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
411 static char *progname; /* name this program was invoked with */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
412 static char *cwd; /* current working directory */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
413 static char *tagfiledir; /* directory of tagfile */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
414 static FILE *tagf; /* ioptr for tags file */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
415
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
416 static fdesc *fdhead; /* head of file description list */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
417 static fdesc *curfdp; /* current file description */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
418 static int lineno; /* line number of current line */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
419 static long charno; /* current character number */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
420 static long linecharno; /* charno of start of current line */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
421 static char *dbp; /* pointer to start of current tag */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
422
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
423 static const int invalidcharno = -1;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
424
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
425 static node *nodehead; /* the head of the binary tree of tags */
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
426 static node *last_node; /* the last node created */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
427
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
428 static linebuffer lb; /* the current line */
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
429 static linebuffer filebuf; /* a buffer containing the whole file */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
430 static linebuffer token_name; /* a buffer containing a tag name */
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
431
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
432 /* boolean "functions" (see init) */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
433 static bool _wht[CHARS], _nin[CHARS], _itk[CHARS], _btk[CHARS], _etk[CHARS];
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
434 static char
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
435 /* white chars */
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
436 *white = " \f\t\n\r\v",
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
437 /* not in a name */
45925
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
438 *nonam = " \f\t\n\r()=,;", /* look at make_tag before modifying! */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
439 /* token ending chars */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
440 *endtk = " \t\n\r\"'#()[]{}=-+%*/&|^~!<>;,.:?",
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
441 /* token starting chars */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
442 *begtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$~@",
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
443 /* valid in-token chars */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
444 *midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789";
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
445
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
446 static bool append_to_tagfile; /* -a: append to tags */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
447 /* The next four default to TRUE for etags, but to FALSE for ctags. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
448 static bool typedefs; /* -t: create tags for C and Ada typedefs */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
449 static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 /* 0 struct/enum/union decls, and C++ */
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
451 /* member functions. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
452 static bool constantypedefs; /* -d: create tags for C #define, enum */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
453 /* constants and variables. */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 /* -D: opposite of -d. Default under ctags. */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
455 static bool globals; /* create tags for global variables */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
456 static bool declarations; /* --declarations: tag them and extern in C&Co*/
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
457 static bool members; /* create tags for C member variables */
45643
5cee84ffef53 (main): Avoid a buffer overrun with sprintf.
Francesco Potortì <pot@gnu.org>
parents: 45535
diff changeset
458 static bool no_line_directive; /* ignore #line directives (undocumented) */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
459 static bool update; /* -u: update tags */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
460 static bool vgrind_style; /* -v: create vgrind style index output */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
461 static bool no_warnings; /* -w: suppress warnings */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
462 static bool cxref_style; /* -x: create cxref style output */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
463 static bool cplusplus; /* .[hc] means C++, not C */
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
464 static bool ignoreindent; /* -I: ignore indentation in C */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
465 static bool packages_only; /* --packages-only: in Ada, only tag packages*/
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
466
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
467 #define STDIN 0x1001 /* returned by getopt_long on --parse-stdin */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
468 static bool parsing_stdin; /* --parse-stdin used */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
469
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
470 #ifdef ETAGS_REGEXPS
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
471 static regexp *p_head; /* list of all regexps */
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
472 static bool need_filebuf; /* some regexes are multi-line */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
473 #else
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
474 # define need_filebuf FALSE
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
475 #endif /* ETAGS_REGEXPS */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
476
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
477 #ifdef LONG_OPTIONS
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
478 static struct option longopts[] =
10047
9b284d98b102 * etags.c (print_help): print --regex usage for ctags also.
Francesco Potortì <pot@gnu.org>
parents: 9976
diff changeset
479 {
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
480 { "packages-only", no_argument, &packages_only, TRUE },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
481 { "c++", no_argument, NULL, 'C' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
482 { "declarations", no_argument, &declarations, TRUE },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
483 { "no-line-directive", no_argument, &no_line_directive, TRUE },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
484 { "help", no_argument, NULL, 'h' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
485 { "help", no_argument, NULL, 'H' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
486 { "ignore-indentation", no_argument, NULL, 'I' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
487 { "language", required_argument, NULL, 'l' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
488 { "members", no_argument, &members, TRUE },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
489 { "no-members", no_argument, &members, FALSE },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
490 { "output", required_argument, NULL, 'o' },
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
491 #ifdef ETAGS_REGEXPS
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
492 { "regex", required_argument, NULL, 'r' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
493 { "no-regex", no_argument, NULL, 'R' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
494 { "ignore-case-regex", required_argument, NULL, 'c' },
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
495 #endif /* ETAGS_REGEXPS */
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
496 { "parse-stdin", required_argument, NULL, STDIN },
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
497 { "version", no_argument, NULL, 'V' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
498
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
499 #if CTAGS /* Etags options */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
500 { "backward-search", no_argument, NULL, 'B' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
501 { "cxref", no_argument, NULL, 'x' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
502 { "defines", no_argument, NULL, 'd' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
503 { "globals", no_argument, &globals, TRUE },
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
504 { "typedefs", no_argument, NULL, 't' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
505 { "typedefs-and-c++", no_argument, NULL, 'T' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
506 { "update", no_argument, NULL, 'u' },
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
507 { "vgrind", no_argument, NULL, 'v' },
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
508 { "no-warn", no_argument, NULL, 'w' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
509
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
510 #else /* Ctags options */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
511 { "append", no_argument, NULL, 'a' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
512 { "no-defines", no_argument, NULL, 'D' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
513 { "no-globals", no_argument, &globals, FALSE },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
514 { "include", required_argument, NULL, 'i' },
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
515 #endif
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
516 { NULL }
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
517 };
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
518 #endif /* LONG_OPTIONS */
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
519
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
520 static compressor compressors[] =
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
521 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
522 { "z", "gzip -d -c"},
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
523 { "Z", "gzip -d -c"},
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
524 { "gz", "gzip -d -c"},
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
525 { "GZ", "gzip -d -c"},
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
526 { "bz2", "bzip2 -d -c" },
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
527 { NULL }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
528 };
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
529
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
530 /*
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
531 * Language stuff.
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
532 */
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
533
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
534 /* Ada code */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
535 static char *Ada_suffixes [] =
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
536 { "ads", "adb", "ada", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
537 static char Ada_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
538 "In Ada code, functions, procedures, packages, tasks and types are\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
539 tags. Use the `--packages-only' option to create tags for\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
540 packages only.\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
541 Ada tag names have suffixes indicating the type of entity:\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
542 Entity type: Qualifier:\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
543 ------------ ----------\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
544 function /f\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
545 procedure /p\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
546 package spec /s\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
547 package body /b\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
548 type /t\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
549 task /k\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
550 Thus, `M-x find-tag <RET> bidule/b <RET>' will go directly to the\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
551 body of the package `bidule', while `M-x find-tag <RET> bidule <RET>'\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
552 will just search for any tag `bidule'.";
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
553
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
554 /* Assembly code */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
555 static char *Asm_suffixes [] =
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
556 { "a", /* Unix assembler */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
557 "asm", /* Microcontroller assembly */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
558 "def", /* BSO/Tasking definition includes */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
559 "inc", /* Microcontroller include files */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
560 "ins", /* Microcontroller include files */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
561 "s", "sa", /* Unix assembler */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
562 "S", /* cpp-processed Unix assembler */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
563 "src", /* BSO/Tasking C compiler output */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
564 NULL
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
565 };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
566 static char Asm_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
567 "In assembler code, labels appearing at the beginning of a line,\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
568 followed by a colon, are tags.";
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
569
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
570
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
571 /* Note that .c and .h can be considered C++, if the --c++ flag was
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
572 given, or if the `class' or `template' keyowrds are met inside the file.
35740
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
573 That is why default_C_entries is called for these. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
574 static char *default_C_suffixes [] =
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
575 { "c", "h", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
576 static char default_C_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
577 "In C code, any C function or typedef is a tag, and so are\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
578 definitions of `struct', `union' and `enum'. `#define' macro\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
579 definitions and `enum' constants are tags unless you specify\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
580 `--no-defines'. Global variables are tags unless you specify\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
581 `--no-globals'. Use of `--no-globals' and `--no-defines'\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
582 can make the tags table file much smaller.\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
583 You can tag function declarations and external variables by\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
584 using `--declarations', and struct members by using `--members'.";
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
585
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
586 static char *Cplusplus_suffixes [] =
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
587 { "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx",
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
588 "M", /* Objective C++ */
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
589 "pdb", /* Postscript with C syntax */
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
590 NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
591 static char Cplusplus_help [] =
49360
d257d0cb93b4 (Cplusplus_help, Cjava_help): Re-phrase and avoid
Dave Love <fx@gnu.org>
parents: 49125
diff changeset
592 "In C++ code, all the tag constructs of C code are tagged. (Use\n\
d257d0cb93b4 (Cplusplus_help, Cjava_help): Re-phrase and avoid
Dave Love <fx@gnu.org>
parents: 49125
diff changeset
593 --help --lang=c --lang=c++ for full help.)\n\
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
594 In addition to C tags, member functions are also recognized, and\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
595 optionally member variables if you use the `--members' option.\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
596 Tags for variables and functions in classes are named `CLASS::VARIABLE'\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
597 and `CLASS::FUNCTION'. `operator' definitions have tag names like\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
598 `operator+'.";
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
599
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
600 static char *Cjava_suffixes [] =
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
601 { "java", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
602 static char Cjava_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
603 "In Java code, all the tags constructs of C and C++ code are\n\
49360
d257d0cb93b4 (Cplusplus_help, Cjava_help): Re-phrase and avoid
Dave Love <fx@gnu.org>
parents: 49125
diff changeset
604 tagged. (Use --help --lang=c --lang=c++ --lang=java for full help.)";
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
605
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
606
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
607 static char *Cobol_suffixes [] =
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
608 { "COB", "cob", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
609 static char Cobol_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
610 "In Cobol code, tags are paragraph names; that is, any word\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
611 starting in column 8 and followed by a period.";
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
612
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
613 static char *Cstar_suffixes [] =
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
614 { "cs", "hs", NULL };
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
615
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
616 static char *Erlang_suffixes [] =
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
617 { "erl", "hrl", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
618 static char Erlang_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
619 "In Erlang code, the tags are the functions, records and macros\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
620 defined in the file.";
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
621
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
622 static char *Fortran_suffixes [] =
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
623 { "F", "f", "f90", "for", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
624 static char Fortran_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
625 "In Fortran code, functions, subroutines and block data are tags.";
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
626
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
627 static char *HTML_suffixes [] =
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
628 { "htm", "html", "shtml", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
629 static char HTML_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
630 "In HTML input files, the tags are the `title' and the `h1', `h2',\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
631 `h3' headers. Also, tags are `name=' in anchors and all\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
632 occurrences of `id='.";
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
633
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
634 static char *Lisp_suffixes [] =
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
635 { "cl", "clisp", "el", "l", "lisp", "LSP", "lsp", "ml", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
636 static char Lisp_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
637 "In Lisp code, any function defined with `defun', any variable\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
638 defined with `defvar' or `defconst', and in general the first\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
639 argument of any expression that starts with `(def' in column zero\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
640 is a tag.";
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
641
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
642 static char *Makefile_filenames [] =
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
643 { "Makefile", "makefile", "GNUMakefile", "Makefile.in", "Makefile.am", NULL};
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
644 static char Makefile_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
645 "In makefiles, targets are tags; additionally, variables are tags\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
646 unless you specify `--no-globals'.";
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
647
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
648 static char *Objc_suffixes [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
649 { "lm", /* Objective lex file */
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
650 "m", /* Objective C file */
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
651 NULL };
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
652 static char Objc_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
653 "In Objective C code, tags include Objective C definitions for classes,\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
654 class categories, methods and protocols. Tags for variables and\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
655 functions in classes are named `CLASS::VARIABLE' and `CLASS::FUNCTION'.";
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
656
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
657 static char *Pascal_suffixes [] =
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
658 { "p", "pas", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
659 static char Pascal_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
660 "In Pascal code, the tags are the functions and procedures defined\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
661 in the file.";
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
662
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
663 static char *Perl_suffixes [] =
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
664 { "pl", "pm", NULL };
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
665 static char *Perl_interpreters [] =
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
666 { "perl", "@PERL@", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
667 static char Perl_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
668 "In Perl code, the tags are the packages, subroutines and variables\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
669 defined by the `package', `sub', `my' and `local' keywords. Use\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
670 `--globals' if you want to tag global variables. Tags for\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
671 subroutines are named `PACKAGE::SUB'. The name for subroutines\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
672 defined in the default package is `main::SUB'.";
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
673
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
674 static char *PHP_suffixes [] =
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
675 { "php", "php3", "php4", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
676 static char PHP_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
677 "In PHP code, tags are functions, classes and defines. When using\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
678 the `--members' option, vars are tags too.";
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
679
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
680 static char *plain_C_suffixes [] =
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
681 { "pc", /* Pro*C file */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
682 NULL };
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
683
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
684 static char *PS_suffixes [] =
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
685 { "ps", "psw", NULL }; /* .psw is for PSWrap */
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
686 static char PS_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
687 "In PostScript code, the tags are the functions.";
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
688
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
689 static char *Prolog_suffixes [] =
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
690 { "prolog", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
691 static char Prolog_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
692 "In Prolog code, tags are predicates and rules at the beginning of\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
693 line.";
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
694
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
695 static char *Python_suffixes [] =
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
696 { "py", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
697 static char Python_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
698 "In Python code, `def' or `class' at the beginning of a line\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
699 generate a tag.";
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
700
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
701 /* Can't do the `SCM' or `scm' prefix with a version number. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
702 static char *Scheme_suffixes [] =
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
703 { "oak", "sch", "scheme", "SCM", "scm", "SM", "sm", "ss", "t", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
704 static char Scheme_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
705 "In Scheme code, tags include anything defined with `def' or with a\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
706 construct whose name starts with `def'. They also include\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
707 variables set with `set!' at top level in the file.";
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
708
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
709 static char *TeX_suffixes [] =
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
710 { "bib", "clo", "cls", "ltx", "sty", "TeX", "tex", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
711 static char TeX_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
712 "In LaTeX text, the argument of any of the commands `\\chapter',\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
713 `\\section', `\\subsection', `\\subsubsection', `\\eqno', `\\label',\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
714 `\\ref', `\\cite', `\\bibitem', `\\part', `\\appendix', `\\entry',\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
715 `\\index', `\\def', `\\newcommand', `\\renewcommand',\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
716 `\\newenvironment' or `\\renewenvironment' is a tag.\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
717 \n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
718 Other commands can be specified by setting the environment variable\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
719 `TEXTAGS' to a colon-separated list like, for example,\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
720 TEXTAGS=\"mycommand:myothercommand\".";
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
721
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
722
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
723 static char *Texinfo_suffixes [] =
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
724 { "texi", "texinfo", "txi", NULL };
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
725 static char Texinfo_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
726 "for texinfo files, lines starting with @node are tagged.";
28663
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
727
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
728 static char *Yacc_suffixes [] =
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
729 { "y", "y++", "ym", "yxx", "yy", NULL }; /* .ym is Objective yacc file */
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
730 static char Yacc_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
731 "In Bison or Yacc input files, each rule defines as a tag the\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
732 nonterminal it constructs. The portions of the file that contain\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
733 C code are parsed as C code (use --help --lang=c --lang=yacc\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
734 for full help).";
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
735
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
736 static char auto_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
737 "`auto' is not a real language, it indicates to use\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
738 a default language for files base on file name suffix and file contents.";
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
739
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
740 static char none_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
741 "`none' is not a real language, it indicates to only do\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
742 regexp processing on files.";
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
743
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
744 static char no_lang_help [] =
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
745 "No detailed help available for this language.";
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
746
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
747
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
748 /*
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
749 * Table of languages.
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
750 *
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
751 * It is ok for a given function to be listed under more than one
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
752 * name. I just didn't.
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
753 */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
754
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
755 static language lang_names [] =
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
756 {
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
757 { "ada", Ada_help, Ada_funcs, Ada_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
758 { "asm", Asm_help, Asm_labels, Asm_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
759 { "c", default_C_help, default_C_entries, default_C_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
760 { "c++", Cplusplus_help, Cplusplus_entries, Cplusplus_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
761 { "c*", no_lang_help, Cstar_entries, Cstar_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
762 { "cobol", Cobol_help, Cobol_paragraphs, Cobol_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
763 { "erlang", Erlang_help, Erlang_functions, Erlang_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
764 { "fortran", Fortran_help, Fortran_functions, Fortran_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
765 { "html", HTML_help, HTML_labels, HTML_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
766 { "java", Cjava_help, Cjava_entries, Cjava_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
767 { "lisp", Lisp_help, Lisp_functions, Lisp_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
768 { "makefile", Makefile_help,Makefile_targets,NULL,Makefile_filenames},
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
769 { "objc", Objc_help, plain_C_entries, Objc_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
770 { "pascal", Pascal_help, Pascal_functions, Pascal_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
771 { "perl",Perl_help,Perl_functions,Perl_suffixes,NULL,Perl_interpreters},
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
772 { "php", PHP_help, PHP_functions, PHP_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
773 { "postscript",PS_help, PS_functions, PS_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
774 { "proc", no_lang_help, plain_C_entries, plain_C_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
775 { "prolog", Prolog_help, Prolog_functions, Prolog_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
776 { "python", Python_help, Python_functions, Python_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
777 { "scheme", Scheme_help, Scheme_functions, Scheme_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
778 { "tex", TeX_help, TeX_commands, TeX_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
779 { "texinfo", Texinfo_help, Texinfo_nodes, Texinfo_suffixes },
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
780 { "yacc", Yacc_help,Yacc_entries,Yacc_suffixes,NULL,NULL,TRUE},
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
781 { "auto", auto_help }, /* default guessing scheme */
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
782 { "none", none_help, just_read_file }, /* regexp matching only */
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
783 { NULL } /* end of list */
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
784 };
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
785
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
787 static void
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
788 print_language_names ()
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
789 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
790 language *lang;
35302
6a51ef53518f 2001-01-15 Francesco Potorti` <pot@pot.cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 35297
diff changeset
791 char **name, **ext;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
792
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
793 puts ("\nThese are the currently supported languages, along with the\n\
35302
6a51ef53518f 2001-01-15 Francesco Potorti` <pot@pot.cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 35297
diff changeset
794 default file names and dot suffixes:");
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
795 for (lang = lang_names; lang->name != NULL; lang++)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
796 {
35302
6a51ef53518f 2001-01-15 Francesco Potorti` <pot@pot.cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 35297
diff changeset
797 printf (" %-*s", 10, lang->name);
6a51ef53518f 2001-01-15 Francesco Potorti` <pot@pot.cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 35297
diff changeset
798 if (lang->filenames != NULL)
6a51ef53518f 2001-01-15 Francesco Potorti` <pot@pot.cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 35297
diff changeset
799 for (name = lang->filenames; *name != NULL; name++)
6a51ef53518f 2001-01-15 Francesco Potorti` <pot@pot.cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 35297
diff changeset
800 printf (" %s", *name);
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
801 if (lang->suffixes != NULL)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
802 for (ext = lang->suffixes; *ext != NULL; ext++)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
803 printf (" .%s", *ext);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
804 puts ("");
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
805 }
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
806 puts ("where `auto' means use default language for files based on file\n\
12398
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
807 name suffix, and `none' means only do regexp processing on files.\n\
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
808 If no language is specified and no matching suffix is found,\n\
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
809 the first line of the file is read for a sharp-bang (#!) sequence\n\
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
810 followed by the name of an interpreter. If no such sequence is found,\n\
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
811 Fortran is tried first; if no tags are found, C is tried next.\n\
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
812 When parsing any C file, a \"class\" or \"template\" keyword\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
813 switches to C++.");
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
814 puts ("Compressed files are supported using gzip and bzip2.\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
815 \n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
816 For detailed help on a given language use, for example,\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
817 etags --help --lang=ada.");
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
818 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
819
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
820 #ifndef EMACS_NAME
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
821 # define EMACS_NAME "standalone"
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
822 #endif
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
823 #ifndef VERSION
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
824 # define VERSION "version"
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
825 #endif
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
826 static void
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
827 print_version ()
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
828 {
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
829 printf ("%s (%s %s)\n", (CTAGS) ? "ctags" : "etags", EMACS_NAME, VERSION);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
830 puts ("Copyright (C) 2002 Free Software Foundation, Inc. and Ken Arnold");
16373
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
831 puts ("This program is distributed under the same terms as Emacs");
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
832
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
833 exit (GOOD);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
834 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
835
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
836 static void
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
837 print_help (argbuffer)
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
838 argument *argbuffer;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
839 {
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
840 bool help_for_lang = FALSE;
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
841
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
842 for (; argbuffer->arg_type != at_end; argbuffer++)
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
843 if (argbuffer->arg_type == at_language)
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
844 {
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
845 if (help_for_lang)
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
846 puts ("");
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
847 puts (argbuffer->lang->help);
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
848 help_for_lang = TRUE;
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
849 }
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
850
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
851 if (help_for_lang)
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
852 exit (GOOD);
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
853
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
854 printf ("Usage: %s [options] [[regex-option ...] file-name] ...\n\
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
855 \n\
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
856 These are the options accepted by %s.\n", progname, progname);
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
857 #ifdef LONG_OPTIONS
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
858 puts ("You may use unambiguous abbreviations for the long option names.");
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
859 #else
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
860 puts ("Long option names do not work with this executable, as it is not\n\
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
861 linked with GNU getopt.");
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
862 #endif /* LONG_OPTIONS */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
863 puts (" A - as file name means read names from stdin (one per line).\n\
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
864 Absolute names are stored in the output file as they are.\n\
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
865 Relative ones are stored relative to the output file's directory.\n");
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
866
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
867 if (!CTAGS)
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
868 puts ("-a, --append\n\
4126
9a906e5f9b28 * etags.c (print_help): Break up the very long strings containing
Jim Blandy <jimb@redhat.com>
parents: 4052
diff changeset
869 Append tag entries to existing tags file.");
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
870
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
871 puts ("--packages-only\n\
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
872 For Ada files, only generate tags for packages.");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
873
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
874 if (CTAGS)
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
875 puts ("-B, --backward-search\n\
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
876 Write the search commands for the tag entries using '?', the\n\
6945
63ab519f7057 * etags.c (main, print_help): eliminate the -F option.
Francesco Potortì <pot@gnu.org>
parents: 6944
diff changeset
877 backward-search command instead of '/', the forward-search command.");
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
878
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
879 /* This option is mostly obsolete, because etags can now automatically
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
880 detect C++. Retained for backward compatibility and for debugging and
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
881 experimentation. In principle, we could want to tag as C++ even
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
882 before any "class" or "template" keyword.
4126
9a906e5f9b28 * etags.c (print_help): Break up the very long strings containing
Jim Blandy <jimb@redhat.com>
parents: 4052
diff changeset
883 puts ("-C, --c++\n\
12398
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
884 Treat files whose name suffix defaults to C language as C++ files.");
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
885 */
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
886
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
887 puts ("--declarations\n\
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
888 In C and derived languages, create tags for function declarations,");
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
889 if (CTAGS)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
890 puts ("\tand create tags for extern variables if --globals is used.");
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
891 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
892 puts
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
893 ("\tand create tags for extern variables unless --no-globals is used.");
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
894
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
895 if (CTAGS)
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
896 puts ("-d, --defines\n\
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
897 Create tag entries for C #define constants and enum constants, too.");
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
898 else
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
899 puts ("-D, --no-defines\n\
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
900 Don't create tag entries for C #define constants and enum constants.\n\
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
901 This makes the tags file smaller.");
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
902
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
903 if (!CTAGS)
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
904 puts ("-i FILE, --include=FILE\n\
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
905 Include a note in tag file indicating that, when searching for\n\
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
906 a tag, one should also consult the tags file FILE after\n\
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
907 checking the current file.");
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
908
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
909 puts ("-l LANG, --language=LANG\n\
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
910 Force the following files to be considered as written in the\n\
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
911 named language up to the next --language=LANG option.");
10047
9b284d98b102 * etags.c (print_help): print --regex usage for ctags also.
Francesco Potortì <pot@gnu.org>
parents: 9976
diff changeset
912
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
913 if (CTAGS)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
914 puts ("--globals\n\
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
915 Create tag entries for global variables in some languages.");
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
916 else
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
917 puts ("--no-globals\n\
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
918 Do not create tag entries for global variables in some\n\
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
919 languages. This makes the tags file smaller.");
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
920 puts ("--members\n\
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
921 Create tag entries for members of structures in some languages.");
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
922
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
923 #ifdef ETAGS_REGEXPS
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
924 puts ("-r REGEXP, --regex=REGEXP or --regex=@regexfile\n\
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
925 Make a tag for each line matching a regular expression pattern\n\
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
926 in the following files. {LANGUAGE}REGEXP uses REGEXP for LANGUAGE\n\
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
927 files only. REGEXFILE is a file containing one REGEXP per line.\n\
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
928 REGEXP takes the form /TAGREGEXP/TAGNAME/MODS, where TAGNAME/ is\n\
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
929 optional. The TAGREGEXP pattern is anchored (as if preceded by ^).");
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
930 puts (" If TAGNAME/ is present, the tags created are named.\n\
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
931 For example Tcl named tags can be created with:\n\
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
932 --regex=\"/proc[ \\t]+\\([^ \\t]+\\)/\\1/.\".\n\
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
933 MODS are optional one-letter modifiers: `i' means to ignore case,\n\
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
934 `m' means to allow multi-line matches, `s' implies `m' and\n\
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
935 causes dot to match any character, including newline.");
10047
9b284d98b102 * etags.c (print_help): print --regex usage for ctags also.
Francesco Potortì <pot@gnu.org>
parents: 9976
diff changeset
936 puts ("-R, --no-regex\n\
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
937 Don't create tags from regexps for the following files.");
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
938 #endif /* ETAGS_REGEXPS */
10449
2266157d9bcc * etags.c (longopts, print_help, main): Use -I as abbreviation
Francesco Potortì <pot@gnu.org>
parents: 10404
diff changeset
939 puts ("-I, --ignore-indentation\n\
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
940 In C and C++ do not assume that a closing brace in the first\n\
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
941 column is the final brace of a function or structure definition.");
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
942 puts ("-o FILE, --output=FILE\n\
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
943 Write the tags to FILE.");
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
944 puts ("--parse-stdin=NAME\n\
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
945 Read from standard input and record tags as belonging to file NAME.");
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
946
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
947 if (CTAGS)
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
948 {
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
949 puts ("-t, --typedefs\n\
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
950 Generate tag entries for C and Ada typedefs.");
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
951 puts ("-T, --typedefs-and-c++\n\
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
952 Generate tag entries for C typedefs, C struct/enum/union tags,\n\
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
953 and C++ member functions.");
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
954 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
955
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
956 if (CTAGS)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
957 puts ("-u, --update\n\
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
958 Update the tag entries for the given files, leaving tag\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
959 entries for other files in place. Currently, this is\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
960 implemented by deleting the existing entries for the given\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
961 files and then rewriting the new entries at the end of the\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
962 tags file. It is often faster to simply rebuild the entire\n\
4126
9a906e5f9b28 * etags.c (print_help): Break up the very long strings containing
Jim Blandy <jimb@redhat.com>
parents: 4052
diff changeset
963 tag file than to use this.");
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
964
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
965 if (CTAGS)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
966 {
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
967 puts ("-v, --vgrind\n\
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
968 Generates an index of items intended for human consumption,\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
969 similar to the output of vgrind. The index is sorted, and\n\
4126
9a906e5f9b28 * etags.c (print_help): Break up the very long strings containing
Jim Blandy <jimb@redhat.com>
parents: 4052
diff changeset
970 gives the page number of each item.");
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
971 puts ("-w, --no-warn\n\
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
972 Suppress warning messages about entries defined in multiple\n\
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
973 files.");
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
974 puts ("-x, --cxref\n\
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
975 Like --vgrind, but in the style of cxref, rather than vgrind.\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
976 The output uses line numbers instead of page numbers, but\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
977 beyond that the differences are cosmetic; try both to see\n\
4126
9a906e5f9b28 * etags.c (print_help): Break up the very long strings containing
Jim Blandy <jimb@redhat.com>
parents: 4052
diff changeset
978 which you like.");
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
979 }
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
980
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
981 puts ("-V, --version\n\
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
982 Print the version of the program.\n\
10047
9b284d98b102 * etags.c (print_help): print --regex usage for ctags also.
Francesco Potortì <pot@gnu.org>
parents: 9976
diff changeset
983 -h, --help\n\
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
984 Print this help message.\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
985 Followed by one or more `--language' options prints detailed\n\
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
986 help about tag generation for the specified languages.");
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
987
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
988 print_language_names ();
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
989
16373
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
990 puts ("");
26323
98d99afb5ffb * etags.c (print_help): Change email address to send bugs to.
Gerd Moellmann <gerd@gnu.org>
parents: 26262
diff changeset
991 puts ("Report bugs to bug-gnu-emacs@gnu.org");
16373
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
992
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
993 exit (GOOD);
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
994 }
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
995
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
996
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
997 #ifdef VMS /* VMS specific functions */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
998
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
999 #define EOS '\0'
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1000
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1001 /* This is a BUG! ANY arbitrary limit is a BUG!
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1002 Won't someone please fix this? */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1003 #define MAX_FILE_SPEC_LEN 255
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1004 typedef struct {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1005 short curlen;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1006 char body[MAX_FILE_SPEC_LEN + 1];
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1007 } vspec;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1008
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1009 /*
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1010 v1.05 nmm 26-Jun-86 fn_exp - expand specification of list of file names
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1011 returning in each successive call the next file name matching the input
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1012 spec. The function expects that each in_spec passed
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1013 to it will be processed to completion; in particular, up to and
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1014 including the call following that in which the last matching name
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1015 is returned, the function ignores the value of in_spec, and will
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
1016 only start processing a new spec with the following call.
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1017 If an error occurs, on return out_spec contains the value
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1018 of in_spec when the error occurred.
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1019
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1020 With each successive file name returned in out_spec, the
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1021 function's return value is one. When there are no more matching
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1022 names the function returns zero. If on the first call no file
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
1023 matches in_spec, or there is any other error, -1 is returned.
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1024 */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1025
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1026 #include <rmsdef.h>
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1027 #include <descrip.h>
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1028 #define OUTSIZE MAX_FILE_SPEC_LEN
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1029 static short
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1030 fn_exp (out, in)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1031 vspec *out;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1032 char *in;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1033 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1034 static long context = 0;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1035 static struct dsc$descriptor_s o;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1036 static struct dsc$descriptor_s i;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1037 static bool pass1 = TRUE;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1038 long status;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1039 short retval;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1040
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1041 if (pass1)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1042 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1043 pass1 = FALSE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1044 o.dsc$a_pointer = (char *) out;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1045 o.dsc$w_length = (short)OUTSIZE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1046 i.dsc$a_pointer = in;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1047 i.dsc$w_length = (short)strlen(in);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1048 i.dsc$b_dtype = DSC$K_DTYPE_T;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1049 i.dsc$b_class = DSC$K_CLASS_S;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1050 o.dsc$b_dtype = DSC$K_DTYPE_VT;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1051 o.dsc$b_class = DSC$K_CLASS_VS;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1052 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1053 if ((status = lib$find_file(&i, &o, &context, 0, 0)) == RMS$_NORMAL)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1054 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1055 out->body[out->curlen] = EOS;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1056 return 1;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1057 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1058 else if (status == RMS$_NMF)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1059 retval = 0;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1060 else
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1061 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1062 strcpy(out->body, in);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1063 retval = -1;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1064 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1065 lib$find_file_end(&context);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1066 pass1 = TRUE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1067 return retval;
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
1068 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1069
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1070 /*
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
1071 v1.01 nmm 19-Aug-85 gfnames - return in successive calls the
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1072 name of each file specified by the provided arg expanding wildcards.
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1073 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1074 static char *
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1075 gfnames (arg, p_error)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1076 char *arg;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1077 bool *p_error;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1078 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1079 static vspec filename = {MAX_FILE_SPEC_LEN, "\0"};
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1080
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1081 switch (fn_exp (&filename, arg))
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1082 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1083 case 1:
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1084 *p_error = FALSE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1085 return filename.body;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1086 case 0:
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1087 *p_error = FALSE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1088 return NULL;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1089 default:
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1090 *p_error = TRUE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1091 return filename.body;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1092 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1093 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1094
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1095 #ifndef OLD /* Newer versions of VMS do provide `system'. */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1096 system (cmd)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1097 char *cmd;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1098 {
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1099 error ("%s", "system() function not implemented under VMS");
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1100 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1101 #endif
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1102
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1103 #define VERSION_DELIM ';'
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1104 char *massage_name (s)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1105 char *s;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1106 {
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
1107 char *start = s;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1108
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1109 for ( ; *s; s++)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1110 if (*s == VERSION_DELIM)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1111 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1112 *s = EOS;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1113 break;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1114 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1115 else
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
1116 *s = lowcase (*s);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1117 return start;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1118 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1119 #endif /* VMS */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1120
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1121
15683
5f9426e991a3 Declare main as int, not void.
Karl Heuer <kwzh@gnu.org>
parents: 15579
diff changeset
1122 int
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 main (argc, argv)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 int argc;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125 char *argv[];
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 int i;
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1128 unsigned int nincluded_files;
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1129 char **included_files;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1130 argument *argbuffer;
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1131 int current_arg, file_count;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1132 linebuffer filename_lb;
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1133 bool help_asked = FALSE;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 #ifdef VMS
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1135 bool got_err;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 #endif
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1137 char *optstring;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1138 int opt;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1139
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
1140
9773
bd49556a7552 (main, etags_getcwd): Test DOS_NT instead of MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 9635
diff changeset
1141 #ifdef DOS_NT
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
1142 _fmode = O_BINARY; /* all of files are treated as binary files */
9773
bd49556a7552 (main, etags_getcwd): Test DOS_NT instead of MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 9635
diff changeset
1143 #endif /* DOS_NT */
5448
18de002e47dd (main) [MSDOS]: Open all files as binary.
Richard M. Stallman <rms@gnu.org>
parents: 5044
diff changeset
1144
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 progname = argv[0];
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1146 nincluded_files = 0;
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1147 included_files = xnew (argc, char *);
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1148 current_arg = 0;
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
1149 file_count = 0;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1151 /* Allocate enough no matter what happens. Overkill, but each one
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1152 is small. */
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1153 argbuffer = xnew (argc, argument);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1154
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 * If etags, always find typedefs and structure tags. Why not?
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
1157 * Also default to find macro constants, enum constants and
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1158 * global variables.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 */
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
1160 if (!CTAGS)
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1161 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
1162 typedefs = typedefs_or_cplusplus = constantypedefs = TRUE;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1163 globals = TRUE;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1164 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1166 optstring = "-";
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1167 #ifdef ETAGS_REGEXPS
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1168 optstring = "-r:Rc:";
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1169 #endif /* ETAGS_REGEXPS */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1170 #ifndef LONG_OPTIONS
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1171 optstring = optstring + 1;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1172 #endif /* LONG_OPTIONS */
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1173 optstring = concat (optstring,
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1174 "Cf:Il:o:SVhH",
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1175 (CTAGS) ? "BxdtTuvw" : "aDi:");
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1176
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1177 while ((opt = getopt_long (argc, argv, optstring, longopts, 0)) != EOF)
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1178 switch (opt)
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1179 {
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1180 case 0:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1181 /* If getopt returns 0, then it has already processed a
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1182 long-named option. We should do nothing. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1183 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1184
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1185 case 1:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1186 /* This means that a file name has been seen. Record it. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1187 argbuffer[current_arg].arg_type = at_filename;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1188 argbuffer[current_arg].what = optarg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1189 ++current_arg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1190 ++file_count;
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
1191 break;
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
1192
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1193 case STDIN:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1194 /* Parse standard input. Idea by Vivek <vivek@etla.org>. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1195 argbuffer[current_arg].arg_type = at_stdin;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1196 argbuffer[current_arg].what = optarg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1197 ++current_arg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1198 ++file_count;
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
1199 if (parsing_stdin)
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
1200 fatal ("cannot parse standard input more than once", (char *)NULL);
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1201 parsing_stdin = TRUE;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1202 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1203
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1204 /* Common options. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1205 case 'C': cplusplus = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1206 case 'f': /* for compatibility with old makefiles */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1207 case 'o':
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1208 if (tagfile)
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1209 {
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1210 error ("-o option may only be given once.", (char *)NULL);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1211 suggest_asking_for_help ();
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1212 /* NOTREACHED */
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1213 }
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1214 tagfile = optarg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1215 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1216 case 'I':
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1217 case 'S': /* for backward compatibility */
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
1218 ignoreindent = TRUE;
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1219 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1220 case 'l':
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 {
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1222 language *lang = get_language_from_langname (optarg);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1223 if (lang != NULL)
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
1224 {
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1225 argbuffer[current_arg].lang = lang;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1226 argbuffer[current_arg].arg_type = at_language;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1227 ++current_arg;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 }
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1230 break;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1231 case 'c':
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1232 /* Backward compatibility: support obsolete --ignore-case-regexp. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1233 optarg = concat (optarg, "i", ""); /* memory leak here */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1234 /* FALLTHRU */
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1235 case 'r':
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1236 argbuffer[current_arg].arg_type = at_regexp;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1237 argbuffer[current_arg].what = optarg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1238 ++current_arg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1239 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1240 case 'R':
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1241 argbuffer[current_arg].arg_type = at_regexp;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1242 argbuffer[current_arg].what = NULL;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1243 ++current_arg;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1244 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1245 case 'V':
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1246 print_version ();
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1247 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1248 case 'h':
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1249 case 'H':
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1250 help_asked = TRUE;
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1251 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1252
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1253 /* Etags options */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1254 case 'a': append_to_tagfile = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1255 case 'D': constantypedefs = FALSE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1256 case 'i': included_files[nincluded_files++] = optarg; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1257
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1258 /* Ctags options. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1259 case 'B': searchar = '?'; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1260 case 'd': constantypedefs = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1261 case 't': typedefs = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1262 case 'T': typedefs = typedefs_or_cplusplus = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1263 case 'u': update = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1264 case 'v': vgrind_style = TRUE; /*FALLTHRU*/
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1265 case 'x': cxref_style = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1266 case 'w': no_warnings = TRUE; break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1267 default:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1268 suggest_asking_for_help ();
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1269 /* NOTREACHED */
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1270 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1272 for (; optind < argc; optind++)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1273 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1274 argbuffer[current_arg].arg_type = at_filename;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1275 argbuffer[current_arg].what = argv[optind];
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1276 ++current_arg;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1277 ++file_count;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1278 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1279
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1280 argbuffer[current_arg].arg_type = at_end;
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1281
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1282 if (help_asked)
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1283 print_help (argbuffer);
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1284 /* NOTREACHED */
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1285
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1286 if (nincluded_files == 0 && file_count == 0)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 {
26507
aabdfbf65c68 1999-11-19 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26340
diff changeset
1288 error ("no input files specified.", (char *)NULL);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
1289 suggest_asking_for_help ();
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1290 /* NOTREACHED */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1293 if (tagfile == NULL)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
1294 tagfile = CTAGS ? "tags" : "TAGS";
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
1295 cwd = etags_getcwd (); /* the current working directory */
15366
32ab7b623b9b (main): Copy cwd when appending slash.
Richard M. Stallman <rms@gnu.org>
parents: 15243
diff changeset
1296 if (cwd[strlen (cwd) - 1] != '/')
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
1297 {
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
1298 char *oldcwd = cwd;
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
1299 cwd = concat (oldcwd, "/", "");
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
1300 free (oldcwd);
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
1301 }
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1302 if (streq (tagfile, "-"))
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
1303 tagfiledir = cwd;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
1304 else
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
1305 tagfiledir = absolute_dirname (tagfile, cwd);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1307 init (); /* set up boolean "functions" */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1309 linebuffer_init (&lb);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1310 linebuffer_init (&filename_lb);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1311 linebuffer_init (&filebuf);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1312 linebuffer_init (&token_name);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1313
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
1314 if (!CTAGS)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315 {
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1316 if (streq (tagfile, "-"))
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1317 {
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1318 tagf = stdout;
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1319 #ifdef DOS_NT
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1320 /* Switch redirected `stdout' to binary mode (setting `_fmode'
15243
c024dca549c5 * etags.c (CNL_SAVE_DEFINEDEF): Set linecharno for use by readline.
Francesco Potortì <pot@gnu.org>
parents: 14982
diff changeset
1321 doesn't take effect until after `stdout' is already open). */
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1322 if (!isatty (fileno (stdout)))
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1323 setmode (fileno (stdout), O_BINARY);
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1324 #endif /* DOS_NT */
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
1325 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 else
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1327 tagf = fopen (tagfile, append_to_tagfile ? "a" : "w");
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1328 if (tagf == NULL)
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
1329 pfatal (tagfile);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1332 /*
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1333 * Loop through files finding functions.
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1334 */
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
1335 for (i = 0; i < current_arg; i++)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1337 static language *lang; /* non-NULL if language is forced */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1338 char *this_file;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1339
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1340 switch (argbuffer[i].arg_type)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 {
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1342 case at_language:
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1343 lang = argbuffer[i].lang;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1344 break;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1345 #ifdef ETAGS_REGEXPS
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1346 case at_regexp:
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1347 analyse_regex (argbuffer[i].what);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1348 break;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 #endif
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1350 case at_filename:
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1351 #ifdef VMS
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1352 while ((this_file = gfnames (argbuffer[i].what, &got_err)) != NULL)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1353 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1354 if (got_err)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1355 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1356 error ("can't find file %s\n", this_file);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1357 argc--, argv++;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1358 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1359 else
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1360 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1361 this_file = massage_name (this_file);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1362 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 #else
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1364 this_file = argbuffer[i].what;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 #endif
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1366 /* Input file named "-" means read file names from stdin
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1367 (one per line) and use them. */
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1368 if (streq (this_file, "-"))
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1369 {
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1370 if (parsing_stdin)
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1371 fatal ("cannot parse standard input AND read file names from it",
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1372 (char *)NULL);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1373 while (readline_internal (&filename_lb, stdin) > 0)
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1374 process_file_name (filename_lb.buffer, lang);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1375 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1376 else
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1377 process_file_name (this_file, lang);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1378 #ifdef VMS
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1380 #endif
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1381 break;
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1382 case at_stdin:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1383 this_file = argbuffer[i].what;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1384 process_file (stdin, this_file, lang);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1385 break;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 }
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
1387 }
10761
7aa80669e697 * etags.c (C_entries): Bug corrected in xrealloc of token_str.
Francesco Potortì <pot@gnu.org>
parents: 10754
diff changeset
1388
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1389 #ifdef ETAGS_REGEXPS
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1390 free_regexps ();
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1391 #endif /* ETAGS_REGEXPS */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1392 free (lb.buffer);
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1393 free (filebuf.buffer);
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1394 free (token_name.buffer);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1395
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1396 if (!CTAGS || cxref_style)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 {
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
1398 put_entries (nodehead); /* write the remainig tags (ETAGS) */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1399 free_tree (nodehead);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1400 nodehead = NULL;
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1401 if (!CTAGS)
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1402 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1403 fdesc *fdp;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1404
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1405 /* Output file entries that have no tags. */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1406 for (fdp = fdhead; fdp != NULL; fdp = fdp->next)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1407 if (!fdp->written)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1408 fprintf (tagf, "\f\n%s,0\n", fdp->taggedfname);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1409
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1410 while (nincluded_files-- > 0)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1411 fprintf (tagf, "\f\n%s,include\n", *included_files++);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1412 }
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1413
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1414 if (fclose (tagf) == EOF)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1415 pfatal (tagfile);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 exit (GOOD);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 }
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1418
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
1419 if (update)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 {
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1421 char cmd[BUFSIZ];
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1422 for (i = 0; i < current_arg; ++i)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 {
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1424 switch (argbuffer[i].arg_type)
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1425 {
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1426 case at_filename:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1427 case at_stdin:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1428 break;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1429 default:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1430 continue; /* the for loop */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1431 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 sprintf (cmd,
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 "mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS",
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1434 tagfile, argbuffer[i].what, tagfile);
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1435 if (system (cmd) != GOOD)
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
1436 fatal ("failed to execute shell command", (char *)NULL);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 }
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1438 append_to_tagfile = TRUE;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 }
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1440
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1441 tagf = fopen (tagfile, append_to_tagfile ? "a" : "w");
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1442 if (tagf == NULL)
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1443 pfatal (tagfile);
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
1444 put_entries (nodehead); /* write all the tags (CTAGS) */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1445 free_tree (nodehead);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1446 nodehead = NULL;
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1447 if (fclose (tagf) == EOF)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1448 pfatal (tagfile);
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1449
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 if (update)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 {
45643
5cee84ffef53 (main): Avoid a buffer overrun with sprintf.
Francesco Potortì <pot@gnu.org>
parents: 45535
diff changeset
1452 char cmd[2*BUFSIZ+10];
5cee84ffef53 (main): Avoid a buffer overrun with sprintf.
Francesco Potortì <pot@gnu.org>
parents: 45535
diff changeset
1453 sprintf (cmd, "sort -o %.*s %.*s", BUFSIZ, tagfile, BUFSIZ, tagfile);
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1454 exit (system (cmd));
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 }
16373
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
1456 return GOOD;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 /*
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1461 * Return a compressor given the file name. If EXTPTR is non-zero,
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1462 * return a pointer into FILE where the compressor-specific
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1463 * extension begins. If no compressor is found, NULL is returned
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1464 * and EXTPTR is not significant.
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
1465 * Idea by Vladimir Alexiev <vladimir@cs.ualberta.ca> (1998)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1466 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1467 static compressor *
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1468 get_compressor_from_suffix (file, extptr)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1469 char *file;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1470 char **extptr;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1471 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1472 compressor *compr;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1473 char *slash, *suffix;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1474
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1475 /* This relies on FN to be after canonicalize_filename,
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1476 so we don't need to consider backslashes on DOS_NT. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1477 slash = etags_strrchr (file, '/');
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1478 suffix = etags_strrchr (file, '.');
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1479 if (suffix == NULL || suffix < slash)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1480 return NULL;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1481 if (extptr != NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1482 *extptr = suffix;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1483 suffix += 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1484 /* Let those poor souls who live with DOS 8+3 file name limits get
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1485 some solace by treating foo.cgz as if it were foo.c.gz, etc.
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1486 Only the first do loop is run if not MSDOS */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1487 do
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1488 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1489 for (compr = compressors; compr->suffix != NULL; compr++)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1490 if (streq (compr->suffix, suffix))
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1491 return compr;
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1492 if (!MSDOS)
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1493 break; /* do it only once: not really a loop */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1494 if (extptr != NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1495 *extptr = ++suffix;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1496 } while (*suffix != '\0');
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1497 return NULL;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1498 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1499
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1500
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1501
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1502 /*
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1503 * Return a language given the name.
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1504 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1505 static language *
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1506 get_language_from_langname (name)
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
1507 const char *name;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1508 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1509 language *lang;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1510
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1511 if (name == NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1512 error ("empty language name", (char *)NULL);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1513 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1514 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1515 for (lang = lang_names; lang->name != NULL; lang++)
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
1516 if (streq (name, lang->name))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1517 return lang;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1518 error ("unknown language \"%s\"", name);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1519 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1520
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1521 return NULL;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1522 }
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1523
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1524
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1525 /*
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1526 * Return a language given the interpreter name.
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1527 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1528 static language *
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1529 get_language_from_interpreter (interpreter)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1530 char *interpreter;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1531 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1532 language *lang;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1533 char **iname;
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1534
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1535 if (interpreter == NULL)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1536 return NULL;
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1537 for (lang = lang_names; lang->name != NULL; lang++)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1538 if (lang->interpreters != NULL)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1539 for (iname = lang->interpreters; *iname != NULL; iname++)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1540 if (streq (*iname, interpreter))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1541 return lang;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1542
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1543 return NULL;
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1544 }
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1545
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1546
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1547
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1548 /*
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1549 * Return a language given the file name.
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1550 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1551 static language *
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1552 get_language_from_filename (file, case_sensitive)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1553 char *file;
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1554 bool case_sensitive;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1555 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1556 language *lang;
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1557 char **name, **ext, *suffix;
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1558
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1559 /* Try whole file name first. */
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1560 for (lang = lang_names; lang->name != NULL; lang++)
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1561 if (lang->filenames != NULL)
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1562 for (name = lang->filenames; *name != NULL; name++)
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1563 if ((case_sensitive)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1564 ? streq (*name, file)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1565 : strcaseeq (*name, file))
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1566 return lang;
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1567
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
1568 /* If not found, try suffix after last dot. */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1569 suffix = etags_strrchr (file, '.');
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1570 if (suffix == NULL)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1571 return NULL;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1572 suffix += 1;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1573 for (lang = lang_names; lang->name != NULL; lang++)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1574 if (lang->suffixes != NULL)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1575 for (ext = lang->suffixes; *ext != NULL; ext++)
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1576 if ((case_sensitive)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1577 ? streq (*ext, suffix)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1578 : strcaseeq (*ext, suffix))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1579 return lang;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1580 return NULL;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1581 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1582
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1583
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1584 /*
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 * This routine is called on each file argument.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1587 static void
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1588 process_file_name (file, lang)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 char *file;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1590 language *lang;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 struct stat stat_buf;
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1593 FILE *inf;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1594 fdesc *fdp;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1595 compressor *compr;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1596 char *compressed_name, *uncompressed_name;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1597 char *ext, *real_name;
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1598 int retval;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1599
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1600 canonicalize_filename (file);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
1601 if (streq (file, tagfile) && !streq (tagfile, "-"))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1603 error ("skipping inclusion of %s in self.", file);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 return;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1606 if ((compr = get_compressor_from_suffix (file, &ext)) == NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1607 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1608 compressed_name = NULL;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1609 real_name = uncompressed_name = savestr (file);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1610 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1611 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1612 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1613 real_name = compressed_name = savestr (file);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1614 uncompressed_name = savenstr (file, ext - file);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1615 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1616
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1617 /* If the canonicalized uncompressed name
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1618 has already been dealt with, skip it silently. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1619 for (fdp = fdhead; fdp != NULL; fdp = fdp->next)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1620 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1621 assert (fdp->infname != NULL);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1622 if (streq (uncompressed_name, fdp->infname))
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1623 goto cleanup;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1624 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1625
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1626 if (stat (real_name, &stat_buf) != 0)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1627 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1628 /* Reset real_name and try with a different name. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1629 real_name = NULL;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1630 if (compressed_name != NULL) /* try with the given suffix */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1631 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1632 if (stat (uncompressed_name, &stat_buf) == 0)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1633 real_name = uncompressed_name;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1634 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1635 else /* try all possible suffixes */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1636 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1637 for (compr = compressors; compr->suffix != NULL; compr++)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1638 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1639 compressed_name = concat (file, ".", compr->suffix);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1640 if (stat (compressed_name, &stat_buf) != 0)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1641 {
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1642 if (MSDOS)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1643 {
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1644 char *suf = compressed_name + strlen (file);
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1645 size_t suflen = strlen (compr->suffix) + 1;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1646 for ( ; suf[1]; suf++, suflen--)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1647 {
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1648 memmove (suf, suf + 1, suflen);
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1649 if (stat (compressed_name, &stat_buf) == 0)
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1650 {
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1651 real_name = compressed_name;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1652 break;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1653 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1654 }
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1655 if (real_name != NULL)
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1656 break;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1657 } /* MSDOS */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1658 free (compressed_name);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1659 compressed_name = NULL;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1660 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1661 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1662 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1663 real_name = compressed_name;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1664 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1665 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1666 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1667 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1668 if (real_name == NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1669 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1670 perror (file);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1671 goto cleanup;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1672 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1673 } /* try with a different name */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1674
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1675 if (!S_ISREG (stat_buf.st_mode))
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1676 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1677 error ("skipping %s: it is not a regular file.", real_name);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1678 goto cleanup;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1679 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1680 if (real_name == compressed_name)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1681 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1682 char *cmd = concat (compr->command, " ", real_name);
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
1683 inf = (FILE *) popen (cmd, "r");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1684 free (cmd);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1685 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1686 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1687 inf = fopen (real_name, "r");
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1688 if (inf == NULL)
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
1689 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1690 perror (real_name);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1691 goto cleanup;
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
1692 }
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1693
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1694 process_file (inf, uncompressed_name, lang);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1695
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1696 if (real_name == compressed_name)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1697 retval = pclose (inf);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1698 else
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1699 retval = fclose (inf);
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1700 if (retval < 0)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
1701 pfatal (file);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1702
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1703 cleanup:
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1704 if (compressed_name) free (compressed_name);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1705 if (uncompressed_name) free (uncompressed_name);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1706 last_node = NULL;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1707 curfdp = NULL;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1708 return;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1709 }
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1710
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1711 static void
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1712 process_file (fh, fn, lang)
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1713 FILE *fh;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1714 char *fn;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1715 language *lang;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1716 {
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1717 static const fdesc emptyfdesc;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1718 fdesc *fdp;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1719
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1720 /* Create a new input file description entry. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1721 fdp = xnew (1, fdesc);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1722 *fdp = emptyfdesc;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1723 fdp->next = fdhead;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1724 fdp->infname = savestr (fn);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1725 fdp->lang = lang;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1726 fdp->infabsname = absolute_filename (fn, cwd);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1727 fdp->infabsdir = absolute_dirname (fn, cwd);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1728 if (filename_is_absolute (fn))
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1729 {
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1730 /* An absolute file name. Canonicalize it. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1731 fdp->taggedfname = absolute_filename (fn, NULL);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1732 }
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1733 else
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1734 {
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1735 /* A file name relative to cwd. Make it relative
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1736 to the directory of the tags file. */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1737 fdp->taggedfname = relative_filename (fn, tagfiledir);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1738 }
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1739 fdp->usecharno = TRUE; /* use char position when making tags */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1740 fdp->prop = NULL;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1741 fdp->written = FALSE; /* not written on tags file yet */
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1742
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1743 fdhead = fdp;
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1744 curfdp = fdhead; /* the current file description */
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1745
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1746 find_entries (fh);
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
1747
44614
5adf2b1c20bb (find_entries): Bug fix in list management.
Francesco Potortì <pot@gnu.org>
parents: 44607
diff changeset
1748 /* If not Ctags, and if this is not metasource and if it contained no #line
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1749 directives, we can write the tags and free all nodes pointing to
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1750 curfdp. */
44614
5adf2b1c20bb (find_entries): Bug fix in list management.
Francesco Potortì <pot@gnu.org>
parents: 44607
diff changeset
1751 if (!CTAGS
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1752 && curfdp->usecharno /* no #line directives in this file */
44614
5adf2b1c20bb (find_entries): Bug fix in list management.
Francesco Potortì <pot@gnu.org>
parents: 44607
diff changeset
1753 && !curfdp->lang->metasource)
5adf2b1c20bb (find_entries): Bug fix in list management.
Francesco Potortì <pot@gnu.org>
parents: 44607
diff changeset
1754 {
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1755 node *np, *prev;
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1756
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1757 /* Look for the head of the sublist relative to this file. See add_node
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1758 for the structure of the node tree. */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1759 prev = NULL;
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1760 for (np = nodehead; np != NULL; prev = np, np = np->left)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1761 if (np->fdp == curfdp)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1762 break;
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1763
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1764 /* If we generated tags for this file, write and delete them. */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1765 if (np != NULL)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1766 {
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1767 /* This is the head of the last sublist, if any. The following
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1768 instructions depend on this being true. */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1769 assert (np->left == NULL);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1770
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1771 assert (fdhead == curfdp);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1772 assert (last_node->fdp == curfdp);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1773 put_entries (np); /* write tags for file curfdp->taggedfname */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1774 free_tree (np); /* remove the written nodes */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1775 if (prev == NULL)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1776 nodehead = NULL; /* no nodes left */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1777 else
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1778 prev->left = NULL; /* delete the pointer to the sublist */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1779 }
44614
5adf2b1c20bb (find_entries): Bug fix in list management.
Francesco Potortì <pot@gnu.org>
parents: 44607
diff changeset
1780 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 /*
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3569
diff changeset
1784 * This routine sets up the boolean pseudo-functions which work
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1785 * by setting boolean flags dependent upon the corresponding character.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 * Every char which is NOT in that string is not a white char. Therefore,
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 * all of the array "_wht" is set to FALSE, and then the elements
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 * subscripted by the chars in "white" are set to TRUE. Thus "_wht"
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 * of a char is TRUE if it is the string "white", else FALSE.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1791 static void
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 init ()
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
1794 register char *sp;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
1795 register int i;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
1797 for (i = 0; i < CHARS; i++)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1798 iswhite(i) = notinname(i) = begtoken(i) = intoken(i) = endtoken(i) = FALSE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1799 for (sp = white; *sp != '\0'; sp++) iswhite (*sp) = TRUE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1800 for (sp = nonam; *sp != '\0'; sp++) notinname (*sp) = TRUE;
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
1801 notinname('\0') = notinname('\n');
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1802 for (sp = begtk; *sp != '\0'; sp++) begtoken (*sp) = TRUE;
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
1803 begtoken('\0') = begtoken('\n');
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1804 for (sp = midtk; *sp != '\0'; sp++) intoken (*sp) = TRUE;
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
1805 intoken('\0') = intoken('\n');
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1806 for (sp = endtk; *sp != '\0'; sp++) endtoken (*sp) = TRUE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1807 endtoken('\0') = endtoken('\n');
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811 * This routine opens the specified file and calls the function
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 * which finds the function and type definitions.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
1814 static void
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1815 find_entries (inf)
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
1816 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817 {
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1818 char *cp;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1819 language *lang = curfdp->lang;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1820 Lang_function *parser = NULL;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1821
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1822 /* If user specified a language, use it. */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1823 if (lang != NULL && lang->function != NULL)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1825 parser = lang->function;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1827
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1828 /* Else try to guess the language given the file name. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1829 if (parser == NULL)
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1830 {
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1831 lang = get_language_from_filename (curfdp->infname, TRUE);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1832 if (lang != NULL && lang->function != NULL)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1833 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1834 curfdp->lang = lang;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1835 parser = lang->function;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1836 }
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1837 }
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1838
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1839 /* Else look for sharp-bang as the first two characters. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1840 if (parser == NULL
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1841 && readline_internal (&lb, inf) > 0
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
1842 && lb.len >= 2
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1843 && lb.buffer[0] == '#'
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1844 && lb.buffer[1] == '!')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 {
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1846 char *lp;
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1847
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1848 /* Set lp to point at the first char after the last slash in the
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1849 line or, if no slashes, at the first nonblank. Then set cp to
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1850 the first successive blank and terminate the string. */
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1851 lp = etags_strrchr (lb.buffer+2, '/');
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1852 if (lp != NULL)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1853 lp += 1;
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1854 else
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1855 lp = skip_spaces (lb.buffer + 2);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1856 cp = skip_non_spaces (lp);
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1857 *cp = '\0';
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1858
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
1859 if (strlen (lp) > 0)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1860 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1861 lang = get_language_from_interpreter (lp);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
1862 if (lang != NULL && lang->function != NULL)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1863 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1864 curfdp->lang = lang;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1865 parser = lang->function;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1866 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
1867 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 }
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1869
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1870 /* We rewind here, even if inf may be a pipe. We fail if the
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1871 length of the first line is longer than the pipe block size,
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1872 which is unlikely. */
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1873 rewind (inf);
44607
8f3420af28a8 * etags.c (get_language_from_filename): Add one argument.
Francesco Potortì <pot@gnu.org>
parents: 44605
diff changeset
1874
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1875 /* Else try to guess the language given the case insensitive file name. */
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1876 if (parser == NULL)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1877 {
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1878 lang = get_language_from_filename (curfdp->infname, FALSE);
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1879 if (lang != NULL && lang->function != NULL)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1880 {
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1881 curfdp->lang = lang;
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1882 parser = lang->function;
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1883 }
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1884 }
44607
8f3420af28a8 * etags.c (get_language_from_filename): Add one argument.
Francesco Potortì <pot@gnu.org>
parents: 44605
diff changeset
1885
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1886 /* Else try Fortran or C. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1887 if (parser == NULL)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1888 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1889 node *old_last_node = last_node;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1890
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1891 curfdp->lang = get_language_from_langname ("fortran");
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1892 find_entries (inf);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1893
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1894 if (old_last_node == last_node)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1895 /* No Fortran entries found. Try C. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1896 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1897 /* We do not tag if rewind fails.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1898 Only the file name will be recorded in the tags file. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1899 rewind (inf);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1900 curfdp->lang = get_language_from_langname (cplusplus ? "c++" : "c");
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1901 find_entries (inf);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1902 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1903 return;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1904 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1905
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1906 if (!no_line_directive
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1907 && curfdp->lang != NULL && curfdp->lang->metasource)
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1908 /* It may be that this is a bingo.y file, and we already parsed a bingo.c
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1909 file, or anyway we parsed a file that is automatically generated from
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
1910 this one. If this is the case, the bingo.c file contained #line
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1911 directives that generated tags pointing to this file. Let's delete
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1912 them all before parsing this file, which is the real source. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1913 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1914 fdesc **fdpp = &fdhead;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1915 while (*fdpp != NULL)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1916 if (*fdpp != curfdp
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1917 && streq ((*fdpp)->taggedfname, curfdp->taggedfname))
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1918 /* We found one of those! We must delete both the file description
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1919 and all tags referring to it. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1920 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1921 fdesc *badfdp = *fdpp;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1922
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
1923 /* Delete the tags referring to badfdp->taggedfname
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
1924 that were obtained from badfdp->infname. */
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1925 invalidate_nodes (badfdp, &nodehead);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1926
44614
5adf2b1c20bb (find_entries): Bug fix in list management.
Francesco Potortì <pot@gnu.org>
parents: 44607
diff changeset
1927 *fdpp = badfdp->next; /* remove the bad description from the list */
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
1928 free_fdesc (badfdp);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1929 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1930 else
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1931 fdpp = &(*fdpp)->next; /* advance the list pointer */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1932 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
1933
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1934 assert (parser != NULL);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1935
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1936 /* Generic initialisations before reading from file. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1937 linebuffer_setlen (&filebuf, 0); /* reset the file buffer */
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1938
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1939 /* Generic initialisations before parsing file with readline. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1940 lineno = 0; /* reset global line number */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1941 charno = 0; /* reset global char number */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1942 linecharno = 0; /* reset global char number of line start */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1943
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1944 parser (inf);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1945
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1946 #ifdef ETAGS_REGEXPS
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1947 regex_tag_multiline ();
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
1948 #endif /* ETAGS_REGEXPS */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1949 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
1950
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1952 /*
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1953 * Check whether an implicitly named tag should be created,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1954 * then call `pfnote'.
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1955 * NAME is a string that is internally copied by this function.
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1956 *
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1957 * TAGS format specification
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1958 * Idea by Sam Kendall <kendall@mv.mv.com> (1997)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1959 * The following is explained in some more detail in etc/ETAGS.EBNF.
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1960 *
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1961 * make_tag creates tags with "implicit tag names" (unnamed tags)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1962 * if the following are all true, assuming NONAM=" \f\t\n\r()=,;":
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1963 * 1. NAME does not contain any of the characters in NONAM;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1964 * 2. LINESTART contains name as either a rightmost, or rightmost but
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1965 * one character, substring;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1966 * 3. the character, if any, immediately before NAME in LINESTART must
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1967 * be a character in NONAM;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1968 * 4. the character, if any, immediately after NAME in LINESTART must
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1969 * also be a character in NONAM.
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1970 *
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1971 * The implementation uses the notinname() macro, which recognises the
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1972 * characters stored in the string `nonam'.
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1973 * etags.el needs to use the same characters that are in NONAM.
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1974 */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1975 static void
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1976 make_tag (name, namelen, is_func, linestart, linelen, lno, cno)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1977 char *name; /* tag name, or NULL if unnamed */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1978 int namelen; /* tag length */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1979 bool is_func; /* tag is a function */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1980 char *linestart; /* start of the line where tag is */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1981 int linelen; /* length of the line where tag is */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1982 int lno; /* line number */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1983 long cno; /* character number */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1984 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1985 bool named = (name != NULL && namelen > 0);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1986
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1987 if (!CTAGS && named) /* maybe set named to false */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1988 /* Let's try to make an implicit tag name, that is, create an unnamed tag
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
1989 such that etags.el can guess a name from it. */
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1990 {
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1991 int i;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1992 register char *cp = name;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1993
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1994 for (i = 0; i < namelen; i++)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1995 if (notinname (*cp++))
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1996 break;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1997 if (i == namelen) /* rule #1 */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1998 {
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
1999 cp = linestart + linelen - namelen;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2000 if (notinname (linestart[linelen-1]))
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2001 cp -= 1; /* rule #4 */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2002 if (cp >= linestart /* rule #2 */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2003 && (cp == linestart
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2004 || notinname (cp[-1])) /* rule #3 */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2005 && strneq (name, cp, namelen)) /* rule #2 */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2006 named = FALSE; /* use implicit tag name */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2007 }
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2008 }
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2009
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2010 if (named)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2011 name = savenstr (name, namelen);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2012 else
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2013 name = NULL;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2014 pfnote (name, is_func, linestart, linelen, lno, cno);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2015 }
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
2016
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2017 /* Record a tag. */
27658
5980f19581dc (pfnote, new_pfnote, C_entries, prolog_pred, erlang_func): Add
Dave Love <fx@gnu.org>
parents: 27595
diff changeset
2018 static void
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
2019 pfnote (name, is_func, linestart, linelen, lno, cno)
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2020 char *name; /* tag name, or NULL if unnamed */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2021 bool is_func; /* tag is a function */
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2022 char *linestart; /* start of the line where tag is */
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2023 int linelen; /* length of the line where tag is */
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2024 int lno; /* line number */
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2025 long cno; /* character number */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2027 register node *np;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2028
47218
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
2029 assert (name == NULL || name[0] != '\0');
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2030 if (CTAGS && name == NULL)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2031 return;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2032
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2033 np = xnew (1, node);
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2034
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 /* If ctags mode, change name "main" to M<thisfilename>. */
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
2036 if (CTAGS && !cxref_style && streq (name, "main"))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2038 register char *fp = etags_strrchr (curfdp->taggedfname, '/');
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2039 np->name = concat ("M", fp == NULL ? curfdp->taggedfname : fp + 1, "");
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2040 fp = etags_strrchr (np->name, '.');
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2041 if (fp != NULL && fp[1] != '\0' && fp[2] == '\0')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2042 fp[0] = '\0';
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043 }
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2044 else
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
2045 np->name = name;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2046 np->valid = TRUE;
10623
8a73e71a55e3 * etags.c (pfnote): Initialise been_warned in the node.
Francesco Potortì <pot@gnu.org>
parents: 10449
diff changeset
2047 np->been_warned = FALSE;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2048 np->fdp = curfdp;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049 np->is_func = is_func;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050 np->lno = lno;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2051 if (np->fdp->usecharno)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2052 /* Our char numbers are 0-base, because of C language tradition?
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2053 ctags compatibility? old versions compatibility? I don't know.
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2054 Anyway, since emacs's are 1-base we expect etags.el to take care
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2055 of the difference. If we wanted to have 1-based numbers, we would
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2056 uncomment the +1 below. */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2057 np->cno = cno /* + 1 */ ;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2058 else
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2059 np->cno = invalidcharno;
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2060 np->left = np->right = NULL;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2061 if (CTAGS && !cxref_style)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2062 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2063 if (strlen (linestart) < 50)
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2064 np->regex = concat (linestart, "$", "");
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2065 else
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2066 np->regex = savenstr (linestart, 50);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2067 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2068 else
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2069 np->regex = savenstr (linestart, linelen);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2070
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2071 add_node (np, &nodehead);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2074 /*
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 * free_tree ()
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 * recurse on left children, iterate on right children.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
2078 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2079 free_tree (np)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2080 register node *np;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2081 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2082 while (np)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2084 register node *node_right = np->right;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2085 free_tree (np->left);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2086 if (np->name != NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2087 free (np->name);
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2088 free (np->regex);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2089 free (np);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2090 np = node_right;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2094 /*
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2095 * free_fdesc ()
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2096 * delete a file description
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2097 */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2098 static void
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2099 free_fdesc (fdp)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2100 register fdesc *fdp;
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2101 {
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2102 if (fdp->infname != NULL) free (fdp->infname);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2103 if (fdp->infabsname != NULL) free (fdp->infabsname);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2104 if (fdp->infabsdir != NULL) free (fdp->infabsdir);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2105 if (fdp->taggedfname != NULL) free (fdp->taggedfname);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2106 if (fdp->prop != NULL) free (fdp->prop);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2107 free (fdp);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2108 }
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2109
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2110 /*
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2111 * add_node ()
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2112 * Adds a node to the tree of nodes. In etags mode, sort by file
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2113 * name. In ctags mode, sort by tag name. Make no attempt at
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2114 * balancing.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 *
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116 * add_node is the only function allowed to add nodes, so it can
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117 * maintain state.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2118 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
2119 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2120 add_node (np, cur_node_p)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2121 node *np, **cur_node_p;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2122 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123 register int dif;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2124 register node *cur_node = *cur_node_p;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2125
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 if (cur_node == NULL)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2127 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2128 *cur_node_p = np;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2129 last_node = np;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2130 return;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2131 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132
6530
12e47da67bb5 * etags.c (emacs_tags_format, ETAGS): removed. Use CTAGS instead.
Francesco Potortì <pot@gnu.org>
parents: 6482
diff changeset
2133 if (!CTAGS)
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2134 /* Etags Mode */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 {
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2136 /* For each file name, tags are in a linked sublist on the right
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2137 pointer. The first tags of different files are a linked list
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2138 on the left pointer. last_node points to the end of the last
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2139 used sublist. */
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2140 if (last_node != NULL && last_node->fdp == np->fdp)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2141 {
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2142 /* Let's use the same sublist as the last added node. */
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2143 assert (last_node->right == NULL);
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2144 last_node->right = np;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2145 last_node = np;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2146 }
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2147 else if (cur_node->fdp == np->fdp)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2148 {
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2149 /* Scanning the list we found the head of a sublist which is
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2150 good for us. Let's scan this sublist. */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2151 add_node (np, &cur_node->right);
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2152 }
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2153 else
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2154 /* The head of this sublist is not good for us. Let's try the
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2155 next one. */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2156 add_node (np, &cur_node->left);
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2157 } /* if ETAGS mode */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2158
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159 else
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2160 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2161 /* Ctags Mode */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2162 dif = strcmp (np->name, cur_node->name);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2163
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2164 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2165 * If this tag name matches an existing one, then
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2166 * do not add the node, but maybe print a warning.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2167 */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2168 if (!dif)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2169 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2170 if (np->fdp == cur_node->fdp)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172 if (!no_warnings)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 fprintf (stderr, "Duplicate entry in file %s, line %d: %s\n",
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2175 np->fdp->infname, lineno, np->name);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176 fprintf (stderr, "Second entry ignored\n");
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178 }
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
2179 else if (!cur_node->been_warned && !no_warnings)
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
2180 {
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
2181 fprintf
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
2182 (stderr,
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
2183 "Duplicate entry in files %s and %s: %s (Warning only)\n",
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2184 np->fdp->infname, cur_node->fdp->infname, np->name);
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
2185 cur_node->been_warned = TRUE;
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
2186 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2187 return;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190 /* Actually add the node */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2191 add_node (np, dif < 0 ? &cur_node->left : &cur_node->right);
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2192 } /* if CTAGS mode */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2194
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2195 /*
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2196 * invalidate_nodes ()
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2197 * Scan the node tree and invalidate all nodes pointing to the
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2198 * given file description (CTAGS case) or free them (ETAGS case).
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2199 */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2200 static void
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2201 invalidate_nodes (badfdp, npp)
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2202 fdesc *badfdp;
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2203 node **npp;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2204 {
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2205 node *np = *npp;
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2206
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2207 if (np == NULL)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2208 return;
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2209
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2210 if (CTAGS)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2211 {
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2212 if (np->left != NULL)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2213 invalidate_nodes (badfdp, &np->left);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2214 if (np->fdp == badfdp)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
2215 np->valid = FALSE;
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2216 if (np->right != NULL)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2217 invalidate_nodes (badfdp, &np->right);
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2218 }
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2219 else
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2220 {
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
2221 assert (np->fdp != NULL);
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2222 if (np->fdp == badfdp)
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2223 {
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
2224 *npp = np->left; /* detach the sublist from the list */
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2225 np->left = NULL; /* isolate it */
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2226 free_tree (np); /* free it */
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
2227 invalidate_nodes (badfdp, npp);
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2228 }
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
2229 else
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
2230 invalidate_nodes (badfdp, &np->left);
44735
98b894d1d3ad (last_node): Make it a global variable.
Francesco Potortì <pot@gnu.org>
parents: 44614
diff changeset
2231 }
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2232 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2233
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2234
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2235 static int total_size_of_entries __P((node *));
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2236 static int number_len __P((long));
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2237
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2238 /* Length of a non-negative number's decimal representation. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2239 static int
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2240 number_len (num)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2241 long num;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2242 {
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2243 int len = 1;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2244 while ((num /= 10) > 0)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2245 len += 1;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2246 return len;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2247 }
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2248
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2249 /*
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2250 * Return total number of characters that put_entries will output for
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2251 * the nodes in the linked list at the right of the specified node.
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2252 * This count is irrelevant with etags.el since emacs 19.34 at least,
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2253 * but is still supplied for backward compatibility.
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2254 */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2255 static int
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2256 total_size_of_entries (np)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2257 register node *np;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2258 {
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2259 register int total = 0;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2260
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2261 for (; np != NULL; np = np->right)
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2262 if (np->valid)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2263 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2264 total += strlen (np->regex) + 1; /* pat\177 */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2265 if (np->name != NULL)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2266 total += strlen (np->name) + 1; /* name\001 */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2267 total += number_len ((long) np->lno) + 1; /* lno, */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2268 if (np->cno != invalidcharno) /* cno */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2269 total += number_len (np->cno);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2270 total += 1; /* newline */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2271 }
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2272
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2273 return total;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2274 }
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2275
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
2276 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2277 put_entries (np)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2278 register node *np;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2280 register char *sp;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2281 static fdesc *fdp = NULL;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2283 if (np == NULL)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 return;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2286 /* Output subentries that precede this one */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2287 if (CTAGS)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2288 put_entries (np->left);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2290 /* Output this entry */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2291 if (np->valid)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2292 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2293 if (!CTAGS)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2294 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2295 /* Etags mode */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2296 if (fdp != np->fdp)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2297 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2298 fdp = np->fdp;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2299 fprintf (tagf, "\f\n%s,%d\n",
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2300 fdp->taggedfname, total_size_of_entries (np));
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2301 fdp->written = TRUE;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2302 }
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2303 fputs (np->regex, tagf);
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2304 fputc ('\177', tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2305 if (np->name != NULL)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2306 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2307 fputs (np->name, tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2308 fputc ('\001', tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2309 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2310 fprintf (tagf, "%d,", np->lno);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2311 if (np->cno != invalidcharno)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2312 fprintf (tagf, "%ld", np->cno);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2313 fputs ("\n", tagf);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2315 else
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2316 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2317 /* Ctags mode */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2318 if (np->name == NULL)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2319 error ("internal error: NULL name in ctags mode.", (char *)NULL);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2320
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2321 if (cxref_style)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2322 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2323 if (vgrind_style)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2324 fprintf (stdout, "%s %s %d\n",
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2325 np->name, np->fdp->taggedfname, (np->lno + 63) / 64);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2326 else
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2327 fprintf (stdout, "%-16s %3d %-16s %s\n",
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2328 np->name, np->lno, np->fdp->taggedfname, np->regex);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2329 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2330 else
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2331 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2332 fprintf (tagf, "%s\t%s\t", np->name, np->fdp->taggedfname);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2333
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2334 if (np->is_func)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2335 { /* function or #define macro with args */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2336 putc (searchar, tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2337 putc ('^', tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2338
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
2339 for (sp = np->regex; *sp; sp++)
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2340 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2341 if (*sp == '\\' || *sp == searchar)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2342 putc ('\\', tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2343 putc (*sp, tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2344 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2345 putc (searchar, tagf);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2346 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2347 else
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2348 { /* anything else; text pattern inadequate */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2349 fprintf (tagf, "%d", np->lno);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2350 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2351 putc ('\n', tagf);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2352 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2353 }
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
2354 } /* if this node contains a valid tag */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2355
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2356 /* Output subentries that follow this one */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2357 put_entries (np->right);
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2358 if (!CTAGS)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2359 put_entries (np->left);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2361
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2362
35740
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2363 /* C extensions. */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2364 #define C_EXT 0x00fff /* C extensions */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2365 #define C_PLAIN 0x00000 /* C */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2366 #define C_PLPL 0x00001 /* C++ */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2367 #define C_STAR 0x00003 /* C* */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2368 #define C_JAVA 0x00005 /* JAVA */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2369 #define C_AUTO 0x01000 /* C, but switch to C++ if `class' is met */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2370 #define YACC 0x10000 /* yacc file */
9a7c0217c7bd Comment updates to etags.c
Francesco Potortì <pot@gnu.org>
parents: 35665
diff changeset
2371
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2373 * The C symbol tables.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2374 */
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2375 enum sym_type
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2376 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2377 st_none,
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2378 st_C_objprot, st_C_objimpl, st_C_objend,
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2379 st_C_gnumacro,
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2380 st_C_ignore,
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2381 st_C_javastruct,
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2382 st_C_operator,
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2383 st_C_class, st_C_template,
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2384 st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef, st_C_typespec
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2385 };
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2386
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2387 static unsigned int hash __P((const char *, unsigned int));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2388 static struct C_stab_entry * in_word_set __P((const char *, unsigned int));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2389 static enum sym_type C_symtype __P((char *, int, int));
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
2390
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2391 /* Feed stuff between (but not including) %[ and %] lines to:
15579
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2392 gperf -c -k 1,3 -o -p -r -t
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2393 %[
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2394 struct C_stab_entry { char *name; int c_ext; enum sym_type type; }
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2395 %%
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2396 if, 0, st_C_ignore
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2397 for, 0, st_C_ignore
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2398 while, 0, st_C_ignore
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2399 switch, 0, st_C_ignore
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2400 return, 0, st_C_ignore
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2401 @interface, 0, st_C_objprot
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2402 @protocol, 0, st_C_objprot
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2403 @implementation,0, st_C_objimpl
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2404 @end, 0, st_C_objend
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2405 import, C_JAVA, st_C_ignore
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2406 package, C_JAVA, st_C_ignore
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2407 friend, C_PLPL, st_C_ignore
17785
5b92f8ba5c6d Added support for the Java language.
Francesco Potortì <pot@gnu.org>
parents: 17778
diff changeset
2408 extends, C_JAVA, st_C_javastruct
5b92f8ba5c6d Added support for the Java language.
Francesco Potortì <pot@gnu.org>
parents: 17778
diff changeset
2409 implements, C_JAVA, st_C_javastruct
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2410 interface, C_JAVA, st_C_struct
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2411 class, 0, st_C_class
15579
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2412 namespace, C_PLPL, st_C_struct
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2413 domain, C_STAR, st_C_struct
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2414 union, 0, st_C_struct
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2415 struct, 0, st_C_struct
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2416 extern, 0, st_C_extern
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2417 enum, 0, st_C_enum
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2418 typedef, 0, st_C_typedef
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2419 define, 0, st_C_define
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2420 operator, C_PLPL, st_C_operator
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2421 template, 0, st_C_template
15579
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2422 bool, C_PLPL, st_C_typespec
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2423 long, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2424 short, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2425 int, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2426 char, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2427 float, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2428 double, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2429 signed, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2430 unsigned, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2431 auto, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2432 void, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2433 static, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2434 const, 0, st_C_typespec
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2435 volatile, 0, st_C_typespec
15579
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2436 explicit, C_PLPL, st_C_typespec
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2437 mutable, C_PLPL, st_C_typespec
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2438 typename, C_PLPL, st_C_typespec
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2439 # DEFUN used in emacs, the next three used in glibc (SYSCALL only for mach).
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2440 DEFUN, 0, st_C_gnumacro
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2441 SYSCALL, 0, st_C_gnumacro
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2442 ENTRY, 0, st_C_gnumacro
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2443 PSEUDO, 0, st_C_gnumacro
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2444 # These are defined inside C functions, so currently they are not met.
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2445 # EXFUN used in glibc, DEFVAR_* in emacs.
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2446 #EXFUN, 0, st_C_gnumacro
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2447 #DEFVAR_, 0, st_C_gnumacro
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2448 %]
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2449 and replace lines between %< and %> with its output,
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2450 then make in_word_set and C_stab_entry static. */
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2451 /*%<*/
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2452 /* C code produced by gperf version 2.7.1 (19981006 egcs) */
15579
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2453 /* Command-line: gperf -c -k 1,3 -o -p -r -t */
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2454 struct C_stab_entry { char *name; int c_ext; enum sym_type type; };
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2455
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2456 #define TOTAL_KEYWORDS 47
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2457 #define MIN_WORD_LENGTH 2
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2458 #define MAX_WORD_LENGTH 15
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2459 #define MIN_HASH_VALUE 18
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2460 #define MAX_HASH_VALUE 138
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2461 /* maximum key range = 121, duplicates = 0 */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2462
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2463 #ifdef __GNUC__
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2464 __inline
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2465 #endif
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2466 static unsigned int
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2467 hash (str, len)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2468 register const char *str;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2469 register unsigned int len;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2470 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2471 static unsigned char asso_values[] =
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2472 {
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2473 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2474 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2475 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2476 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2477 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2478 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2479 139, 139, 139, 139, 63, 139, 139, 139, 33, 44,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2480 62, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2481 42, 139, 139, 12, 32, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2482 139, 139, 139, 139, 139, 139, 139, 34, 59, 37,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2483 24, 58, 33, 3, 139, 16, 139, 139, 42, 60,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2484 18, 11, 39, 139, 23, 57, 4, 63, 6, 20,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2485 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2486 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2487 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2488 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2489 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2490 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2491 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2492 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2493 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2494 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2495 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2496 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2497 139, 139, 139, 139, 139, 139, 139, 139, 139, 139,
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2498 139, 139, 139, 139, 139, 139
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2499 };
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2500 register int hval = len;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2501
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2502 switch (hval)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2503 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2504 default:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2505 case 3:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2506 hval += asso_values[(unsigned char)str[2]];
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2507 case 2:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2508 case 1:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2509 hval += asso_values[(unsigned char)str[0]];
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2510 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2511 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2512 return hval;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2513 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2514
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2515 #ifdef __GNUC__
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2516 __inline
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2517 #endif
35766
3584fc1b9b79 (in_word_set): Use `static' in definition (for pcc).
Dave Love <fx@gnu.org>
parents: 35758
diff changeset
2518 static struct C_stab_entry *
15579
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2519 in_word_set (str, len)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2520 register const char *str;
15579
690a439bcc0e * etags.c (C_stab_entry): New keywords for C++ namespace, bool,
Francesco Potortì <pot@gnu.org>
parents: 15407
diff changeset
2521 register unsigned int len;
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2522 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2523 static struct C_stab_entry wordlist[] =
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2524 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2525 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2526 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2527 {"if", 0, st_C_ignore},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2528 {""}, {""}, {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2529 {"int", 0, st_C_typespec},
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2530 {""}, {""},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2531 {"void", 0, st_C_typespec},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2532 {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2533 {"interface", C_JAVA, st_C_struct},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2534 {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2535 {"SYSCALL", 0, st_C_gnumacro},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2536 {""},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2537 {"return", 0, st_C_ignore},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2538 {""}, {""}, {""}, {""}, {""}, {""}, {""},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2539 {"while", 0, st_C_ignore},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2540 {"auto", 0, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2541 {""}, {""}, {""}, {""}, {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2542 {"float", 0, st_C_typespec},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2543 {"typedef", 0, st_C_typedef},
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2544 {"typename", C_PLPL, st_C_typespec},
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2545 {""}, {""}, {""},
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2546 {"friend", C_PLPL, st_C_ignore},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2547 {"volatile", 0, st_C_typespec},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2548 {""}, {""},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2549 {"for", 0, st_C_ignore},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2550 {"const", 0, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2551 {"import", C_JAVA, st_C_ignore},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2552 {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2553 {"define", 0, st_C_define},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2554 {"long", 0, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2555 {"implements", C_JAVA, st_C_javastruct},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2556 {"signed", 0, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2557 {""},
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2558 {"extern", 0, st_C_extern},
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2559 {"extends", C_JAVA, st_C_javastruct},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2560 {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2561 {"mutable", C_PLPL, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2562 {"template", 0, st_C_template},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2563 {"short", 0, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2564 {"bool", C_PLPL, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2565 {"char", 0, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2566 {"class", 0, st_C_class},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2567 {"operator", C_PLPL, st_C_operator},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2568 {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2569 {"switch", 0, st_C_ignore},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2570 {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2571 {"ENTRY", 0, st_C_gnumacro},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2572 {""},
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2573 {"package", C_JAVA, st_C_ignore},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2574 {"union", 0, st_C_struct},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2575 {"@end", 0, st_C_objend},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2576 {"struct", 0, st_C_struct},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2577 {"namespace", C_PLPL, st_C_struct},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2578 {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2579 {"domain", C_STAR, st_C_struct},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2580 {"@interface", 0, st_C_objprot},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2581 {"PSEUDO", 0, st_C_gnumacro},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2582 {"double", 0, st_C_typespec},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2583 {""},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2584 {"@protocol", 0, st_C_objprot},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2585 {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2586 {"static", 0, st_C_typespec},
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2587 {""}, {""},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2588 {"DEFUN", 0, st_C_gnumacro},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2589 {""}, {""}, {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2590 {"explicit", C_PLPL, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2591 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2592 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2593 {""},
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2594 {"enum", 0, st_C_enum},
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2595 {""}, {""},
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2596 {"unsigned", 0, st_C_typespec},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2597 {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2598 {"@implementation",0, st_C_objimpl}
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2599 };
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2600
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2601 if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2602 {
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2603 register int key = hash (str, len);
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2604
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2605 if (key <= MAX_HASH_VALUE && key >= 0)
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2606 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2607 register const char *s = wordlist[key].name;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2608
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2609 if (*str == *s && !strncmp (str + 1, s + 1, len - 1))
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2610 return &wordlist[key];
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2611 }
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2612 }
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2613 return 0;
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2614 }
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2615 /*%>*/
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2616
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
2617 static enum sym_type
16573
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
2618 C_symtype (str, len, c_ext)
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2619 char *str;
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2620 int len;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2621 int c_ext;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2622 {
16573
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
2623 register struct C_stab_entry *se = in_word_set (str, len);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2624
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2625 if (se == NULL || (se->c_ext && !(c_ext & se->c_ext)))
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2626 return st_none;
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
2627 return se->type;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2628 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2629
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2630
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2631 /*
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2632 * C functions and variables are recognized using a simple
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2633 * finite automaton. fvdef is its state variable.
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2634 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2635 static enum
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2636 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2637 fvnone, /* nothing seen */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2638 fdefunkey, /* Emacs DEFUN keyword seen */
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2639 fdefunname, /* Emacs DEFUN name seen */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2640 foperator, /* func: operator keyword seen (cplpl) */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2641 fvnameseen, /* function or variable name seen */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2642 fstartlist, /* func: just after open parenthesis */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2643 finlist, /* func: in parameter list */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2644 flistseen, /* func: after parameter list */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2645 fignore, /* func: before open brace */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2646 vignore /* var-like: ignore until ';' */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2647 } fvdef;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2648
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2649 static bool fvextern; /* func or var: extern keyword seen; */
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2650
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2651 /*
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2652 * typedefs are recognized using a simple finite automaton.
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2653 * typdef is its state variable.
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2654 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2655 static enum
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2656 {
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
2657 tnone, /* nothing seen */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2658 tkeyseen, /* typedef keyword seen */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2659 ttypeseen, /* defined type seen */
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
2660 tinbody, /* inside typedef body */
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
2661 tend, /* just before typedef tag */
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
2662 tignore /* junk after typedef tag */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2663 } typdef;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2664
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2665 /*
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2666 * struct-like structures (enum, struct and union) are recognized
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2667 * using another simple finite automaton. `structdef' is its state
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2668 * variable.
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2669 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2670 static enum
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2671 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2672 snone, /* nothing seen yet,
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2673 or in struct body if cblev > 0 */
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2674 skeyseen, /* struct-like keyword seen */
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2675 stagseen, /* struct-like tag seen */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2676 sintemplate, /* inside template (ignore) */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2677 scolonseen /* colon seen after struct-like tag */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2678 } structdef;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
2679
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2680 /*
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2681 * When objdef is different from onone, objtag is the name of the class.
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2682 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2683 static char *objtag = "<uninited>";
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2684
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2685 /*
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2686 * Yet another little state machine to deal with preprocessor lines.
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2687 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2688 static enum
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2689 {
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2690 dnone, /* nothing seen */
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2691 dsharpseen, /* '#' seen as first char on line */
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2692 ddefineseen, /* '#' and 'define' seen */
5044
d3bd7baee39f (FUNCST, TYPEDST, STRUCTST, DEFINEST): Delete excess commas.
Richard M. Stallman <rms@gnu.org>
parents: 4937
diff changeset
2693 dignorerest /* ignore rest of line */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2694 } definedef;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2695
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2696 /*
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2697 * State machine for Objective C protocols and implementations.
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2698 * Idea by Tom R.Hageman <tom@basil.icce.rug.nl> (1995)
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2699 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2700 static enum
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2701 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2702 onone, /* nothing seen */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2703 oprotocol, /* @interface or @protocol seen */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2704 oimplementation, /* @implementations seen */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2705 otagseen, /* class name seen */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2706 oparenseen, /* parenthesis before category seen */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2707 ocatseen, /* category name seen */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2708 oinbody, /* in @implementation body */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2709 omethodsign, /* in @implementation body, after +/- */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2710 omethodtag, /* after method name */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2711 omethodcolon, /* after method colon */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2712 omethodparm, /* after method parameter */
14230
6b836f84bccf (enum sym_type, anonymous enum): Delete final comma.
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2713 oignore /* wait for @end */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2714 } objdef;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
2715
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2716
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2717 /*
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2718 * Use this structure to keep info about the token read, and how it
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2719 * should be tagged. Used by the make_C_tag function to build a tag.
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2720 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2721 static struct tok
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2722 {
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2723 char *line; /* string containing the token */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2724 int offset; /* where the token starts in LINE */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2725 int length; /* token length */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2726 /*
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2727 The previous members can be used to pass strings around for generic
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2728 purposes. The following ones specifically refer to creating tags. In this
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2729 case the token contained here is the pattern that will be used to create a
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2730 tag.
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2731 */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2732 bool valid; /* do not create a tag; the token should be
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2733 invalidated whenever a state machine is
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2734 reset prematurely */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2735 bool named; /* create a named tag */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2736 int lineno; /* source line number of tag */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2737 long linepos; /* source char number of tag */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2738 } token; /* latest token read */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2739
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2740 /*
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2741 * Variables and functions for dealing with nested structures.
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2742 * Idea by Mykola Dzyuba <mdzyuba@yahoo.com> (2001)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2743 */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2744 static void pushclass_above __P((int, char *, int));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2745 static void popclass_above __P((int));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2746 static void write_classname __P((linebuffer *, char *qualifier));
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2747
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
2748 static struct {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2749 char **cname; /* nested class names */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2750 int *cblev; /* nested class curly brace level */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2751 int nl; /* class nesting level (elements used) */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2752 int size; /* length of the array */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2753 } cstack; /* stack for nested declaration tags */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2754 /* Current struct nesting depth (namespace, class, struct, union, enum). */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2755 #define nestlev (cstack.nl)
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
2756 /* After struct keyword or in struct body, not inside a nested function. */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2757 #define instruct (structdef == snone && nestlev > 0 \
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2758 && cblev == cstack.cblev[nestlev-1] + 1)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2759
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2760 static void
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2761 pushclass_above (cblev, str, len)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2762 int cblev;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2763 char *str;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2764 int len;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2765 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2766 int nl;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2767
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2768 popclass_above (cblev);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2769 nl = cstack.nl;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2770 if (nl >= cstack.size)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2771 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2772 int size = cstack.size *= 2;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2773 xrnew (cstack.cname, size, char *);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2774 xrnew (cstack.cblev, size, int);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2775 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2776 assert (nl == 0 || cstack.cblev[nl-1] < cblev);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2777 cstack.cname[nl] = (str == NULL) ? NULL : savenstr (str, len);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2778 cstack.cblev[nl] = cblev;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2779 cstack.nl = nl + 1;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2780 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2781
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2782 static void
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2783 popclass_above (cblev)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2784 int cblev;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2785 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2786 int nl;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2787
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2788 for (nl = cstack.nl - 1;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2789 nl >= 0 && cstack.cblev[nl] >= cblev;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2790 nl--)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2791 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2792 if (cstack.cname[nl] != NULL)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2793 free (cstack.cname[nl]);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2794 cstack.nl = nl;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2795 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2796 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2797
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2798 static void
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2799 write_classname (cn, qualifier)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2800 linebuffer *cn;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2801 char *qualifier;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2802 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2803 int i, len;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2804 int qlen = strlen (qualifier);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2805
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2806 if (cstack.nl == 0 || cstack.cname[0] == NULL)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2807 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2808 len = 0;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2809 cn->len = 0;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2810 cn->buffer[0] = '\0';
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2811 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2812 else
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2813 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2814 len = strlen (cstack.cname[0]);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2815 linebuffer_setlen (cn, len);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2816 strcpy (cn->buffer, cstack.cname[0]);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2817 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2818 for (i = 1; i < cstack.nl; i++)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2819 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2820 char *s;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2821 int slen;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2822
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2823 s = cstack.cname[i];
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2824 if (s == NULL)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2825 continue;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2826 slen = strlen (s);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2827 len += slen + qlen;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2828 linebuffer_setlen (cn, len);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2829 strncat (cn->buffer, qualifier, qlen);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2830 strncat (cn->buffer, s, slen);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2831 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2832 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2833
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2834
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2835 static bool consider_token __P((char *, int, int, int *, int, int, bool *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
2836 static void make_C_tag __P((bool));
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
2837
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2838 /*
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2839 * consider_token ()
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2840 * checks to see if the current token is at the start of a
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2841 * function or variable, or corresponds to a typedef, or
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2842 * is a struct/union/enum tag, or #define, or an enum constant.
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2843 *
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
2844 * *IS_FUNC gets TRUE iff the token is a function or #define macro
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2845 * with args. C_EXTP points to which language we are looking at.
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2846 *
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2847 * Globals
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2848 * fvdef IN OUT
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2849 * structdef IN OUT
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2850 * definedef IN OUT
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2851 * typdef IN OUT
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2852 * objdef IN OUT
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2853 */
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2854
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
2855 static bool
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2856 consider_token (str, len, c, c_extp, cblev, parlev, is_func_or_var)
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2857 register char *str; /* IN: token pointer */
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
2858 register int len; /* IN: token length */
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
2859 register int c; /* IN: first char after the token */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2860 int *c_extp; /* IN, OUT: C extensions mask */
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2861 int cblev; /* IN: curly brace level */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
2862 int parlev; /* IN: parenthesis level */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2863 bool *is_func_or_var; /* OUT: function or variable found */
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2864 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2865 /* When structdef is stagseen, scolonseen, or snone with cblev > 0,
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2866 structtype is the type of the preceding struct-like keyword, and
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2867 structcblev is the curly brace level where it has been seen. */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2868 static enum sym_type structtype;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2869 static int structcblev;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2870 static enum sym_type toktype;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2871
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2872
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2873 toktype = C_symtype (str, len, *c_extp);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2874
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2875 /*
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2876 * Advance the definedef state machine.
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2877 */
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2878 switch (definedef)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2879 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2880 case dnone:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2881 /* We're not on a preprocessor line. */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2882 if (toktype == st_C_gnumacro)
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2883 {
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2884 fvdef = fdefunkey;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2885 return FALSE;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
2886 }
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2887 break;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2888 case dsharpseen:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2889 if (toktype == st_C_define)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2890 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2891 definedef = ddefineseen;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2892 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2893 else
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2894 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2895 definedef = dignorerest;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2896 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2897 return FALSE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2898 case ddefineseen:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2899 /*
9193
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
2900 * Make a tag for any macro, unless it is a constant
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
2901 * and constantypedefs is FALSE.
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2902 */
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2903 definedef = dignorerest;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2904 *is_func_or_var = (c == '(');
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2905 if (!*is_func_or_var && !constantypedefs)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2906 return FALSE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2907 else
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2908 return TRUE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2909 case dignorerest:
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2910 return FALSE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2911 default:
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
2912 error ("internal error: definedef value.", (char *)NULL);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2913 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2914
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2915 /*
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2916 * Now typedefs
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2917 */
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2918 switch (typdef)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2919 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2920 case tnone:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2921 if (toktype == st_C_typedef)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2922 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2923 if (typedefs)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2924 typdef = tkeyseen;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2925 fvextern = FALSE;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
2926 fvdef = fvnone;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2927 return FALSE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2928 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2929 break;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2930 case tkeyseen:
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2931 switch (toktype)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2932 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2933 case st_none:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2934 case st_C_typespec:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2935 case st_C_class:
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2936 case st_C_struct:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2937 case st_C_enum:
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
2938 typdef = ttypeseen;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2939 break;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2940 }
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2941 break;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2942 case ttypeseen:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2943 if (structdef == snone && fvdef == fvnone)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2944 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2945 fvdef = fvnameseen;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2946 return TRUE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2947 }
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2948 break;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2949 case tend:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2950 switch (toktype)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2951 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2952 case st_C_typespec:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2953 case st_C_class:
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2954 case st_C_struct:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2955 case st_C_enum:
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2956 return FALSE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2957 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2958 return TRUE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2959 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2960
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2961 /*
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2962 * This structdef business is NOT invoked when we are ctags and the
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2963 * file is plain C. This is because a struct tag may have the same
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2964 * name as another tag, and this loses with ctags.
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2965 */
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2966 switch (toktype)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2967 {
17785
5b92f8ba5c6d Added support for the Java language.
Francesco Potortì <pot@gnu.org>
parents: 17778
diff changeset
2968 case st_C_javastruct:
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
2969 if (structdef == stagseen)
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
2970 structdef = scolonseen;
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
2971 return FALSE;
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2972 case st_C_template:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2973 case st_C_class:
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2974 if ((*c_extp & C_AUTO) /* automatic detection of C++ language */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
2975 && cblev == 0
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2976 && definedef == dnone && structdef == snone
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2977 && typdef == tnone && fvdef == fvnone)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2978 *c_extp = (*c_extp | C_PLPL) & ~C_AUTO;
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2979 if (toktype == st_C_template)
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
2980 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2981 /* FALLTHRU */
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2982 case st_C_struct:
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2983 case st_C_enum:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2984 if (parlev == 0
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2985 && fvdef != vignore
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2986 && (typdef == tkeyseen
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2987 || (typedefs_or_cplusplus && structdef == snone)))
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2988 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2989 structdef = skeyseen;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2990 structtype = toktype;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
2991 structcblev = cblev;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2992 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2993 return FALSE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2994 }
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
2995
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2996 if (structdef == skeyseen)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2997 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
2998 structdef = stagseen;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
2999 return TRUE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3000 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3001
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3002 if (typdef != tnone)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3003 definedef = dnone;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3004
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
3005 /* Detect Objective C constructs. */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3006 switch (objdef)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3007 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3008 case onone:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3009 switch (toktype)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3010 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3011 case st_C_objprot:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3012 objdef = oprotocol;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3013 return FALSE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3014 case st_C_objimpl:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3015 objdef = oimplementation;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3016 return FALSE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3017 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3018 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3019 case oimplementation:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3020 /* Save the class tag for functions or variables defined inside. */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3021 objtag = savenstr (str, len);
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3022 objdef = oinbody;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3023 return FALSE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3024 case oprotocol:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3025 /* Save the class tag for categories. */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3026 objtag = savenstr (str, len);
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3027 objdef = otagseen;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3028 *is_func_or_var = TRUE;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3029 return TRUE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3030 case oparenseen:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3031 objdef = ocatseen;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3032 *is_func_or_var = TRUE;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3033 return TRUE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3034 case oinbody:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3035 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3036 case omethodsign:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3037 if (parlev == 0)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3038 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3039 objdef = omethodtag;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3040 linebuffer_setlen (&token_name, len);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3041 strncpy (token_name.buffer, str, len);
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3042 token_name.buffer[len] = '\0';
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3043 return TRUE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3044 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3045 return FALSE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3046 case omethodcolon:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3047 if (parlev == 0)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3048 objdef = omethodparm;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3049 return FALSE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3050 case omethodparm:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3051 if (parlev == 0)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3052 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3053 objdef = omethodtag;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3054 linebuffer_setlen (&token_name, token_name.len + len);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3055 strncat (token_name.buffer, str, len);
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3056 return TRUE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3057 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3058 return FALSE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3059 case oignore:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3060 if (toktype == st_C_objend)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3061 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3062 /* Memory leakage here: the string pointed by objtag is
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3063 never released, because many tests would be needed to
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3064 avoid breaking on incorrect input code. The amount of
14021
19bab04cf346 (substitute): Fix spelling in message.
Karl Heuer <kwzh@gnu.org>
parents: 13696
diff changeset
3065 memory leaked here is the sum of the lengths of the
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3066 class tags.
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3067 free (objtag); */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3068 objdef = onone;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3069 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3070 return FALSE;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3071 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3072
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3073 /* A function, variable or enum constant? */
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3074 switch (toktype)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3075 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3076 case st_C_extern:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3077 fvextern = TRUE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3078 /* FALLTHRU */
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3079 case st_C_typespec:
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3080 switch (fvdef)
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3081 {
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3082 case finlist:
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3083 case flistseen:
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3084 case fignore:
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3085 case vignore:
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3086 break;
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3087 default:
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3088 fvdef = fvnone;
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3089 }
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3090 return FALSE;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3091 case st_C_ignore:
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3092 fvextern = FALSE;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3093 fvdef = vignore;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3094 return FALSE;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3095 case st_C_operator:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3096 fvdef = foperator;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3097 *is_func_or_var = TRUE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3098 return TRUE;
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
3099 case st_none:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3100 if (constantypedefs
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3101 && structdef == snone
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3102 && structtype == st_C_enum && cblev > structcblev)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3103 return TRUE; /* enum constant */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3104 switch (fvdef)
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3105 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3106 case fdefunkey:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3107 if (cblev > 0)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3108 break;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3109 fvdef = fdefunname; /* GNU macro */
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3110 *is_func_or_var = TRUE;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3111 return TRUE;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3112 case fvnone:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3113 if ((strneq (str, "asm", 3) && endtoken (str[3]))
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3114 || (strneq (str, "__asm__", 7) && endtoken (str[7])))
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3115 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3116 fvdef = vignore;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3117 return FALSE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3118 }
52421
c6c2d0694257 (consider_token): check C++ `operator' only when the token len is long
Francesco Potortì <pot@gnu.org>
parents: 52401
diff changeset
3119 if (len >= 10 && strneq (str+len-10, "::operator", 10))
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3120 {
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3121 if (*c_extp & C_AUTO) /* automatic detection of C++ */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3122 *c_extp = (*c_extp | C_PLPL) & ~C_AUTO;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3123 fvdef = foperator;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3124 *is_func_or_var = TRUE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3125 return TRUE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3126 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3127 if (cblev > 0 && !instruct)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3128 break;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3129 fvdef = fvnameseen; /* function or variable */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3130 *is_func_or_var = TRUE;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3131 return TRUE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3132 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3133 break;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3134 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3135
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3136 return FALSE;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3137 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3138
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3139
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3140 /*
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3141 * C_entries often keeps pointers to tokens or lines which are older than
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3142 * the line currently read. By keeping two line buffers, and switching
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3143 * them at end of line, it is possible to use those pointers.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3144 */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
3145 static struct
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3146 {
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3147 long linepos;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3148 linebuffer lb;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3149 } lbs[2];
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3150
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3151 #define current_lb_is_new (newndx == curndx)
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3152 #define switch_line_buffers() (curndx = 1 - curndx)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3153
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3154 #define curlb (lbs[curndx].lb)
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3155 #define newlb (lbs[newndx].lb)
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3156 #define curlinepos (lbs[curndx].linepos)
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3157 #define newlinepos (lbs[newndx].linepos)
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3158
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3159 #define plainc ((c_ext & C_EXT) == C_PLAIN)
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3160 #define cplpl (c_ext & C_PLPL)
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3161 #define cjava ((c_ext & C_JAVA) == C_JAVA)
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3162
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3163 #define CNL_SAVE_DEFINEDEF() \
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3164 do { \
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3165 curlinepos = charno; \
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
3166 readline (&curlb, inf); \
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3167 lp = curlb.buffer; \
2004
6469a137fea6 (C_entries): New local variable quotednl. Used for
Richard M. Stallman <rms@gnu.org>
parents: 1938
diff changeset
3168 quotednl = FALSE; \
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3169 newndx = curndx; \
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3170 } while (0)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3171
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3172 #define CNL() \
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3173 do { \
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3174 CNL_SAVE_DEFINEDEF(); \
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3175 if (savetoken.valid) \
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3176 { \
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3177 token = savetoken; \
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3178 savetoken.valid = FALSE; \
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3179 } \
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3180 definedef = dnone; \
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3181 } while (0)
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3182
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
3183
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
3184 static void
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3185 make_C_tag (isfun)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3186 bool isfun;
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
3187 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3188 /* This function should never be called when token.valid is FALSE, but
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
3189 we must protect against invalid input or internal errors. */
45925
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
3190 if (!DEBUG && !token.valid)
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
3191 return;
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
3192
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3193 if (token.valid)
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3194 make_tag (token_name.buffer, token_name.len, isfun, token.line,
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3195 token.offset+token.length+1, token.lineno, token.linepos);
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3196 else /* this case is optimised away if !DEBUG */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3197 make_tag (concat ("INVALID TOKEN:-->", token_name.buffer, ""),
45925
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
3198 token_name.len + 17, isfun, token.line,
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
3199 token.offset+token.length+1, token.lineno, token.linepos);
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
3200
5f3ac9accae3 Use, together with etags.el, an optimised form of tags,
Francesco Potortì <pot@gnu.org>
parents: 45918
diff changeset
3201 token.valid = FALSE;
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
3202 }
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
3203
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3204
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3205 /*
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3206 * C_entries ()
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3207 * This routine finds functions, variables, typedefs,
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3208 * #define's, enum constants and struct/union/enum definitions in
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3209 * C syntax and adds them to the list.
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3210 */
27658
5980f19581dc (pfnote, new_pfnote, C_entries, prolog_pred, erlang_func): Add
Dave Love <fx@gnu.org>
parents: 27595
diff changeset
3211 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
3212 C_entries (c_ext, inf)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3213 int c_ext; /* extension of C */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3214 FILE *inf; /* input file */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3215 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3216 register char c; /* latest char read; '\0' for end of line */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3217 register char *lp; /* pointer one beyond the character `c' */
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3218 int curndx, newndx; /* indices for current and new lb */
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3219 register int tokoff; /* offset in line of start of current token */
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3220 register int toklen; /* length of current token */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3221 char *qualifier; /* string used to qualify names */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3222 int qlen; /* length of qualifier */
4051
73aa16fc728d (consider_token): was `==', now is `='.
Richard M. Stallman <rms@gnu.org>
parents: 3921
diff changeset
3223 int cblev; /* current curly brace level */
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3224 int parlev; /* current parenthesis level */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3225 int typdefcblev; /* cblev where a typedef struct body begun */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3226 bool incomm, inquote, inchar, quotednl, midtoken;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3227 bool yacc_rules; /* in the rules part of a yacc file */
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3228 struct tok savetoken; /* token saved during preprocessor handling */
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3229
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3230
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
3231 linebuffer_init (&lbs[0].lb);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
3232 linebuffer_init (&lbs[1].lb);
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3233 if (cstack.size == 0)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3234 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3235 cstack.size = (DEBUG) ? 1 : 4;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3236 cstack.nl = 0;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3237 cstack.cname = xnew (cstack.size, char *);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3238 cstack.cblev = xnew (cstack.size, int);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3239 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3240
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
3241 tokoff = toklen = typdefcblev = 0; /* keep compiler quiet */
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3242 curndx = newndx = 0;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3243 lp = curlb.buffer;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3244 *lp = 0;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3245
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3246 fvdef = fvnone; fvextern = FALSE; typdef = tnone;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3247 structdef = snone; definedef = dnone; objdef = onone;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3248 yacc_rules = FALSE;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3249 midtoken = inquote = inchar = incomm = quotednl = FALSE;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3250 token.valid = savetoken.valid = FALSE;
4051
73aa16fc728d (consider_token): was `==', now is `='.
Richard M. Stallman <rms@gnu.org>
parents: 3921
diff changeset
3251 cblev = 0;
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3252 parlev = 0;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3253 if (cjava)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3254 { qualifier = "."; qlen = 1; }
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3255 else
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3256 { qualifier = "::"; qlen = 2; }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3257
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3258
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3259 while (!feof (inf))
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3260 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3261 c = *lp++;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3262 if (c == '\\')
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3263 {
621
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
3264 /* If we're at the end of the line, the next character is a
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
3265 '\0'; don't skip it, because it's the thing that tells us
eca8812e61cd *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 462
diff changeset
3266 to read the next line. */
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3267 if (*lp == '\0')
2004
6469a137fea6 (C_entries): New local variable quotednl. Used for
Richard M. Stallman <rms@gnu.org>
parents: 1938
diff changeset
3268 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3269 quotednl = TRUE;
2004
6469a137fea6 (C_entries): New local variable quotednl. Used for
Richard M. Stallman <rms@gnu.org>
parents: 1938
diff changeset
3270 continue;
6469a137fea6 (C_entries): New local variable quotednl. Used for
Richard M. Stallman <rms@gnu.org>
parents: 1938
diff changeset
3271 }
401
24b63d6679b6 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 240
diff changeset
3272 lp++;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3273 c = ' ';
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3274 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3275 else if (incomm)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3276 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3277 switch (c)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3278 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3279 case '*':
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3280 if (*lp == '/')
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3281 {
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3282 c = *lp++;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3283 incomm = FALSE;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3284 }
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3285 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3286 case '\0':
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3287 /* Newlines inside comments do not end macro definitions in
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3288 traditional cpp. */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3289 CNL_SAVE_DEFINEDEF ();
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3290 break;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3291 }
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3292 continue;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3293 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3294 else if (inquote)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3295 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3296 switch (c)
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3297 {
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3298 case '"':
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3299 inquote = FALSE;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3300 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3301 case '\0':
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3302 /* Newlines inside strings do not end macro definitions
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3303 in traditional cpp, even though compilers don't
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3304 usually accept them. */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3305 CNL_SAVE_DEFINEDEF ();
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3306 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3307 }
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3308 continue;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3309 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3310 else if (inchar)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3311 {
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3312 switch (c)
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3313 {
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3314 case '\0':
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3315 /* Hmmm, something went wrong. */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3316 CNL ();
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3317 /* FALLTHRU */
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3318 case '\'':
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3319 inchar = FALSE;
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3320 break;
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
3321 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3322 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3323 }
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
3324 else
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3325 switch (c)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3326 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3327 case '"':
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3328 inquote = TRUE;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3329 switch (fvdef)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3330 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3331 case fdefunkey:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3332 case fstartlist:
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3333 case finlist:
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3334 case fignore:
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3335 case vignore:
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3336 break;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3337 default:
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3338 fvextern = FALSE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3339 fvdef = fvnone;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3340 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3341 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3342 case '\'':
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3343 inchar = TRUE;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3344 if (fvdef != finlist && fvdef != fignore && fvdef !=vignore)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3345 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3346 fvextern = FALSE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3347 fvdef = fvnone;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3348 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3349 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3350 case '/':
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3351 if (*lp == '*')
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3352 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3353 lp++;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3354 incomm = TRUE;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3355 continue;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3356 }
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3357 else if (/* cplpl && */ *lp == '/')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3358 {
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3359 c = '\0';
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 621
diff changeset
3360 break;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3361 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3362 else
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3363 break;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3364 case '%':
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3365 if ((c_ext & YACC) && *lp == '%')
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3366 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3367 /* Entering or exiting rules section in yacc file. */
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3368 lp++;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3369 definedef = dnone; fvdef = fvnone; fvextern = FALSE;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3370 typdef = tnone; structdef = snone;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3371 midtoken = inquote = inchar = incomm = quotednl = FALSE;
4051
73aa16fc728d (consider_token): was `==', now is `='.
Richard M. Stallman <rms@gnu.org>
parents: 3921
diff changeset
3372 cblev = 0;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3373 yacc_rules = !yacc_rules;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3374 continue;
4051
73aa16fc728d (consider_token): was `==', now is `='.
Richard M. Stallman <rms@gnu.org>
parents: 3921
diff changeset
3375 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3376 else
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3377 break;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3378 case '#':
9193
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3379 if (definedef == dnone)
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3380 {
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3381 char *cp;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3382 bool cpptoken = TRUE;
9193
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3383
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3384 /* Look back on this line. If all blanks, or nonblanks
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3385 followed by an end of comment, this is a preprocessor
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3386 token. */
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3387 for (cp = newlb.buffer; cp < lp-1; cp++)
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3388 if (!iswhite (*cp))
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3389 {
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3390 if (*cp == '*' && *(cp+1) == '/')
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3391 {
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3392 cp++;
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3393 cpptoken = TRUE;
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3394 }
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3395 else
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3396 cpptoken = FALSE;
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3397 }
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3398 if (cpptoken)
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3399 definedef = dsharpseen;
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3400 } /* if (definedef == dnone) */
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3401
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3402 continue;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3403 } /* switch (c) */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3404
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3405
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3406 /* Consider token only if some involved conditions are satisfied. */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3407 if (typdef != tignore
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3408 && definedef != dignorerest
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3409 && fvdef != finlist
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3410 && structdef != sintemplate
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3411 && (definedef != dnone
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3412 || structdef != scolonseen))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3413 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3414 if (midtoken)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3415 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3416 if (endtoken (c))
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3417 {
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3418 if (c == ':' && *lp == ':' && begtoken (lp[1]))
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3419 /* This handles :: in the middle,
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3420 but not at the beginning of an identifier.
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3421 Also, space-separated :: is not recognised. */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3422 {
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3423 if (c_ext & C_AUTO) /* automatic detection of C++ */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3424 c_ext = (c_ext | C_PLPL) & ~C_AUTO;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3425 lp += 2;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3426 toklen += 2;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3427 c = lp[-1];
35758
aa069bbee4c8 Work around small preprocessor bugs in sunos4 pcc and MinGW.
Francesco Potortì <pot@gnu.org>
parents: 35741
diff changeset
3428 goto still_in_token;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3429 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3430 else
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3431 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3432 bool funorvar = FALSE;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3433
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3434 if (yacc_rules
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3435 || consider_token (newlb.buffer + tokoff, toklen, c,
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3436 &c_ext, cblev, parlev, &funorvar))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3437 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3438 if (fvdef == foperator)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3439 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3440 char *oldlp = lp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3441 lp = skip_spaces (lp-1);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3442 if (*lp != '\0')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3443 lp += 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3444 while (*lp != '\0'
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
3445 && !iswhite (*lp) && *lp != '(')
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3446 lp += 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3447 c = *lp++;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3448 toklen += lp - oldlp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3449 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3450 token.named = FALSE;
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3451 if (!plainc
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3452 && nestlev > 0 && definedef == dnone)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3453 /* in struct body */
4750
cdefe4f21650 Mon Sep 20 18:06:12 1993 Francesco Potorti` (pot at fly)
Francesco Potortì <pot@gnu.org>
parents: 4696
diff changeset
3454 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3455 write_classname (&token_name, qualifier);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3456 linebuffer_setlen (&token_name,
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3457 token_name.len+qlen+toklen);
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3458 strcat (token_name.buffer, qualifier);
10801
32f98b512dd9 * etags.c (C_entries): token_saved removed. Initialise tok.valid and
Francesco Potortì <pot@gnu.org>
parents: 10761
diff changeset
3459 strncat (token_name.buffer,
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3460 newlb.buffer + tokoff, toklen);
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3461 token.named = TRUE;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3462 }
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3463 else if (objdef == ocatseen)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3464 /* Objective C category */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3465 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3466 int len = strlen (objtag) + 2 + toklen;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3467 linebuffer_setlen (&token_name, len);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3468 strcpy (token_name.buffer, objtag);
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3469 strcat (token_name.buffer, "(");
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3470 strncat (token_name.buffer,
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3471 newlb.buffer + tokoff, toklen);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3472 strcat (token_name.buffer, ")");
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3473 token.named = TRUE;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3474 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3475 else if (objdef == omethodtag
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3476 || objdef == omethodparm)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3477 /* Objective C method */
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3478 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3479 token.named = TRUE;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3480 }
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3481 else if (fvdef == fdefunname)
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3482 /* GNU DEFUN and similar macros */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3483 {
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3484 bool defun = (newlb.buffer[tokoff] == 'F');
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3485 int off = tokoff;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3486 int len = toklen;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3487
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3488 /* Rewrite the tag so that emacs lisp DEFUNs
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3489 can be found by their elisp name */
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3490 if (defun)
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3491 {
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3492 off += 1;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3493 len -= 1;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3494 }
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3495 len = toklen;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3496 linebuffer_setlen (&token_name, len);
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3497 strncpy (token_name.buffer,
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3498 newlb.buffer + off, len);
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3499 token_name.buffer[len] = '\0';
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3500 if (defun)
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3501 while (--len >= 0)
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3502 if (token_name.buffer[len] == '_')
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3503 token_name.buffer[len] = '-';
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3504 token.named = defun;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3505 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3506 else
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3507 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3508 linebuffer_setlen (&token_name, toklen);
10801
32f98b512dd9 * etags.c (C_entries): token_saved removed. Initialise tok.valid and
Francesco Potortì <pot@gnu.org>
parents: 10761
diff changeset
3509 strncpy (token_name.buffer,
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3510 newlb.buffer + tokoff, toklen);
10801
32f98b512dd9 * etags.c (C_entries): token_saved removed. Initialise tok.valid and
Francesco Potortì <pot@gnu.org>
parents: 10761
diff changeset
3511 token_name.buffer[toklen] = '\0';
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3512 /* Name macros and members. */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3513 token.named = (structdef == stagseen
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3514 || typdef == ttypeseen
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3515 || typdef == tend
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3516 || (funorvar
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3517 && definedef == dignorerest)
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3518 || (funorvar
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3519 && definedef == dnone
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3520 && structdef == snone
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3521 && cblev > 0));
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3522 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3523 token.lineno = lineno;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3524 token.offset = tokoff;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3525 token.length = toklen;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3526 token.line = newlb.buffer;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3527 token.linepos = newlinepos;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3528 token.valid = TRUE;
4750
cdefe4f21650 Mon Sep 20 18:06:12 1993 Francesco Potorti` (pot at fly)
Francesco Potortì <pot@gnu.org>
parents: 4696
diff changeset
3529
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3530 if (definedef == dnone
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3531 && (fvdef == fvnameseen
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3532 || fvdef == foperator
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3533 || structdef == stagseen
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3534 || typdef == tend
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3535 || typdef == ttypeseen
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3536 || objdef != onone))
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3537 {
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3538 if (current_lb_is_new)
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
3539 switch_line_buffers ();
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3540 }
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3541 else if (definedef != dnone
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3542 || fvdef == fdefunname
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3543 || instruct)
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3544 make_C_tag (funorvar);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3545 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3546 midtoken = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3547 }
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3548 } /* if (endtoken (c)) */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3549 else if (intoken (c))
35758
aa069bbee4c8 Work around small preprocessor bugs in sunos4 pcc and MinGW.
Francesco Potortì <pot@gnu.org>
parents: 35741
diff changeset
3550 still_in_token:
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3551 {
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3552 toklen++;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3553 continue;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3554 }
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3555 } /* if (midtoken) */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3556 else if (begtoken (c))
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3557 {
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3558 switch (definedef)
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3559 {
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3560 case dnone:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3561 switch (fvdef)
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3562 {
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3563 case fstartlist:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3564 fvdef = finlist;
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3565 continue;
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3566 case flistseen:
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3567 if (plainc || declarations)
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3568 {
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3569 make_C_tag (TRUE); /* a function */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3570 fvdef = fignore;
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3571 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3572 break;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3573 case fvnameseen:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3574 fvdef = fvnone;
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3575 break;
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3576 }
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
3577 if (structdef == stagseen && !cjava)
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3578 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3579 popclass_above (cblev);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3580 structdef = snone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3581 }
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
3582 break;
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3583 case dsharpseen:
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3584 savetoken = token;
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
3585 break;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3586 }
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3587 if (!yacc_rules || lp == newlb.buffer + 1)
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3588 {
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3589 tokoff = lp - 1 - newlb.buffer;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3590 toklen = 1;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3591 midtoken = TRUE;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3592 }
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3593 continue;
10623
8a73e71a55e3 * etags.c (pfnote): Initialise been_warned in the node.
Francesco Potortì <pot@gnu.org>
parents: 10449
diff changeset
3594 } /* if (begtoken) */
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3595 } /* if must look at token */
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3596
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3597
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3598 /* Detect end of line, colon, comma, semicolon and various braces
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3599 after having handled a token.*/
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3600 switch (c)
401
24b63d6679b6 *** empty log message ***
Roland McGrath <roland@gnu.org>
parents: 240
diff changeset
3601 {
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3602 case ':':
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3603 if (yacc_rules && token.offset == 0 && token.valid)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3604 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3605 make_C_tag (FALSE); /* a yacc function */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3606 break;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3607 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3608 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3609 break;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3610 switch (objdef)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3611 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3612 case otagseen:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3613 objdef = oignore;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3614 make_C_tag (TRUE); /* an Objective C class */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3615 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3616 case omethodtag:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3617 case omethodparm:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3618 objdef = omethodcolon;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3619 linebuffer_setlen (&token_name, token_name.len + 1);
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3620 strcat (token_name.buffer, ":");
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3621 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3622 }
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3623 if (structdef == stagseen)
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3624 {
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3625 structdef = scolonseen;
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3626 break;
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3627 }
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3628 /* Should be useless, but may be work as a safety net. */
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3629 if (cplpl && fvdef == flistseen)
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3630 {
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3631 make_C_tag (TRUE); /* a function */
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3632 fvdef = fignore;
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3633 break;
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3634 }
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3635 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3636 case ';':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3637 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3638 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3639 switch (typdef)
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
3640 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3641 case tend:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3642 case ttypeseen:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3643 make_C_tag (FALSE); /* a typedef */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3644 typdef = tnone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3645 fvdef = fvnone;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3646 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3647 case tnone:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3648 case tinbody:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3649 case tignore:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3650 switch (fvdef)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3651 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3652 case fignore:
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3653 if (typdef == tignore || cplpl)
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3654 fvdef = fvnone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3655 break;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3656 case fvnameseen:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3657 if ((globals && cblev == 0 && (!fvextern || declarations))
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3658 || (members && instruct))
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3659 make_C_tag (FALSE); /* a variable */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3660 fvextern = FALSE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3661 fvdef = fvnone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3662 token.valid = FALSE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3663 break;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3664 case flistseen:
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3665 if (declarations
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3666 && (typdef == tnone || (typdef != tignore && instruct)))
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3667 make_C_tag (TRUE); /* a function declaration */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3668 /* FALLTHRU */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3669 default:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3670 fvextern = FALSE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3671 fvdef = fvnone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3672 if (declarations
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3673 && cplpl && structdef == stagseen)
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3674 make_C_tag (FALSE); /* forward declaration */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3675 else
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3676 token.valid = FALSE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3677 } /* switch (fvdef) */
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3678 /* FALLTHRU */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3679 default:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3680 if (!instruct)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3681 typdef = tnone;
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
3682 }
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3683 if (structdef == stagseen)
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3684 structdef = snone;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3685 break;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3686 case ',':
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3687 if (definedef != dnone)
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3688 break;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3689 switch (objdef)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3690 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3691 case omethodtag:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3692 case omethodparm:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3693 make_C_tag (TRUE); /* an Objective C method */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3694 objdef = oinbody;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3695 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3696 }
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3697 switch (fvdef)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3698 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3699 case fdefunkey:
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3700 case foperator:
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3701 case fstartlist:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3702 case finlist:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3703 case fignore:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3704 case vignore:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3705 break;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3706 case fdefunname:
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3707 fvdef = fignore;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3708 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3709 case fvnameseen: /* a variable */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3710 if ((globals && cblev == 0 && (!fvextern || declarations))
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3711 || (members && instruct))
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3712 make_C_tag (FALSE);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3713 break;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3714 case flistseen: /* a function */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3715 if ((declarations && typdef == tnone && !instruct)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3716 || (members && typdef != tignore && instruct))
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3717 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3718 make_C_tag (TRUE); /* a function declaration */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3719 fvdef = fvnameseen;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3720 }
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3721 else if (!declarations)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3722 fvdef = fvnone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3723 token.valid = FALSE;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3724 break;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3725 default:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3726 fvdef = fvnone;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3727 }
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3728 if (structdef == stagseen)
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3729 structdef = snone;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3730 break;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3731 case '[':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3732 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3733 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3734 if (structdef == stagseen)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3735 structdef = snone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3736 switch (typdef)
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3737 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3738 case ttypeseen:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3739 case tend:
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3740 typdef = tignore;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3741 make_C_tag (FALSE); /* a typedef */
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3742 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3743 case tnone:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3744 case tinbody:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3745 switch (fvdef)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3746 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3747 case foperator:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3748 case finlist:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3749 case fignore:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3750 case vignore:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3751 break;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3752 case fvnameseen:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3753 if ((members && cblev == 1)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3754 || (globals && cblev == 0
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3755 && (!fvextern || declarations)))
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3756 make_C_tag (FALSE); /* a variable */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3757 /* FALLTHRU */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3758 default:
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3759 fvdef = fvnone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3760 }
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3761 break;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3762 }
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3763 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3764 case '(':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3765 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3766 break;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3767 if (objdef == otagseen && parlev == 0)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3768 objdef = oparenseen;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3769 switch (fvdef)
1938
1045deef809f (C_entries): Don't reset definedef when a newline inside a comment is met.
Richard M. Stallman <rms@gnu.org>
parents: 1796
diff changeset
3770 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3771 case fvnameseen:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3772 if (typdef == ttypeseen
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3773 && *lp != '*'
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3774 && !instruct)
9193
86fd33a4f327 * etags.c (C_entries): Recognise typedef of ANSI style functions.
Francesco Potortì <pot@gnu.org>
parents: 8789
diff changeset
3775 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3776 /* This handles constructs like:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3777 typedef void OperatorFun (int fun); */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3778 make_C_tag (FALSE);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3779 typdef = tignore;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3780 fvdef = fignore;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3781 break;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3782 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3783 /* FALLTHRU */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3784 case foperator:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3785 fvdef = fstartlist;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3786 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3787 case flistseen:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3788 fvdef = finlist;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3789 break;
1938
1045deef809f (C_entries): Don't reset definedef when a newline inside a comment is met.
Richard M. Stallman <rms@gnu.org>
parents: 1796
diff changeset
3790 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3791 parlev++;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3792 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3793 case ')':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3794 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3795 break;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3796 if (objdef == ocatseen && parlev == 1)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3797 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3798 make_C_tag (TRUE); /* an Objective C category */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3799 objdef = oignore;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3800 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3801 if (--parlev == 0)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3802 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3803 switch (fvdef)
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3804 {
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3805 case fstartlist:
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3806 case finlist:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3807 fvdef = flistseen;
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3808 break;
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3809 }
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3810 if (!instruct
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3811 && (typdef == tend
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3812 || typdef == ttypeseen))
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3813 {
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3814 typdef = tignore;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3815 make_C_tag (FALSE); /* a typedef */
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3816 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3817 }
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3818 else if (parlev < 0) /* can happen due to ill-conceived #if's. */
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3819 parlev = 0;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3820 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3821 case '{':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3822 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3823 break;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3824 if (typdef == ttypeseen)
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3825 {
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
3826 /* Whenever typdef is set to tinbody (currently only
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
3827 here), typdefcblev should be set to cblev. */
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
3828 typdef = tinbody;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3829 typdefcblev = cblev;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3830 }
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3831 switch (fvdef)
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
3832 {
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
3833 case flistseen:
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3834 make_C_tag (TRUE); /* a function */
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
3835 /* FALLTHRU */
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
3836 case fignore:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3837 fvdef = fvnone;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
3838 break;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3839 case fvnone:
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3840 switch (objdef)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3841 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3842 case otagseen:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3843 make_C_tag (TRUE); /* an Objective C class */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3844 objdef = oignore;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3845 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3846 case omethodtag:
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3847 case omethodparm:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3848 make_C_tag (TRUE); /* an Objective C method */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3849 objdef = oinbody;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3850 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3851 default:
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
3852 /* Neutralize `extern "C" {' grot. */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3853 if (cblev == 0 && structdef == snone && nestlev == 0
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3854 && typdef == tnone)
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3855 cblev = -1;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3856 }
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
3857 break;
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
3858 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3859 switch (structdef)
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3860 {
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3861 case skeyseen: /* unnamed struct */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3862 pushclass_above (cblev, NULL, 0);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3863 structdef = snone;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3864 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3865 case stagseen: /* named struct or enum */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3866 case scolonseen: /* a class */
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3867 pushclass_above (cblev, token.line+token.offset, token.length);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3868 structdef = snone;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3869 make_C_tag (FALSE); /* a struct or enum */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3870 break;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3871 }
4051
73aa16fc728d (consider_token): was `==', now is `='.
Richard M. Stallman <rms@gnu.org>
parents: 3921
diff changeset
3872 cblev++;
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
3873 break;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3874 case '*':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3875 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3876 break;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3877 if (fvdef == fstartlist)
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3878 {
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3879 fvdef = fvnone; /* avoid tagging `foo' in `foo (*bar()) ()' */
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3880 token.valid = FALSE;
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3881 }
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3882 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3883 case '}':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3884 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3885 break;
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
3886 if (!ignoreindent && lp == newlb.buffer + 1)
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3887 {
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3888 if (cblev != 0)
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3889 token.valid = FALSE;
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3890 cblev = 0; /* reset curly brace level if first column */
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3891 parlev = 0; /* also reset paren level, just in case... */
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3892 }
4051
73aa16fc728d (consider_token): was `==', now is `='.
Richard M. Stallman <rms@gnu.org>
parents: 3921
diff changeset
3893 else if (cblev > 0)
73aa16fc728d (consider_token): was `==', now is `='.
Richard M. Stallman <rms@gnu.org>
parents: 3921
diff changeset
3894 cblev--;
47157
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3895 else
e47f0756e65a (consider_token, C_entries): Switch to C++ parsing when
Francesco Potortì <pot@gnu.org>
parents: 47103
diff changeset
3896 token.valid = FALSE; /* something gone amiss, token unreliable */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3897 popclass_above (cblev);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3898 structdef = snone;
36361
e9d69d45eae4 When in autodetect mode, switch to C++ when the template keyword is met
Francesco Potortì <pot@gnu.org>
parents: 35775
diff changeset
3899 /* Only if typdef == tinbody is typdefcblev significant. */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3900 if (typdef == tinbody && cblev <= typdefcblev)
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3901 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3902 assert (cblev == typdefcblev);
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3903 typdef = tend;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3904 }
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3905 break;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3906 case '=':
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3907 if (definedef != dnone)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3908 break;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3909 switch (fvdef)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3910 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3911 case foperator:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3912 case finlist:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3913 case fignore:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3914 case vignore:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3915 break;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3916 case fvnameseen:
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3917 if ((members && cblev == 1)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3918 || (globals && cblev == 0 && (!fvextern || declarations)))
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3919 make_C_tag (FALSE); /* a variable */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3920 /* FALLTHRU */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3921 default:
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3922 fvdef = vignore;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3923 }
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3924 break;
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3925 case '<':
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3926 if (cplpl && structdef == stagseen)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3927 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3928 structdef = sintemplate;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3929 break;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3930 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3931 goto resetfvdef;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3932 case '>':
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3933 if (structdef == sintemplate)
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3934 {
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3935 structdef = stagseen;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3936 break;
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3937 }
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3938 goto resetfvdef;
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3939 case '+':
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3940 case '-':
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3941 if (objdef == oinbody && cblev == 0)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3942 {
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3943 objdef = omethodsign;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3944 break;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3945 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3946 /* FALLTHRU */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3947 resetfvdef:
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3948 case '#': case '~': case '&': case '%': case '/': case '|':
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3949 case '^': case '!': case '.': case '?': case ']':
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3950 if (definedef != dnone)
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3951 break;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3952 /* These surely cannot follow a function tag in C. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3953 switch (fvdef)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3954 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3955 case foperator:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3956 case finlist:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3957 case fignore:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3958 case vignore:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3959 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3960 default:
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3961 fvdef = fvnone;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3962 }
4937
50db67ef8d64 Mon Nov 8 19:56:20 MET 1993 Tom Hageman (tom@basil.icce.rug.nl)
Francesco Potortì <pot@gnu.org>
parents: 4905
diff changeset
3963 break;
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3964 case '\0':
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3965 if (objdef == otagseen)
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3966 {
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
3967 make_C_tag (TRUE); /* an Objective C class */
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3968 objdef = oignore;
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
3969 }
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3970 /* If a macro spans multiple lines don't reset its state. */
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3971 if (quotednl)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3972 CNL_SAVE_DEFINEDEF ();
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3973 else
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
3974 CNL ();
2323
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3975 break;
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3976 } /* switch (c) */
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3977
626d9ac52bc9 (YACC): flag added to c_ext.
Richard M. Stallman <rms@gnu.org>
parents: 2004
diff changeset
3978 } /* while not eof */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3979
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3980 free (lbs[0].lb.buffer);
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
3981 free (lbs[1].lb.buffer);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3982 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3983
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3984 /*
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3985 * Process either a C++ file or a C file depending on the setting
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3986 * of a global flag.
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3987 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
3988 static void
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3989 default_C_entries (inf)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3990 FILE *inf;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3991 {
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3992 C_entries (cplusplus ? C_PLPL : C_AUTO, inf);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3993 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
3994
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
3995 /* Always do plain C. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
3996 static void
12398
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
3997 plain_C_entries (inf)
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
3998 FILE *inf;
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
3999 {
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4000 C_entries (0, inf);
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4001 }
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4002
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4003 /* Always do C++. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4004 static void
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4005 Cplusplus_entries (inf)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4006 FILE *inf;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4007 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4008 C_entries (C_PLPL, inf);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4009 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4010
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4011 /* Always do Java. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4012 static void
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4013 Cjava_entries (inf)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4014 FILE *inf;
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4015 {
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4016 C_entries (C_JAVA, inf);
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4017 }
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4018
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4019 /* Always do C*. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4020 static void
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4021 Cstar_entries (inf)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4022 FILE *inf;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4023 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4024 C_entries (C_STAR, inf);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4025 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4026
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4027 /* Always do Yacc. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4028 static void
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4029 Yacc_entries (inf)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4030 FILE *inf;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4031 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4032 C_entries (YACC, inf);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4033 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4034
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4035
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4036 /* Useful macros. */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4037 #define LOOP_ON_INPUT_LINES(file_pointer, line_buffer, char_pointer) \
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
4038 for (; /* loop initialization */ \
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4039 !feof (file_pointer) /* loop test */ \
45918
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
4040 && /* instructions at start of loop */ \
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
4041 (readline (&line_buffer, file_pointer), \
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
4042 char_pointer = line_buffer.buffer, \
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4043 TRUE); \
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4044 )
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4045 #define LOOKING_AT(cp, keyword) /* keyword is a constant string */ \
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4046 (strneq ((cp), keyword, sizeof(keyword)-1) /* cp points at keyword */ \
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4047 && notinname ((cp)[sizeof(keyword)-1]) /* end of keyword */ \
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4048 && ((cp) = skip_spaces((cp)+sizeof(keyword)-1))) /* skip spaces */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4049
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4050 /*
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4051 * Read a file, but do no processing. This is used to do regexp
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4052 * matching on files that have no language defined.
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4053 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4054 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4055 just_read_file (inf)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4056 FILE *inf;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4057 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4058 register char *dummy;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4059
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4060 LOOP_ON_INPUT_LINES (inf, lb, dummy)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4061 continue;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4062 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4063
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4064
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4065 /* Fortran parsing */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4066
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4067 static void F_takeprec __P((void));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4068 static void F_getit __P((FILE *));
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4069
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4070 static void
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4071 F_takeprec ()
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4072 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4073 dbp = skip_spaces (dbp);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4074 if (*dbp != '*')
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4075 return;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4076 dbp++;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4077 dbp = skip_spaces (dbp);
12398
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4078 if (strneq (dbp, "(*)", 3))
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4079 {
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4080 dbp += 3;
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4081 return;
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4082 }
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4083 if (!ISDIGIT (*dbp))
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4084 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4085 --dbp; /* force failure */
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4086 return;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4087 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4088 do
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4089 dbp++;
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4090 while (ISDIGIT (*dbp));
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4091 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4092
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4093 static void
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4094 F_getit (inf)
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4095 FILE *inf;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4096 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4097 register char *cp;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4098
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4099 dbp = skip_spaces (dbp);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4100 if (*dbp == '\0')
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4101 {
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
4102 readline (&lb, inf);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4103 dbp = lb.buffer;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4104 if (dbp[5] != '&')
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4105 return;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4106 dbp += 6;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4107 dbp = skip_spaces (dbp);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4108 }
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4109 if (!ISALPHA (*dbp) && *dbp != '_' && *dbp != '$')
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4110 return;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4111 for (cp = dbp + 1; *cp != '\0' && intoken (*cp); cp++)
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4112 continue;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4113 make_tag (dbp, cp-dbp, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4114 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4115 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4116
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4117
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4118 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4119 Fortran_functions (inf)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4120 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4121 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4122 LOOP_ON_INPUT_LINES (inf, lb, dbp)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4123 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4124 if (*dbp == '%')
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4125 dbp++; /* Ratfor escape to fortran */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4126 dbp = skip_spaces (dbp);
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4127 if (*dbp == '\0')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4128 continue;
12398
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4129 switch (lowcase (*dbp))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4130 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4131 case 'i':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4132 if (nocase_tail ("integer"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4133 F_takeprec ();
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4134 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4135 case 'r':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4136 if (nocase_tail ("real"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4137 F_takeprec ();
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4138 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4139 case 'l':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4140 if (nocase_tail ("logical"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4141 F_takeprec ();
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4142 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4143 case 'c':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4144 if (nocase_tail ("complex") || nocase_tail ("character"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4145 F_takeprec ();
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4146 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4147 case 'd':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4148 if (nocase_tail ("double"))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4149 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4150 dbp = skip_spaces (dbp);
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4151 if (*dbp == '\0')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4152 continue;
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4153 if (nocase_tail ("precision"))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4154 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4155 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4156 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4157 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4158 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4159 dbp = skip_spaces (dbp);
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4160 if (*dbp == '\0')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4161 continue;
12398
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4162 switch (lowcase (*dbp))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4163 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4164 case 'f':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4165 if (nocase_tail ("function"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4166 F_getit (inf);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4167 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4168 case 's':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4169 if (nocase_tail ("subroutine"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4170 F_getit (inf);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4171 continue;
1026
cc96e2df9b71 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 774
diff changeset
4172 case 'e':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4173 if (nocase_tail ("entry"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4174 F_getit (inf);
1026
cc96e2df9b71 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 774
diff changeset
4175 continue;
20788
2bf465c6cc6b (getit, Cobol_paragraphs, Pascal_functions,
Richard M. Stallman <rms@gnu.org>
parents: 20071
diff changeset
4176 case 'b':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4177 if (nocase_tail ("blockdata") || nocase_tail ("block data"))
20788
2bf465c6cc6b (getit, Cobol_paragraphs, Pascal_functions,
Richard M. Stallman <rms@gnu.org>
parents: 20071
diff changeset
4178 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4179 dbp = skip_spaces (dbp);
20788
2bf465c6cc6b (getit, Cobol_paragraphs, Pascal_functions,
Richard M. Stallman <rms@gnu.org>
parents: 20071
diff changeset
4180 if (*dbp == '\0') /* assume un-named */
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4181 make_tag ("blockdata", 9, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4182 lb.buffer, dbp - lb.buffer, lineno, linecharno);
20788
2bf465c6cc6b (getit, Cobol_paragraphs, Pascal_functions,
Richard M. Stallman <rms@gnu.org>
parents: 20071
diff changeset
4183 else
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4184 F_getit (inf); /* look for name */
20788
2bf465c6cc6b (getit, Cobol_paragraphs, Pascal_functions,
Richard M. Stallman <rms@gnu.org>
parents: 20071
diff changeset
4185 }
2bf465c6cc6b (getit, Cobol_paragraphs, Pascal_functions,
Richard M. Stallman <rms@gnu.org>
parents: 20071
diff changeset
4186 continue;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4187 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4188 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4189 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4190
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4191
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4192 /*
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4193 * Ada parsing
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4194 * Original code by
51267
c21ab9f401a9 Remove Philippe Waroquier's email address, at his request.
Francesco Potortì <pot@gnu.org>
parents: 49360
diff changeset
4195 * Philippe Waroquiers (1998)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4196 */
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
4197
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4198 static void Ada_getit __P((FILE *, char *));
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
4199
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4200 /* Once we are positioned after an "interesting" keyword, let's get
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4201 the real tag value necessary. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4202 static void
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4203 Ada_getit (inf, name_qualifier)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4204 FILE *inf;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4205 char *name_qualifier;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4206 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4207 register char *cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4208 char *name;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4209 char c;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4210
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4211 while (!feof (inf))
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4212 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4213 dbp = skip_spaces (dbp);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4214 if (*dbp == '\0'
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4215 || (dbp[0] == '-' && dbp[1] == '-'))
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4216 {
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
4217 readline (&lb, inf);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4218 dbp = lb.buffer;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4219 }
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4220 switch (lowcase(*dbp))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4221 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4222 case 'b':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4223 if (nocase_tail ("body"))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4224 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4225 /* Skipping body of procedure body or package body or ....
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4226 resetting qualifier to body instead of spec. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4227 name_qualifier = "/b";
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4228 continue;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4229 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4230 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4231 case 't':
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4232 /* Skipping type of task type or protected type ... */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4233 if (nocase_tail ("type"))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4234 continue;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4235 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4236 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4237 if (*dbp == '"')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4238 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4239 dbp += 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4240 for (cp = dbp; *cp != '\0' && *cp != '"'; cp++)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4241 continue;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4242 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4243 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4244 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4245 dbp = skip_spaces (dbp);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4246 for (cp = dbp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4247 (*cp != '\0'
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4248 && (ISALPHA (*cp) || ISDIGIT (*cp) || *cp == '_' || *cp == '.'));
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4249 cp++)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4250 continue;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4251 if (cp == dbp)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4252 return;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4253 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4254 c = *cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4255 *cp = '\0';
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4256 name = concat (dbp, name_qualifier, "");
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4257 *cp = c;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4258 make_tag (name, strlen (name), TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4259 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4260 free (name);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4261 if (c == '"')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4262 dbp = cp + 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4263 return;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4264 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4265 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4266
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4267 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4268 Ada_funcs (inf)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4269 FILE *inf;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4270 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4271 bool inquote = FALSE;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4272 bool skip_till_semicolumn = FALSE;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4273
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4274 LOOP_ON_INPUT_LINES (inf, lb, dbp)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4275 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4276 while (*dbp != '\0')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4277 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4278 /* Skip a string i.e. "abcd". */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4279 if (inquote || (*dbp == '"'))
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4280 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4281 dbp = etags_strchr ((inquote) ? dbp : dbp+1, '"');
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4282 if (dbp != NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4283 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4284 inquote = FALSE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4285 dbp += 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4286 continue; /* advance char */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4287 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4288 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4289 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4290 inquote = TRUE;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4291 break; /* advance line */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4292 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4293 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4294
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4295 /* Skip comments. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4296 if (dbp[0] == '-' && dbp[1] == '-')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4297 break; /* advance line */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4298
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4299 /* Skip character enclosed in single quote i.e. 'a'
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4300 and skip single quote starting an attribute i.e. 'Image. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4301 if (*dbp == '\'')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4302 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4303 dbp++ ;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4304 if (*dbp != '\0')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4305 dbp++;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4306 continue;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4307 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4308
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4309 if (skip_till_semicolumn)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4310 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4311 if (*dbp == ';')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4312 skip_till_semicolumn = FALSE;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4313 dbp++;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4314 continue; /* advance char */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4315 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4316
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4317 /* Search for beginning of a token. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4318 if (!begtoken (*dbp))
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4319 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4320 dbp++;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4321 continue; /* advance char */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4322 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4323
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4324 /* We are at the beginning of a token. */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4325 switch (lowcase(*dbp))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4326 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4327 case 'f':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4328 if (!packages_only && nocase_tail ("function"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4329 Ada_getit (inf, "/f");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4330 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4331 break; /* from switch */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4332 continue; /* advance char */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4333 case 'p':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4334 if (!packages_only && nocase_tail ("procedure"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4335 Ada_getit (inf, "/p");
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4336 else if (nocase_tail ("package"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4337 Ada_getit (inf, "/s");
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4338 else if (nocase_tail ("protected")) /* protected type */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4339 Ada_getit (inf, "/t");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4340 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4341 break; /* from switch */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4342 continue; /* advance char */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4343
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4344 case 'u':
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4345 if (typedefs && !packages_only && nocase_tail ("use"))
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4346 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4347 /* when tagging types, avoid tagging use type Pack.Typename;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4348 for this, we will skip everything till a ; */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4349 skip_till_semicolumn = TRUE;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4350 continue; /* advance char */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4351 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4352
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4353 case 't':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4354 if (!packages_only && nocase_tail ("task"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4355 Ada_getit (inf, "/k");
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4356 else if (typedefs && !packages_only && nocase_tail ("type"))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4357 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4358 Ada_getit (inf, "/t");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4359 while (*dbp != '\0')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4360 dbp += 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4361 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4362 else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4363 break; /* from switch */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4364 continue; /* advance char */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4365 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4366
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4367 /* Look for the end of the token. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4368 while (!endtoken (*dbp))
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4369 dbp++;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4370
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4371 } /* advance char */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4372 } /* advance line */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4373 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4374
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4375
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4376 /*
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4377 * Unix and microcontroller assembly tag handling
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4378 * Labels: /^[a-zA-Z_.$][a-zA_Z0-9_.$]*[: ^I^J]/
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4379 * Idea by Bob Weiner, Motorola Inc. (1994)
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4380 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4381 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4382 Asm_labels (inf)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4383 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4384 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4385 register char *cp;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4386
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4387 LOOP_ON_INPUT_LINES (inf, lb, cp)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4388 {
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4389 /* If first char is alphabetic or one of [_.$], test for colon
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4390 following identifier. */
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4391 if (ISALPHA (*cp) || *cp == '_' || *cp == '.' || *cp == '$')
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4392 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4393 /* Read past label. */
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4394 cp++;
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4395 while (ISALNUM (*cp) || *cp == '_' || *cp == '.' || *cp == '$')
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4396 cp++;
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
4397 if (*cp == ':' || iswhite (*cp))
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4398 /* Found end of label, so copy it and add it to the table. */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4399 make_tag (lb.buffer, cp - lb.buffer, TRUE,
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
4400 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4401 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4402 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4403 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4404
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4405
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4406 /*
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4407 * Perl support
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4408 * Perl sub names: /^sub[ \t\n]+[^ \t\n{]+/
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4409 * Perl variable names: /^(my|local).../
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4410 * Original code by Bart Robinson <lomew@cs.utah.edu> (1995)
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4411 * Additions by Michael Ernst <mernst@alum.mit.edu> (1997)
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4412 * Ideas by Kai Großjohann <Kai.Grossjohann@CS.Uni-Dortmund.DE> (2001)
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4413 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4414 static void
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4415 Perl_functions (inf)
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4416 FILE *inf;
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4417 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4418 char *package = savestr ("main"); /* current package name */
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4419 register char *cp;
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4420
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4421 LOOP_ON_INPUT_LINES (inf, lb, cp)
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4422 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4423 skip_spaces(cp);
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4424
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4425 if (LOOKING_AT (cp, "package"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4426 {
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4427 free (package);
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4428 get_tag (cp, &package);
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4429 }
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4430 else if (LOOKING_AT (cp, "sub"))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4431 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4432 char *pos;
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4433 char *sp = cp;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4434
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4435 while (!notinname (*cp))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4436 cp++;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4437 if (cp == sp)
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4438 continue; /* nothing found */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4439 if ((pos = etags_strchr (sp, ':')) != NULL
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4440 && pos < cp && pos[1] == ':')
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4441 /* The name is already qualified. */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4442 make_tag (sp, cp - sp, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4443 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4444 else
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4445 /* Qualify it. */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4446 {
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4447 char savechar, *name;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4448
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4449 savechar = *cp;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4450 *cp = '\0';
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4451 name = concat (package, "::", sp);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4452 *cp = savechar;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4453 make_tag (name, strlen(name), TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4454 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4455 free (name);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4456 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4457 }
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4458 else if (globals) /* only if we are tagging global vars */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4459 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4460 /* Skip a qualifier, if any. */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4461 bool qual = LOOKING_AT (cp, "my") || LOOKING_AT (cp, "local");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4462 /* After "my" or "local", but before any following paren or space. */
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4463 char *varstart = cp;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4464
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4465 if (qual /* should this be removed? If yes, how? */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4466 && (*cp == '$' || *cp == '@' || *cp == '%'))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4467 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4468 varstart += 1;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4469 do
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4470 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4471 while (ISALNUM (*cp) || *cp == '_');
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4472 }
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4473 else if (qual)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4474 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4475 /* Should be examining a variable list at this point;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4476 could insist on seeing an open parenthesis. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4477 while (*cp != '\0' && *cp != ';' && *cp != '=' && *cp != ')')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4478 cp++;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4479 }
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4480 else
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4481 continue;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4482
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4483 make_tag (varstart, cp - varstart, FALSE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4484 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4485 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4486 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4487 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4488
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4489
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4490 /*
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4491 * Python support
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4492 * Look for /^[\t]*def[ \t\n]+[^ \t\n(:]+/ or /^class[ \t\n]+[^ \t\n(:]+/
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4493 * Idea by Eric S. Raymond <esr@thyrsus.com> (1997)
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4494 * More ideas by seb bacon <seb@jamkit.com> (2002)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4495 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4496 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4497 Python_functions (inf)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4498 FILE *inf;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4499 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4500 register char *cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4501
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4502 LOOP_ON_INPUT_LINES (inf, lb, cp)
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4503 {
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4504 cp = skip_spaces (cp);
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4505 if (LOOKING_AT (cp, "def") || LOOKING_AT (cp, "class"))
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4506 {
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4507 char *name = cp;
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4508 while (!notinname (*cp) && *cp != ':')
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4509 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4510 make_tag (name, cp - name, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4511 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4512 }
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4513 }
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4514 }
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4515
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4516
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4517 /*
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4518 * PHP support
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4519 * Look for:
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4520 * - /^[ \t]*function[ \t\n]+[^ \t\n(]+/
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4521 * - /^[ \t]*class[ \t\n]+[^ \t\n]+/
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4522 * - /^[ \t]*define\(\"[^\"]+/
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4523 * Only with --members:
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4524 * - /^[ \t]*var[ \t\n]+\$[^ \t\n=;]/
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4525 * Idea by Diez B. Roggisch (2001)
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4526 */
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4527 static void
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4528 PHP_functions (inf)
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4529 FILE *inf;
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4530 {
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4531 register char *cp, *name;
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4532 bool search_identifier = FALSE;
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4533
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4534 LOOP_ON_INPUT_LINES (inf, lb, cp)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4535 {
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4536 cp = skip_spaces (cp);
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4537 name = cp;
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4538 if (search_identifier
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4539 && *cp != '\0')
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4540 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4541 while (!notinname (*cp))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4542 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4543 make_tag (name, cp - name, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4544 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4545 search_identifier = FALSE;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4546 }
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4547 else if (LOOKING_AT (cp, "function"))
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4548 {
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4549 if(*cp == '&')
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4550 cp = skip_spaces (cp+1);
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4551 if(*cp != '\0')
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4552 {
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4553 name = cp;
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4554 while (!notinname (*cp))
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4555 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4556 make_tag (name, cp - name, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4557 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4558 }
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4559 else
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4560 search_identifier = TRUE;
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4561 }
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4562 else if (LOOKING_AT (cp, "class"))
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4563 {
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4564 if (*cp != '\0')
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4565 {
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4566 name = cp;
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4567 while (*cp != '\0' && !iswhite (*cp))
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4568 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4569 make_tag (name, cp - name, FALSE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4570 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4571 }
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4572 else
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4573 search_identifier = TRUE;
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4574 }
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4575 else if (strneq (cp, "define", 6)
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4576 && (cp = skip_spaces (cp+6))
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4577 && *cp++ == '('
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4578 && (*cp == '"' || *cp == '\''))
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4579 {
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4580 char quote = *cp++;
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4581 name = cp;
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4582 while (*cp != quote && *cp != '\0')
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4583 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4584 make_tag (name, cp - name, FALSE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4585 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4586 }
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4587 else if (members
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4588 && LOOKING_AT (cp, "var")
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4589 && *cp == '$')
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4590 {
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
4591 name = cp;
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4592 while (!notinname(*cp))
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4593 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4594 make_tag (name, cp - name, FALSE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4595 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4596 }
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4597 }
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4598 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4599
13404
9d6c77b66cfb * etags.c (get_lang_from_name, get_lang_from_interpreter,
Francesco Potortì <pot@gnu.org>
parents: 13380
diff changeset
4600
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4601 /*
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4602 * Cobol tag functions
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4603 * We could look for anything that could be a paragraph name.
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4604 * i.e. anything that starts in column 8 is one word and ends in a full stop.
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4605 * Idea by Corny de Souza (1993)
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4606 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4607 static void
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4608 Cobol_paragraphs (inf)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4609 FILE *inf;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4610 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4611 register char *bp, *ep;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4612
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4613 LOOP_ON_INPUT_LINES (inf, lb, bp)
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4614 {
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4615 if (lb.len < 9)
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4616 continue;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4617 bp += 8;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4618
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4619 /* If eoln, compiler option or comment ignore whole line. */
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4620 if (bp[-1] != ' ' || !ISALNUM (bp[0]))
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4621 continue;
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4622
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
4623 for (ep = bp; ISALNUM (*ep) || *ep == '-'; ep++)
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4624 continue;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4625 if (*ep++ == '.')
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4626 make_tag (bp, ep - bp, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4627 lb.buffer, ep - lb.buffer + 1, lineno, linecharno);
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4628 }
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4629 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4630
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4631
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4632 /*
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4633 * Makefile support
45918
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
4634 * Ideas by Assar Westerlund <assar@sics.se> (2001)
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4635 */
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4636 static void
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4637 Makefile_targets (inf)
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4638 FILE *inf;
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4639 {
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4640 register char *bp;
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4641
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4642 LOOP_ON_INPUT_LINES (inf, lb, bp)
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4643 {
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4644 if (*bp == '\t' || *bp == '#')
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4645 continue;
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4646 while (*bp != '\0' && *bp != '=' && *bp != ':')
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4647 bp++;
45918
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
4648 if (*bp == ':' || (globals && *bp == '='))
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4649 make_tag (lb.buffer, bp - lb.buffer, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4650 lb.buffer, bp - lb.buffer + 1, lineno, linecharno);
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4651 }
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4652 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4653
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4654
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
4655 /*
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4656 * Pascal parsing
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4657 * Original code by Mosur K. Mohan (1989)
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4658 *
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
4659 * Locates tags for procedures & functions. Doesn't do any type- or
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
4660 * var-definitions. It does look for the keyword "extern" or
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
4661 * "forward" immediately following the procedure statement; if found,
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
4662 * the tag is skipped.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4663 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4664 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4665 Pascal_functions (inf)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4666 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4667 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4668 linebuffer tline; /* mostly copied from C_entries */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4669 long save_lcno;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4670 int save_lineno, namelen, taglen;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4671 char c, *name;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4672
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
4673 bool /* each of these flags is TRUE iff: */
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4674 incomment, /* point is inside a comment */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4675 inquote, /* point is inside '..' string */
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4676 get_tagname, /* point is after PROCEDURE/FUNCTION
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4677 keyword, so next item = potential tag */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4678 found_tag, /* point is after a potential tag */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4679 inparms, /* point is within parameter-list */
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4680 verify_tag; /* point has passed the parm-list, so the
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4681 next token will determine whether this
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4682 is a FORWARD/EXTERN to be ignored, or
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4683 whether it is a real tag */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4684
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4685 save_lcno = save_lineno = namelen = taglen = 0; /* keep compiler quiet */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4686 name = NULL; /* keep compiler quiet */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4687 dbp = lb.buffer;
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4688 *dbp = '\0';
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4689 linebuffer_init (&tline);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4690
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4691 incomment = inquote = FALSE;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4692 found_tag = FALSE; /* have a proc name; check if extern */
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4693 get_tagname = FALSE; /* found "procedure" keyword */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4694 inparms = FALSE; /* found '(' after "proc" */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4695 verify_tag = FALSE; /* check if "extern" is ahead */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4696
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4697
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4698 while (!feof (inf)) /* long main loop to get next char */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4699 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4700 c = *dbp++;
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
4701 if (c == '\0') /* if end of line */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4702 {
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
4703 readline (&lb, inf);
15243
c024dca549c5 * etags.c (CNL_SAVE_DEFINEDEF): Set linecharno for use by readline.
Francesco Potortì <pot@gnu.org>
parents: 14982
diff changeset
4704 dbp = lb.buffer;
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
4705 if (*dbp == '\0')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4706 continue;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4707 if (!((found_tag && verify_tag)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4708 || get_tagname))
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4709 c = *dbp++; /* only if don't need *dbp pointing
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4710 to the beginning of the name of
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4711 the procedure or function */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4712 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4713 if (incomment)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4714 {
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4715 if (c == '}') /* within { } comments */
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4716 incomment = FALSE;
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4717 else if (c == '*' && *dbp == ')') /* within (* *) comments */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4718 {
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4719 dbp++;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4720 incomment = FALSE;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4721 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4722 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4723 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4724 else if (inquote)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4725 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4726 if (c == '\'')
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4727 inquote = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4728 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4729 }
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
4730 else
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4731 switch (c)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4732 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4733 case '\'':
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4734 inquote = TRUE; /* found first quote */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4735 continue;
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4736 case '{': /* found open { comment */
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4737 incomment = TRUE;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4738 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4739 case '(':
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4740 if (*dbp == '*') /* found open (* comment */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4741 {
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
4742 incomment = TRUE;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4743 dbp++;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4744 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4745 else if (found_tag) /* found '(' after tag, i.e., parm-list */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4746 inparms = TRUE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4747 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4748 case ')': /* end of parms list */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4749 if (inparms)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4750 inparms = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4751 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4752 case ';':
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4753 if (found_tag && !inparms) /* end of proc or fn stmt */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4754 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4755 verify_tag = TRUE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4756 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4757 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4758 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4759 }
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4760 if (found_tag && verify_tag && (*dbp != ' '))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4761 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4762 /* Check if this is an "extern" declaration. */
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4763 if (*dbp == '\0')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4764 continue;
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4765 if (lowcase (*dbp == 'e'))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4766 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4767 if (nocase_tail ("extern")) /* superfluous, really! */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4768 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4769 found_tag = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4770 verify_tag = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4771 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4772 }
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4773 else if (lowcase (*dbp) == 'f')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4774 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
4775 if (nocase_tail ("forward")) /* check for forward reference */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4776 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4777 found_tag = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4778 verify_tag = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4779 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4780 }
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4781 if (found_tag && verify_tag) /* not external proc, so make tag */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4782 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4783 found_tag = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4784 verify_tag = FALSE;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4785 make_tag (name, namelen, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4786 tline.buffer, taglen, save_lineno, save_lcno);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4787 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4788 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4789 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4790 if (get_tagname) /* grab name of proc or fn */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4791 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4792 char *cp;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4793
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4794 if (*dbp == '\0')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4795 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4796
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4797 /* Find block name. */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4798 for (cp = dbp + 1; *cp != '\0' && !endtoken (*cp); cp++)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4799 continue;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4800
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4801 /* Save all values for later tagging. */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4802 linebuffer_setlen (&tline, lb.len);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4803 strcpy (tline.buffer, lb.buffer);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4804 save_lineno = lineno;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4805 save_lcno = linecharno;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4806 name = tline.buffer + (dbp - lb.buffer);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4807 namelen = cp - dbp;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4808 taglen = cp - lb.buffer + 1;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4809
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
4810 dbp = cp; /* set dbp to e-o-token */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4811 get_tagname = FALSE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4812 found_tag = TRUE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4813 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4814
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4815 /* And proceed to check for "extern". */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4816 }
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
4817 else if (!incomment && !inquote && !found_tag)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4818 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4819 /* Check for proc/fn keywords. */
12398
ccfd646cfad9 * etags.c (plain_C_entries): new function.
Francesco Potortì <pot@gnu.org>
parents: 12344
diff changeset
4820 switch (lowcase (c))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4821 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4822 case 'p':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4823 if (nocase_tail ("rocedure")) /* c = 'p', dbp has advanced */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4824 get_tagname = TRUE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4825 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4826 case 'f':
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4827 if (nocase_tail ("unction"))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4828 get_tagname = TRUE;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4829 continue;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4830 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4831 }
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4832 } /* while not eof */
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
4833
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
4834 free (tline.buffer);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4835 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4836
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4837
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4838 /*
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4839 * Lisp tag functions
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
4840 * look for (def or (DEF, quote or QUOTE
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4841 */
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
4842
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4843 static void L_getit __P((void));
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4844
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4845 static void
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4846 L_getit ()
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4847 {
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
4848 if (*dbp == '\'') /* Skip prefix quote */
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
4849 dbp++;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4850 else if (*dbp == '(')
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
4851 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4852 dbp++;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4853 /* Try to skip "(quote " */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4854 if (!LOOKING_AT (dbp, "quote") && !LOOKING_AT (dbp, "QUOTE"))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4855 /* Ok, then skip "(" before name in (defstruct (foo)) */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4856 dbp = skip_spaces (dbp);
4663
5f0ff5c890a8 * etags.c (L_isdef, L_isquote, L_getit): small optimisations.
Francesco Potortì <pot@gnu.org>
parents: 4406
diff changeset
4857 }
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4858 get_tag (dbp, NULL);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4859 }
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4860
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4861 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4862 Lisp_functions (inf)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4863 FILE *inf;
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4864 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4865 LOOP_ON_INPUT_LINES (inf, lb, dbp)
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4866 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4867 if (dbp[0] != '(')
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4868 continue;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4869
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4870 if (strneq (dbp+1, "def", 3) || strneq (dbp+1, "DEF", 3))
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4871 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4872 dbp = skip_non_spaces (dbp);
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4873 dbp = skip_spaces (dbp);
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4874 L_getit ();
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4875 }
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4876 else
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4877 {
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4878 /* Check for (foo::defmumble name-defined ... */
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4879 do
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4880 dbp++;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4881 while (!notinname (*dbp) && *dbp != ':');
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4882 if (*dbp == ':')
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4883 {
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4884 do
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4885 dbp++;
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4886 while (*dbp == ':');
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4887
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4888 if (strneq (dbp, "def", 3) || strneq (dbp, "DEF", 3))
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4889 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4890 dbp = skip_non_spaces (dbp);
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4891 dbp = skip_spaces (dbp);
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4892 L_getit ();
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4893 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4894 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4895 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4896 }
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4897 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4898
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4899
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4900 /*
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4901 * Postscript tag functions
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4902 * Just look for lines where the first character is '/'
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4903 * Also look at "defineps" for PSWrap
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4904 * Ideas by:
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4905 * Richard Mlynarik <mly@adoc.xerox.com> (1997)
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4906 * Masatake Yamato <masata-y@is.aist-nara.ac.jp> (1999)
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4907 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4908 static void
49125
7ce72b4a2d94 changes for language-sepcific help by Philippe
Francesco Potortì <pot@gnu.org>
parents: 47218
diff changeset
4909 PS_functions (inf)
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4910 FILE *inf;
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4911 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4912 register char *bp, *ep;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4913
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4914 LOOP_ON_INPUT_LINES (inf, lb, bp)
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4915 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4916 if (bp[0] == '/')
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4917 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4918 for (ep = bp+1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4919 *ep != '\0' && *ep != ' ' && *ep != '{';
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4920 ep++)
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4921 continue;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4922 make_tag (bp, ep - bp, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4923 lb.buffer, ep - lb.buffer + 1, lineno, linecharno);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4924 }
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4925 else if (LOOKING_AT (bp, "defineps"))
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4926 get_tag (bp, NULL);
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4927 }
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4928 }
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4929
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4930
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
4931 /*
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4932 * Scheme tag functions
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4933 * look for (def... xyzzy
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4934 * (def... (xyzzy
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4935 * (def ... ((...(xyzzy ....
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4936 * (set! xyzzy
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4937 * Original code by Ken Haase (1985?)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4938 */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4939
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4940 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4941 Scheme_functions (inf)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4942 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4943 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4944 register char *bp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4945
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4946 LOOP_ON_INPUT_LINES (inf, lb, bp)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4947 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4948 if (strneq (bp, "(def", 4) || strneq (bp, "(DEF", 4))
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4949 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4950 bp = skip_non_spaces (bp+4);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4951 /* Skip over open parens and white space */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4952 while (notinname (*bp))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
4953 bp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4954 get_tag (bp, NULL);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4955 }
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
4956 if (LOOKING_AT (bp, "(SET!") || LOOKING_AT (bp, "(set!"))
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
4957 get_tag (bp, NULL);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4958 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4959 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
4960
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4961
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4962 /* Find tags in TeX and LaTeX input files. */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4963
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4964 /* TEX_toktab is a table of TeX control sequences that define tags.
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4965 * Each entry records one such control sequence.
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4966 *
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4967 * Original code from who knows whom.
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4968 * Ideas by:
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4969 * Stefan Monnier (2002)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4970 */
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4971
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4972 static linebuffer *TEX_toktab = NULL; /* Table with tag tokens */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4973
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4974 /* Default set of control sequences to put into TEX_toktab.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4975 The value of environment var TEXTAGS is prepended to this. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
4976 static char *TEX_defenv = "\
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
4977 :chapter:section:subsection:subsubsection:eqno:label:ref:cite:bibitem\
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4978 :part:appendix:entry:index:def\
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4979 :newcommand:renewcommand:newenvironment:renewenvironment";
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4980
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
4981 static void TEX_mode __P((FILE *));
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4982 static void TEX_decode_env __P((char *, char *));
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4983
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
4984 static char TEX_esc = '\\';
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
4985 static char TEX_opgrp = '{';
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
4986 static char TEX_clgrp = '}';
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4987
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4988 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4989 * TeX/LaTeX scanning loop.
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4990 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
4991 static void
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
4992 TeX_commands (inf)
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4993 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4994 {
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4995 char *cp;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
4996 linebuffer *key;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4997
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4998 /* Select either \ or ! as escape character. */
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
4999 TEX_mode (inf);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5000
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5001 /* Initialize token table once from environment. */
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5002 if (TEX_toktab == NULL)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5003 TEX_decode_env ("TEXTAGS", TEX_defenv);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5004
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5005 LOOP_ON_INPUT_LINES (inf, lb, cp)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5006 {
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5007 /* Look at each TEX keyword in line. */
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5008 for (;;)
1026
cc96e2df9b71 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 774
diff changeset
5009 {
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5010 /* Look for a TEX escape. */
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5011 while (*cp++ != TEX_esc)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5012 if (cp[-1] == '\0' || cp[-1] == '%')
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5013 goto tex_next_line;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5014
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5015 for (key = TEX_toktab; key->buffer != NULL; key++)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5016 if (strneq (cp, key->buffer, key->len))
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5017 {
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5018 register char *p;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5019 int namelen, linelen;
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5020 bool opgrp = FALSE;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5021
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5022 cp = skip_spaces (cp + key->len);
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5023 if (*cp == TEX_opgrp)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5024 {
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5025 opgrp = TRUE;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5026 cp++;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5027 }
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5028 for (p = cp;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5029 (!iswhite (*p) && *p != '#' &&
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5030 *p != TEX_opgrp && *p != TEX_clgrp);
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5031 p++)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5032 continue;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5033 namelen = p - cp;
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5034 linelen = lb.len;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5035 if (!opgrp || *p == TEX_clgrp)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5036 {
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5037 while (*p != '\0' && *p != TEX_opgrp && *p != TEX_clgrp)
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5038 *p++;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5039 linelen = p - lb.buffer + 1;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5040 }
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5041 make_tag (cp, namelen, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5042 lb.buffer, linelen, lineno, linecharno);
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5043 goto tex_next_line; /* We only tag a line once */
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5044 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5045 }
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5046 tex_next_line:
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5047 ;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5048 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5049 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5050
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5051 #define TEX_LESC '\\'
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5052 #define TEX_SESC '!'
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5053
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
5054 /* Figure out whether TeX's escapechar is '\\' or '!' and set grouping
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
5055 chars accordingly. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5056 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5057 TEX_mode (inf)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5058 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5059 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5060 int c;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5061
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5062 while ((c = getc (inf)) != EOF)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5063 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5064 /* Skip to next line if we hit the TeX comment char. */
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5065 if (c == '%')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5066 while (c != '\n')
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5067 c = getc (inf);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5068 else if (c == TEX_LESC || c == TEX_SESC )
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5069 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5070 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5071
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5072 if (c == TEX_LESC)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5073 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5074 TEX_esc = TEX_LESC;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5075 TEX_opgrp = '{';
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5076 TEX_clgrp = '}';
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5077 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5078 else
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5079 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5080 TEX_esc = TEX_SESC;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5081 TEX_opgrp = '<';
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5082 TEX_clgrp = '>';
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5083 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5084 /* If the input file is compressed, inf is a pipe, and rewind may fail.
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5085 No attempt is made to correct the situation. */
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5086 rewind (inf);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5087 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5088
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
5089 /* Read environment and prepend it to the default string.
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
5090 Build token table. */
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5091 static void
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5092 TEX_decode_env (evarname, defenv)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5093 char *evarname;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5094 char *defenv;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5095 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5096 register char *env, *p;
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5097 int i, len;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5098
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5099 /* Append default string to environment. */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5100 env = getenv (evarname);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5101 if (!env)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5102 env = defenv;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5103 else
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5104 {
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5105 char *oldenv = env;
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5106 env = concat (oldenv, defenv, "");
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5107 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5108
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5109 /* Allocate a token table */
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5110 for (len = 1, p = env; p;)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5111 if ((p = etags_strchr (p, ':')) && *++p != '\0')
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5112 len++;
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5113 TEX_toktab = xnew (len, linebuffer);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5114
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5115 /* Unpack environment string into token table. Be careful about */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5116 /* zero-length strings (leading ':', "::" and trailing ':') */
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5117 for (i = 0; *env != '\0';)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5118 {
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
5119 p = etags_strchr (env, ':');
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5120 if (!p) /* End of environment string. */
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5121 p = env + strlen (env);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5122 if (p - env > 0)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5123 { /* Only non-zero strings. */
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5124 TEX_toktab[i].buffer = savenstr (env, p - env);
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5125 TEX_toktab[i].len = p - env;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5126 i++;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5127 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5128 if (*p)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5129 env = p + 1;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5130 else
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5131 {
45654
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5132 TEX_toktab[i].buffer = NULL; /* Mark end of table. */
816b7344d062 (TeX_commands): Skip comments.
Francesco Potortì <pot@gnu.org>
parents: 45643
diff changeset
5133 TEX_toktab[i].len = 0;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5134 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5135 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5136 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5137 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
5138
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5139
28663
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5140 /* Texinfo support. Dave Love, Mar. 2000. */
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5141 static void
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
5142 Texinfo_nodes (inf)
28663
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5143 FILE * inf;
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5144 {
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5145 char *cp, *start;
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5146 LOOP_ON_INPUT_LINES (inf, lb, cp)
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5147 if (LOOKING_AT (cp, "@node"))
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5148 {
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5149 start = cp;
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5150 while (*cp != '\0' && *cp != ',')
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5151 cp++;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5152 make_tag (start, cp - start, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5153 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5154 }
28663
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5155 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
5156
28663
75826102199c (Texinfo_functions): New function.
Dave Love <fx@gnu.org>
parents: 27948
diff changeset
5157
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5158 /* Similar to LOOKING_AT but does not use notinname, does not skip */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5159 #define LOOKING_AT_NOCASE(cp, kw) /* kw is a constant string */ \
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5160 (strncaseeq ((cp), kw, sizeof(kw)-1) /* cp points at kw */ \
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5161 && ((cp) += sizeof(kw)-1)) /* skip spaces */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5162
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5163 /*
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5164 * HTML support.
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5165 * Contents of <title>, <h1>, <h2>, <h3> are tags.
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5166 * Contents of <a name=xxx> are tags with name xxx.
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5167 *
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5168 * Francesco Potort́, 2002.
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5169 */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5170 static void
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5171 HTML_labels (inf)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5172 FILE * inf;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5173 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5174 bool getnext = FALSE; /* next text outside of HTML tags is a tag */
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5175 bool skiptag = FALSE; /* skip to the end of the current HTML tag */
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5176 bool intag = FALSE; /* inside an html tag, looking for ID= */
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5177 bool inanchor = FALSE; /* when INTAG, is an anchor, look for NAME= */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5178 char *end;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5179
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5180
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5181 linebuffer_setlen (&token_name, 0); /* no name in buffer */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5182
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5183 LOOP_ON_INPUT_LINES (inf, lb, dbp)
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5184 for (;;) /* loop on the same line */
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5185 {
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5186 if (skiptag) /* skip HTML tag */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5187 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5188 while (*dbp != '\0' && *dbp != '>')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5189 dbp++;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5190 if (*dbp == '>')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5191 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5192 dbp += 1;
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5193 skiptag = FALSE;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5194 continue; /* look on the same line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5195 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5196 break; /* go to next line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5197 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5198
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5199 else if (intag) /* look for "name=" or "id=" */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5200 {
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5201 while (*dbp != '\0' && *dbp != '>'
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5202 && lowcase (*dbp) != 'n' && lowcase (*dbp) != 'i')
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5203 dbp++;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5204 if (*dbp == '\0')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5205 break; /* go to next line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5206 if (*dbp == '>')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5207 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5208 dbp += 1;
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5209 intag = FALSE;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5210 continue; /* look on the same line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5211 }
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5212 if ((inanchor && LOOKING_AT_NOCASE (dbp, "name="))
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5213 || LOOKING_AT_NOCASE (dbp, "id="))
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5214 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5215 bool quoted = (dbp[0] == '"');
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5216
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5217 if (quoted)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5218 for (end = ++dbp; *end != '\0' && *end != '"'; end++)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5219 continue;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5220 else
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5221 for (end = dbp; *end != '\0' && intoken (*end); end++)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5222 continue;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5223 linebuffer_setlen (&token_name, end - dbp);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5224 strncpy (token_name.buffer, dbp, end - dbp);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5225 token_name.buffer[end - dbp] = '\0';
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5226
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5227 dbp = end;
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5228 intag = FALSE; /* we found what we looked for */
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5229 skiptag = TRUE; /* skip to the end of the tag */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5230 getnext = TRUE; /* then grab the text */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5231 continue; /* look on the same line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5232 }
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5233 dbp += 1;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5234 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5235
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5236 else if (getnext) /* grab next tokens and tag them */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5237 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5238 dbp = skip_spaces (dbp);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5239 if (*dbp == '\0')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5240 break; /* go to next line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5241 if (*dbp == '<')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5242 {
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5243 intag = TRUE;
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5244 inanchor = (lowcase (dbp[1]) == 'a' && !intoken (dbp[2]));
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5245 continue; /* look on the same line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5246 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5247
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5248 for (end = dbp + 1; *end != '\0' && *end != '<'; end++)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5249 continue;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5250 make_tag (token_name.buffer, token_name.len, TRUE,
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5251 dbp, end - dbp, lineno, linecharno);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5252 linebuffer_setlen (&token_name, 0); /* no name in buffer */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5253 getnext = FALSE;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5254 break; /* go to next line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5255 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5256
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5257 else /* look for an interesting HTML tag */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5258 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5259 while (*dbp != '\0' && *dbp != '<')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5260 dbp++;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5261 if (*dbp == '\0')
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5262 break; /* go to next line */
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5263 intag = TRUE;
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5264 if (lowcase (dbp[1]) == 'a' && !intoken (dbp[2]))
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5265 {
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5266 inanchor = TRUE;
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5267 continue; /* look on the same line */
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5268 }
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5269 else if (LOOKING_AT_NOCASE (dbp, "<title>")
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5270 || LOOKING_AT_NOCASE (dbp, "<h1>")
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5271 || LOOKING_AT_NOCASE (dbp, "<h2>")
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5272 || LOOKING_AT_NOCASE (dbp, "<h3>"))
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5273 {
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5274 intag = FALSE;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5275 getnext = TRUE;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5276 continue; /* look on the same line */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5277 }
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5278 dbp += 1;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5279 }
47103
4098bad57f21 (C_entries): Corrected a problem with const C++ funcs.
Francesco Potortì <pot@gnu.org>
parents: 47081
diff changeset
5280 }
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5281 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5282
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5283
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5284 /*
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5285 * Prolog support
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5286 *
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5287 * Assumes that the predicate or rule starts at column 0.
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5288 * Only the first clause of a predicate or rule is added.
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5289 * Original code by Sunichirou Sugou (1989)
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5290 * Rewritten by Anders Lindgren (1996)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5291 */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5292 static int prolog_pr __P((char *, char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5293 static void prolog_skip_comment __P((linebuffer *, FILE *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5294 static int prolog_atom __P((char *, int));
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5295
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5296 static void
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5297 Prolog_functions (inf)
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5298 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5299 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5300 char *cp, *last;
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5301 int len;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5302 int allocated;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5303
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5304 allocated = 0;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5305 len = 0;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5306 last = NULL;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5307
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5308 LOOP_ON_INPUT_LINES (inf, lb, cp)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5309 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5310 if (cp[0] == '\0') /* Empty line */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5311 continue;
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
5312 else if (iswhite (cp[0])) /* Not a predicate */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5313 continue;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5314 else if (cp[0] == '/' && cp[1] == '*') /* comment. */
16573
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
5315 prolog_skip_comment (&lb, inf);
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5316 else if ((len = prolog_pr (cp, last)) > 0)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5317 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5318 /* Predicate or rule. Store the function name so that we
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5319 only generate a tag for the first clause. */
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5320 if (last == NULL)
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5321 last = xnew(len + 1, char);
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5322 else if (len + 1 > allocated)
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
5323 xrnew (last, len + 1, char);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5324 allocated = len + 1;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5325 strncpy (last, cp, len);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5326 last[len] = '\0';
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5327 }
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5328 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5329 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5330
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5331
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5332 static void
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5333 prolog_skip_comment (plb, inf)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5334 linebuffer *plb;
6756
8086a2590e2f * etags.c (outf, outfiledir): renamed to tagf, tagfiledir.
Francesco Potortì <pot@gnu.org>
parents: 6592
diff changeset
5335 FILE *inf;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5336 {
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5337 char *cp;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5338
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5339 do
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5340 {
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5341 for (cp = plb->buffer; *cp != '\0'; cp++)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5342 if (cp[0] == '*' && cp[1] == '/')
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5343 return;
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5344 readline (plb, inf);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5345 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5346 while (!feof(inf));
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5347 }
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5348
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5349 /*
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5350 * A predicate or rule definition is added if it matches:
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5351 * <beginning of line><Prolog Atom><whitespace>(
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5352 * or <beginning of line><Prolog Atom><whitespace>:-
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5353 *
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5354 * It is added to the tags database if it doesn't match the
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5355 * name of the previous clause header.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5356 *
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5357 * Return the size of the name of the predicate or rule, or 0 if no
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5358 * header was found.
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5359 */
27658
5980f19581dc (pfnote, new_pfnote, C_entries, prolog_pred, erlang_func): Add
Dave Love <fx@gnu.org>
parents: 27595
diff changeset
5360 static int
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5361 prolog_pr (s, last)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5362 char *s;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5363 char *last; /* Name of last clause. */
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5364 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5365 int pos;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5366 int len;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5367
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5368 pos = prolog_atom (s, 0);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5369 if (pos < 1)
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5370 return 0;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5371
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5372 len = pos;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5373 pos = skip_spaces (s + pos) - s;
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5374
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5375 if ((s[pos] == '.'
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5376 || (s[pos] == '(' && (pos += 1))
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5377 || (s[pos] == ':' && s[pos + 1] == '-' && (pos += 2)))
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5378 && (last == NULL /* save only the first clause */
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5379 || len != strlen (last)
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5380 || !strneq (s, last, len)))
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5381 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5382 make_tag (s, len, TRUE, s, pos, lineno, linecharno);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5383 return len;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5384 }
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5385 else
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
5386 return 0;
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5387 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5388
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5389 /*
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5390 * Consume a Prolog atom.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5391 * Return the number of bytes consumed, or -1 if there was an error.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5392 *
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5393 * A prolog atom, in this context, could be one of:
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5394 * - An alphanumeric sequence, starting with a lower case letter.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5395 * - A quoted arbitrary string. Single quotes can escape themselves.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5396 * Backslash quotes everything.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5397 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5398 static int
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5399 prolog_atom (s, pos)
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5400 char *s;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5401 int pos;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5402 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5403 int origpos;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5404
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5405 origpos = pos;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5406
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
5407 if (ISLOWER(s[pos]) || (s[pos] == '_'))
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5408 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5409 /* The atom is unquoted. */
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5410 pos++;
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
5411 while (ISALNUM(s[pos]) || (s[pos] == '_'))
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5412 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5413 pos++;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5414 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5415 return pos - origpos;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5416 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5417 else if (s[pos] == '\'')
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5418 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5419 pos++;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5420
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
5421 for (;;)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5422 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5423 if (s[pos] == '\'')
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5424 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5425 pos++;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5426 if (s[pos] != '\'')
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5427 break;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5428 pos++; /* A double quote */
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5429 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5430 else if (s[pos] == '\0')
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5431 /* Multiline quoted atoms are ignored. */
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5432 return -1;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5433 else if (s[pos] == '\\')
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5434 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5435 if (s[pos+1] == '\0')
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5436 return -1;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5437 pos += 2;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5438 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5439 else
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5440 pos++;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5441 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5442 return pos - origpos;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5443 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5444 else
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5445 return -1;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5446 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
5447
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5448
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5449 /*
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5450 * Support for Erlang
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5451 *
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5452 * Generates tags for functions, defines, and records.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5453 * Assumes that Erlang functions start at column 0.
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5454 * Original code by Anders Lindgren (1996)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5455 */
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5456 static int erlang_func __P((char *, char *));
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5457 static void erlang_attribute __P((char *));
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5458 static int erlang_atom __P((char *));
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5459
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5460 static void
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5461 Erlang_functions (inf)
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5462 FILE *inf;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5463 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5464 char *cp, *last;
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5465 int len;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5466 int allocated;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5467
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5468 allocated = 0;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5469 len = 0;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5470 last = NULL;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5471
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5472 LOOP_ON_INPUT_LINES (inf, lb, cp)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5473 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5474 if (cp[0] == '\0') /* Empty line */
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5475 continue;
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
5476 else if (iswhite (cp[0])) /* Not function nor attribute */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5477 continue;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5478 else if (cp[0] == '%') /* comment */
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5479 continue;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5480 else if (cp[0] == '"') /* Sometimes, strings start in column one */
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5481 continue;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5482 else if (cp[0] == '-') /* attribute, e.g. "-define" */
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5483 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5484 erlang_attribute (cp);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5485 last = NULL;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5486 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5487 else if ((len = erlang_func (cp, last)) > 0)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5488 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5489 /*
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5490 * Function. Store the function name so that we only
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5491 * generates a tag for the first clause.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5492 */
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5493 if (last == NULL)
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5494 last = xnew (len + 1, char);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5495 else if (len + 1 > allocated)
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
5496 xrnew (last, len + 1, char);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5497 allocated = len + 1;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5498 strncpy (last, cp, len);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5499 last[len] = '\0';
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5500 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5501 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5502 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5503
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5504
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5505 /*
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5506 * A function definition is added if it matches:
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5507 * <beginning of line><Erlang Atom><whitespace>(
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5508 *
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5509 * It is added to the tags database if it doesn't match the
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5510 * name of the previous clause header.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5511 *
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5512 * Return the size of the name of the function, or 0 if no function
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5513 * was found.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5514 */
27658
5980f19581dc (pfnote, new_pfnote, C_entries, prolog_pred, erlang_func): Add
Dave Love <fx@gnu.org>
parents: 27595
diff changeset
5515 static int
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5516 erlang_func (s, last)
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5517 char *s;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5518 char *last; /* Name of last clause. */
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5519 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5520 int pos;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5521 int len;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5522
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5523 pos = erlang_atom (s);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5524 if (pos < 1)
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5525 return 0;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5526
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5527 len = pos;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5528 pos = skip_spaces (s + pos) - s;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5529
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5530 /* Save only the first clause. */
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5531 if (s[pos++] == '('
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5532 && (last == NULL
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5533 || len != (int)strlen (last)
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5534 || !strneq (s, last, len)))
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5535 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5536 make_tag (s, len, TRUE, s, pos, lineno, linecharno);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5537 return len;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5538 }
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5539
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5540 return 0;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5541 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5542
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5543
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5544 /*
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5545 * Handle attributes. Currently, tags are generated for defines
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5546 * and records.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5547 *
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5548 * They are on the form:
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5549 * -define(foo, bar).
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5550 * -define(Foo(M, N), M+N).
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5551 * -record(graph, {vtab = notable, cyclic = true}).
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5552 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5553 static void
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5554 erlang_attribute (s)
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5555 char *s;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5556 {
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5557 char *cp = s;
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5558
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5559 if ((LOOKING_AT (cp, "-define") || LOOKING_AT (cp, "-record"))
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5560 && *cp++ == '(')
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5561 {
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5562 int len = erlang_atom (skip_spaces (cp));
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5563 if (len > 0)
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
5564 make_tag (cp, len, TRUE, s, cp + len - s, lineno, linecharno);
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5565 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5566 return;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5567 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5568
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5569
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5570 /*
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5571 * Consume an Erlang atom (or variable).
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5572 * Return the number of bytes consumed, or -1 if there was an error.
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5573 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5574 static int
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5575 erlang_atom (s)
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5576 char *s;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5577 {
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5578 int pos = 0;
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5579
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
5580 if (ISALPHA (s[pos]) || s[pos] == '_')
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5581 {
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5582 /* The atom is unquoted. */
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5583 do
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5584 pos++;
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5585 while (ISALNUM (s[pos]) || s[pos] == '_');
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5586 }
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5587 else if (s[pos] == '\'')
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5588 {
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5589 for (pos++; s[pos] != '\''; pos++)
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5590 if (s[pos] == '\0' /* multiline quoted atoms are ignored */
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5591 || (s[pos] == '\\' && s[++pos] == '\0'))
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5592 return 0;
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5593 pos++;
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5594 }
45809
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5595
cd830b0ced4d * etags.c (erlang_atom, erlang_attribute): Bugs corrected.
Francesco Potortì <pot@gnu.org>
parents: 45798
diff changeset
5596 return pos;
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
5597 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
5598
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5599
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5600 #ifdef ETAGS_REGEXPS
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5601
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5602 static char *scan_separators __P((char *));
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5603 static void add_regex __P((char *, language *));
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5604 static char *substitute __P((char *, char *, struct re_registers *));
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
5605
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5606 /*
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5607 * Take a string like "/blah/" and turn it into "blah", verifying
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5608 * that the first and last characters are the same, and handling
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5609 * quoted separator characters. Actually, stops on the occurrence of
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5610 * an unquoted separator. Also process \t, \n, etc. and turn into
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5611 * appropriate characters. Works in place. Null terminates name string.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5612 * Returns pointer to terminating separator, or NULL for
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5613 * unterminated regexps.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5614 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5615 static char *
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5616 scan_separators (name)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5617 char *name;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5618 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5619 char sep = name[0];
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5620 char *copyto = name;
18042
c378dd0b8de7 Various cleanups on TeX, Erlang, Prolog, C.
Francesco Potortì <pot@gnu.org>
parents: 17785
diff changeset
5621 bool quoted = FALSE;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5622
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5623 for (++name; *name != '\0'; ++name)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5624 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5625 if (quoted)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5626 {
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5627 switch (*name)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5628 {
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5629 case 'a': *copyto++ = '\007'; break; /* BEL (bell) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5630 case 'b': *copyto++ = '\b'; break; /* BS (back space) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5631 case 'd': *copyto++ = 0177; break; /* DEL (delete) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5632 case 'e': *copyto++ = 033; break; /* ESC (delete) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5633 case 'f': *copyto++ = '\f'; break; /* FF (form feed) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5634 case 'n': *copyto++ = '\n'; break; /* NL (new line) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5635 case 'r': *copyto++ = '\r'; break; /* CR (carriage return) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5636 case 't': *copyto++ = '\t'; break; /* TAB (horizontal tab) */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5637 case 'v': *copyto++ = '\v'; break; /* VT (vertical tab) */
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5638 default:
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5639 if (*name == sep)
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5640 *copyto++ = sep;
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5641 else
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5642 {
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5643 /* Something else is quoted, so preserve the quote. */
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5644 *copyto++ = '\\';
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5645 *copyto++ = *name;
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5646 }
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
5647 break;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5648 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5649 quoted = FALSE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5650 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5651 else if (*name == '\\')
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5652 quoted = TRUE;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5653 else if (*name == sep)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5654 break;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5655 else
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5656 *copyto++ = *name;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5657 }
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5658 if (*name != sep)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5659 name = NULL; /* signal unterminated regexp */
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5660
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5661 /* Terminate copied string. */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5662 *copyto = '\0';
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5663 return name;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5664 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5665
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5666 /* Look at the argument of --regex or --no-regex and do the right
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5667 thing. Same for each line of a regexp file. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5668 static void
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5669 analyse_regex (regex_arg)
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5670 char *regex_arg;
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5671 {
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5672 if (regex_arg == NULL)
39317
a7f40b000353 * etags.c (analyse_regex): If regex_arg is NULL, return
Francesco Potortì <pot@gnu.org>
parents: 37719
diff changeset
5673 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5674 free_regexps (); /* --no-regex: remove existing regexps */
39317
a7f40b000353 * etags.c (analyse_regex): If regex_arg is NULL, return
Francesco Potortì <pot@gnu.org>
parents: 37719
diff changeset
5675 return;
a7f40b000353 * etags.c (analyse_regex): If regex_arg is NULL, return
Francesco Potortì <pot@gnu.org>
parents: 37719
diff changeset
5676 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5677
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5678 /* A real --regexp option or a line in a regexp file. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5679 switch (regex_arg[0])
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5680 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5681 /* Comments in regexp file or null arg to --regex. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5682 case '\0':
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5683 case ' ':
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5684 case '\t':
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5685 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5686
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5687 /* Read a regex file. This is recursive and may result in a
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5688 loop, which will stop when the file descriptors are exhausted. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5689 case '@':
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5690 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5691 FILE *regexfp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5692 linebuffer regexbuf;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5693 char *regexfile = regex_arg + 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5694
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5695 /* regexfile is a file containing regexps, one per line. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5696 regexfp = fopen (regexfile, "r");
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5697 if (regexfp == NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5698 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5699 pfatal (regexfile);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5700 return;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5701 }
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5702 linebuffer_init (&regexbuf);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5703 while (readline_internal (&regexbuf, regexfp) > 0)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5704 analyse_regex (regexbuf.buffer);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5705 free (regexbuf.buffer);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5706 fclose (regexfp);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5707 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5708 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5709
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5710 /* Regexp to be used for a specific language only. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5711 case '{':
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5712 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5713 language *lang;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5714 char *lang_name = regex_arg + 1;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5715 char *cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5716
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5717 for (cp = lang_name; *cp != '}'; cp++)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5718 if (*cp == '\0')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5719 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5720 error ("unterminated language name in regex: %s", regex_arg);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5721 return;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5722 }
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5723 *cp++ = '\0';
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
5724 lang = get_language_from_langname (lang_name);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5725 if (lang == NULL)
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5726 return;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5727 add_regex (cp, lang);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5728 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5729 break;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5730
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5731 /* Regexp to be used for any language. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5732 default:
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5733 add_regex (regex_arg, NULL);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5734 break;
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5735 }
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5736 }
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
5737
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5738 /* Separate the regexp pattern, compile it,
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5739 and care for optional name and modifiers. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5740 static void
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5741 add_regex (regexp_pattern, lang)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5742 char *regexp_pattern;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5743 language *lang;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5744 {
37719
9c4fdf982ba2 (add_regex): Reset the whole newly allocated pattern buffer instead of
Francesco Potortì <pot@gnu.org>
parents: 37502
diff changeset
5745 static struct re_pattern_buffer zeropattern;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5746 char sep, *pat, *name, *modifiers;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5747 const char *err;
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
5748 struct re_pattern_buffer *patbuf;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5749 regexp *rp;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5750 bool
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5751 force_explicit_name = TRUE, /* do not use implicit tag names */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5752 ignore_case = FALSE, /* case is significant */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5753 multi_line = FALSE, /* matches are done one line at a time */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5754 single_line = FALSE; /* dot does not match newline */
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5755
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5756
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5757 if (strlen(regexp_pattern) < 3)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5758 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5759 error ("null regexp", (char *)NULL);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5760 return;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5761 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5762 sep = regexp_pattern[0];
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5763 name = scan_separators (regexp_pattern);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5764 if (name == NULL)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5765 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5766 error ("%s: unterminated regexp", regexp_pattern);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5767 return;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5768 }
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5769 if (name[1] == sep)
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5770 {
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5771 error ("null name for regexp \"%s\"", regexp_pattern);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5772 return;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5773 }
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5774 modifiers = scan_separators (name);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5775 if (modifiers == NULL) /* no terminating separator --> no name */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5776 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5777 modifiers = name;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5778 name = "";
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5779 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5780 else
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5781 modifiers += 1; /* skip separator */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5782
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5783 /* Parse regex modifiers. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5784 for (; modifiers[0] != '\0'; modifiers++)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5785 switch (modifiers[0])
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5786 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5787 case 'N':
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5788 if (modifiers == name)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5789 error ("forcing explicit tag name but no name, ignoring", NULL);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5790 force_explicit_name = TRUE;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5791 break;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5792 case 'i':
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5793 ignore_case = TRUE;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5794 break;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5795 case 's':
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5796 single_line = TRUE;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5797 /* FALLTHRU */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5798 case 'm':
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5799 multi_line = TRUE;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5800 need_filebuf = TRUE;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5801 break;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5802 default:
45918
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
5803 {
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
5804 char wrongmod [2];
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
5805 wrongmod[0] = modifiers[0];
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
5806 wrongmod[1] = '\0';
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
5807 error ("invalid regexp modifier `%s', ignoring", wrongmod);
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
5808 }
1c3f7d78e90a (add_regex): Invalid regexp modifiers are ignored.
Francesco Potortì <pot@gnu.org>
parents: 45809
diff changeset
5809 break;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5810 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5811
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5812 patbuf = xnew (1, struct re_pattern_buffer);
37719
9c4fdf982ba2 (add_regex): Reset the whole newly allocated pattern buffer instead of
Francesco Potortì <pot@gnu.org>
parents: 37502
diff changeset
5813 *patbuf = zeropattern;
9c4fdf982ba2 (add_regex): Reset the whole newly allocated pattern buffer instead of
Francesco Potortì <pot@gnu.org>
parents: 37502
diff changeset
5814 if (ignore_case)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5815 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5816 static char lc_trans[CHARS];
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5817 int i;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5818 for (i = 0; i < CHARS; i++)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5819 lc_trans[i] = lowcase (i);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5820 patbuf->translate = lc_trans; /* translation table to fold case */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5821 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5822
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5823 if (multi_line)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5824 pat = concat ("^", regexp_pattern, ""); /* anchor to beginning of line */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5825 else
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5826 pat = regexp_pattern;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5827
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5828 if (single_line)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5829 re_set_syntax (RE_SYNTAX_EMACS | RE_DOT_NEWLINE);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5830 else
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5831 re_set_syntax (RE_SYNTAX_EMACS);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5832
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5833 err = re_compile_pattern (pat, strlen (regexp_pattern), patbuf);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5834 if (multi_line)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5835 free (pat);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5836 if (err != NULL)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5837 {
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5838 error ("%s while compiling pattern", err);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5839 return;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5840 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5841
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5842 rp = p_head;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5843 p_head = xnew (1, regexp);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5844 p_head->pattern = savestr (regexp_pattern);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5845 p_head->p_next = rp;
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5846 p_head->lang = lang;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
5847 p_head->pat = patbuf;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5848 p_head->name = savestr (name);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5849 p_head->error_signaled = FALSE;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5850 p_head->force_explicit_name = force_explicit_name;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
5851 p_head->ignore_case = ignore_case;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5852 p_head->multi_line = multi_line;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5853 }
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5854
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5855 /*
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
5856 * Do the substitutions indicated by the regular expression and
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5857 * arguments.
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5858 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5859 static char *
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5860 substitute (in, out, regs)
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5861 char *in, *out;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5862 struct re_registers *regs;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5863 {
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
5864 char *result, *t;
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5865 int size, dig, diglen;
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
5866
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
5867 result = NULL;
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
5868 size = strlen (out);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5869
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5870 /* Pass 1: figure out how much to allocate by finding all \N strings. */
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5871 if (out[size - 1] == '\\')
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5872 fatal ("pattern error in \"%s\"", out);
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5873 for (t = etags_strchr (out, '\\');
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5874 t != NULL;
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5875 t = etags_strchr (t + 2, '\\'))
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
5876 if (ISDIGIT (t[1]))
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
5877 {
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5878 dig = t[1] - '0';
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5879 diglen = regs->end[dig] - regs->start[dig];
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5880 size += diglen - 2;
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
5881 }
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5882 else
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5883 size -= 1;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5884
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5885 /* Allocate space and do the substitutions. */
47218
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
5886 assert (size >= 0);
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5887 result = xnew (size + 1, char);
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5888
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5889 for (t = result; *out != '\0'; out++)
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
5890 if (*out == '\\' && ISDIGIT (*++out))
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5891 {
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5892 dig = *out - '0';
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5893 diglen = regs->end[dig] - regs->start[dig];
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5894 strncpy (t, in + regs->start[dig], diglen);
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5895 t += diglen;
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5896 }
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5897 else
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5898 *t++ = *out;
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5899 *t = '\0';
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
5900
47218
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
5901 assert (t <= result + size);
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
5902 assert (t - result == (int)strlen (result));
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5903
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5904 return result;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
5905 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5906
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5907 /* Deallocate all regexps. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
5908 static void
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5909 free_regexps ()
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5910 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5911 regexp *rp;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5912 while (p_head != NULL)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5913 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5914 rp = p_head->p_next;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5915 free (p_head->pattern);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5916 free (p_head->name);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5917 free (p_head);
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5918 p_head = rp;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5919 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5920 return;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
5921 }
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5922
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5923 /*
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5924 * Reads the whole file as a single string from `filebuf' and looks for
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5925 * multi-line regular expressions, creating tags on matches.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5926 * readline already dealt with normal regexps.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5927 *
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5928 * Idea by Ben Wing <ben@666.com> (2002).
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5929 */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5930 static void
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5931 regex_tag_multiline ()
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5932 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5933 char *buffer = filebuf.buffer;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5934 regexp *rp;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5935 char *name;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5936
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5937 for (rp = p_head; rp != NULL; rp = rp->p_next)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5938 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5939 int match = 0;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5940
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5941 if (!rp->multi_line)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5942 continue; /* skip normal regexps */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5943
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5944 /* Generic initialisations before parsing file from memory. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5945 lineno = 1; /* reset global line number */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5946 charno = 0; /* reset global char number */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5947 linecharno = 0; /* reset global char number of line start */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5948
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5949 /* Only use generic regexps or those for the current language. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5950 if (rp->lang != NULL && rp->lang != curfdp->lang)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5951 continue;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5952
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5953 while (match >= 0 && match < filebuf.len)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5954 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5955 match = re_search (rp->pat, buffer, filebuf.len, charno,
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5956 filebuf.len - match, &rp->regs);
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5957 switch (match)
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5958 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5959 case -2:
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5960 /* Some error. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5961 if (!rp->error_signaled)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5962 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5963 error ("regexp stack overflow while matching \"%s\"",
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5964 rp->pattern);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5965 rp->error_signaled = TRUE;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5966 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5967 break;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5968 case -1:
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5969 /* No match. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5970 break;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5971 default:
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5972 if (match == rp->regs.end[0])
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5973 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5974 if (!rp->error_signaled)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5975 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5976 error ("regexp matches the empty string: \"%s\"",
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5977 rp->pattern);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5978 rp->error_signaled = TRUE;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5979 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5980 match = -3; /* exit from while loop */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5981 break;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5982 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5983
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5984 /* Match occurred. Construct a tag. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5985 while (charno < rp->regs.end[0])
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5986 if (buffer[charno++] == '\n')
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5987 lineno++, linecharno = charno;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5988 name = rp->name;
47218
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
5989 if (name[0] == '\0')
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
5990 name = NULL;
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
5991 else /* make a named tag */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5992 name = substitute (buffer, rp->name, &rp->regs);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5993 if (rp->force_explicit_name)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5994 /* Force explicit tag name, if a name is there. */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5995 pfnote (name, TRUE, buffer + linecharno,
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5996 charno - linecharno + 1, lineno, linecharno);
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5997 else
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
5998 make_tag (name, strlen (name), TRUE, buffer + linecharno,
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
5999 charno - linecharno + 1, lineno, linecharno);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6000 break;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6001 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6002 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6003 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6004 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6005
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
6006 #endif /* ETAGS_REGEXPS */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6007
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6008
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6009 static bool
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6010 nocase_tail (cp)
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6011 char *cp;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6012 {
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6013 register int len = 0;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6014
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6015 while (*cp != '\0' && lowcase (*cp) == lowcase (dbp[len]))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6016 cp++, len++;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6017 if (*cp == '\0' && !intoken (dbp[len]))
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6018 {
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6019 dbp += len;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6020 return TRUE;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6021 }
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6022 return FALSE;
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6023 }
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6024
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6025 static void
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6026 get_tag (bp, namepp)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6027 register char *bp;
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6028 char **namepp;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6029 {
45950
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6030 register char *cp = bp;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6031
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6032 if (*bp != '\0')
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6033 {
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6034 /* Go till you get to white space or a syntactic break */
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6035 for (cp = bp + 1; !notinname (*cp); cp++)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6036 continue;
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6037 make_tag (bp, cp - bp, TRUE,
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6038 lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6039 }
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6040
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6041 if (namepp != NULL)
74a2581262b0 (F_getit, Fortran_functions, Ada_getit, Asm_labels)
Francesco Potortì <pot@gnu.org>
parents: 45926
diff changeset
6042 *namepp = savenstr (bp, cp - bp);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6043 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6044
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6045 /*
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6046 * Read a line of text from `stream' into `lbp', excluding the
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6047 * newline or CR-NL, if any. Return the number of characters read from
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6048 * `stream', which is the length of the line including the newline.
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6049 *
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6050 * On DOS or Windows we do not count the CR character, if any before the
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6051 * NL, in the returned length; this mirrors the behavior of Emacs on those
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6052 * platforms (for text files, it translates CR-NL to NL as it reads in the
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6053 * file).
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6054 *
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6055 * If multi-line regular expressions are requested, each line read is
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6056 * appended to `filebuf'.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6057 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6058 static long
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6059 readline_internal (lbp, stream)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6060 linebuffer *lbp;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6061 register FILE *stream;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6062 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6063 char *buffer = lbp->buffer;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6064 register char *p = lbp->buffer;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6065 register char *pend;
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6066 int chars_deleted;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6067
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6068 pend = p + lbp->size; /* Separate to avoid 386/IX compiler bug. */
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6069
45655
a4c27d23899f (enum arg_type): New label at_stdin.
Francesco Potortì <pot@gnu.org>
parents: 45654
diff changeset
6070 for (;;)
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6071 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6072 register int c = getc (stream);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6073 if (p == pend)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6074 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6075 /* We're at the end of linebuffer: expand it. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6076 lbp->size *= 2;
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6077 xrnew (buffer, lbp->size, char);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6078 p += buffer - lbp->buffer;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6079 pend = buffer + lbp->size;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6080 lbp->buffer = buffer;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6081 }
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6082 if (c == EOF)
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6083 {
14859
efa1bc6b7b17 * etags.c (just_read_file): Reset lineno and charno on entry.
Francesco Potortì <pot@gnu.org>
parents: 14230
diff changeset
6084 *p = '\0';
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6085 chars_deleted = 0;
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6086 break;
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6087 }
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6088 if (c == '\n')
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6089 {
10990
c0ceaa45ded7 * etags.c (process_file): free (filename) after using it.
Francesco Potortì <pot@gnu.org>
parents: 10801
diff changeset
6090 if (p > buffer && p[-1] == '\r')
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6091 {
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
6092 p -= 1;
15772
eb1cef7102e3 (readline_internal) [DOS_NT]: Don't include CRs when
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
6093 #ifdef DOS_NT
16373
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
6094 /* Assume CRLF->LF translation will be performed by Emacs
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
6095 when loading this file, so CRs won't appear in the buffer.
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
6096 It would be cleaner to compensate within Emacs;
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
6097 however, Emacs does not know how many CRs were deleted
d50369f4bb41 * etags.c (print_version): Print copyright info.
Francesco Potortì <pot@gnu.org>
parents: 16086
diff changeset
6098 before any given point in the file. */
15772
eb1cef7102e3 (readline_internal) [DOS_NT]: Don't include CRs when
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
6099 chars_deleted = 1;
eb1cef7102e3 (readline_internal) [DOS_NT]: Don't include CRs when
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
6100 #else
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6101 chars_deleted = 2;
15772
eb1cef7102e3 (readline_internal) [DOS_NT]: Don't include CRs when
Richard M. Stallman <rms@gnu.org>
parents: 15683
diff changeset
6102 #endif
10376
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6103 }
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6104 else
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6105 {
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6106 chars_deleted = 1;
b1c4515958b6 * etags.c (Lang_function): Use void instead to declare the
Francesco Potortì <pot@gnu.org>
parents: 10355
diff changeset
6107 }
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
6108 *p = '\0';
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6109 break;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6110 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6111 *p++ = c;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6112 }
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6113 lbp->len = p - buffer;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6114
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6115 if (need_filebuf /* we need filebuf for multi-line regexps */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6116 && chars_deleted > 0) /* not at EOF */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6117 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6118 while (filebuf.size <= filebuf.len + lbp->len + 1) /* +1 for \n */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6119 {
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6120 /* Expand filebuf. */
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6121 filebuf.size *= 2;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6122 xrnew (filebuf.buffer, filebuf.size, char);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6123 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6124 strncpy (filebuf.buffer + filebuf.len, lbp->buffer, lbp->len);
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6125 filebuf.len += lbp->len;
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6126 filebuf.buffer[filebuf.len++] = '\n';
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6127 filebuf.buffer[filebuf.len] = '\0';
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6128 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6129
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6130 return lbp->len + chars_deleted;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6131 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6132
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6133 /*
17602
39b58a508be6 * etags.c [TeX_named_tokens]: Set to FALSE if undefined.
Francesco Potortì <pot@gnu.org>
parents: 17477
diff changeset
6134 * Like readline_internal, above, but in addition try to match the
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6135 * input line against relevant regular expressions and manage #line
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6136 * directives.
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6137 */
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6138 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6139 readline (lbp, stream)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6140 linebuffer *lbp;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6141 FILE *stream;
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6142 {
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6143 long result;
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6144
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6145 linecharno = charno; /* update global char number of line start */
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6146 result = readline_internal (lbp, stream); /* read line */
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6147 lineno += 1; /* increment global line number */
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6148 charno += result; /* increment global char number */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6149
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
6150 /* Honour #line directives. */
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6151 if (!no_line_directive)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6152 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6153 static bool discard_until_line_directive;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6154
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6155 /* Check whether this is a #line directive. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6156 if (result > 12 && strneq (lbp->buffer, "#line ", 6))
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6157 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6158 int start, lno;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6159
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6160 if (DEBUG) start = 0; /* shut up the compiler */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6161 if (sscanf (lbp->buffer, "#line %d \"%n", &lno, &start) == 1)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6162 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6163 char *endp = lbp->buffer + start;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6164
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6165 assert (start > 0);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6166 while ((endp = etags_strchr (endp, '"')) != NULL
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6167 && endp[-1] == '\\')
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6168 endp++;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6169 if (endp != NULL)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6170 /* Ok, this is a real #line directive. Let's deal with it. */
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
6171 {
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6172 char *taggedabsname; /* absolute name of original file */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6173 char *taggedfname; /* name of original file as given */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6174 char *name; /* temp var */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6175
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6176 discard_until_line_directive = FALSE; /* found it */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6177 name = lbp->buffer + start;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6178 *endp = '\0';
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6179 canonicalize_filename (name); /* for DOS */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6180 taggedabsname = absolute_filename (name, curfdp->infabsdir);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6181 if (filename_is_absolute (name)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6182 || filename_is_absolute (curfdp->infname))
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6183 taggedfname = savestr (taggedabsname);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6184 else
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6185 taggedfname = relative_filename (taggedabsname,tagfiledir);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6186
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6187 if (streq (curfdp->taggedfname, taggedfname))
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6188 /* The #line directive is only a line number change. We
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6189 deal with this afterwards. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6190 free (taggedfname);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6191 else
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6192 /* The tags following this #line directive should be
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6193 attributed to taggedfname. In order to do this, set
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6194 curfdp accordingly. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6195 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6196 fdesc *fdp; /* file description pointer */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6197
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6198 /* Go look for a file description already set up for the
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6199 file indicated in the #line directive. If there is
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6200 one, use it from now until the next #line
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6201 directive. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6202 for (fdp = fdhead; fdp != NULL; fdp = fdp->next)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6203 if (streq (fdp->infname, curfdp->infname)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6204 && streq (fdp->taggedfname, taggedfname))
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6205 /* If we remove the second test above (after the &&)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6206 then all entries pertaining to the same file are
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6207 coalesced in the tags file. If we use it, then
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6208 entries pertaining to the same file but generated
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6209 from different files (via #line directives) will
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6210 go into separate sections in the tags file. These
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6211 alternatives look equivalent. The first one
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6212 destroys some apparently useless information. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6213 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6214 curfdp = fdp;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6215 free (taggedfname);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6216 break;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6217 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6218 /* Else, if we already tagged the real file, skip all
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6219 input lines until the next #line directive. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6220 if (fdp == NULL) /* not found */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6221 for (fdp = fdhead; fdp != NULL; fdp = fdp->next)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6222 if (streq (fdp->infabsname, taggedabsname))
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6223 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6224 discard_until_line_directive = TRUE;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6225 free (taggedfname);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6226 break;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6227 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6228 /* Else create a new file description and use that from
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6229 now on, until the next #line directive. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6230 if (fdp == NULL) /* not found */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6231 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6232 fdp = fdhead;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6233 fdhead = xnew (1, fdesc);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6234 *fdhead = *curfdp; /* copy curr. file description */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6235 fdhead->next = fdp;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6236 fdhead->infname = savestr (curfdp->infname);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6237 fdhead->infabsname = savestr (curfdp->infabsname);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6238 fdhead->infabsdir = savestr (curfdp->infabsdir);
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6239 fdhead->taggedfname = taggedfname;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6240 fdhead->usecharno = FALSE;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6241 fdhead->prop = NULL;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6242 fdhead->written = FALSE;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6243 curfdp = fdhead;
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6244 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6245 }
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6246 free (taggedabsname);
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6247 lineno = lno - 1;
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6248 readline (lbp, stream);
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6249 return;
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6250 } /* if a real #line directive */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6251 } /* if #line is followed by a a number */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6252 } /* if line begins with "#line " */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6253
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6254 /* If we are here, no #line directive was found. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6255 if (discard_until_line_directive)
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6256 {
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6257 if (result > 0)
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6258 {
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6259 /* Do a tail recursion on ourselves, thus discarding the contents
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6260 of the line buffer. */
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6261 readline (lbp, stream);
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6262 return;
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6263 }
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6264 /* End of file. */
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6265 discard_until_line_directive = FALSE;
45665
466c8ca0e543 (scan_separators): Support all character escape
Francesco Potortì <pot@gnu.org>
parents: 45655
diff changeset
6266 return;
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6267 }
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6268 } /* if #line directives should be considered */
43854
e71940336640 * etags.c (Python_functions): Skip spaces at beginning of lines.
Francesco Potortì <pot@gnu.org>
parents: 43759
diff changeset
6269
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
6270 #ifdef ETAGS_REGEXPS
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6271 {
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6272 int match;
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6273 regexp *rp;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6274 char *name;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6275
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6276 /* Match against relevant regexps. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6277 if (lbp->len > 0)
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6278 for (rp = p_head; rp != NULL; rp = rp->p_next)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6279 {
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6280 /* Only use generic regexps or those for the current language.
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6281 Also do not use multiline regexps, which is the job of
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6282 regex_tag_multiline. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6283 if ((rp->lang != NULL && rp->lang != fdhead->lang)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6284 || rp->multi_line)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6285 continue;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6286
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6287 match = re_match (rp->pat, lbp->buffer, lbp->len, 0, &rp->regs);
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6288 switch (match)
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6289 {
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6290 case -2:
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6291 /* Some error. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6292 if (!rp->error_signaled)
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6293 {
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6294 error ("regexp stack overflow while matching \"%s\"",
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6295 rp->pattern);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6296 rp->error_signaled = TRUE;
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6297 }
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6298 break;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6299 case -1:
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6300 /* No match. */
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6301 break;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6302 case 0:
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6303 /* Empty string matched. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6304 if (!rp->error_signaled)
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6305 {
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6306 error ("regexp matches the empty string: \"%s\"", rp->pattern);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6307 rp->error_signaled = TRUE;
45798
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6308 }
a486496c2006 New multi-line regexp and new regexp syntax.
Francesco Potortì <pot@gnu.org>
parents: 45665
diff changeset
6309 break;
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6310 default:
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6311 /* Match occurred. Construct a tag. */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6312 name = rp->name;
47218
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
6313 if (name[0] == '\0')
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
6314 name = NULL;
66c5d66d21f6 (regex_tag_multiline, readline): Never pass pfnote a
Francesco Potortì <pot@gnu.org>
parents: 47157
diff changeset
6315 else /* make a named tag */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6316 name = substitute (lbp->buffer, rp->name, &rp->regs);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6317 if (rp->force_explicit_name)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6318 /* Force explicit tag name, if a name is there. */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6319 pfnote (name, TRUE, lbp->buffer, match, lineno, linecharno);
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6320 else
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6321 make_tag (name, strlen (name), TRUE,
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6322 lbp->buffer, match, lineno, linecharno);
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6323 break;
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6324 }
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6325 }
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6326 }
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6327 #endif /* ETAGS_REGEXPS */
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6328 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6329
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6330
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6331 /*
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6332 * Return a pointer to a space of size strlen(cp)+1 allocated
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6333 * with xnew where the string CP has been copied.
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6334 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6335 static char *
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6336 savestr (cp)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6337 char *cp;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6338 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6339 return savenstr (cp, strlen (cp));
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6340 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6341
10404
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6342 /*
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6343 * Return a pointer to a space of size LEN+1 allocated with xnew where
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6344 * the string CP has been copied for at most the first LEN characters.
631f1dac6f7a Global polishing, some bugs corrected, dynamic allocation used instead
Francesco Potortì <pot@gnu.org>
parents: 10378
diff changeset
6345 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6346 static char *
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6347 savenstr (cp, len)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6348 char *cp;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6349 int len;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6350 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6351 register char *dp;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6352
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6353 dp = xnew (len + 1, char);
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
6354 strncpy (dp, cp, len);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6355 dp[len] = '\0';
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6356 return dp;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6357 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6358
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6359 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6360 * Return the ptr in sp at which the character c last
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6361 * appears; NULL if not found
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6362 *
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6363 * Identical to POSIX strrchr, included for portability.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6364 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6365 static char *
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6366 etags_strrchr (sp, c)
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6367 register const char *sp;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6368 register int c;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6369 {
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6370 register const char *r;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6371
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6372 r = NULL;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6373 do
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6374 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6375 if (*sp == c)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6376 r = sp;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6377 } while (*sp++);
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6378 return (char *)r;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6379 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6380
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6381 /*
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6382 * Return the ptr in sp at which the character c first
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6383 * appears; NULL if not found
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6384 *
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6385 * Identical to POSIX strchr, included for portability.
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6386 */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6387 static char *
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6388 etags_strchr (sp, c)
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6389 register const char *sp;
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6390 register int c;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6391 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6392 do
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6393 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6394 if (*sp == c)
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6395 return (char *)sp;
9976
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6396 } while (*sp++);
2869e501c2de * etags.c [ETAGS_REGEXP]: All the new code that deals with regexps
Francesco Potortì <pot@gnu.org>
parents: 9975
diff changeset
6397 return NULL;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6398 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6399
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6400 /*
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6401 * Compare two strings, ignoring case for alphabetic characters.
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6402 *
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6403 * Same as BSD's strcasecmp, included for portability.
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6404 */
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6405 static int
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6406 etags_strcasecmp (s1, s2)
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6407 register const char *s1;
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6408 register const char *s2;
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6409 {
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6410 while (*s1 != '\0'
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6411 && (ISALPHA (*s1) && ISALPHA (*s2)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6412 ? lowcase (*s1) == lowcase (*s2)
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6413 : *s1 == *s2))
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6414 s1++, s2++;
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6415
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6416 return (ISALPHA (*s1) && ISALPHA (*s2)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6417 ? lowcase (*s1) - lowcase (*s2)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6418 : *s1 - *s2);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6419 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6420
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6421 /*
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6422 * Compare two strings, ignoring case for alphabetic characters.
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6423 * Stop after a given number of characters
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6424 *
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6425 * Same as BSD's strncasecmp, included for portability.
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6426 */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6427 static int
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6428 etags_strncasecmp (s1, s2, n)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6429 register const char *s1;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6430 register const char *s2;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6431 register int n;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6432 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6433 while (*s1 != '\0' && n-- > 0
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6434 && (ISALPHA (*s1) && ISALPHA (*s2)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6435 ? lowcase (*s1) == lowcase (*s2)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6436 : *s1 == *s2))
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6437 s1++, s2++;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6438
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6439 if (n < 0)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6440 return 0;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6441 else
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6442 return (ISALPHA (*s1) && ISALPHA (*s2)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6443 ? lowcase (*s1) - lowcase (*s2)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6444 : *s1 - *s2);
44605
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6445 }
1bec0b430206 Bug fix. New version to come soon.
Francesco Potortì <pot@gnu.org>
parents: 44604
diff changeset
6446
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6447 /* Skip spaces, return new pointer. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6448 static char *
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6449 skip_spaces (cp)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6450 char *cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6451 {
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
6452 while (iswhite (*cp))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6453 cp++;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6454 return cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6455 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6456
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6457 /* Skip non spaces, return new pointer. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6458 static char *
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6459 skip_non_spaces (cp)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6460 char *cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6461 {
27661
c8b3e7e83e09 2000-02-10 Francesco Potorti` <pot@gnu.org>
Francesco Potortì <pot@gnu.org>
parents: 27658
diff changeset
6462 while (*cp != '\0' && !iswhite (*cp))
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6463 cp++;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6464 return cp;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6465 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6466
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6467 /* Print error message and exit. */
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6468 void
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6469 fatal (s1, s2)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6470 char *s1, *s2;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6471 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6472 error (s1, s2);
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
6473 exit (BAD);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6474 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6475
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6476 static void
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6477 pfatal (s1)
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6478 char *s1;
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6479 {
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6480 perror (s1);
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6481 exit (BAD);
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6482 }
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6483
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6484 static void
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
6485 suggest_asking_for_help ()
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
6486 {
52068
f1581f949f71 (suggest_asking_for_help): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51267
diff changeset
6487
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6488 #ifdef LONG_OPTIONS
52068
f1581f949f71 (suggest_asking_for_help): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51267
diff changeset
6489 fprintf (stderr, "\tTry `%s %s' for a complete list of options.\n",
f1581f949f71 (suggest_asking_for_help): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51267
diff changeset
6490 progname, "--help");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6491 #else
52068
f1581f949f71 (suggest_asking_for_help): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51267
diff changeset
6492 fprintf (stderr, "\tTry `%s %s' for a complete list of options.\n",
f1581f949f71 (suggest_asking_for_help): Fix having macros in a printf statement.
Juanma Barranquero <lekktu@gmail.com>
parents: 51267
diff changeset
6493 progname, "-h");
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6494 #endif
13696
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
6495 exit (BAD);
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
6496 }
f89aa5a5c485 * etags.c (Cplusplus_suffixes): Add .M suffix for Objective C++.
Francesco Potortì <pot@gnu.org>
parents: 13404
diff changeset
6497
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6498 /* Print error message. `s1' is printf control string, `s2' is arg for it. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6499 static void
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6500 error (s1, s2)
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6501 const char *s1, *s2;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6502 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6503 fprintf (stderr, "%s: ", progname);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6504 fprintf (stderr, s1, s2);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6505 fprintf (stderr, "\n");
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6506 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6507
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6508 /* Return a newly-allocated string whose contents
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6509 concatenate those of s1, s2, s3. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6510 static char *
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6511 concat (s1, s2, s3)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6512 char *s1, *s2, *s3;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6513 {
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6514 int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6515 char *result = xnew (len1 + len2 + len3 + 1, char);
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6516
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
6517 strcpy (result, s1);
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
6518 strcpy (result + len1, s2);
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
6519 strcpy (result + len1 + len2, s3);
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6520 result[len1 + len2 + len3] = '\0';
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6521
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6522 return result;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6523 }
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6524
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6525
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6526 /* Does the same work as the system V getcwd, but does not need to
13380
12bfc1ecec61 * etags.c (lowcase): Use the standard tolower function.
Francesco Potortì <pot@gnu.org>
parents: 12879
diff changeset
6527 guess the buffer size in advance. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6528 static char *
7227
6fa038c33a0f [MSDOS]: #include <sys/param.h> for the following.
Richard M. Stallman <rms@gnu.org>
parents: 7049
diff changeset
6529 etags_getcwd ()
11992
e550e0d13e83 * etags.c (etags_getcwd): Undo the /bin/pwd change. It may raise
Francesco Potortì <pot@gnu.org>
parents: 11990
diff changeset
6530 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6531 #ifdef HAVE_GETCWD
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6532 int bufsize = 200;
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6533 char *path = xnew (bufsize, char);
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6534
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6535 while (getcwd (path, bufsize) == NULL)
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6536 {
9975
e21b0674f37c * etags.c (<errno.h>): #include added.
Francesco Potortì <pot@gnu.org>
parents: 9773
diff changeset
6537 if (errno != ERANGE)
11886
c5db1295f7df * etags.c (etags_getcwd): Use /bin/pwd instead of pwd because the
Francesco Potortì <pot@gnu.org>
parents: 11673
diff changeset
6538 pfatal ("getcwd");
9975
e21b0674f37c * etags.c (<errno.h>): #include added.
Francesco Potortì <pot@gnu.org>
parents: 9773
diff changeset
6539 bufsize *= 2;
17778
c3ff4c535c9c * etags.c: (Cplusplus_suffixes): .pdb is Postscript with C syntax.
Francesco Potortì <pot@gnu.org>
parents: 17602
diff changeset
6540 free (path);
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6541 path = xnew (bufsize, char);
8789
81a2817b99b2 (etags_getcwd): Use getcwd if available.
Karl Heuer <kwzh@gnu.org>
parents: 8180
diff changeset
6542 }
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6543
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6544 canonicalize_filename (path);
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6545 return path;
16394
675944d1abc9 (etags_getcwd) [WINDOWSNT]: Convert backslashes to slashes.
Richard M. Stallman <rms@gnu.org>
parents: 16373
diff changeset
6546
16086
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6547 #else /* not HAVE_GETCWD */
35665
2ce207b252dc Many changes to the parsing capabilities of etags.
Francesco Potortì <pot@gnu.org>
parents: 35653
diff changeset
6548 #if MSDOS
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6549
16086
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6550 char *p, path[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6551
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6552 getwd (path);
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6553
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6554 for (p = path; *p != '\0'; p++)
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6555 if (*p == '\\')
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6556 *p = '/';
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6557 else
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6558 *p = lowcase (*p);
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6559
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6560 return strdup (path);
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6561 #else /* not MSDOS */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6562 linebuffer path;
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6563 FILE *pipe;
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6564
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6565 linebuffer_init (&path);
11990
1e5d25c997ca * etags.c (etags_getcwd): Undo the /bin/pwd change. It may raise
Francesco Potortì <pot@gnu.org>
parents: 11957
diff changeset
6566 pipe = (FILE *) popen ("pwd 2>/dev/null", "r");
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6567 if (pipe == NULL || readline_internal (&path, pipe) == 0)
11990
1e5d25c997ca * etags.c (etags_getcwd): Undo the /bin/pwd change. It may raise
Francesco Potortì <pot@gnu.org>
parents: 11957
diff changeset
6568 pfatal ("pwd");
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6569 pclose (pipe);
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6570
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6571 return path.buffer;
16086
33519c691e63 (etags_getcwd): Use getcwd if available even if MSDOS.
Richard M. Stallman <rms@gnu.org>
parents: 15772
diff changeset
6572 #endif /* not MSDOS */
11992
e550e0d13e83 * etags.c (etags_getcwd): Undo the /bin/pwd change. It may raise
Francesco Potortì <pot@gnu.org>
parents: 11990
diff changeset
6573 #endif /* not HAVE_GETCWD */
10378
fb23ac6e6199 * etags.c (pfatal): New function.
Francesco Potortì <pot@gnu.org>
parents: 10376
diff changeset
6574 }
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6575
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6576 /* Return a newly allocated string containing the file name of FILE
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6577 relative to the absolute directory DIR (which should end with a slash). */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6578 static char *
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6579 relative_filename (file, dir)
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6580 char *file, *dir;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6581 {
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6582 char *fp, *dp, *afn, *res;
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6583 int i;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6584
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
6585 /* Find the common root of file and dir (with a trailing slash). */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6586 afn = absolute_filename (file, cwd);
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6587 fp = afn;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6588 dp = dir;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6589 while (*fp++ == *dp++)
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6590 continue;
16573
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
6591 fp--, dp--; /* back to the first differing char */
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6592 #ifdef DOS_NT
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6593 if (fp == afn && afn[0] != '/') /* cannot build a relative name */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6594 return afn;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6595 #endif
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6596 do /* look at the equal chars until '/' */
16540
bf7e776e40f6 * etags.c (relative_filename): Bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 16394
diff changeset
6597 fp--, dp--;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6598 while (*fp != '/');
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6599
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6600 /* Build a sequence of "../" strings for the resulting relative file name. */
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6601 i = 0;
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6602 while ((dp = etags_strchr (dp + 1, '/')) != NULL)
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6603 i += 1;
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6604 res = xnew (3*i + strlen (fp + 1) + 1, char);
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6605 res[0] = '\0';
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6606 while (i-- > 0)
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6607 strcat (res, "../");
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6608
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6609 /* Add the file name relative to the common root of file and dir. */
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6610 strcat (res, fp + 1);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6611 free (afn);
12879
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
6612
3b90cbba7dad * etags.c (Pascal_functions): Close comment bug corrected.
Francesco Potortì <pot@gnu.org>
parents: 12398
diff changeset
6613 return res;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6614 }
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6615
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6616 /* Return a newly allocated string containing the absolute file name
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6617 of FILE given DIR (which should end with a slash). */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6618 static char *
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6619 absolute_filename (file, dir)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6620 char *file, *dir;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6621 {
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6622 char *slashp, *cp, *res;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6623
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6624 if (filename_is_absolute (file))
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6625 res = savestr (file);
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6626 #ifdef DOS_NT
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6627 /* We don't support non-absolute file names with a drive
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6628 letter, like `d:NAME' (it's too much hassle). */
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6629 else if (file[1] == ':')
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6630 fatal ("%s: relative file names with drive letters not supported", file);
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6631 #endif
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6632 else
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6633 res = concat (dir, file, "");
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6634
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6635 /* Delete the "/dirname/.." and "/." substrings. */
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6636 slashp = etags_strchr (res, '/');
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6637 while (slashp != NULL && slashp[0] != '\0')
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6638 {
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6639 if (slashp[1] == '.')
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6640 {
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6641 if (slashp[2] == '.'
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6642 && (slashp[3] == '/' || slashp[3] == '\0'))
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6643 {
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6644 cp = slashp;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6645 do
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6646 cp--;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6647 while (cp >= res && !filename_is_absolute (cp));
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6648 if (cp < res)
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6649 cp = slashp; /* the absolute name begins with "/.." */
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6650 #ifdef DOS_NT
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6651 /* Under MSDOS and NT we get `d:/NAME' as absolute
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6652 file name, so the luser could say `d:/../NAME'.
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6653 We silently treat this as `d:/NAME'. */
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6654 else if (cp[0] != '/')
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6655 cp = slashp;
14920
b909bb3e64c9 (absolutefn) [DOS_NT]: Support Novell drives whose drive
Richard M. Stallman <rms@gnu.org>
parents: 14859
diff changeset
6656 #endif
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6657 strcpy (cp, slashp + 3);
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6658 slashp = cp;
7776
f91e2cf8770b * etags.c (absolute_filename): Remove infinite loop bug when
Francesco Potortì <pot@gnu.org>
parents: 7775
diff changeset
6659 continue;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6660 }
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6661 else if (slashp[2] == '/' || slashp[2] == '\0')
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6662 {
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6663 strcpy (slashp, slashp + 2);
7776
f91e2cf8770b * etags.c (absolute_filename): Remove infinite loop bug when
Francesco Potortì <pot@gnu.org>
parents: 7775
diff changeset
6664 continue;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6665 }
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6666 }
7776
f91e2cf8770b * etags.c (absolute_filename): Remove infinite loop bug when
Francesco Potortì <pot@gnu.org>
parents: 7775
diff changeset
6667
f91e2cf8770b * etags.c (absolute_filename): Remove infinite loop bug when
Francesco Potortì <pot@gnu.org>
parents: 7775
diff changeset
6668 slashp = etags_strchr (slashp + 1, '/');
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6669 }
24140
9e4d1d3eab09 (etags_getcwd, absolute_filename) [DOS_NT]: Canonicalize
Geoff Voelker <voelker@cs.washington.edu>
parents: 24059
diff changeset
6670
17477
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6671 if (res[0] == '\0')
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6672 return savestr ("/");
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6673 else
1b5cc3740793 Tue Apr 15 16:09:15 1997 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 17168
diff changeset
6674 return res;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6675 }
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6676
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6677 /* Return a newly allocated string containing the absolute
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6678 file name of dir where FILE resides given DIR (which should
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6679 end with a slash). */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6680 static char *
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6681 absolute_dirname (file, dir)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6682 char *file, *dir;
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6683 {
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6684 char *slashp, *res;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6685 char save;
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6686
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6687 canonicalize_filename (file);
6592
9a76406c9f98 * etags.c (main): use etags_getcwd for compatibility.
Francesco Potortì <pot@gnu.org>
parents: 6530
diff changeset
6688 slashp = etags_strrchr (file, '/');
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6689 if (slashp == NULL)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6690 return savestr (dir);
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6691 save = slashp[1];
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6692 slashp[1] = '\0';
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6693 res = absolute_filename (file, dir);
6482
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6694 slashp[1] = save;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6695
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6696 return res;
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6697 }
91112dd5c9f5 * etags.c (cwd, outfiledir): vars added.
Francesco Potortì <pot@gnu.org>
parents: 5976
diff changeset
6698
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6699 /* Whether the argument string is an absolute file name. The argument
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6700 string must have been canonicalized with canonicalize_filename. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6701 static bool
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6702 filename_is_absolute (fn)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6703 char *fn;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6704 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6705 return (fn[0] == '/'
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6706 #ifdef DOS_NT
34608
9286b7ab7104 (ISALNUM, ISALPHA, ISDIGIT, ISLOWER): New macros.
Gerd Moellmann <gerd@gnu.org>
parents: 30969
diff changeset
6707 || (ISALPHA(fn[0]) && fn[1] == ':' && fn[2] == '/')
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6708 #endif
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6709 );
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6710 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6711
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6712 /* Translate backslashes into slashes. Works in place. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6713 static void
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6714 canonicalize_filename (fn)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6715 register char *fn;
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6716 {
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6717 #ifdef DOS_NT
26507
aabdfbf65c68 1999-11-19 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26340
diff changeset
6718 /* Canonicalize drive letter case. */
35297
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
6719 if (fn[0] != '\0' && fn[1] == ':' && ISLOWER (fn[0]))
e268b7b500f0 Changes for makefile support in etags.
Francesco Potortì <pot@gnu.org>
parents: 34635
diff changeset
6720 fn[0] = upcase (fn[0]);
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6721 /* Convert backslashes to slashes. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6722 for (; *fn != '\0'; fn++)
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6723 if (*fn == '\\')
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6724 *fn = '/';
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6725 #else
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6726 /* No action. */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6727 fn = NULL; /* shut up the compiler */
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6728 #endif
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6729 }
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6730
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6731
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6732 /* Initialize a linebuffer for use */
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6733 static void
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6734 linebuffer_init (lbp)
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6735 linebuffer *lbp;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6736 {
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6737 lbp->size = (DEBUG) ? 3 : 200;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6738 lbp->buffer = xnew (lbp->size, char);
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6739 lbp->buffer[0] = '\0';
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6740 lbp->len = 0;
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6741 }
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6742
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6743 /* Set the minimum size of a string contained in a linebuffer. */
27595
25ed45af9355 2000-01-31 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 26507
diff changeset
6744 static void
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6745 linebuffer_setlen (lbp, toksize)
26262
c416a18b0a5d Checked in at last a lot of improvementes and bug fixes. The oldest dating
Francesco Potortì <pot@gnu.org>
parents: 26083
diff changeset
6746 linebuffer *lbp;
16573
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
6747 int toksize;
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
6748 {
35574
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6749 while (lbp->size <= toksize)
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6750 {
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6751 lbp->size *= 2;
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6752 xrnew (lbp->buffer, lbp->size, char);
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6753 }
ede82ab0ae24 Many small improvements in tagging accuracy and capability,
Francesco Potortì <pot@gnu.org>
parents: 35302
diff changeset
6754 lbp->len = toksize;
16573
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
6755 }
4ed8667d6bd9 Wed Nov 13 17:51:29 1996 Francesco Potorti` <F.Potorti@cnuce.cnr.it>
Francesco Potortì <pot@gnu.org>
parents: 16540
diff changeset
6756
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6757 /* Like malloc but get fatal error if memory is exhausted. */
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6758 static PTR
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6759 xmalloc (size)
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
6760 unsigned int size;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6761 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6762 PTR result = (PTR) malloc (size);
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
6763 if (result == NULL)
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
6764 fatal ("virtual memory exhausted", (char *)NULL);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6765 return result;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6766 }
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6767
43723
5cd450d9f443 * etags.c: Honour #line directives.
Francesco Potortì <pot@gnu.org>
parents: 42345
diff changeset
6768 static PTR
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6769 xrealloc (ptr, size)
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6770 char *ptr;
5580
517d8eb361f8 * etags.c (stab_entry, stab_create, stab_find, stab_search,
Francesco Potortì <pot@gnu.org>
parents: 5448
diff changeset
6771 unsigned int size;
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6772 {
42345
7d2776273a81 support for Perl packages
Francesco Potortì <pot@gnu.org>
parents: 42042
diff changeset
6773 PTR result = (PTR) realloc (ptr, size);
5940
e663f6626075 * etags.c (absolute_pathnames, cwd): added global vars.
Francesco Potortì <pot@gnu.org>
parents: 5580
diff changeset
6774 if (result == NULL)
16607
16b8d910795f * etags.c (C_entries): Test tok.valid. This handles some
Francesco Potortì <pot@gnu.org>
parents: 16573
diff changeset
6775 fatal ("virtual memory exhausted", (char *)NULL);
240
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6776 return result;
939deddfb6b2 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6777 }
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6778
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6779 /*
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6780 * Local Variables:
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6781 * c-indentation-style: gnu
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6782 * indent-tabs-mode: t
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6783 * tab-width: 8
44604
4702b23921b4 Avoid doubly tagging parse.y when both parse.c and parse.y are given on
Francesco Potortì <pot@gnu.org>
parents: 44114
diff changeset
6784 * fill-column: 79
47081
9c058ffb550b Two bug corrections and one new feature.
Francesco Potortì <pot@gnu.org>
parents: 45950
diff changeset
6785 * c-font-lock-extra-types: ("FILE" "bool" "language" "linebuffer" "fdesc" "node" "regexp")
42042
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6786 * End:
481d38f6aec2 * etags.c (PHP_functions): New function by Diez B. Roggisch,
Francesco Potortì <pot@gnu.org>
parents: 39317
diff changeset
6787 */
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52068
diff changeset
6788
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52068
diff changeset
6789 /* arch-tag: 8a9b748d-390c-4922-99db-2eeefa921051
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 52068
diff changeset
6790 (do not change this comment) */