Commit 89d57763 authored by Francesco Potortì's avatar Francesco Potortì

Changes for makefile support in etags.

parent 8d7ff9c8
2001-01-14 Francesco Potorti` <pot@gnu.org>
* etags.c (get_language_from_langname): Renamed from
get_language_from_name.
(get_language_from_filename): Renamed from
get_language_from_suffix. Now first looks for the complete file
name.
(language): New member char **filenames.
(Makefile_filenames): List of possible filenames for makefiles.
(lang_names): Added a NULL member for every entry, added an entry
for makefiles.
(Makefile_targets): New function, inspired by Assar Westerlund
<assar@sics.se>.
(Texinfo_nodes): Renamed from Texinfo_fuctions and made
it conformant to the style of the rest of the code.
2001-01-08 Gerd Moellmann <gerd@gnu.org>
* TUTORIAL.es: New file.
......
......@@ -1448,6 +1448,8 @@ types.
*** In Lisp, "(defstruct (foo", "(defun (operator" and similar constructs
are now tagged.
*** In makefiles, tags the targets.
*** In Perl, the --globals option tags global variables. my and local
variables are tagged.
......
.\" Copyright (c) 1992 Free Software Foundation
.\" See section COPYING for conditions for redistribution
.TH etags 1 "19apr1994" "GNU Tools" "GNU Tools"
.TH etags 1 "14gen2001" "GNU Tools" "GNU Tools"
.de BP
.sp
.ti -.2i
......@@ -12,24 +12,33 @@ etags, ctags \- generate tag file for Emacs, vi
.SH SYNOPSIS
.hy 0
.na
.B etags [\|\-aCDRSVh\|] [\|\-i \fIfile\fP\|] [\|\-l \fIlanguage\fP\|] [\|\-i \fIregexp\fP\|] [\|\-o \fItagfile\fP\|]
.B etags [\|\-aCDGImRVh\|] [\|\-i \fIfile\fP\|] [\|\-l \fIlanguage\fP\|]
.if n .br
.B [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|]
.br
[\|\-\-c++\|] [\|\-\-no\-defines\|] [\|\-\-ignore\-indentation\|]
[\|\-\-language=\fIlanguage\fP\|] [\|\-\-regex=\fIregexp\fP\|]
[\|\-\-no\-regexp\|] [\|\-\-help\|] [\|\-\-version\|]
[\|\-\-include=\fIfile\fP\|] [\|\-\-output=\fItagfile\fP\|]
[\|\-\-append\|] \fIfile\fP .\|.\|.
[\|\-\-append\|] [\|\-\-c++\|] [\|\-\-no\-defines\|]
[\|\-\-no\-globals\|] [\|\-\-include=\fIfile\fP\|]
[\|\-\-ignore\-indentation\|] [\|\-\-language=\fIlanguage\fP\|]
[\|\-\-members\|] [\|\-\-output=\fItagfile\fP\|]
[\|\-\-regex=\fIregexp\fP\|] [\|\-\-no\-regex\|]
[\|\-\-ignore\-case\-regex=\fIregexp\fP\|]
[\|\-\-help\|] [\|\-\-version\|]
\fIfile\fP .\|.\|.
.B ctags [\|\-aCdRSVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
.B ctags [\|\-aCdgImRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
.if n .br
.B [\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|]
.br
[\|\-i \fIregexp\fP\|] [\|\-o \fItagfile\fP\|]
[\|\-\-c++\|] [\|\-\-defines\|] [\|\-\-ignore\-indentation\|]
[\|\-\-no\-warn\|] [\|\-\-cxref\|] [\|\-\-backward\-search\|]
[\|\-\-forward\-search\|] [\|\-\-typedefs\|] [\|\-\-typedefs\-and\-c++\|]
[\|\-\-language=\fIlanguage\fP\|] [\|\-\-regex=\fIregexp\fP\|]
[\|\-\-append\|] [\|\-\-backward\-search\|] [\|\-\-c++\|]
[\|\-\-cxref\|] [\|\-\-defines\|] [\|\-\-forward\-search\|]
[\|\-\-globals\|] [\|\-\-ignore\-indentation\|]
[\|\-\-language=\fIlanguage\fP\|] [\|\-\-members\|]
[\|\-\-output=\fItagfile\fP\|] [\|\-\-regex=\fIregexp\fP\|]
[\|\-\-ignore\-case\-regex=\fIregexp\fP\|]
[\|\-\-typedefs\|] [\|\-\-typedefs\-and\-c++\|]
[\|\-\-update\|] [\|\-\-no\-warn\|]
[\|\-\-help\|] [\|\-\-version\|]
.br
[\|\-\-output=\fItagfile\fP\|] [\|\-\-append\|] [\|\-\-update\|] \fIfile\fP .\|.\|.
\fIfile\fP .\|.\|.
.ad b
.hy 1
.SH DESCRIPTION
......@@ -40,8 +49,8 @@ understood by
format understood by
.BR vi ( 1 )\c
\&. Both forms of the program understand
the syntax of C, Objective C, C++, Java, Fortran, Pascal, Cobol,
LaTeX, Scheme, Emacs Lisp/Common Lisp, Postscript, Erlang, Prolog and
the syntax of C, Objective C, C++, Java, Fortran, Pascal, Cobol, Ada, Perl,
LaTeX, Scheme, Emacs Lisp/Common Lisp, Postscript, Erlang, Python, Prolog and
most assembler\-like syntaxes.
Both forms read the files specified on the command line, and write a tag
table (defaults: `\|TAGS\|' for \fBetags\fP, `\|tags\|' for
......@@ -77,48 +86,72 @@ Treat files with `\|.c\|' and `\|.h\|' extensions as C++ code, not C
code. Files with `\|.C\|', `\|.H\|', `\|.cxx\|', `\|.hxx\|', or
`\|.cc\|' extensions are always assumed to be C++ code.
.TP
.B \-\-declarations
In C and derived languages, create tags for function declarations,
and create tags for extern variables unless \-\-no\-globals is used.
.TP
.B \-d, \-\-defines
Create tag entries for C preprocessor constant definitions
and enum constants, too. This is the
default behavior for \fBetags\fP, so this option is only accepted
by \fBctags\fP.
default behavior for \fBetags\fP.
.TP
.B \-D, \-\-no\-defines
Do not create tag entries for C preprocessor constant definitions
and enum constants.
This may make the tags file much smaller if many header files are tagged.
This is the default behavior for \fBctags\fP, so this option is only
accepted by \fBetags\fP.
This is the default behavior for \fBctags\fP.
.TP
.B \-g, \-\-globals
Create tag entries for global variables in C, C++, Objective C, Java,
and Perl.
This is the default behavior for \fBetags\fP.
.TP
.B \-G, \-\-no\-globals
Do not tag global variables. Typically this reduces the file size by
one fourth. This is the default behavior for \fBctags\fP.
.TP
\fB\-i\fP \fIfile\fP, \fB\-\-include=\fIfile\fP
Include a note in the tag file indicating that, when searching for a
tag, one should also consult the tags file \fIfile\fP after checking the
current file. This options is only accepted by \fBetags\fP.
.TP
.B \-I, \-\-ignore\-indentation
Don't rely on indentation as much as we normally do. Currently, this
means not to assume that a closing brace in the first column is the
final brace of a function or structure definition in C and C++.
.TP
\fB\-l\fP \fIlanguage\fP, \fB\-\-language=\fIlanguage\fP
Parse the following files according to the given language. More than
one such options may be intermixed with filenames. Use \fB\-\-help\fP
to get a list of the available languages and their default filename
extensions. The `auto' language can be used to restore automatic
detection of language based on filename extension. The `none'
detection of language based on the file name. The `none'
language may be used to disable language parsing altogether; only
regexp matching is done in this case (see the \fB\-\-regex\fP option).
.TP
\fB\-\-no_globals\fP
Do not tag global variables in C, C++, Objective C, Java. Typically
this reduces the file size by one fourth.
.B \-m, \-\-members
Create tag entries for variables that are members of structure-like
constructs in C++, Objective C, Java.
.TP
\fB\-\-members\fP
Tag variables that are members of strucure-like constructs in C++,
Objective C, Java.
.B \-M, \-\-no\-members
Do not tag member variables. This is the default behavior.
.TP
.B \-\-packages\-only
Only tag packages in Ada files.
.TP
\fB\-o\fP \fItagfile\fP, \fB\-\-output=\fItagfile\fP
Explicit name of file for tag table; overrides default `\|TAGS\|' or
`\|tags\|'. (But ignored with \fB\-v\fP or \fB\-x\fP.)
.TP
\fB\-r\fP \fIregexp\fP, \fB\-\-regex=\fIregexp\fP
Make tags based on regexp matching for each line of the files
following this option, in addition to the tags made with the standard
parsing based on language. May be freely intermixed with filenames
and the \fB\-R\fP option. The regexps are cumulative, i.e. each
option will add to the previous ones. The regexps are of the form:
\fB\-\-ignore\-case\-regex=\fIregexp\fP\
Make tags based on regexp matching for each line of the files following
this option, in addition to the tags made with the standard parsing based
on language. When using \-\-regex, case is significant, while it is not
with \-\-ignore\-case\-regex. May be freely intermixed with filenames and
the \fB\-R\fP option. The regexps are cumulative, i.e. each option will
add to the previous ones. The regexps are of the form:
.br
\fB/\fP\fItagregexp\fP[\fB/\fP\fInameregexp\fP]\fB/\fP
.br
......@@ -128,7 +161,7 @@ such that more characters than needed are unavoidably matched by
\fItagregexp\fP, it may be useful to add a \fInameregexp\fP, to
narrow down the tag scope. \fBctags\fP ignores regexps without a
\fInameregexp\fP. The syntax of regexps is the same as in emacs,
augmented with intervals of the form \\{m,n\\}, as id ed or grep.
augmented with intervals of the form \\{m,n\\}, as in ed or grep.
.br
Here are some examples. All the regexps are quoted to protect them
from shell interpretation.
......@@ -152,16 +185,25 @@ Tag TCL files (this last example shows the usage of a \fItagregexp\fP):
.br
\fI\-\-lang\=none \-\-regex\='/proc[\ \\t]+\\([^\ \\t]+\\)/\\1/'\fP
.br
A regexp can be preceded by {lang}, thus restriciting it to match lines of
files of the specified language. Use \fBetags --help\bP to obtain a list
of the recognised languages. This feature is particularly useful inside
\fBregex files\fB. A regex file contains one regex per line. Empty lines,
and those lines beginning with space or tab are ignored. Lines beginning
with @ are references to regex files whose name follows the @ sign. Other
lines are considered regular expressions like those following \-\-regex.
.br
For example, the command
.br
etags \-\-regex=@regex.file *.c
.br
reads the regexes contained in the file regex.file.
.TP
.B \-R, \-\-no\-regex
Don't do any more regexp matching on the following files. May be
freely intermixed with filenames and the \fB\-\-regex\fP option.
.TP
.B \-S, \-\-ignore\-indentation
Don't rely on indentation as much as we normally do. Currently, this
means not to assume that a closing brace in the first column is the
final brace of a function or structure definition in C and C++.
.TP
.B \-t, \-\-typedefs
Record typedefs in C code as tags. Since this is the default behaviour
of \fBetags\fP, only \fBctags\fP accepts this option.
......@@ -192,7 +234,7 @@ allowed with it.
Instead of generating a tag file, write a cross reference (in
\fBcxref\fP format) to standard output. Only \fBctags\fP accepts this option.
.TP
.B \-H, \-\-help
.B \-h, \-H, \-\-help
Print usage information.
.TP
.B \-V, \-\-version
......@@ -209,7 +251,7 @@ Stallman.
.BR vi ( 1 ).
.SH COPYING
Copyright (c) 1992 Free Software Foundation, Inc.
Copyright (c) 1999 Free Software Foundation, Inc.
.PP
Permission is granted to make and distribute verbatim copies of
this manual provided the copyright notice and this permission notice
......
......@@ -31,7 +31,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
* Francesco Potorti` (pot@gnu.org) is the current maintainer.
*/
char pot_etags_version[] = "@(#) pot revision number is 13.44";
char pot_etags_version[] = "@(#) pot revision number is 13.47";
#define TRUE 1
#define FALSE 0
......@@ -160,21 +160,21 @@ char pot_etags_version[] = "@(#) pot revision number is 13.44";
#define strneq(s,t,n) ((DEBUG && (s) == NULL && (t) == NULL \
&& (abort (), 1)) || !strncmp (s, t, n))
#define lowcase(c) tolower ((unsigned char)(c))
#define UPCASE(c) toupper ((unsigned char)(c))
#define CHARS 256 /* 2^sizeof(char) */
#define CHAR(x) ((unsigned int)x & (CHARS - 1))
#define CHAR(x) ((unsigned int)(x) & (CHARS - 1))
#define iswhite(c) (_wht[CHAR(c)]) /* c is white */
#define notinname(c) (_nin[CHAR(c)]) /* c is not in a name */
#define begtoken(c) (_btk[CHAR(c)]) /* c can start token */
#define intoken(c) (_itk[CHAR(c)]) /* c can be in token */
#define endtoken(c) (_etk[CHAR(c)]) /* c ends tokens */
#define ISALNUM(c) isalnum ((unsigned char) (c))
#define ISALPHA(c) isalpha ((unsigned char) (c))
#define ISDIGIT(c) isdigit ((unsigned char) (c))
#define ISLOWER(c) islower ((unsigned char) (c))
#define ISALNUM(c) isalnum (CHAR(c))
#define ISALPHA(c) isalpha (CHAR(c))
#define ISDIGIT(c) isdigit (CHAR(c))
#define ISLOWER(c) islower (CHAR(c))
#define lowcase(c) tolower (CHAR(c))
#define upcase(c) toupper (CHAR(c))
/*
......@@ -208,6 +208,7 @@ typedef struct
{
char *name;
Lang_function *function;
char **filenames;
char **suffixes;
char **interpreters;
} language;
......@@ -254,14 +255,15 @@ static void Erlang_functions P_((FILE *));
static void Fortran_functions P_((FILE *));
static void Yacc_entries P_((FILE *));
static void Lisp_functions P_((FILE *));
static void Makefile_targets P_((FILE *));
static void Pascal_functions P_((FILE *));
static void Perl_functions P_((FILE *));
static void Postscript_functions P_((FILE *));
static void Prolog_functions P_((FILE *));
static void Python_functions P_((FILE *));
static void Scheme_functions P_((FILE *));
static void TeX_functions P_((FILE *));
static void Texinfo_functions P_ ((FILE *));
static void TeX_commands P_((FILE *));
static void Texinfo_nodes P_((FILE *));
static void just_read_file P_((FILE *));
static void print_language_names P_((void));
......@@ -271,9 +273,9 @@ int main P_((int, char **));
static int number_len P_((long));
static compressor *get_compressor_from_suffix P_((char *, char **));
static language *get_language_from_name P_((char *));
static language *get_language_from_langname P_((char *));
static language *get_language_from_interpreter P_((char *));
static language *get_language_from_suffix P_((char *));
static language *get_language_from_filename P_((char *));
static int total_size_of_entries P_((node *));
static long readline P_((linebuffer *, FILE *));
static long readline_internal P_((linebuffer *, FILE *));
......@@ -476,7 +478,7 @@ char *default_C_suffixes [] =
{ "c", "h", NULL };
char *Cplusplus_suffixes [] =
{ "C", "H", "c++", "cc", "cpp", "cxx", "h++", "hh", "hpp", "hxx",
{ "C", "c++", "cc", "cpp", "cxx", "H", "h++", "hh", "hpp", "hxx",
"M", /* Objective C++ */
"pdb", /* Postscript with C syntax */
NULL };
......@@ -497,7 +499,10 @@ char *Fortran_suffixes [] =
{ "F", "f", "f90", "for", NULL };
char *Lisp_suffixes [] =
{ "cl", "clisp", "el", "l", "lisp", "lsp", "ml", "LSP", NULL };
{ "cl", "clisp", "el", "l", "lisp", "LSP", "lsp", "ml", NULL };
char *Makefile_filenames [] =
{ "Makefile", "makefile", "GNUMakefile", "Makefile.in", "Makefile.am", NULL};
char *Pascal_suffixes [] =
{ "p", "pas", NULL };
......@@ -508,9 +513,9 @@ char *Perl_interpreters [] =
{ "perl", "@PERL@", NULL };
char *plain_C_suffixes [] =
{ "pc", /* Pro*C file */
{ "lm", /* Objective lex file */
"m", /* Objective C file */
"lm", /* Objective lex file */
"pc", /* Pro*C file */
NULL };
char *Postscript_suffixes [] =
......@@ -524,16 +529,16 @@ char *Python_suffixes [] =
/* Can't do the `SCM' or `scm' prefix with a version number. */
char *Scheme_suffixes [] =
{ "SCM", "SM", "oak", "sch", "scheme", "scm", "sm", "ss", "t", NULL };
{ "oak", "sch", "scheme", "SCM", "scm", "SM", "sm", "ss", "t", NULL };
char *TeX_suffixes [] =
{ "TeX", "bib", "clo", "cls", "ltx", "sty", "tex", NULL };
{ "bib", "clo", "cls", "ltx", "sty", "TeX", "tex", NULL };
char *Texinfo_suffixes [] =
{ "texi", "txi", "texinfo", NULL };
{ "texi", "texinfo", "txi", NULL };
char *Yacc_suffixes [] =
{ "y", "ym", "yy", "yxx", "y++", NULL }; /* .ym is Objective yacc file */
{ "y", "y++", "ym", "yxx", "yy", NULL }; /* .ym is Objective yacc file */
/*
* Table of languages.
......@@ -544,26 +549,27 @@ char *Yacc_suffixes [] =
language lang_names [] =
{
{ "ada", Ada_funcs, Ada_suffixes, NULL },
{ "asm", Asm_labels, Asm_suffixes, NULL },
{ "c", default_C_entries, default_C_suffixes, NULL },
{ "c++", Cplusplus_entries, Cplusplus_suffixes, NULL },
{ "c*", Cstar_entries, Cstar_suffixes, NULL },
{ "cobol", Cobol_paragraphs, Cobol_suffixes, NULL },
{ "erlang", Erlang_functions, Erlang_suffixes, NULL },
{ "fortran", Fortran_functions, Fortran_suffixes, NULL },
{ "java", Cjava_entries, Cjava_suffixes, NULL },
{ "lisp", Lisp_functions, Lisp_suffixes, NULL },
{ "pascal", Pascal_functions, Pascal_suffixes, NULL },
{ "perl", Perl_functions, Perl_suffixes, Perl_interpreters },
{ "postscript", Postscript_functions, Postscript_suffixes, NULL },
{ "proc", plain_C_entries, plain_C_suffixes, NULL },
{ "prolog", Prolog_functions, Prolog_suffixes, NULL },
{ "python", Python_functions, Python_suffixes, NULL },
{ "scheme", Scheme_functions, Scheme_suffixes, NULL },
{ "tex", TeX_functions, TeX_suffixes, NULL },
{ "texinfo", Texinfo_functions, Texinfo_suffixes, NULL },
{ "yacc", Yacc_entries, Yacc_suffixes, NULL },
{ "ada", Ada_funcs, NULL, Ada_suffixes, NULL },
{ "asm", Asm_labels, NULL, Asm_suffixes, NULL },
{ "c", default_C_entries, NULL, default_C_suffixes, NULL },
{ "c++", Cplusplus_entries, NULL, Cplusplus_suffixes, NULL },
{ "c*", Cstar_entries, NULL, Cstar_suffixes, NULL },
{ "cobol", Cobol_paragraphs, NULL, Cobol_suffixes, NULL },
{ "erlang", Erlang_functions, NULL, Erlang_suffixes, NULL },
{ "fortran", Fortran_functions, NULL, Fortran_suffixes, NULL },
{ "java", Cjava_entries, NULL, Cjava_suffixes, NULL },
{ "lisp", Lisp_functions, NULL, Lisp_suffixes, NULL },
{ "makefile", Makefile_targets, Makefile_filenames, NULL, NULL },
{ "pascal", Pascal_functions, NULL, Pascal_suffixes, NULL },
{ "perl", Perl_functions, NULL, Perl_suffixes, Perl_interpreters },
{ "postscript", Postscript_functions, NULL, Postscript_suffixes, NULL },
{ "proc", plain_C_entries, NULL, plain_C_suffixes, NULL },
{ "prolog", Prolog_functions, NULL, Prolog_suffixes, NULL },
{ "python", Python_functions, NULL, Python_suffixes, NULL },
{ "scheme", Scheme_functions, NULL, Scheme_suffixes, NULL },
{ "tex", TeX_commands, NULL, TeX_suffixes, NULL },
{ "texinfo", Texinfo_nodes, NULL, Texinfo_suffixes, NULL },
{ "yacc", Yacc_entries, NULL, Yacc_suffixes, NULL },
{ "auto", NULL }, /* default guessing scheme */
{ "none", just_read_file }, /* regexp matching only */
{ NULL, NULL } /* end of list */
......@@ -988,7 +994,7 @@ main (argc, argv)
break;
case 'l':
{
language *lang = get_language_from_name (optarg);
language *lang = get_language_from_langname (optarg);
if (lang != NULL)
{
argbuffer[current_arg].lang = lang;
......@@ -1251,7 +1257,7 @@ get_compressor_from_suffix (file, extptr)
* Return a language given the name.
*/
static language *
get_language_from_name (name)
get_language_from_langname (name)
char *name;
{
language *lang;
......@@ -1297,12 +1303,20 @@ get_language_from_interpreter (interpreter)
* Return a language given the file name.
*/
static language *
get_language_from_suffix (file)
get_language_from_filename (file)
char *file;
{
language *lang;
char **ext, *suffix;
char **name, **ext, *suffix;
/* Try whole file name first. */
for (lang = lang_names; lang->name != NULL; lang++)
if (lang->filenames != NULL)
for (name = lang->filenames; *name != NULL; name++)
if (streq (*name, file))
return lang;
/* If not found, try suffix after last dot. */
suffix = etags_strrchr (file, '.');
if (suffix == NULL)
return NULL;
......@@ -1530,7 +1544,7 @@ find_entries (file, inf)
}
/* Try to guess the language given the file name. */
lang = get_language_from_suffix (file);
lang = get_language_from_filename (file);
if (lang != NULL && lang->function != NULL)
{
curlang = lang;
......@@ -1575,7 +1589,7 @@ find_entries (file, inf)
/* Try Fortran. */
old_last_node = last_node;
curlang = get_language_from_name ("fortran");
curlang = get_language_from_langname ("fortran");
Fortran_functions (inf);
/* No Fortran entries found. Try C. */
......@@ -1584,7 +1598,7 @@ find_entries (file, inf)
/* We do not tag if rewind fails.
Only the file name will be recorded in the tags file. */
rewind (inf);
curlang = get_language_from_name (cplusplus ? "c++" : "c");
curlang = get_language_from_langname (cplusplus ? "c++" : "c");
default_C_entries (inf);
}
return;
......@@ -3854,6 +3868,27 @@ Cobol_paragraphs (inf)
}
}
/*
* Makefile support
*/
static void
Makefile_targets (inf)
FILE *inf;
{
register char *bp;
LOOP_ON_INPUT_LINES (inf, lb, bp)
{
if (*bp == '\t' || *bp == '#')
continue;
while (*bp != '\0' && *bp != '=' && *bp != ':')
bp++;
if (*bp == ':')
pfnote (savenstr (lb.buffer, bp - lb.buffer), TRUE,
lb.buffer, bp - lb.buffer + 1, lineno, linecharno);
}
}
/* Added by Mosur Mohan, 4/22/88 */
/* Pascal parsing */
......@@ -4239,7 +4274,7 @@ char TEX_clgrp = '}';
* TeX/LaTeX scanning loop.
*/
static void
TeX_functions (inf)
TeX_commands (inf)
FILE *inf;
{
char *cp, *lasthit;
......@@ -4391,18 +4426,19 @@ TEX_Token (cp)
/* Texinfo support. Dave Love, Mar. 2000. */
static void
Texinfo_functions (inf)
Texinfo_nodes (inf)
FILE * inf;
{
char *cp, *start;
LOOP_ON_INPUT_LINES (inf, lb, cp)
{
if ((*cp++ == '@' && *cp++ == 'n' && *cp++ == 'o' && *cp++ == 'd'
if ((*cp++ == '@'
&& *cp++ == 'n'
&& *cp++ == 'o'
&& *cp++ == 'd'
&& *cp++ == 'e' && iswhite (*cp++)))
{
while (iswhite (*cp))
cp++;
start = cp;
start = cp = skip_spaces(cp);
while (*cp != '\0' && *cp != ',')
cp++;
pfnote (savenstr (start, cp - start), TRUE,
......@@ -4859,7 +4895,7 @@ analyse_regex (regex_arg, ignore_case)
return;
}
*cp = '\0';
lang = get_language_from_name (lang_name);
lang = get_language_from_langname (lang_name);
if (lang == NULL)
return;
add_regex (cp + 1, ignore_case, lang);
......@@ -5490,8 +5526,8 @@ canonicalize_filename (fn)
{
#ifdef DOS_NT
/* Canonicalize drive letter case. */
if (fn[0] && fn[1] == ':' && ISLOWER (fn[0]))
fn[0] = UPCASE (fn[0]);
if (fn[0] != '\0' && fn[1] == ':' && ISLOWER (fn[0]))
fn[0] = upcase (fn[0]);
/* Convert backslashes to slashes. */
for (; *fn != '\0'; fn++)
if (*fn == '\\')
......
......@@ -1988,6 +1988,9 @@ in the file.
@item
In Fortran code, functions, subroutines and blockdata are tags.
@item
In makefiles, targets are tags.
@item
In Objective C code, tags include Objective C definitions for classes,
class categories, methods, and protocols.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment