(F_getit, Fortran_functions, Ada_getit, Asm_labels)
(Python_functions, PHP_functions, PHP_functions, PHP_functions) (PHP_functions, PHP_functions, Cobol_paragraphs) (Makefile_targets, Postscript_functions, Texinfo_nodes) (prolog_pr, erlang_func, erlang_attribute) (Perl_functions, Perl_functions, Pascal_functions) (TeX_commands, get_tag): Use make_tag instead of pfnote. (get_tag): Prototype changed, all callers changed.
This commit is contained in:
parent
e1af8d401e
commit
081b7c705d
1 changed files with 186 additions and 166 deletions
352
lib-src/etags.c
352
lib-src/etags.c
|
@ -35,7 +35,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
char pot_etags_version[] = "@(#) pot revision number is 16.29";
|
||||
char pot_etags_version[] = "@(#) pot revision number is 16.32";
|
||||
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
|
@ -353,7 +353,7 @@ static language *get_language_from_filename __P((char *, bool));
|
|||
static void readline __P((linebuffer *, FILE *));
|
||||
static long readline_internal __P((linebuffer *, FILE *));
|
||||
static bool nocase_tail __P((char *));
|
||||
static char *get_tag __P((char *));
|
||||
static void get_tag __P((char *, char **));
|
||||
|
||||
#ifdef ETAGS_REGEXPS
|
||||
static void analyse_regex __P((char *));
|
||||
|
@ -1776,6 +1776,69 @@ find_entries (inf)
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
* Check whether an implicitly named tag should be created,
|
||||
* then call `pfnote'.
|
||||
* NAME is a string that is internally copied by this function.
|
||||
*
|
||||
* TAGS format specification
|
||||
* Idea by Sam Kendall <kendall@mv.mv.com> (1997)
|
||||
* The following is explained in some more detail in etc/ETAGS.EBNF.
|
||||
*
|
||||
* make_tag creates tags with "implicit tag names" (unnamed tags)
|
||||
* if the following are all true, assuming NONAM=" \f\t\n\r()=,;":
|
||||
* 1. NAME does not contain any of the characters in NONAM;
|
||||
* 2. LINESTART contains name as either a rightmost, or rightmost but
|
||||
* one character, substring;
|
||||
* 3. the character, if any, immediately before NAME in LINESTART must
|
||||
* be a character in NONAM;
|
||||
* 4. the character, if any, immediately after NAME in LINESTART must
|
||||
* also be a character in NONAM.
|
||||
*
|
||||
* The implementation uses the notinname() macro, which recognises the
|
||||
* characters stored in the string `nonam'.
|
||||
* etags.el needs to use the same characters that are in NONAM.
|
||||
*/
|
||||
static void
|
||||
make_tag (name, namelen, is_func, linestart, linelen, lno, cno)
|
||||
char *name; /* tag name, or NULL if unnamed */
|
||||
int namelen; /* tag length */
|
||||
bool is_func; /* tag is a function */
|
||||
char *linestart; /* start of the line where tag is */
|
||||
int linelen; /* length of the line where tag is */
|
||||
int lno; /* line number */
|
||||
long cno; /* character number */
|
||||
{
|
||||
bool named = TRUE;
|
||||
|
||||
if (!CTAGS && name != NULL && namelen > 0)
|
||||
{
|
||||
int i;
|
||||
register char *cp = name;
|
||||
|
||||
for (i = 0; i < namelen; i++)
|
||||
if (notinname (*cp++))
|
||||
break;
|
||||
if (i == namelen) /* rule #1 */
|
||||
{
|
||||
cp = linestart + linelen - namelen;
|
||||
if (notinname (linestart[linelen-1]))
|
||||
cp -= 1; /* rule #4 */
|
||||
if (cp >= linestart /* rule #2 */
|
||||
&& (cp == linestart
|
||||
|| notinname (cp[-1])) /* rule #3 */
|
||||
&& strneq (name, cp, namelen)) /* rule #2 */
|
||||
named = FALSE; /* use implicit tag name */
|
||||
}
|
||||
}
|
||||
|
||||
if (named)
|
||||
name = savenstr (name, namelen);
|
||||
else
|
||||
name = NULL;
|
||||
pfnote (name, is_func, linestart, linelen, lno, cno);
|
||||
}
|
||||
|
||||
/* Record a tag. */
|
||||
static void
|
||||
pfnote (name, is_func, linestart, linelen, lno, cno)
|
||||
|
@ -1832,68 +1895,6 @@ pfnote (name, is_func, linestart, linelen, lno, cno)
|
|||
add_node (np, &nodehead);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check whether an implicitly named tag should be created,
|
||||
* then call `pfnote'.
|
||||
* NAME is a string that is internally copied by this function.
|
||||
*
|
||||
* TAGS format specification
|
||||
* Idea by Sam Kendall <kendall@mv.mv.com> (1997)
|
||||
*
|
||||
* make_tag creates tags with "implicit tag names" (unnamed tags)
|
||||
* if the following are all true, assuming NONAM=" \f\t\n\r()=,;":
|
||||
* 1. NAME does not contain any of the characters in NONAM;
|
||||
* 2. LINESTART contains name as either a rightmost, or rightmost but
|
||||
* one character, substring;
|
||||
* 3. the character, if any, immediately before NAME in LINESTART must
|
||||
* be a character in NONAM;
|
||||
* 4. the character, if any, immediately after NAME in LINESTART must
|
||||
* also be a character in NONAM.
|
||||
*
|
||||
* The implementation uses the notinname() macro, which recognises the
|
||||
* characters stored in the string `nonam'.
|
||||
* etags.el needs to use the same characters that are in NONAM.
|
||||
*/
|
||||
static void
|
||||
make_tag (name, namelen, is_func, linestart, linelen, lno, cno)
|
||||
char *name; /* tag name, or NULL if unnamed */
|
||||
int namelen; /* tag length */
|
||||
bool is_func; /* tag is a function */
|
||||
char *linestart; /* start of the line where tag is */
|
||||
int linelen; /* length of the line where tag is */
|
||||
int lno; /* line number */
|
||||
long cno; /* character number */
|
||||
{
|
||||
bool named = TRUE;
|
||||
|
||||
if (!CTAGS)
|
||||
{
|
||||
int i;
|
||||
register char *cp = name;
|
||||
|
||||
for (i = 0; i < namelen; i++)
|
||||
if (notinname (*cp++))
|
||||
break;
|
||||
if (i == namelen) /* rule #1 */
|
||||
{
|
||||
cp = linestart + linelen - namelen;
|
||||
if (notinname (linestart[linelen-1]))
|
||||
cp -= 1; /* rule #4 */
|
||||
if (cp >= linestart /* rule #2 */
|
||||
&& (cp == linestart
|
||||
|| notinname (cp[-1])) /* rule #3 */
|
||||
&& strneq (name, cp, namelen)) /* rule #2 */
|
||||
named = FALSE; /* use implicit tag name */
|
||||
}
|
||||
}
|
||||
|
||||
if (named)
|
||||
name = savenstr (name, namelen);
|
||||
else
|
||||
name = NULL;
|
||||
pfnote (name, is_func, linestart, linelen, lno, cno);
|
||||
}
|
||||
|
||||
/*
|
||||
* free_tree ()
|
||||
* recurse on left children, iterate on right children.
|
||||
|
@ -3898,8 +3899,8 @@ F_getit (inf)
|
|||
return;
|
||||
for (cp = dbp + 1; *cp != '\0' && intoken (*cp); cp++)
|
||||
continue;
|
||||
pfnote (savenstr (dbp, cp-dbp), TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (dbp, cp-dbp, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3966,8 +3967,8 @@ Fortran_functions (inf)
|
|||
{
|
||||
dbp = skip_spaces (dbp);
|
||||
if (*dbp == '\0') /* assume un-named */
|
||||
pfnote (savestr ("blockdata"), TRUE,
|
||||
lb.buffer, dbp - lb.buffer, lineno, linecharno);
|
||||
make_tag ("blockdata", 9, TRUE,
|
||||
lb.buffer, dbp - lb.buffer, lineno, linecharno);
|
||||
else
|
||||
F_getit (inf); /* look for name */
|
||||
}
|
||||
|
@ -4043,7 +4044,9 @@ Ada_getit (inf, name_qualifier)
|
|||
*cp = '\0';
|
||||
name = concat (dbp, name_qualifier, "");
|
||||
*cp = c;
|
||||
pfnote (name, TRUE, lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (name, strlen (name), TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
free (name);
|
||||
if (c == '"')
|
||||
dbp = cp + 1;
|
||||
return;
|
||||
|
@ -4162,11 +4165,9 @@ Asm_labels (inf)
|
|||
while (ISALNUM (*cp) || *cp == '_' || *cp == '.' || *cp == '$')
|
||||
cp++;
|
||||
if (*cp == ':' || iswhite (*cp))
|
||||
{
|
||||
/* Found end of label, so copy it and add it to the table. */
|
||||
pfnote (savenstr(lb.buffer, cp-lb.buffer), TRUE,
|
||||
/* Found end of label, so copy it and add it to the table. */
|
||||
make_tag (lb.buffer, cp - lb.buffer, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4194,56 +4195,63 @@ Perl_functions (inf)
|
|||
if (LOOKING_AT (cp, "package"))
|
||||
{
|
||||
free (package);
|
||||
package = get_tag (cp);
|
||||
if (package == NULL) /* can't parse package name */
|
||||
package = savestr ("");
|
||||
else
|
||||
package = savestr(package); /* make a copy */
|
||||
get_tag (cp, &package);
|
||||
}
|
||||
else if (LOOKING_AT (cp, "sub"))
|
||||
{
|
||||
char *name, *fullname, *pos;
|
||||
char *pos;
|
||||
char *sp = cp;
|
||||
|
||||
while (!notinname (*cp))
|
||||
cp++;
|
||||
if (cp == sp)
|
||||
continue;
|
||||
name = savenstr (sp, cp-sp);
|
||||
if ((pos = etags_strchr (name, ':')) != NULL && pos[1] == ':')
|
||||
fullname = name;
|
||||
continue; /* nothing found */
|
||||
if ((pos = etags_strchr (sp, ':')) != NULL
|
||||
&& pos < cp && pos[1] == ':')
|
||||
/* The name is already qualified. */
|
||||
make_tag (sp, cp - sp, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
else
|
||||
fullname = concat (package, "::", name);
|
||||
pfnote (fullname, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
if (name != fullname)
|
||||
free (name);
|
||||
}
|
||||
else if (globals /* only if tagging global vars is enabled */
|
||||
&& (LOOKING_AT (cp, "my") || LOOKING_AT (cp, "local")))
|
||||
{
|
||||
/* After "my" or "local", but before any following paren or space. */
|
||||
char *varname = NULL;
|
||||
/* Qualify it. */
|
||||
{
|
||||
char savechar, *name;
|
||||
|
||||
if (*cp == '$' || *cp == '@' || *cp == '%')
|
||||
savechar = *cp;
|
||||
*cp = '\0';
|
||||
name = concat (package, "::", sp);
|
||||
*cp = savechar;
|
||||
make_tag (name, strlen(name), TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
free (name);
|
||||
}
|
||||
}
|
||||
else if (globals) /* only if we are tagging global vars */
|
||||
{
|
||||
/* Skip a qualifier, if any. */
|
||||
bool qual = LOOKING_AT (cp, "my") || LOOKING_AT (cp, "local");
|
||||
/* After "my" or "local", but before any following paren or space. */
|
||||
char *varstart = cp;
|
||||
|
||||
if (qual /* should this be removed? If yes, how? */
|
||||
&& (*cp == '$' || *cp == '@' || *cp == '%'))
|
||||
{
|
||||
char* varstart = ++cp;
|
||||
while (ISALNUM (*cp) || *cp == '_')
|
||||
varstart += 1;
|
||||
do
|
||||
cp++;
|
||||
varname = savenstr (varstart, cp-varstart);
|
||||
while (ISALNUM (*cp) || *cp == '_');
|
||||
}
|
||||
else
|
||||
else if (qual)
|
||||
{
|
||||
/* Should be examining a variable list at this point;
|
||||
could insist on seeing an open parenthesis. */
|
||||
while (*cp != '\0' && *cp != ';' && *cp != '=' && *cp != ')')
|
||||
cp++;
|
||||
}
|
||||
else
|
||||
continue;
|
||||
|
||||
/* Perhaps I should back cp up one character, so the TAGS table
|
||||
doesn't mention (and so depend upon) the following char. */
|
||||
pfnote (varname, FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (varstart, cp - varstart, FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4269,8 +4277,8 @@ Python_functions (inf)
|
|||
char *name = cp;
|
||||
while (!notinname (*cp) && *cp != ':')
|
||||
cp++;
|
||||
pfnote (savenstr (name, cp-name), TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (name, cp - name, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4302,8 +4310,8 @@ PHP_functions (inf)
|
|||
{
|
||||
while (!notinname (*cp))
|
||||
cp++;
|
||||
pfnote (savenstr (name, cp-name), TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (name, cp - name, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
search_identifier = FALSE;
|
||||
}
|
||||
else if (LOOKING_AT (cp, "function"))
|
||||
|
@ -4315,8 +4323,8 @@ PHP_functions (inf)
|
|||
name = cp;
|
||||
while (!notinname (*cp))
|
||||
cp++;
|
||||
pfnote (savenstr (name, cp-name), TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (name, cp - name, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
else
|
||||
search_identifier = TRUE;
|
||||
|
@ -4328,8 +4336,8 @@ PHP_functions (inf)
|
|||
name = cp;
|
||||
while (*cp != '\0' && !iswhite (*cp))
|
||||
cp++;
|
||||
pfnote (savenstr (name, cp-name), FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (name, cp - name, FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
else
|
||||
search_identifier = TRUE;
|
||||
|
@ -4343,8 +4351,8 @@ PHP_functions (inf)
|
|||
name = cp;
|
||||
while (*cp != quote && *cp != '\0')
|
||||
cp++;
|
||||
pfnote (savenstr (name, cp-name), FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (name, cp - name, FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
else if (members
|
||||
&& LOOKING_AT (cp, "var")
|
||||
|
@ -4353,8 +4361,8 @@ PHP_functions (inf)
|
|||
name = cp;
|
||||
while (!notinname(*cp))
|
||||
cp++;
|
||||
pfnote (savenstr (name, cp-name), FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (name, cp - name, FALSE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4385,8 +4393,8 @@ Cobol_paragraphs (inf)
|
|||
for (ep = bp; ISALNUM (*ep) || *ep == '-'; ep++)
|
||||
continue;
|
||||
if (*ep++ == '.')
|
||||
pfnote (savenstr (bp, ep-bp), TRUE,
|
||||
lb.buffer, ep - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (bp, ep - bp, TRUE,
|
||||
lb.buffer, ep - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4408,8 +4416,8 @@ Makefile_targets (inf)
|
|||
while (*bp != '\0' && *bp != '=' && *bp != ':')
|
||||
bp++;
|
||||
if (*bp == ':' || (globals && *bp == '='))
|
||||
pfnote (savenstr (lb.buffer, bp - lb.buffer), TRUE,
|
||||
lb.buffer, bp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (lb.buffer, bp - lb.buffer, TRUE,
|
||||
lb.buffer, bp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4429,8 +4437,8 @@ Pascal_functions (inf)
|
|||
{
|
||||
linebuffer tline; /* mostly copied from C_entries */
|
||||
long save_lcno;
|
||||
int save_lineno, save_len;
|
||||
char c, *cp, *namebuf;
|
||||
int save_lineno, namelen, taglen;
|
||||
char c, *name;
|
||||
|
||||
bool /* each of these flags is TRUE iff: */
|
||||
incomment, /* point is inside a comment */
|
||||
|
@ -4444,15 +4452,15 @@ Pascal_functions (inf)
|
|||
is a FORWARD/EXTERN to be ignored, or
|
||||
whether it is a real tag */
|
||||
|
||||
save_lcno = save_lineno = save_len = 0; /* keep compiler quiet */
|
||||
namebuf = NULL; /* keep compiler quiet */
|
||||
save_lcno = save_lineno = namelen = taglen = 0; /* keep compiler quiet */
|
||||
name = NULL; /* keep compiler quiet */
|
||||
dbp = lb.buffer;
|
||||
*dbp = '\0';
|
||||
initbuffer (&tline);
|
||||
|
||||
incomment = inquote = FALSE;
|
||||
found_tag = FALSE; /* have a proc name; check if extern */
|
||||
get_tagname = FALSE; /* have found "procedure" keyword */
|
||||
get_tagname = FALSE; /* found "procedure" keyword */
|
||||
inparms = FALSE; /* found '(' after "proc" */
|
||||
verify_tag = FALSE; /* check if "extern" is ahead */
|
||||
|
||||
|
@ -4521,7 +4529,7 @@ Pascal_functions (inf)
|
|||
}
|
||||
if (found_tag && verify_tag && (*dbp != ' '))
|
||||
{
|
||||
/* check if this is an "extern" declaration */
|
||||
/* Check if this is an "extern" declaration. */
|
||||
if (*dbp == '\0')
|
||||
continue;
|
||||
if (lowcase (*dbp == 'e'))
|
||||
|
@ -4544,37 +4552,41 @@ Pascal_functions (inf)
|
|||
{
|
||||
found_tag = FALSE;
|
||||
verify_tag = FALSE;
|
||||
pfnote (namebuf, TRUE,
|
||||
tline.buffer, save_len, save_lineno, save_lcno);
|
||||
make_tag (name, namelen, TRUE,
|
||||
tline.buffer, taglen, save_lineno, save_lcno);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (get_tagname) /* grab name of proc or fn */
|
||||
{
|
||||
char *cp;
|
||||
|
||||
if (*dbp == '\0')
|
||||
continue;
|
||||
|
||||
/* save all values for later tagging */
|
||||
/* Find block name. */
|
||||
for (cp = dbp + 1; *cp != '\0' && !endtoken (*cp); cp++)
|
||||
continue;
|
||||
|
||||
/* Save all values for later tagging. */
|
||||
linebuffer_setlen (&tline, lb.len);
|
||||
strcpy (tline.buffer, lb.buffer);
|
||||
save_lineno = lineno;
|
||||
save_lcno = linecharno;
|
||||
name = tline.buffer + (dbp - lb.buffer);
|
||||
namelen = cp - dbp;
|
||||
taglen = cp - lb.buffer + 1;
|
||||
|
||||
/* grab block name */
|
||||
for (cp = dbp + 1; *cp != '\0' && !endtoken (*cp); cp++)
|
||||
continue;
|
||||
namebuf = savenstr (dbp, cp-dbp);
|
||||
dbp = cp; /* set dbp to e-o-token */
|
||||
save_len = dbp - lb.buffer + 1;
|
||||
get_tagname = FALSE;
|
||||
found_tag = TRUE;
|
||||
continue;
|
||||
|
||||
/* and proceed to check for "extern" */
|
||||
/* And proceed to check for "extern". */
|
||||
}
|
||||
else if (!incomment && !inquote && !found_tag)
|
||||
{
|
||||
/* check for proc/fn keywords */
|
||||
/* Check for proc/fn keywords. */
|
||||
switch (lowcase (c))
|
||||
{
|
||||
case 'p':
|
||||
|
@ -4587,7 +4599,7 @@ Pascal_functions (inf)
|
|||
continue;
|
||||
}
|
||||
}
|
||||
} /* while not eof */
|
||||
} /* while not eof */
|
||||
|
||||
free (tline.buffer);
|
||||
}
|
||||
|
@ -4613,7 +4625,7 @@ L_getit ()
|
|||
/* Ok, then skip "(" before name in (defstruct (foo)) */
|
||||
dbp = skip_spaces (dbp);
|
||||
}
|
||||
get_tag (dbp);
|
||||
get_tag (dbp, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -4677,11 +4689,11 @@ Postscript_functions (inf)
|
|||
*ep != '\0' && *ep != ' ' && *ep != '{';
|
||||
ep++)
|
||||
continue;
|
||||
pfnote (savenstr (bp, ep-bp), TRUE,
|
||||
lb.buffer, ep - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (bp, ep - bp, TRUE,
|
||||
lb.buffer, ep - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
else if (LOOKING_AT (bp, "defineps"))
|
||||
get_tag (bp);
|
||||
get_tag (bp, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4709,10 +4721,10 @@ Scheme_functions (inf)
|
|||
/* Skip over open parens and white space */
|
||||
while (notinname (*bp))
|
||||
bp++;
|
||||
get_tag (bp);
|
||||
get_tag (bp, NULL);
|
||||
}
|
||||
if (LOOKING_AT (bp, "(SET!") || LOOKING_AT (bp, "(set!"))
|
||||
get_tag (bp);
|
||||
get_tag (bp, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4774,8 +4786,7 @@ TeX_commands (inf)
|
|||
if (strneq (cp, key->buffer, key->len))
|
||||
{
|
||||
register char *p;
|
||||
char *name;
|
||||
int linelen;
|
||||
int namelen, linelen;
|
||||
bool opgrp = FALSE;
|
||||
|
||||
cp = skip_spaces (cp + key->len);
|
||||
|
@ -4789,7 +4800,7 @@ TeX_commands (inf)
|
|||
*p != TEX_opgrp && *p != TEX_clgrp);
|
||||
p++)
|
||||
continue;
|
||||
name = savenstr (cp, p-cp);
|
||||
namelen = p - cp;
|
||||
linelen = lb.len;
|
||||
if (!opgrp || *p == TEX_clgrp)
|
||||
{
|
||||
|
@ -4797,7 +4808,8 @@ TeX_commands (inf)
|
|||
*p++;
|
||||
linelen = p - lb.buffer + 1;
|
||||
}
|
||||
pfnote (name, TRUE, lb.buffer, linelen, lineno, linecharno);
|
||||
make_tag (cp, namelen, TRUE,
|
||||
lb.buffer, linelen, lineno, linecharno);
|
||||
goto tex_next_line; /* We only tag a line once */
|
||||
}
|
||||
}
|
||||
|
@ -4907,8 +4919,8 @@ Texinfo_nodes (inf)
|
|||
start = cp;
|
||||
while (*cp != '\0' && *cp != ',')
|
||||
cp++;
|
||||
pfnote (savenstr (start, cp - start), TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
make_tag (start, cp - start, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5011,7 +5023,7 @@ prolog_pr (s, last)
|
|||
|| len != strlen (last)
|
||||
|| !strneq (s, last, len)))
|
||||
{
|
||||
pfnote (savenstr (s, len), TRUE, s, pos, lineno, linecharno);
|
||||
make_tag (s, len, TRUE, s, pos, lineno, linecharno);
|
||||
return len;
|
||||
}
|
||||
else
|
||||
|
@ -5165,7 +5177,7 @@ erlang_func (s, last)
|
|||
|| len != (int)strlen (last)
|
||||
|| !strneq (s, last, len)))
|
||||
{
|
||||
pfnote (savenstr (s, len), TRUE, s, pos, lineno, linecharno);
|
||||
make_tag (s, len, TRUE, s, pos, lineno, linecharno);
|
||||
return len;
|
||||
}
|
||||
|
||||
|
@ -5193,8 +5205,7 @@ erlang_attribute (s)
|
|||
{
|
||||
int len = erlang_atom (skip_spaces (cp));
|
||||
if (len > 0)
|
||||
pfnote (savenstr (cp, len), TRUE,
|
||||
s, cp + len - s, lineno, linecharno);
|
||||
make_tag (cp, len, TRUE, s, cp + len - s, lineno, linecharno);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -5610,7 +5621,10 @@ regex_tag_multiline ()
|
|||
lineno++, linecharno = charno;
|
||||
if (pp->name_pattern[0] != '\0')
|
||||
{
|
||||
/* Make a named tag. */
|
||||
/* Make a named tag.
|
||||
Do not use make_tag here, as it would make the name
|
||||
implicit if possible, while we want to respect the user's
|
||||
request to create an explicit tag name. */
|
||||
char *name = substitute (buffer,
|
||||
pp->name_pattern, &pp->regs);
|
||||
if (name != NULL)
|
||||
|
@ -5648,21 +5662,24 @@ nocase_tail (cp)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static char *
|
||||
get_tag (bp)
|
||||
static void
|
||||
get_tag (bp, namepp)
|
||||
register char *bp;
|
||||
char **namepp;
|
||||
{
|
||||
register char *cp, *name;
|
||||
register char *cp = bp;
|
||||
|
||||
if (*bp == '\0')
|
||||
return NULL;
|
||||
/* Go till you get to white space or a syntactic break */
|
||||
for (cp = bp + 1; !notinname (*cp); cp++)
|
||||
continue;
|
||||
name = savenstr (bp, cp-bp);
|
||||
pfnote (name, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
return name;
|
||||
if (*bp != '\0')
|
||||
{
|
||||
/* Go till you get to white space or a syntactic break */
|
||||
for (cp = bp + 1; !notinname (*cp); cp++)
|
||||
continue;
|
||||
make_tag (bp, cp - bp, TRUE,
|
||||
lb.buffer, cp - lb.buffer + 1, lineno, linecharno);
|
||||
}
|
||||
|
||||
if (namepp != NULL)
|
||||
*namepp = savenstr (bp, cp - bp);
|
||||
}
|
||||
|
||||
/* Initialize a linebuffer for use */
|
||||
|
@ -5943,7 +5960,10 @@ readline (lbp, stream)
|
|||
/* Match occurred. Construct a tag. */
|
||||
if (pp->name_pattern[0] != '\0')
|
||||
{
|
||||
/* Make a named tag. */
|
||||
/* Make a named tag.
|
||||
Do not use make_tag here, as it would make the name
|
||||
implicit if possible, while we want to respect the user's
|
||||
request to create an explicit tag name. */
|
||||
char *name = substitute (lbp->buffer,
|
||||
pp->name_pattern, &pp->regs);
|
||||
if (name != NULL)
|
||||
|
|
Loading…
Add table
Reference in a new issue