switch to universal ctags

This commit is contained in:
Than Ngo 2021-03-11 16:53:40 +01:00
parent c915588202
commit 51a9d1b973
15 changed files with 1122 additions and 851 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ ctags-5.5.4.tar.gz
ctags-5.6.tar.gz
ctags-5.7.tar.gz
ctags-5.8.tar.gz
/ctags-p5.9.20210307.0.tar.gz

View File

@ -1,44 +0,0 @@
diff -up ctags-5.7/Makefile.in.destdir ctags-5.7/Makefile.in
--- ctags-5.7/Makefile.in.destdir 2006-10-12 05:26:40.000000000 +0200
+++ ctags-5.7/Makefile.in 2008-02-15 17:10:23.000000000 +0100
@@ -59,7 +59,7 @@ include $(srcdir)/source.mak
VPATH = $(srcdir)
-INSTALL = cp
+INSTALL = cp -p
INSTALL_PROG = $(INSTALL)
INSTALL_DATA = $(INSTALL)
@@ -138,7 +141,8 @@ install-ebin: $(DEST_ETAGS)
install-lib: $(DEST_READ_LIB) $(DEST_READ_INC)
$(DEST_CTAGS): $(CTAGS_EXEC) $(bindir) FORCE
- $(INSTALL_PROG) $(CTAGS_EXEC) $@ && chmod 755 $@
+ $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir)
+ $(INSTALL_PROG) $(CTAGS_EXEC) $(DESTDIR)$@ && chmod 755 $(DESTDIR)$@
$(DEST_ETAGS):
- if [ -x $(DEST_CTAGS) ]; then \
@@ -153,7 +157,8 @@ install-cman: $(DEST_CMAN)
install-eman: $(DEST_EMAN)
$(DEST_CMAN): $(man1dir) $(MANPAGE) FORCE
- - $(INSTALL_DATA) $(srcdir)/$(MANPAGE) $@ && chmod 644 $@
+ $(srcdir)/mkinstalldirs $(DESTDIR)$(man1dir)
+ - $(INSTALL_DATA) $(srcdir)/$(MANPAGE) $(DESTDIR)$@ && chmod 644 $(DESTDIR)$@
$(DEST_EMAN):
- if [ -f $(DEST_CMAN) ]; then \
@@ -164,9 +169,11 @@ $(DEST_EMAN):
# install the library
#
$(DEST_READ_LIB): $(READ_LIB) $(libdir) FORCE
+ $(srcdir)/mkinstalldirs $(DESTDIR)$(libdir)
$(INSTALL_PROG) $(READ_LIB) $@ && chmod 644 $@
$(DEST_READ_INC): $(READ_INC) $(incdir) FORCE
+ $(srcdir)/mkinstalldirs $(DESTDIR)$(incdir)
$(INSTALL_PROG) $(READ_INC) $@ && chmod 644 $@

View File

@ -1,41 +0,0 @@
diff -ruN -x '*~' ctags-5.7/vim.c ctags-5.7/vim.c
--- ctags-5.7/vim.c 2006-10-26 12:06:21.000000000 +0900
+++ ctags-5.7/vim.c 2009-08-28 22:21:31.000000000 +0900
@@ -328,7 +328,7 @@
*/
const unsigned char *cp = line;
- if ( (int) *cp == '\\' )
+ if ( cp && ( (int) *cp == '\\' ) )
{
/*
* We are recursively calling this function is the command
@@ -350,9 +350,10 @@
while (*cp && isspace ((int) *cp))
++cp;
}
- else if ( (!strncmp ((const char*) line, "comp", (size_t) 4) == 0) &&
- (!strncmp ((const char*) line, "comc", (size_t) 4) == 0) &&
- (strncmp ((const char*) line, "com", (size_t) 3) == 0) )
+ else if ( line &&
+ (!strncmp ((const char*) line, "comp", (size_t) 4) == 0) &&
+ (!strncmp ((const char*) line, "comc", (size_t) 4) == 0) &&
+ (strncmp ((const char*) line, "com", (size_t) 3) == 0) )
{
cp += 2;
if ((int) *++cp == 'm' && (int) *++cp == 'a' &&
@@ -394,6 +395,14 @@
while (*cp && !isspace ((int) *cp))
++cp;
}
+ else if (!isalnum ((int) *cp))
+ {
+ /*
+ * Broken syntax: throw away this line
+ */
+ cmdProcessed = TRUE;
+ goto cleanUp;
+ }
} while ( *cp && !isalnum ((int) *cp) );
if ( ! *cp )

View File

@ -1,260 +0,0 @@
diff -up ctags-5.8/css.c.me ctags-5.8/css.c
--- ctags-5.8/css.c.me 2012-02-08 13:59:35.000000000 +0100
+++ ctags-5.8/css.c 2012-02-08 13:55:16.000000000 +0100
@@ -0,0 +1,226 @@
+/***************************************************************************
+ * css.c
+ * Character-based parser for Css definitions
+ * Author - Iago Rubio <iagorubio(at)users.sourceforge.net>
+ **************************************************************************/
+#include "general.h"
+
+#include <string.h>
+#include <ctype.h>
+
+#include "parse.h"
+#include "read.h"
+
+
+typedef enum eCssKinds {
+ K_NONE = -1, K_CLASS, K_SELECTOR, K_ID
+} cssKind;
+
+static kindOption CssKinds [] = {
+ { TRUE, 'c', "class", "classes" },
+ { TRUE, 's', "selector", "selectors" },
+ { TRUE, 'i', "id", "identities" }
+};
+
+typedef enum _CssParserState { // state of parsing
+ P_STATE_NONE, // default state
+ P_STATE_IN_COMMENT, // into a comment, only multi line in CSS
+ P_STATE_IN_SINGLE_STRING, // into a single quoted string
+ P_STATE_IN_DOUBLE_STRING, // into a double quoted string
+ P_STATE_IN_DEFINITION, // on the body of the style definition, nothing for us
+ P_STATE_IN_MEDIA, // on a @media declaration, can be multi-line
+ P_STATE_IN_IMPORT, // on a @import declaration, can be multi-line
+ P_STATE_IN_NAMESPACE, // on a @namespace declaration
+ P_STATE_IN_PAGE, // on a @page declaration
+ P_STATE_IN_FONTFACE, // on a @font-face declaration
+ P_STATE_AT_END // end of parsing
+} CssParserState;
+
+static void makeCssSimpleTag( vString *name, cssKind kind, boolean delete )
+{
+ vStringTerminate (name);
+ makeSimpleTag (name, CssKinds, kind);
+ vStringClear (name);
+ if( delete )
+ vStringDelete (name);
+}
+
+static boolean isCssDeclarationAllowedChar( const unsigned char *cp )
+{
+ return isalnum ((int) *cp) ||
+ isspace ((int) *cp) ||
+ *cp == '_' || // allowed char
+ *cp == '-' || // allowed char
+ *cp == '+' || // allow all sibling in a single tag
+ *cp == '>' || // allow all child in a single tag
+ *cp == '{' || // allow the start of the declaration
+ *cp == '.' || // allow classes and selectors
+ *cp == ',' || // allow multiple declarations
+ *cp == ':' || // allow pseudo classes
+ *cp == '*' || // allow globs as P + *
+ *cp == '#'; // allow ids
+}
+
+static CssParserState parseCssDeclaration( const unsigned char **position, cssKind kind )
+{
+ vString *name = vStringNew ();
+ const unsigned char *cp = *position;
+
+ // pick to the end of line including children and sibling
+ // if declaration is multiline go for the next line
+ while ( isCssDeclarationAllowedChar(cp) ||
+ *cp == '\0' ) // track the end of line into the loop
+ {
+ if( (int) *cp == '\0' )
+ {
+ cp = fileReadLine ();
+ if( cp == NULL ){
+ makeCssSimpleTag(name, kind, TRUE);
+ *position = cp;
+ return P_STATE_AT_END;
+ }
+ }
+ else if( *cp == ',' )
+ {
+ makeCssSimpleTag(name, kind, TRUE);
+ *position = ++cp;
+ return P_STATE_NONE;
+ }
+ else if( *cp == '{' )
+ {
+ makeCssSimpleTag(name, kind, TRUE);
+ *position = ++cp;
+ return P_STATE_IN_DEFINITION;
+ }
+
+ vStringPut (name, (int) *cp);
+ ++cp;
+ }
+
+ makeCssSimpleTag(name, kind, TRUE);
+ *position = cp;
+
+ return P_STATE_NONE;
+}
+
+static CssParserState parseCssLine( const unsigned char *line, CssParserState state )
+{
+ vString *aux;
+
+ while( *line != '\0' ) // fileReadLine returns NULL terminated strings
+ {
+ while (isspace ((int) *line))
+ ++line;
+ switch( state )
+ {
+ case P_STATE_NONE:
+ // pick first char if alphanumeric is a selector
+ if( isalnum ((int) *line) )
+ state = parseCssDeclaration( &line, K_SELECTOR );
+ else if( *line == '.' ) // a class
+ state = parseCssDeclaration( &line, K_CLASS );
+ else if( *line == '#' ) // an id
+ state = parseCssDeclaration( &line, K_ID );
+ else if( *line == '@' ) // at-rules, we'll ignore them
+ {
+ ++line;
+ aux = vStringNew();
+ while( !isspace((int) *line) )
+ {
+ vStringPut (aux, (int) *line);
+ ++line;
+ }
+ vStringTerminate (aux);
+ if( strcmp( aux->buffer, "media" ) == 0 )
+ state = P_STATE_IN_MEDIA;
+ else if ( strcmp( aux->buffer, "import" ) == 0 )
+ state = P_STATE_IN_IMPORT;
+ else if ( strcmp( aux->buffer, "namespace" ) == 0 )
+ state = P_STATE_IN_NAMESPACE;
+ else if ( strcmp( aux->buffer, "page" ) == 0 )
+ state = P_STATE_IN_PAGE;
+ else if ( strcmp( aux->buffer, "font-face" ) == 0 )
+ state = P_STATE_IN_FONTFACE;
+ vStringDelete (aux);
+ }
+ else if( *line == '*' && *(line-1) == '/' ) // multi-line comment
+ state = P_STATE_IN_COMMENT;
+ break;
+ case P_STATE_IN_COMMENT:
+ if( *line == '/' && *(line-1) == '*')
+ state = P_STATE_NONE;
+ break;
+ case P_STATE_IN_SINGLE_STRING:
+ if( *line == '\'' && *(line-1) != '\\' )
+ state = P_STATE_IN_DEFINITION; // PAGE, FONTFACE and DEFINITION are treated the same way
+ break;
+ case P_STATE_IN_DOUBLE_STRING:
+ if( *line=='"' && *(line-1) != '\\' )
+ state = P_STATE_IN_DEFINITION; // PAGE, FONTFACE and DEFINITION are treated the same way
+ break;
+ case P_STATE_IN_MEDIA:
+ // skip to start of media body or line end
+ while( *line != '{' )
+ {
+ if( *line == '\0' )
+ break;
+ ++line;
+ }
+ if( *line == '{' )
+ state = P_STATE_NONE;
+ break;
+ case P_STATE_IN_IMPORT:
+ case P_STATE_IN_NAMESPACE:
+ // skip to end of declaration or line end
+ while( *line != ';' )
+ {
+ if( *line == '\0' )
+ break;
+ ++line;
+ }
+ if( *line == ';' )
+ state = P_STATE_NONE;
+ break;
+ case P_STATE_IN_PAGE:
+ case P_STATE_IN_FONTFACE:
+ case P_STATE_IN_DEFINITION:
+ if( *line == '}' )
+ state = P_STATE_NONE;
+ else if( *line == '\'' )
+ state = P_STATE_IN_SINGLE_STRING;
+ else if( *line == '"' )
+ state = P_STATE_IN_DOUBLE_STRING;
+ break;
+ case P_STATE_AT_END:
+ return state;
+ break;
+ }
+ line++;
+ }
+ return state;
+}
+
+static void findCssTags (void)
+{
+ const unsigned char *line;
+ CssParserState state = P_STATE_NONE;
+
+ while ( (line = fileReadLine ()) != NULL )
+ {
+ state = parseCssLine( line, state );
+ if( state==P_STATE_AT_END ) return;
+ }
+}
+
+/* parser definition */
+extern parserDefinition* CssParser (void)
+{
+ static const char *const extensions [] = { "css", NULL };
+ parserDefinition* def = parserNew ("CSS");
+ def->kinds = CssKinds;
+ def->kindCount = KIND_COUNT (CssKinds);
+ def->extensions = extensions;
+ def->parser = findCssTags;
+ return def;
+}
+
diff -up ctags-5.8/parsers.h.me ctags-5.8/parsers.h
--- ctags-5.8/parsers.h.me 2012-02-08 13:56:46.000000000 +0100
+++ ctags-5.8/parsers.h 2012-02-08 13:57:25.000000000 +0100
@@ -26,6 +26,7 @@
CppParser, \
CsharpParser, \
CobolParser, \
+ CssParser, \
DosBatchParser, \
EiffelParser, \
ErlangParser, \
diff -up ctags-5.8/source.mak.me ctags-5.8/source.mak
--- ctags-5.8/source.mak.me 2012-02-08 13:58:02.000000000 +0100
+++ ctags-5.8/source.mak 2012-02-08 13:58:42.000000000 +0100
@@ -17,6 +17,7 @@ SOURCES = \
beta.c \
c.c \
cobol.c \
+ css.c \
dosbatch.c \
eiffel.c \
entry.c \
@@ -79,6 +80,7 @@ OBJECTS = \
beta.$(OBJEXT) \
c.$(OBJEXT) \
cobol.$(OBJEXT) \
+ css.$(OBJEXT) \
dosbatch.$(OBJEXT) \
eiffel.$(OBJEXT) \
entry.$(OBJEXT) \

View File

@ -1,16 +0,0 @@
diff -up ctags-5.8/css.c.me ctags-5.8/css.c
--- ctags-5.8/css.c.me 2012-10-18 22:03:20.126163700 +0200
+++ ctags-5.8/css.c 2012-10-18 22:04:03.237107358 +0200
@@ -73,10 +73,11 @@ static CssParserState parseCssDeclaratio
{
if( (int) *cp == '\0' )
{
+ /* assign position to the end of line. */
+ *position = cp;
cp = fileReadLine ();
if( cp == NULL ){
makeCssSimpleTag(name, kind, TRUE);
- *position = cp;
return P_STATE_AT_END;
}
}

View File

@ -1,12 +0,0 @@
diff -Naur ctags-5.8.orig/lregex.c ctags-5.8/lregex.c
--- ctags-5.8.orig/lregex.c 2007-09-10 04:36:48.000000000 +0200
+++ ctags-5.8/lregex.c 2014-04-14 21:09:17.716000000 +0200
@@ -408,7 +408,7 @@
const char* regexfile = parameter + 1;
FILE* const fp = fopen (regexfile, "r");
if (fp == NULL)
- error (WARNING | PERROR, regexfile);
+ error (WARNING | PERROR, "%s", regexfile);
else
{
vString* const regex = vStringNew ();

View File

@ -1,19 +0,0 @@
diff -r -u ctags-5.8.orig/routines.c ctags-5.8/routines.c
--- ctags-5.8.orig/routines.c 2013-06-13 10:42:08.048576327 -0400
+++ ctags-5.8/routines.c 2013-06-13 10:48:25.150366836 -0400
@@ -757,13 +757,13 @@
else if (cp [0] != PATH_SEPARATOR)
cp = slashp;
#endif
- strcpy (cp, slashp + 3);
+ memmove (cp, slashp + 3, strlen(slashp + 3) + 1);
slashp = cp;
continue;
}
else if (slashp [2] == PATH_SEPARATOR || slashp [2] == '\0')
{
- strcpy (slashp, slashp + 2);
+ memmove (slashp, slashp + 2, strlen(slashp + 2) + 1);
continue;
}
}

View File

@ -1,251 +0,0 @@
diff -up ctags-5.8/ocaml.c.me ctags-5.8/ocaml.c
--- ctags-5.8/ocaml.c.me 2012-08-02 12:42:21.652211192 +0200
+++ ctags-5.8/ocaml.c 2012-08-02 13:06:59.751283639 +0200
@@ -72,6 +72,7 @@ typedef enum {
OcaKEYWORD_if,
OcaKEYWORD_in,
OcaKEYWORD_let,
+ OcaKEYWORD_value,
OcaKEYWORD_match,
OcaKEYWORD_method,
OcaKEYWORD_module,
@@ -145,7 +146,7 @@ static const ocaKeywordDesc OcamlKeyword
{ "try" , OcaKEYWORD_try },
{ "type" , OcaKEYWORD_type },
{ "val" , OcaKEYWORD_val },
- { "value" , OcaKEYWORD_let }, /* just to handle revised syntax */
+ { "value" , OcaKEYWORD_value }, /* just to handle revised syntax */
{ "virtual" , OcaKEYWORD_virtual },
{ "while" , OcaKEYWORD_while },
{ "with" , OcaKEYWORD_with },
@@ -297,7 +298,6 @@ static void eatComment (lexingState * st
if (st->cp == NULL)
return;
c = st->cp;
- continue;
}
/* we've reached the end of the comment */
else if (*c == ')' && lastIsStar)
@@ -308,13 +308,33 @@ static void eatComment (lexingState * st
{
st->cp = c;
eatComment (st);
+
c = st->cp;
+ if (c == NULL)
+ return;
+
lastIsStar = FALSE;
+ c++;
}
+ /* OCaml has a rule which says :
+ *
+ * "Comments do not occur inside string or character literals.
+ * Nested comments are handled correctly."
+ *
+ * So if we encounter a string beginning, we must parse it to
+ * get a good comment nesting (bug ID: 3117537)
+ */
+ else if (*c == '"')
+ {
+ st->cp = c;
+ eatString (st);
+ c = st->cp;
+ }
else
+ {
lastIsStar = '*' == *c;
-
- c++;
+ c++;
+ }
}
st->cp = c;
@@ -554,8 +574,7 @@ static int getLastNamedIndex ( void )
for (i = stackIndex - 1; i >= 0; --i)
{
- if (stack[i].contextName->buffer &&
- strlen (stack[i].contextName->buffer) > 0)
+ if (vStringLength (stack[i].contextName) > 0)
{
return i;
}
@@ -866,6 +885,11 @@ static void prepareTag (tagEntryInfo * t
tag->kindName = OcamlKinds[kind].name;
tag->kind = OcamlKinds[kind].letter;
+ if (kind == K_MODULE)
+ {
+ tag->lineNumberEntry = TRUE;
+ tag->lineNumber = 1;
+ }
parentIndex = getLastNamedIndex ();
if (parentIndex >= 0)
{
@@ -880,9 +904,12 @@ static void prepareTag (tagEntryInfo * t
* more information to it in the future */
static void addTag (vString * const ident, int kind)
{
- tagEntryInfo toCreate;
- prepareTag (&toCreate, ident, kind);
- makeTagEntry (&toCreate);
+ if (OcamlKinds [kind].enabled && ident != NULL && vStringLength (ident) > 0)
+ {
+ tagEntryInfo toCreate;
+ prepareTag (&toCreate, ident, kind);
+ makeTagEntry (&toCreate);
+ }
}
boolean needStrongPoping = FALSE;
@@ -942,15 +969,17 @@ static void typeRecord (vString * const
}
/* handle :
- * exception ExceptionName ... */
+ * exception ExceptionName of ... */
static void exceptionDecl (vString * const ident, ocaToken what)
{
if (what == OcaIDENTIFIER)
{
addTag (ident, K_EXCEPTION);
}
- /* don't know what to do on else... */
-
+ else /* probably ill-formed, give back to global scope */
+ {
+ globalScope (ident, what);
+ }
toDoNext = &globalScope;
}
@@ -1006,7 +1035,6 @@ static void constructorValidation (vStri
*/
static void typeDecl (vString * const ident, ocaToken what)
{
-
switch (what)
{
/* parameterized */
@@ -1046,7 +1074,6 @@ static void typeDecl (vString * const id
* let typeRecord handle it. */
static void typeSpecification (vString * const ident, ocaToken what)
{
-
switch (what)
{
case OcaIDENTIFIER:
@@ -1243,8 +1270,14 @@ static void localLet (vString * const id
* than the let definitions.
* Used after a match ... with, or a function ... or fun ...
* because their syntax is similar. */
-static void matchPattern (vString * const UNUSED (ident), ocaToken what)
+static void matchPattern (vString * const ident, ocaToken what)
{
+ /* keep track of [], as it
+ * can be used in patterns and can
+ * mean the end of match expression in
+ * revised syntax */
+ static int braceCount = 0;
+
switch (what)
{
case Tok_To:
@@ -1252,6 +1285,14 @@ static void matchPattern (vString * cons
toDoNext = &mayRedeclare;
break;
+ case Tok_BRL:
+ braceCount++;
+ break;
+
+ case OcaKEYWORD_value:
+ popLastNamed ();
+ globalScope (ident, what);
+ break;
case OcaKEYWORD_in:
popLastNamed ();
@@ -1269,6 +1310,11 @@ static void mayRedeclare (vString * cons
{
switch (what)
{
+ case OcaKEYWORD_value:
+ /* let globalScope handle it */
+ globalScope (ident, what);
+ break;
+
case OcaKEYWORD_let:
case OcaKEYWORD_val:
toDoNext = localLet;
@@ -1388,6 +1434,7 @@ static void classSpecif (vString * const
* nearly a copy/paste of globalLet. */
static void methodDecl (vString * const ident, ocaToken what)
{
+
switch (what)
{
case Tok_PARL:
@@ -1435,6 +1482,7 @@ vString *lastModule;
*/
static void moduleSpecif (vString * const ident, ocaToken what)
{
+
switch (what)
{
case OcaKEYWORD_functor:
@@ -1566,7 +1614,7 @@ static void globalScope (vString * const
{
/* Do not touch, this is used only by the global scope
* to handle an 'and' */
- static parseNext previousParser = NULL;
+ static parseNext previousParser = &globalScope;
switch (what)
{
@@ -1608,6 +1656,7 @@ static void globalScope (vString * const
/* val is mixed with let as global
* to be able to handle mli & new syntax */
case OcaKEYWORD_val:
+ case OcaKEYWORD_value:
case OcaKEYWORD_let:
cleanupPreviousParser ();
toDoNext = &globalLet;
@@ -1617,7 +1666,7 @@ static void globalScope (vString * const
case OcaKEYWORD_exception:
cleanupPreviousParser ();
toDoNext = &exceptionDecl;
- previousParser = NULL;
+ previousParser = &globalScope;
break;
/* must be a #line directive, discard the
@@ -1769,7 +1818,7 @@ static void computeModuleName ( void )
if (isLowerAlpha (moduleName->buffer[0]))
moduleName->buffer[0] += ('A' - 'a');
- makeSimpleTag (moduleName, OcamlKinds, K_MODULE);
+ addTag (moduleName, K_MODULE);
vStringDelete (moduleName);
}
@@ -1779,6 +1828,7 @@ static void initStack ( void )
int i;
for (i = 0; i < OCAML_MAX_STACK_SIZE; ++i)
stack[i].contextName = vStringNew ();
+ stackIndex = 0;
}
static void clearStack ( void )
@@ -1794,8 +1844,8 @@ static void findOcamlTags (void)
lexingState st;
ocaToken tok;
- computeModuleName ();
initStack ();
+ computeModuleName ();
tempIdent = vStringNew ();
lastModule = vStringNew ();
lastClass = vStringNew ();

View File

@ -1,89 +0,0 @@
--- ctags/jscript.c.orig 2008-10-13 00:27:38.000000000 +0200
+++ ctags/jscript.c 2014-09-30 13:49:34.837349283 +0200
@@ -1,5 +1,5 @@
/*
- * $Id: jscript.c 666 2008-05-15 17:47:31Z dfishburn $
+ * $Id: jscript.c 791 2012-10-24 01:13:13Z dfishburn $
*
* Copyright (c) 2003, Darren Hiebert
*
@@ -215,6 +215,7 @@
* Tag generation functions
*/
+/*
static void makeConstTag (tokenInfo *const token, const jsKind kind)
{
if (JsKinds [kind].enabled && ! token->ignoreTag )
@@ -238,12 +239,13 @@
if (JsKinds [kind].enabled && ! token->ignoreTag )
{
- /*
+ *
* If a scope has been added to the token, change the token
* string to include the scope when making the tag.
- */
+ *
if ( vStringLength(token->scope) > 0 )
{
+ *
fulltag = vStringNew ();
vStringCopy(fulltag, token->scope);
vStringCatS (fulltag, ".");
@@ -251,8 +253,54 @@
vStringTerminate(fulltag);
vStringCopy(token->string, fulltag);
vStringDelete (fulltag);
+ *
+ jsKind parent_kind = JSTAG_CLASS;
+
+ *
+ * if we're creating a function (and not a method),
+ * guess we're inside another function
+ *
+ if (kind == JSTAG_FUNCTION)
+ parent_kind = JSTAG_FUNCTION;
+
+ e.extensionFields.scope[0] = JsKinds [parent_kind].name;
+ e.extensionFields.scope[1] = vStringValue (token->scope);
}
- makeConstTag (token, kind);
+ * makeConstTag (token, kind); *
+ makeTagEntry (&e);
+ }
+}
+*/
+
+static void makeJsTag (tokenInfo *const token, const jsKind kind)
+{
+ if (JsKinds [kind].enabled && ! token->ignoreTag )
+ {
+ const char *const name = vStringValue (token->string);
+ tagEntryInfo e;
+ initTagEntry (&e, name);
+
+ e.lineNumber = token->lineNumber;
+ e.filePosition = token->filePosition;
+ e.kindName = JsKinds [kind].name;
+ e.kind = JsKinds [kind].letter;
+
+ if ( vStringLength(token->scope) > 0 )
+ {
+ jsKind parent_kind = JSTAG_CLASS;
+
+ /*
+ * If we're creating a function (and not a method),
+ * guess we're inside another function
+ */
+ if (kind == JSTAG_FUNCTION)
+ parent_kind = JSTAG_FUNCTION;
+
+ e.extensionFields.scope[0] = JsKinds [parent_kind].name;
+ e.extensionFields.scope[1] = vStringValue (token->scope);
+ }
+
+ makeTagEntry (&e);
}
}

View File

@ -0,0 +1,108 @@
diff -up ctags-p5.9.20210307.0/configure.ac.orig ctags-p5.9.20210307.0/configure.ac
--- ctags-p5.9.20210307.0/configure.ac.orig 2021-03-11 15:28:04.114839683 +0100
+++ ctags-p5.9.20210307.0/configure.ac 2021-03-11 15:28:22.233584068 +0100
@@ -243,25 +243,6 @@ AC_PROG_CC_C99
AC_PROG_RANLIB
AC_C_BIGENDIAN
-# https://www.gnu.org/software/autoconf-archive/ax_prog_cc_for_build.html
-AX_PROG_CC_FOR_BUILD
-
-# We need to compile and run a program on the build machine.
-AC_MSG_CHECKING(for cc for build)
-if test "$cross_compiling" = "yes"; then
- CC_FOR_BUILD="${CC_FOR_BUILD-cc}"
-else
- CC_FOR_BUILD="${CC_FOR_BUILD-$CC}"
- CFLAGS_FOR_BUILD="${CFLAGS_FOR_BUILD-$CFLAGS}"
- CPPFLAGS_FOR_BUILD="${CPPFLAGS_FOR_BUILD-$CPPFLAGS}"
- LDFLAGS_FOR_BUILD="${LDFLAGS_FOR_BUILD-$LDFLAGS}"
-fi
-AC_MSG_RESULT($CC_FOR_BUILD)
-AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler])
-AC_ARG_VAR(CFLAGS_FOR_BUILD,[CFLAGS for build system C compiler])
-AC_ARG_VAR(CPPFLAGS_FOR_BUILD,[CPPFLAGS for build system C compiler])
-AC_ARG_VAR(LDFLAGS_FOR_BUILD,[LDFLAGS for build system C compiler])
-
AC_ARG_VAR(AR,[ar command or path])
AC_ARG_VAR(RANLIB,[ranlib command or path])
AC_ARG_VAR(WINDRES,[windres command or path, used with mingw-w64])
diff -up ctags-p5.9.20210307.0/Makefile.am.orig ctags-p5.9.20210307.0/Makefile.am
--- ctags-p5.9.20210307.0/Makefile.am.orig 2021-03-11 15:30:20.393270480 +0100
+++ ctags-p5.9.20210307.0/Makefile.am 2021-03-11 15:30:41.824895156 +0100
@@ -11,7 +11,7 @@ EXTRA_DIST = README.md autogen.sh \
misc/ctags-optlib-mode.el \
misc/mk-interactive-request.sh misc/roundtrip misc/tinst \
misc/packcc/.gitignore misc/packcc/LICENSE.txt \
- misc/packcc/README.md misc/packcc/packcc.c \
+ misc/packcc/README.md \
misc/validators/validator-jq \
misc/validators/validator-KNOWN-INVALIDATION \
misc/validators/validator-NONE \
@@ -29,29 +29,21 @@ EXTRA_DIST = README.md autogen.sh \
CLEANFILES =
MOSTLYCLEANFILES =
-clean-local:
- rm -f packcc$(BUILD_EXEEXT)
- @if test "$(top_srcdir)" != "$(top_builddir)"; then \
- rm -rf $(OPTLIB2C_SRCS); \
- fi
-
bin_PROGRAMS = ctags
noinst_LIBRARIES = libctags.a
-noinst_PROGRAMS =
+noinst_PROGRAMS = packcc
noinst_PROGRAMS += mini-geany
if HAVE_STRNLEN_FOR_BUILD
EXTRA_CPPFLAGS_FOR_BUILD = -DUSE_SYSTEM_STRNLEN
endif
-PACKCC = $(top_builddir)/packcc$(BUILD_EXEEXT)
-
cc4b_verbose = $(cc4b_verbose_@AM_V@)
cc4b_verbose_ = $(cc4b_verbose_@AM_DEFAULT_V@)
cc4b_verbose_0 = @echo CC4BUILD " $@";
-$(PACKCC): $(top_srcdir)/misc/packcc/packcc.c
- $(cc4b_verbose)$(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) $(CPPFLAGS_FOR_BUILD) $(EXTRA_CPPFLAGS_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -o $@ $(top_srcdir)/misc/packcc/packcc.c
+
+packcc_SOURCES = misc/packcc/packcc.c
if USE_READCMD
bin_PROGRAMS+= readtags
@@ -144,16 +136,13 @@ SUFFIXES += .ctags
$(OPTLIB2C_SRCS): $(OPTLIB2C) Makefile
endif
-packcc_verbose = $(packcc_verbose_@AM_V@)
-packcc_verbose_ = $(packcc_verbose_@AM_DEFAULT_V@)
-packcc_verbose_0 = @echo PACKCC " $@";
SUFFIXES += .peg
-.peg.c:
- $(packcc_verbose)$(PACKCC) -i \"general.h\" -o $(top_builddir)/peg/$(*F) "$<"
-.peg.h:
- $(packcc_verbose)$(PACKCC) -i \"general.h\" -o $(top_builddir)/peg/$(*F) "$<"
-# You cannot use $(PACKCC) as a target name here.
-$(PEG_SRCS) $(PEG_HEADS): $(PACKCC) Makefile
+.peg.c: packcc$(EXEEXT)
+ $(top_builddir)/packcc$(EXEEXT) -i \"general.h\" -o $(top_builddir)/peg/$(*F) "$<"
+.peg.h: packcc$(EXEEXT)
+ $(top_builddir)/packcc$(EXEEXT) -i \"general.h\" -o $(top_builddir)/peg/$(*F) "$<"
+
+$(PEG_SRCS) $(PEG_HEADS): packcc$(EXEEXT)
dist_libctags_a_SOURCES = $(ALL_LIB_HEADS) $(ALL_LIB_SRCS)
ctags_CPPFLAGS = $(libctags_a_CPPFLAGS)
diff -up ctags-p5.9.20210307.0/configure.ac.orig ctags-p5.9.20210307.0/configure.ac
--- ctags-p5.9.20210307.0/configure.ac.orig 2021-03-11 15:32:28.016218560 +0100
+++ ctags-p5.9.20210307.0/configure.ac 2021-03-11 15:32:35.686908229 +0100
@@ -239,7 +239,6 @@ AM_CONDITIONAL(ENABLE_DEBUGGING, [test "
# -------------------
AC_PROG_CC
-AC_PROG_CC_C99
AC_PROG_RANLIB
AC_C_BIGENDIAN

View File

@ -1,20 +1,27 @@
%define upstreamversion 20210307.0
Summary: A C programming language indexing and/or cross-reference tool
Name: ctags
Version: 5.8
Release: 31%{?dist}
License: GPLv2+ and LGPLv2+ and Public Domain
URL: http://ctags.sourceforge.net/
Source0: http://downloads.sourceforge.net/%{name}/%{name}-%{version}.tar.gz
Patch0: ctags-5.7-destdir.patch
Patch1: ctags-5.7-segment-fault.patch
Patch2: ctags-5.8-css.patch
Patch3: ctags-5.8-ocaml-crash.patch
Patch4: ctags-5.8-cssparse.patch
Patch5: ctags-5.8-memmove.patch
Patch6: ctags-5.8-format-security.patch
Patch7: ctags-CVE-2014-7204.patch
Version: 5.9
Release: 0.1.%{upstreamversion}%{?dist}
License: GPLv2+
URL: https://ctags.io/
Source0: https://github.com/universal-ctags/ctags/archive/%{name}-p%{version}.%{upstreamversion}.tar.gz
Patch0: ctags-p5.9.20210307.0-build.patch
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: gcc
BuildRequires: jansson-devel
BuildRequires: libseccomp-devel
BuildRequires: libxml2-devel
BuildRequires: libyaml-devel
BuildRequires: make
BuildRequires: pkgconfig
BuildRequires: python3-docutils
Obsoletes: %{name}-etags <= 5.8
%description
Ctags generates an index (or tag) file of C language objects found in
@ -33,65 +40,34 @@ objects found in source files.
Install ctags if you are going to use your system for C programming.
%package etags
Summary: Exuberant Ctags for emacs tag format
Requires: ctags = %{version}-%{release}
Requires: /usr/sbin/alternatives
%description etags
This package will generate tags in a format which GNU Emacs understand,
it's a alternativ implementation of the GNU etags program.
Note: some command line options is not compatible with GNU etags.
%prep
%setup -q
%patch0 -p1 -b .destdir
%patch1 -p1 -b .crash
%patch2 -p1 -b .css-support
%patch3 -p1 -b .ocaml-crash
%patch4 -p1 -b .cssparse-crash
%patch5 -p1 -b .memmove
%patch6 -p1 -b .fmt-sec
%patch7 -p1 -b .CVE-2014-7204
%autosetup -p1 -n %{name}-p%{version}.%{upstreamversion}
%build
./autogen.sh
%configure
%make_build
%install
rm -rf %{buildroot}
%make_install
pushd %{buildroot}%{_bindir}
ln -s ctags etags.ctags
popd
pushd %{buildroot}%{_mandir}/man1
ln -s ctags.1.gz etags.ctags.1.gz
popd
%posttrans etags
/usr/sbin/alternatives --install /usr/bin/etags emacs.etags /usr/bin/etags.ctags 20 \
--slave /usr/share/man/man1/etags.1.gz emacs.etags.man /usr/share/man/man1/ctags.1.gz
%postun etags
/usr/sbin/alternatives --remove etags /usr/bin/etags.ctags || :
%check
#make check
%files
%license COPYING
%doc EXTENDING.html FAQ NEWS README
%doc README.md
%{_bindir}/%{name}
%{_mandir}/man1/%{name}.1*
%files etags
%license COPYING
%{_bindir}/etags.%{name}
%{_mandir}/man1/etags.%{name}.1*
%{_bindir}/readtags
%{_mandir}/man1/*
%{_mandir}/man5/*
%{_mandir}/man7/*
%changelog
* Thu Mar 11 2021 Than Ngo <than@redhat.com> - 5.9-0.1.20210307.0
- switch to universal ctags
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.8-31
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

View File

@ -1 +1 @@
c00f82ecdcc357434731913e5b48630d ctags-5.8.tar.gz
SHA512 (ctags-p5.9.20210307.0.tar.gz) = a616e911ea812efd6497b382bb7eaeef5cac09809d23e5ce814758fb5664e13fd07ec36604e73b65eeb12aae9afcb226da287b6abfd33a81e26b6d1b071b9aa7

File diff suppressed because it is too large Load Diff

View File

@ -1,42 +1,132 @@
Abaqus
Abc
Ada
AnsiblePlaybook
Ant
Asciidoc
Asm
Asp
Autoconf
AutoIt
Automake
Awk
Basic
BETA
BibTeX
C
C++
C#
C++
Clojure
CMake
Cobol
CobolFree
CobolVariable
CPreProcessor
CSS
Ctags
CUDA
D
DBusIntrospect
Diff
DosBatch
DTD
DTS
Eiffel
Elixir
Elm
EmacsLisp
Erlang
Falcon
Flex
Fortran
FunctionParameters
Fypp
Gdbinit
Glade
Go
Haskell
Haxe
HTML
Iniconf
Inko
ITcl
Java
JavaProperties
JavaScript
JSON
Julia
Kconfig
Kotlin
LdScript
Lisp
LiterateHaskell
Lua
M4
Make
Man
Markdown
MatLab
Maven2
Meson
Moose
Myrddin
NSIS
ObjectiveC
OCaml
OldC [disabled]
OldC++ [disabled]
Pascal
Passwd
Perl
Perl6
PHP
PlistXML
Pod
PowerShell
Protobuf
PuppetManifest
Python
PythonLoggingConfig
QemuHX
QtMoc
R
R6Class
RelaxNG
ReStructuredText
REXX
Robot
RpmSpec
RSpec
Ruby
Rust
S4Class
Scheme
SCSS
Sh
SLang
SML
SQL
SVG
SystemdUnit
SystemTap
SystemVerilog
Tcl
TclOO
Tex
TeXBeamer
TTCN
Txt2tags
TypeScript
Unknown [disabled]
Varlink
Vera
Verilog
VHDL
Vim
WindRes
XML
XSLT
YACC
Yaml
YumRepo
Zephir

View File

@ -1,42 +1,132 @@
Ant *.build.xml
Asm *.asm *.ASM *.s *.S *.A51 *.29[kK] *.[68][68][kKsSxX] *.[xX][68][68]
Unknown
Abaqus *.inp
Abc *.abc *.abc
Ada *.adb *.ads *.Ada *.ada
Ant build.xml *.build.xml *.ant *.xml
Asciidoc *.asc *.adoc *.asciidoc *.asc *.adoc *.asciidoc
Asm *.A51 *.29[kK] *.[68][68][kKsSxX] *.[xX][68][68] *.asm *.ASM *.s *.S
Asp *.asp *.asa
Autoconf configure.in *.ac
AutoIt *.au3 *.AU3 *.aU3 *.Au3
Automake Makefile.am *.am
Awk *.awk *.gawk *.mawk
Basic *.bas *.bi *.bb *.pb
BETA *.bet
BibTeX *.bib
Clojure *.clj *.cljs *.cljc
CMake CMakeLists.txt *.cmake
C *.c
C++ *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.C *.H
C# *.cs
Cobol *.cbl *.cob *.CBL *.COB
C++ *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.inl *.C *.H *.CPP *.CXX
CPreProcessor
CSS *.css
C# *.cs
Ctags *.ctags
Cobol *.cbl *.cob *.CBL *.COB
CobolFree
CobolVariable
CUDA *.cu *.cuh
D *.d *.di
Diff *.diff *.patch
DTD *.dtd *.mod
DTS *.dts *.dtsi
DosBatch *.bat *.cmd
Eiffel *.e
Elixir *.ex *.exs
Elm *.elm
EmacsLisp *.el
Erlang *.erl *.ERL *.hrl *.HRL
Falcon *.fal *.ftd
Flex *.as *.mxml
Fortran *.f *.for *.ftn *.f77 *.f90 *.f95 *.F *.FOR *.FTN *.F77 *.F90 *.F95
Fortran *.f *.for *.ftn *.f77 *.f90 *.f95 *.f03 *.f08 *.f15 *.F *.FOR *.FTN *.F77 *.F90 *.F95 *.F03 *.F08 *.F15
FunctionParameters
Fypp *.fy
Gdbinit .gdbinit *.gdb
Go *.go
Haskell *.hs
Haxe *.hx
HTML *.htm *.html
Iniconf *.ini *.conf
Inko *.inko
ITcl *.itcl
Java *.java
JavaScript *.js
Lisp *.cl *.clisp *.el *.l *.lisp *.lsp
JavaProperties *.properties
JavaScript *.js *.jsx *.mjs
JSON *.json
Julia *.jl
Kconfig Kconfig*
LdScript *.lds.S ld.script *.lds *.scr *.ld *.ldi
Lisp *.cl *.clisp *.l *.lisp *.lsp
LiterateHaskell *.lhs
Lua *.lua
Make *.mak *.mk [Mm]akefile GNUmakefile
M4 *.m4 *.spt
Man *.1 *.2 *.3 *.4 *.5 *.6 *.7 *.8 *.9 *.3pm *.3stap *.7stap
Make [Mm]akefile GNUmakefile *.mak *.mk
Markdown *.md *.markdown
MatLab *.m
OCaml *.ml *.mli
Meson meson.build
Moose
Myrddin *.myr
NSIS *.nsi *.nsh
ObjectiveC *.mm *.m *.h
OldC++ *.c++ *.cc *.cp *.cpp *.cxx *.h *.h++ *.hh *.hp *.hpp *.hxx *.inl *.C *.H
OldC *.c
OCaml *.ml *.mli *.aug
Passwd passwd
Pascal *.p *.pas
Perl *.pl *.pm *.plx *.perl
PHP *.php *.php3 *.phtml
Python *.py *.pyx *.pxd *.pxi *.scons
Perl *.pl *.pm *.ph *.plx *.perl
Perl6 *.p6 *.pm6 *.pm *.pl6
PHP *.php *.php3 *.php4 *.php5 *.php7 *.phtml
Pod *.pod
PowerShell *.ps1 *.psm1
Protobuf *.proto
PuppetManifest *.pp
Python *.py *.pyx *.pxd *.pxi *.scons *.wsgi
PythonLoggingConfig
QemuHX *.hx
QtMoc
R *.r *.R *.s *.q
R6Class
RSpec
REXX *.cmd *.rexx *.rx
Robot *.robot
RpmSpec *.spec
ReStructuredText *.rest *.reST *.rst
Ruby *.rb *.ruby
Scheme *.SCM *.SM *.sch *.scheme *.scm *.sm
Sh *.sh *.SH *.bsh *.bash *.ksh *.zsh
Rust *.rs
S4Class
Scheme *.SCM *.SM *.sch *.scheme *.scm *.sm *.rkt
SCSS *.scss
Sh *.sh *.SH *.bsh *.bash *.ksh *.zsh *.ash
SLang *.sl
SML *.sml *.sig
SQL *.sql
Tcl *.tcl *.tk *.wish *.itcl
SystemdUnit *.service *.socket *.device *.mount *.automount *.swap *.target *.path *.timer *.snapshot *.slice
SystemTap *.stp *.stpm
Tcl *.tcl *.tk *.wish *.exp
TclOO
Tex *.tex
TeXBeamer
TTCN *.ttcn *.ttcn3
Txt2tags *.t2t *.t2t
TypeScript *.ts
Vera *.vr *.vri *.vrh
Verilog *.v
SystemVerilog *.sv *.svh *.svi
VHDL *.vhdl *.vhd
Vim *.vim
Vim vimrc [._]vimrc gvimrc [._]gvimrc *.vim *.vba
WindRes *.rc
YACC *.y
YumRepo *.repo
Zephir *.zep
DBusIntrospect *.xml
Glade *.glade
Maven2 pom.xml *.pom *.xml
PlistXML *.plist
RelaxNG *.rng
SVG *.svg
XML *.xml
XSLT *.xsl *.xslt
Yaml *.yml
AnsiblePlaybook
Varlink *.varlink
Kotlin *.kt *.kts