Mercurial > emacs
changeset 47103:4098bad57f21
(C_entries): Corrected a problem with const C++ funcs.
(ignoreindent): Renamed from noindentypedefs.
(cjava, cplpl): They are now macros instead of local vars.
(HTML_labels): Tag ID= also.
author | Francesco Potortì <pot@gnu.org> |
---|---|
date | Thu, 29 Aug 2002 14:42:56 +0000 |
parents | c5cfe5722546 |
children | 2111424826e5 |
files | lib-src/etags.c |
diffstat | 1 files changed, 61 insertions(+), 44 deletions(-) [+] |
line wrap: on
line diff
--- a/lib-src/etags.c Thu Aug 29 14:41:33 2002 +0000 +++ b/lib-src/etags.c Thu Aug 29 14:42:56 2002 +0000 @@ -35,7 +35,7 @@ * */ -char pot_etags_version[] = "@(#) pot revision number is 16.42"; +char pot_etags_version[] = "@(#) pot revision number is 16.46"; #define TRUE 1 #define FALSE 0 @@ -459,7 +459,7 @@ static bool no_warnings; /* -w: suppress warnings */ static bool cxref_style; /* -x: create cxref style output */ static bool cplusplus; /* .[hc] means C++, not C */ -static bool noindentypedefs; /* -I: ignore indentation in C */ +static bool ignoreindent; /* -I: ignore indentation in C */ static bool packages_only; /* --packages-only: in Ada, only tag packages*/ #define STDIN 0x1001 /* returned by getopt_long on --parse-stdin */ @@ -775,11 +775,11 @@ Do not create tag entries for global variables in some\n\ languages. This makes the tags file smaller."); puts ("--members\n\ - Create tag entries for member variables in C and derived languages."); + Create tag entries for member variables in some languages."); #ifdef ETAGS_REGEXPS puts ("-r REGEXP, --regex=REGEXP or --regex=@regexfile\n\ - Make a tag for each line matching the regular expression pattern\n\ + Make a tag for each line matching a regular expression pattern\n\ in the following files. {LANGUAGE}REGEXP uses REGEXP for LANGUAGE\n\ files only. REGEXFILE is a file containing one REGEXP per line.\n\ REGEXP takes the form /TAGREGEXP/TAGNAME/MODS, where TAGNAME/ is\n\ @@ -789,15 +789,13 @@ --regex=\"/proc[ \\t]+\\([^ \\t]+\\)/\\1/.\".\n\ MODS are optional one-letter modifiers: `i' means to ignore case,\n\ `m' means to allow multi-line matches, `s' implies `m' and\n\ - causes dot to match the newline character as well."); + causes dot to match any character, including newline."); puts ("-R, --no-regex\n\ Don't create tags from regexps for the following files."); #endif /* ETAGS_REGEXPS */ puts ("-I, --ignore-indentation\n\ - Don't rely on indentation quite as much as normal. Currently,\n\ - this means not to assume that a closing brace in the first\n\ - column is the final brace of a function or structure\n\ - definition in C and C++."); + In C and C++ do not assume that a closing brace in the first\n\ + column is the final brace of a function or structure definition."); puts ("-o FILE, --output=FILE\n\ Write the tags to FILE."); puts ("--parse-stdin=NAME\n\ @@ -1070,7 +1068,7 @@ break; case 'I': case 'S': /* for backward compatibility */ - noindentypedefs = TRUE; + ignoreindent = TRUE; break; case 'l': { @@ -2595,7 +2593,7 @@ } cstack; /* stack for nested declaration tags */ /* Current struct nesting depth (namespace, class, struct, union, enum). */ #define nestlev (cstack.nl) -/* After struct keyword or in struct body, not inside an nested function. */ +/* After struct keyword or in struct body, not inside a nested function. */ #define instruct (structdef == snone && nestlev > 0 \ && cblev == cstack.cblev[nestlev-1] + 1) @@ -2988,6 +2986,9 @@ #define curlinepos (lbs[curndx].linepos) #define newlinepos (lbs[newndx].linepos) +#define cplpl ((c_ext & C_PLPL) == C_PLPL) +#define cjava ((c_ext & C_JAVA) == C_JAVA) + #define CNL_SAVE_DEFINEDEF() \ do { \ curlinepos = charno; \ @@ -3052,7 +3053,6 @@ int parlev; /* current parenthesis level */ int typdefcblev; /* cblev where a typedef struct body begun */ bool incomm, inquote, inchar, quotednl, midtoken; - bool cplpl, cjava; bool yacc_rules; /* in the rules part of a yacc file */ struct tok savetoken; /* token saved during preprocessor handling */ @@ -3079,8 +3079,6 @@ token.valid = savetoken.valid = FALSE; cblev = 0; parlev = 0; - cplpl = (c_ext & C_PLPL) == C_PLPL; - cjava = (c_ext & C_JAVA) == C_JAVA; if (cjava) { qualifier = "."; qlen = 1; } else @@ -3395,7 +3393,10 @@ fvdef = finlist; continue; case flistseen: - make_C_tag (TRUE); /* a function */ +#if 0 + if (!instruct || members) +#endif + make_C_tag (TRUE); /* a function */ fvdef = fignore; break; case fvnameseen: @@ -3449,7 +3450,18 @@ break; } if (structdef == stagseen) - structdef = scolonseen; + { + structdef = scolonseen; + break; + } +#if 0 + if (cplpl && fvdef == flistseen) + { + make_C_tag (TRUE); /* a function */ + fvdef = fignore; + break; + } +#endif break; case ';': if (definedef != dnone) @@ -3468,7 +3480,7 @@ switch (fvdef) { case fignore: - if (typdef == tignore) + if (typdef == tignore || cplpl) fvdef = fvnone; break; case fvnameseen: @@ -3701,7 +3713,7 @@ case '}': if (definedef != dnone) break; - if (!noindentypedefs && lp == newlb.buffer + 1) + if (!ignoreindent && lp == newlb.buffer + 1) { cblev = 0; /* reset curly brace level if first column */ parlev = 0; /* also reset paren level, just in case... */ @@ -4986,44 +4998,45 @@ FILE * inf; { bool getnext = FALSE; /* next text outside of HTML tags is a tag */ - bool ignoretag = FALSE; /* skip to the end of the current HTML tag */ - bool inanchor = FALSE; /* inside an A HTML tag, looking for NAME= */ + bool skiptag = FALSE; /* skip to the end of the current HTML tag */ + bool intag = FALSE; /* inside an html tag, looking for ID= */ + bool inanchor = FALSE; /* when INTAG, is an anchor, look for NAME= */ char *end; linebuffer_setlen (&token_name, 0); /* no name in buffer */ LOOP_ON_INPUT_LINES (inf, lb, dbp) - { - for (;;) /* loop on the same line */ - - if (ignoretag) /* skip HTML tag */ + for (;;) /* loop on the same line */ + { + if (skiptag) /* skip HTML tag */ { while (*dbp != '\0' && *dbp != '>') dbp++; if (*dbp == '>') { dbp += 1; - ignoretag = FALSE; + skiptag = FALSE; continue; /* look on the same line */ } break; /* go to next line */ } - else if (inanchor) /* look for "name=" */ + else if (intag) /* look for "name=" or "id=" */ { - while (*dbp != '\0' && *dbp != '>' && lowcase (*dbp) != 'n') + while (*dbp != '\0' && *dbp != '>' + && lowcase (*dbp) != 'n' && lowcase (*dbp) != 'i') dbp++; if (*dbp == '\0') break; /* go to next line */ if (*dbp == '>') { dbp += 1; - inanchor = FALSE; + intag = FALSE; continue; /* look on the same line */ } - dbp += 1; - if (LOOKING_AT_NOCASE (dbp, "ame=")) + if ((inanchor && LOOKING_AT_NOCASE (dbp, "name=")) + || LOOKING_AT_NOCASE (dbp, "id=")) { bool quoted = (dbp[0] == '"'); @@ -5038,11 +5051,12 @@ token_name.buffer[end - dbp] = '\0'; dbp = end; - inanchor = FALSE; /* we found what we looked for */ - ignoretag = TRUE; /* skip to the end of the anchor */ + intag = FALSE; /* we found what we looked for */ + skiptag = TRUE; /* skip to the end of the tag */ getnext = TRUE; /* then grab the text */ continue; /* look on the same line */ } + dbp += 1; } else if (getnext) /* grab next tokens and tag them */ @@ -5052,10 +5066,8 @@ break; /* go to next line */ if (*dbp == '<') { - if (lowcase (dbp[1]) == 'a' && !intoken (dbp[2])) - inanchor = TRUE; - else - ignoretag = TRUE; + intag = TRUE; + inanchor = (lowcase (dbp[1]) == 'a' && !intoken (dbp[2])); continue; /* look on the same line */ } @@ -5074,19 +5086,24 @@ dbp++; if (*dbp == '\0') break; /* go to next line */ - dbp += 1; - if (lowcase (dbp[0]) == 'a' && !intoken (dbp[1])) - inanchor = TRUE; - else if (LOOKING_AT_NOCASE (dbp, "title>") - || LOOKING_AT_NOCASE (dbp, "h1>") - || LOOKING_AT_NOCASE (dbp, "h2>") - || LOOKING_AT_NOCASE (dbp, "h3>")) + intag = TRUE; + if (lowcase (dbp[1]) == 'a' && !intoken (dbp[2])) { + inanchor = TRUE; + continue; /* look on the same line */ + } + else if (LOOKING_AT_NOCASE (dbp, "<title>") + || LOOKING_AT_NOCASE (dbp, "<h1>") + || LOOKING_AT_NOCASE (dbp, "<h2>") + || LOOKING_AT_NOCASE (dbp, "<h3>")) + { + intag = FALSE; getnext = TRUE; continue; /* look on the same line */ } + dbp += 1; } - } + } }