SHA256
1
0
forked from pool/ctags
OBS User unknown 2006-12-28 23:06:40 +00:00 committed by Git OBS Bridge
commit a74f0a01c3
13 changed files with 1204 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

16
README.SuSE Normal file
View File

@ -0,0 +1,16 @@
Ctags and etags
===============
Unfortunately there exists several good ctags and etags implementations.
They have different supported languages and different options and
features. The several versions are:
ctags ctags from Darren Hiebert, supports e.g. Eiffel
ctags -e etags from Darren Hiebert, supports e.g. Eiffel
gnuctags ctags from Emacs sources, supports e.g. Lisp
etags etags from Emacs sources, supports e.g. Lisp
The version of Darren Hiebert is also called the Exuberant Ctags.
Your SuSE team

61
ctags-5.6.diff Normal file
View File

@ -0,0 +1,61 @@
--- ctags.1
+++ ctags.1 2001/12/14 14:41:12
@@ -9,12 +9,29 @@
.TP 6
\fBctags\fP [\fBoptions\fP] [\fIfile(s)\fP]
.TP 6
-\fBetags\fP [\fBoptions\fP] [\fIfile(s)\fP]
+\fBctags\fP \fB-e\fP [\fBoptions\fP] [\fIfile(s)\fP]
+.SH NOTE
+There are three different versions of the
+\fBctags\fP program on SuSE Linux.
+Besides this one you might want to use either
+.BR gnuctags (1),
+supporting wide variety of programming languages
+and originaly distributed with emacs, or
+.BR gctags (1),
+which comes with
+.BR global (1)
+and supports for example Yacc.
+
+For use with
+.BR emacs (1)
+the best choice is perhaps
+.BR etags (1),
+but it's also possible to use \fBctags\ \-e\fP,
+as described herein, since it supports for example Eiffel.
.SH "DESCRIPTION"
-The \fBctags\fP and \fBetags\fP programs (hereinafter collectively referred to
-as \fBctags\fP, except where distinguished) generate an index (or "tag") file
+The \fBctags\fP program generates an index (or "tag") file
for a variety of language objects found in \fIfile(s)\fP.
This tag file allows these items to be quickly and easily located by a text
editor or other utility. A "tag" signifies a language object for which an
@@ -1484,7 +1501,7 @@
.TP 8
.B ETAGS
Similar to the \fBCTAGS\fP variable above, this variable, if found, will be
-read when \fBetags\fP starts. If this variable is not found, \fBetags\fP will
+read when \fBctags\ \-e\fP starts. If this variable is not found, \fBctags\ \-e\fP will
try to use \fBCTAGS\fP instead.
.TP 8
@@ -1535,9 +1552,15 @@
The default tag file created by \fBctags\fP.
.TP
.I TAGS
-The default tag file created by \fBetags\fP.
+The default tag file created by \fBctags -e\fP.
.SH "SEE ALSO"
+.BR etags (1),
+.BR gctags (1),
+.BR global (1),
+.BR gnuctags (1).
+
+.PP
The official Exuberant Ctags web site at:
.RS

3
ctags-5.6.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:55c0693845644735f76242fa717efd92d9cb99543f7a7fa65d63bdd083c4eb95
size 267019

493
ctags-ycp-parser.diff Normal file
View File

@ -0,0 +1,493 @@
--- c.c
+++ c.c
@@ -61,35 +61,39 @@
*/
typedef enum eKeywordId {
KEYWORD_NONE = -1,
- KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT,
- KEYWORD_BOOLEAN, KEYWORD_BYTE, KEYWORD_BAD_STATE, KEYWORD_BAD_TRANS,
- KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT,
+ KEYWORD_ATTRIBUTE, KEYWORD_ABSTRACT, KEYWORD_ANY,
+ KEYWORD_BOOLEAN, KEYWORD_BYTE, KEYWORD_BYTEBLOCK, KEYWORD_BAD_STATE,
+ KEYWORD_BAD_TRANS,
+ KEYWORD_BIND, KEYWORD_BIND_VAR, KEYWORD_BIT, KEYWORD_BLOCK,
KEYWORD_CASE, KEYWORD_CATCH, KEYWORD_CHAR, KEYWORD_CLASS, KEYWORD_CONST,
KEYWORD_CONSTRAINT, KEYWORD_COVERAGE_BLOCK, KEYWORD_COVERAGE_DEF,
- KEYWORD_DEFAULT, KEYWORD_DELEGATE, KEYWORD_DELETE, KEYWORD_DO,
+ KEYWORD_DEFAULT, KEYWORD_DECLARATION, KEYWORD_DELEGATE, KEYWORD_DELETE,
+ KEYWORD_DO,
KEYWORD_DOUBLE,
- KEYWORD_ELSE, KEYWORD_ENUM, KEYWORD_EXPLICIT, KEYWORD_EXTERN,
+ KEYWORD_ELSE, KEYWORD_ENUM, KEYWORD_EXPLICIT, KEYWORD_EXPRESSION,
+ KEYWORD_EXTERN,
KEYWORD_EXTENDS, KEYWORD_EVENT,
KEYWORD_FINAL, KEYWORD_FLOAT, KEYWORD_FOR, KEYWORD_FRIEND, KEYWORD_FUNCTION,
KEYWORD_GOTO,
KEYWORD_IF, KEYWORD_IMPLEMENTS, KEYWORD_IMPORT, KEYWORD_INLINE, KEYWORD_INT,
KEYWORD_INOUT, KEYWORD_INPUT, KEYWORD_INTEGER, KEYWORD_INTERFACE,
KEYWORD_INTERNAL,
- KEYWORD_LOCAL, KEYWORD_LONG,
+ KEYWORD_LIST, KEYWORD_LOCAL, KEYWORD_LOCALE, KEYWORD_LONG,
KEYWORD_M_BAD_STATE, KEYWORD_M_BAD_TRANS, KEYWORD_M_STATE, KEYWORD_M_TRANS,
- KEYWORD_MUTABLE,
+ KEYWORD_MAP, KEYWORD_MUTABLE,
KEYWORD_NAMESPACE, KEYWORD_NEW, KEYWORD_NEWCOV, KEYWORD_NATIVE,
KEYWORD_OPERATOR, KEYWORD_OUTPUT, KEYWORD_OVERLOAD, KEYWORD_OVERRIDE,
- KEYWORD_PACKED, KEYWORD_PORT, KEYWORD_PACKAGE, KEYWORD_PRIVATE,
- KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC,
+ KEYWORD_PACKED, KEYWORD_PATH, KEYWORD_PORT, KEYWORD_PACKAGE,
+ KEYWORD_PRIVATE,
+ KEYWORD_PROGRAM, KEYWORD_PROTECTED, KEYWORD_PUBLIC, KEYWORD_REPEAT,
KEYWORD_REGISTER, KEYWORD_RETURN,
KEYWORD_SHADOW, KEYWORD_STATE,
KEYWORD_SHORT, KEYWORD_SIGNED, KEYWORD_STATIC, KEYWORD_STRING,
- KEYWORD_STRUCT, KEYWORD_SWITCH, KEYWORD_SYNCHRONIZED,
- KEYWORD_TASK, KEYWORD_TEMPLATE, KEYWORD_THIS, KEYWORD_THROW,
+ KEYWORD_STRUCT, KEYWORD_SWITCH, KEYWORD_SYNCHRONIZED, KEYWORD_SYMBOL,
+ KEYWORD_TASK, KEYWORD_TEMPLATE, KEYWORD_TERM, KEYWORD_THIS, KEYWORD_THROW,
KEYWORD_THROWS, KEYWORD_TRANSIENT, KEYWORD_TRANS, KEYWORD_TRANSITION,
KEYWORD_TRY, KEYWORD_TYPEDEF, KEYWORD_TYPENAME,
- KEYWORD_UINT, KEYWORD_ULONG, KEYWORD_UNION, KEYWORD_UNSIGNED, KEYWORD_USHORT,
+ KEYWORD_UINT, KEYWORD_ULONG, KEYWORD_UNION, KEYWORD_UNSIGNED, KEYWORD_UNTIL, KEYWORD_USHORT,
KEYWORD_USING,
KEYWORD_VIRTUAL, KEYWORD_VOID, KEYWORD_VOLATILE,
KEYWORD_WCHAR_T, KEYWORD_WHILE
@@ -101,7 +105,7 @@
typedef struct sKeywordDesc {
const char *name;
keywordId id;
- short isValid [5]; /* indicates languages for which kw is valid */
+ short isValid [6]; /* indicates languages for which kw is valid */
} keywordDesc;
/* Used for reporting the type of object parsed by nextToken ().
@@ -137,6 +141,7 @@
typedef enum eDeclaration {
DECL_NONE,
DECL_BASE, /* base type (default) */
+ DECL_BLOCK, /* YCP unnamed block */
DECL_CLASS,
DECL_ENUM,
DECL_EVENT,
@@ -258,6 +263,7 @@
static langType Lang_csharp;
static langType Lang_java;
static langType Lang_vera;
+static langType Lang_ycp;
static vString *Signature;
static boolean CollectingSignature;
@@ -354,110 +360,138 @@
{ FALSE, 'x', "externvar", "external variable declarations"}
};
+/* Used to index into the YCPKinds table. */
+typedef enum {
+ YK_UNDEFINED = -1,
+ YK_FUNCTION, YK_PROTOTYPE,
+ YK_LOCAL,
+ YK_VARIABLE
+} ycpKind;
+
+static kindOption YCPKinds [] = {
+ { TRUE, 'f', "function", "function definitions"},
+ { FALSE, 'p', "prototype", "function prototypes"},
+ { FALSE, 'l', "local", "local variables"},
+ { TRUE, 'v', "variable", "variable definitions"},
+};
+
static const keywordDesc KeywordTable [] = {
- /* C++ */
- /* ANSI C | C# Java */
- /* | | | | Vera */
- /* keyword keyword ID | | | | | */
- { "__attribute__", KEYWORD_ATTRIBUTE, { 1, 1, 1, 0, 0 } },
- { "abstract", KEYWORD_ABSTRACT, { 0, 0, 1, 1, 0 } },
- { "bad_state", KEYWORD_BAD_STATE, { 0, 0, 0, 0, 1 } },
- { "bad_trans", KEYWORD_BAD_TRANS, { 0, 0, 0, 0, 1 } },
- { "bind", KEYWORD_BIND, { 0, 0, 0, 0, 1 } },
- { "bind_var", KEYWORD_BIND_VAR, { 0, 0, 0, 0, 1 } },
- { "bit", KEYWORD_BIT, { 0, 0, 0, 0, 1 } },
- { "boolean", KEYWORD_BOOLEAN, { 0, 0, 0, 1, 0 } },
- { "byte", KEYWORD_BYTE, { 0, 0, 0, 1, 0 } },
- { "case", KEYWORD_CASE, { 1, 1, 1, 1, 0 } },
- { "catch", KEYWORD_CATCH, { 0, 1, 1, 0, 0 } },
- { "char", KEYWORD_CHAR, { 1, 1, 1, 1, 0 } },
- { "class", KEYWORD_CLASS, { 0, 1, 1, 1, 1 } },
- { "const", KEYWORD_CONST, { 1, 1, 1, 1, 0 } },
- { "constraint", KEYWORD_CONSTRAINT, { 0, 0, 0, 0, 1 } },
- { "coverage_block", KEYWORD_COVERAGE_BLOCK, { 0, 0, 0, 0, 1 } },
- { "coverage_def", KEYWORD_COVERAGE_DEF, { 0, 0, 0, 0, 1 } },
- { "do", KEYWORD_DO, { 1, 1, 1, 1, 0 } },
- { "default", KEYWORD_DEFAULT, { 1, 1, 1, 1, 0 } },
- { "delegate", KEYWORD_DELEGATE, { 0, 0, 1, 0, 0 } },
- { "delete", KEYWORD_DELETE, { 0, 1, 0, 0, 0 } },
- { "double", KEYWORD_DOUBLE, { 1, 1, 1, 1, 0 } },
- { "else", KEYWORD_ELSE, { 1, 1, 0, 1, 0 } },
- { "enum", KEYWORD_ENUM, { 1, 1, 1, 0, 1 } },
- { "event", KEYWORD_EVENT, { 0, 0, 1, 0, 1 } },
- { "explicit", KEYWORD_EXPLICIT, { 0, 1, 1, 0, 0 } },
- { "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1 } },
- { "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1 } },
- { "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0 } },
- { "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0 } },
- { "for", KEYWORD_FOR, { 1, 1, 1, 1, 0 } },
- { "friend", KEYWORD_FRIEND, { 0, 1, 0, 0, 0 } },
- { "function", KEYWORD_FUNCTION, { 0, 0, 0, 0, 1 } },
- { "goto", KEYWORD_GOTO, { 1, 1, 1, 1, 0 } },
- { "if", KEYWORD_IF, { 1, 1, 1, 1, 0 } },
- { "implements", KEYWORD_IMPLEMENTS, { 0, 0, 0, 1, 0 } },
- { "import", KEYWORD_IMPORT, { 0, 0, 0, 1, 0 } },
- { "inline", KEYWORD_INLINE, { 0, 1, 0, 0, 0 } },
- { "inout", KEYWORD_INOUT, { 0, 0, 0, 0, 1 } },
- { "input", KEYWORD_INPUT, { 0, 0, 0, 0, 1 } },
- { "int", KEYWORD_INT, { 1, 1, 1, 1, 0 } },
- { "integer", KEYWORD_INTEGER, { 0, 0, 0, 0, 1 } },
- { "interface", KEYWORD_INTERFACE, { 0, 0, 1, 1, 1 } },
- { "internal", KEYWORD_INTERNAL, { 0, 0, 1, 0, 0 } },
- { "local", KEYWORD_LOCAL, { 0, 0, 0, 0, 1 } },
- { "long", KEYWORD_LONG, { 1, 1, 1, 1, 0 } },
- { "m_bad_state", KEYWORD_M_BAD_STATE, { 0, 0, 0, 0, 1 } },
- { "m_bad_trans", KEYWORD_M_BAD_TRANS, { 0, 0, 0, 0, 1 } },
- { "m_state", KEYWORD_M_STATE, { 0, 0, 0, 0, 1 } },
- { "m_trans", KEYWORD_M_TRANS, { 0, 0, 0, 0, 1 } },
- { "mutable", KEYWORD_MUTABLE, { 0, 1, 0, 0, 0 } },
- { "namespace", KEYWORD_NAMESPACE, { 0, 1, 1, 0, 0 } },
- { "native", KEYWORD_NATIVE, { 0, 0, 0, 1, 0 } },
- { "new", KEYWORD_NEW, { 0, 1, 1, 1, 0 } },
- { "newcov", KEYWORD_NEWCOV, { 0, 0, 0, 0, 1 } },
- { "operator", KEYWORD_OPERATOR, { 0, 1, 1, 0, 0 } },
- { "output", KEYWORD_OUTPUT, { 0, 0, 0, 0, 1 } },
- { "overload", KEYWORD_OVERLOAD, { 0, 1, 0, 0, 0 } },
- { "override", KEYWORD_OVERRIDE, { 0, 0, 1, 0, 0 } },
- { "package", KEYWORD_PACKAGE, { 0, 0, 0, 1, 0 } },
- { "packed", KEYWORD_PACKED, { 0, 0, 0, 0, 1 } },
- { "port", KEYWORD_PORT, { 0, 0, 0, 0, 1 } },
- { "private", KEYWORD_PRIVATE, { 0, 1, 1, 1, 0 } },
- { "program", KEYWORD_PROGRAM, { 0, 0, 0, 0, 1 } },
- { "protected", KEYWORD_PROTECTED, { 0, 1, 1, 1, 1 } },
- { "public", KEYWORD_PUBLIC, { 0, 1, 1, 1, 1 } },
- { "register", KEYWORD_REGISTER, { 1, 1, 0, 0, 0 } },
- { "return", KEYWORD_RETURN, { 1, 1, 1, 1, 0 } },
- { "shadow", KEYWORD_SHADOW, { 0, 0, 0, 0, 1 } },
- { "short", KEYWORD_SHORT, { 1, 1, 1, 1, 0 } },
- { "signed", KEYWORD_SIGNED, { 1, 1, 0, 0, 0 } },
- { "state", KEYWORD_STATE, { 0, 0, 0, 0, 1 } },
- { "static", KEYWORD_STATIC, { 1, 1, 1, 1, 1 } },
- { "string", KEYWORD_STRING, { 0, 0, 1, 0, 1 } },
- { "struct", KEYWORD_STRUCT, { 1, 1, 1, 0, 0 } },
- { "switch", KEYWORD_SWITCH, { 1, 1, 1, 1, 0 } },
- { "synchronized", KEYWORD_SYNCHRONIZED, { 0, 0, 0, 1, 0 } },
- { "task", KEYWORD_TASK, { 0, 0, 0, 0, 1 } },
- { "template", KEYWORD_TEMPLATE, { 0, 1, 0, 0, 0 } },
- { "this", KEYWORD_THIS, { 0, 1, 1, 1, 0 } },
- { "throw", KEYWORD_THROW, { 0, 1, 1, 1, 0 } },
- { "throws", KEYWORD_THROWS, { 0, 0, 0, 1, 0 } },
- { "trans", KEYWORD_TRANS, { 0, 0, 0, 0, 1 } },
- { "transition", KEYWORD_TRANSITION, { 0, 0, 0, 0, 1 } },
- { "transient", KEYWORD_TRANSIENT, { 0, 0, 0, 1, 0 } },
- { "try", KEYWORD_TRY, { 0, 1, 1, 0, 0 } },
- { "typedef", KEYWORD_TYPEDEF, { 1, 1, 1, 0, 1 } },
- { "typename", KEYWORD_TYPENAME, { 0, 1, 0, 0, 0 } },
- { "uint", KEYWORD_UINT, { 0, 0, 1, 0, 0 } },
- { "ulong", KEYWORD_ULONG, { 0, 0, 1, 0, 0 } },
- { "union", KEYWORD_UNION, { 1, 1, 0, 0, 0 } },
- { "unsigned", KEYWORD_UNSIGNED, { 1, 1, 1, 0, 0 } },
- { "ushort", KEYWORD_USHORT, { 0, 0, 1, 0, 0 } },
- { "using", KEYWORD_USING, { 0, 1, 1, 0, 0 } },
- { "virtual", KEYWORD_VIRTUAL, { 0, 1, 1, 0, 1 } },
- { "void", KEYWORD_VOID, { 1, 1, 1, 1, 1 } },
- { "volatile", KEYWORD_VOLATILE, { 1, 1, 1, 1, 0 } },
- { "wchar_t", KEYWORD_WCHAR_T, { 1, 1, 1, 0, 0 } },
- { "while", KEYWORD_WHILE, { 1, 1, 1, 1, 0 } }
+ /* C++ YCP */
+ /* ANSI C | C# Java | */
+ /* | | | | Vera */
+ /* keyword keyword ID | | | | | | */
+ { "__attribute__", KEYWORD_ATTRIBUTE, { 1, 1, 1, 0, 0, 0 } },
+ { "abstract", KEYWORD_ABSTRACT, { 0, 0, 1, 1, 0, 0 } },
+ { "any", KEYWORD_ANY, { 0, 0, 0, 0, 0, 1 } },
+ { "bad_state", KEYWORD_BAD_STATE, { 0, 0, 0, 0, 1, 0 } },
+ { "bad_trans", KEYWORD_BAD_TRANS, { 0, 0, 0, 0, 1, 0 } },
+ { "bind", KEYWORD_BIND, { 0, 0, 0, 0, 1, 0 } },
+ { "bind_var", KEYWORD_BIND_VAR, { 0, 0, 0, 0, 1, 0 } },
+ { "bit", KEYWORD_BIT, { 0, 0, 0, 0, 1, 0 } },
+ { "block", KEYWORD_BLOCK, { 0, 0, 0, 0, 0, 1 } },
+ { "boolean", KEYWORD_BOOLEAN, { 0, 0, 0, 1, 0, 1 } },
+ { "byte", KEYWORD_BYTE, { 0, 0, 0, 1, 0, 0 } },
+ { "byteblock", KEYWORD_BYTEBLOCK, { 0, 0, 0, 0, 0, 1 } },
+ { "case", KEYWORD_CASE, { 1, 1, 1, 1, 0, 0 } },
+ { "catch", KEYWORD_CATCH, { 0, 1, 1, 0, 0, 0 } },
+ { "char", KEYWORD_CHAR, { 1, 1, 1, 1, 0, 0 } },
+ { "class", KEYWORD_CLASS, { 0, 1, 1, 1, 1, 0 } },
+ { "const", KEYWORD_CONST, { 1, 1, 1, 1, 0, 0 } },
+ { "constraint", KEYWORD_CONSTRAINT, { 0, 0, 0, 0, 1, 0 } },
+ { "coverage_block", KEYWORD_COVERAGE_BLOCK, { 0, 0, 0, 0, 1, 0 } },
+ { "coverage_def", KEYWORD_COVERAGE_DEF, { 0, 0, 0, 0, 1, 0 } },
+ { "declaration", KEYWORD_DECLARATION, { 0, 0, 0, 0, 0, 1 } },
+ { "do", KEYWORD_DO, { 1, 1, 1, 1, 0, 1 } },
+ { "default", KEYWORD_DEFAULT, { 1, 1, 1, 1, 0, 0 } },
+ { "delegate", KEYWORD_DELEGATE, { 0, 0, 1, 0, 0, 0 } },
+ { "delete", KEYWORD_DELETE, { 0, 1, 0, 0, 0, 0 } },
+ { "double", KEYWORD_DOUBLE, { 1, 1, 1, 1, 0, 0 } },
+ { "else", KEYWORD_ELSE, { 1, 1, 0, 1, 0, 1 } },
+ { "enum", KEYWORD_ENUM, { 1, 1, 1, 0, 1, 1 } },
+ { "event", KEYWORD_EVENT, { 0, 0, 1, 0, 1, 0 } },
+ { "explicit", KEYWORD_EXPLICIT, { 0, 1, 1, 0, 0, 0 } },
+ { "expression", KEYWORD_EXPRESSION, { 0, 0, 0, 0, 0, 1 } },
+ { "extends", KEYWORD_EXTENDS, { 0, 0, 0, 1, 1, 0 } },
+ { "extern", KEYWORD_EXTERN, { 1, 1, 1, 0, 1, 0 } },
+ { "final", KEYWORD_FINAL, { 0, 0, 0, 1, 0, 1 } },
+ { "float", KEYWORD_FLOAT, { 1, 1, 1, 1, 0, 1 } },
+ { "for", KEYWORD_FOR, { 1, 1, 1, 1, 0, 0 } },
+ { "friend", KEYWORD_FRIEND, { 0, 1, 0, 0, 0, 0 } },
+ { "function", KEYWORD_FUNCTION, { 0, 0, 0, 0, 1, 0 } },
+ { "goto", KEYWORD_GOTO, { 1, 1, 1, 1, 0, 0 } },
+ { "if", KEYWORD_IF, { 1, 1, 1, 1, 0, 1 } },
+ { "implements", KEYWORD_IMPLEMENTS, { 0, 0, 0, 1, 0, 0 } },
+ { "import", KEYWORD_IMPORT, { 0, 0, 0, 1, 0, 1 } },
+ { "inline", KEYWORD_INLINE, { 0, 1, 0, 0, 0, 0 } },
+ { "inout", KEYWORD_INOUT, { 0, 0, 0, 0, 1, 0 } },
+ { "input", KEYWORD_INPUT, { 0, 0, 0, 0, 1, 0 } },
+ { "int", KEYWORD_INT, { 1, 1, 1, 1, 0, 0 } },
+ { "integer", KEYWORD_INTEGER, { 0, 0, 0, 0, 1, 1 } },
+ { "interface", KEYWORD_INTERFACE, { 0, 0, 1, 1, 1, 0 } },
+ { "internal", KEYWORD_INTERNAL, { 0, 0, 1, 0, 0, 0 } },
+ { "list", KEYWORD_LIST, { 0, 0, 0, 0, 0, 1 } },
+ { "local", KEYWORD_LOCAL, { 0, 0, 0, 0, 1, 0 } },
+ { "locale", KEYWORD_LOCALE, { 0, 0, 0, 0, 0, 1 } },
+ { "long", KEYWORD_LONG, { 1, 1, 1, 1, 0, 0 } },
+ { "m_bad_state", KEYWORD_M_BAD_STATE, { 0, 0, 0, 0, 1, 0 } },
+ { "m_bad_trans", KEYWORD_M_BAD_TRANS, { 0, 0, 0, 0, 1, 0 } },
+ { "m_state", KEYWORD_M_STATE, { 0, 0, 0, 0, 1, 0 } },
+ { "m_trans", KEYWORD_M_TRANS, { 0, 0, 0, 0, 1, 0 } },
+ { "map", KEYWORD_MAP, { 0, 0, 0, 0, 0, 1 } },
+ { "mutable", KEYWORD_MUTABLE, { 0, 1, 0, 0, 0, 0 } },
+ { "namespace", KEYWORD_NAMESPACE, { 0, 1, 1, 0, 0, 0 } },
+ { "native", KEYWORD_NATIVE, { 0, 0, 0, 1, 0, 0 } },
+ { "new", KEYWORD_NEW, { 0, 1, 1, 1, 0, 0 } },
+ { "newcov", KEYWORD_NEWCOV, { 0, 0, 0, 0, 1, 0 } },
+ { "operator", KEYWORD_OPERATOR, { 0, 1, 1, 0, 0, 0 } },
+ { "output", KEYWORD_OUTPUT, { 0, 0, 0, 0, 1, 0 } },
+ { "overload", KEYWORD_OVERLOAD, { 0, 1, 0, 0, 0, 0 } },
+ { "override", KEYWORD_OVERRIDE, { 0, 0, 1, 0, 0, 0 } },
+ { "package", KEYWORD_PACKAGE, { 0, 0, 0, 1, 0, 0 } },
+ { "packed", KEYWORD_PACKED, { 0, 0, 0, 0, 1, 0 } },
+ { "path", KEYWORD_PATH, { 0, 0, 0, 0, 0, 1 } },
+ { "port", KEYWORD_PORT, { 0, 0, 0, 0, 1, 0 } },
+ { "private", KEYWORD_PRIVATE, { 0, 1, 1, 1, 0, 0 } },
+ { "program", KEYWORD_PROGRAM, { 0, 0, 0, 0, 1, 0 } },
+ { "protected", KEYWORD_PROTECTED, { 0, 1, 1, 1, 1, 0 } },
+ { "public", KEYWORD_PUBLIC, { 0, 1, 1, 1, 1, 0 } },
+ { "repeat", KEYWORD_REPEAT, { 0, 0, 0, 0, 0, 1 } },
+ { "register", KEYWORD_REGISTER, { 1, 1, 0, 0, 0, 0 } },
+ { "return", KEYWORD_RETURN, { 1, 1, 1, 1, 0, 1 } },
+ { "shadow", KEYWORD_SHADOW, { 0, 0, 0, 0, 1, 0 } },
+ { "short", KEYWORD_SHORT, { 1, 1, 1, 1, 0, 0 } },
+ { "signed", KEYWORD_SIGNED, { 1, 1, 0, 0, 0, 0 } },
+ { "state", KEYWORD_STATE, { 0, 0, 0, 0, 1, 0 } },
+ { "static", KEYWORD_STATIC, { 1, 1, 1, 1, 1, 0 } },
+ { "string", KEYWORD_STRING, { 0, 0, 1, 0, 1, 1 } },
+ { "struct", KEYWORD_STRUCT, { 1, 1, 1, 0, 0, 0 } },
+ { "switch", KEYWORD_SWITCH, { 1, 1, 1, 1, 0, 0 } },
+ { "synchronized", KEYWORD_SYNCHRONIZED, { 0, 0, 0, 1, 0, 0 } },
+ { "symbol", KEYWORD_SYMBOL, { 0, 0, 0, 0, 0, 1 } },
+ { "task", KEYWORD_TASK, { 0, 0, 0, 0, 1, 0 } },
+ { "template", KEYWORD_TEMPLATE, { 0, 1, 0, 0, 0, 0 } },
+ { "term", KEYWORD_TERM, { 0, 0, 0, 0, 0, 1 } },
+ { "this", KEYWORD_THIS, { 0, 1, 1, 1, 0, 0 } },
+ { "throw", KEYWORD_THROW, { 0, 1, 1, 1, 0, 0 } },
+ { "throws", KEYWORD_THROWS, { 0, 0, 0, 1, 0, 0 } },
+ { "trans", KEYWORD_TRANS, { 0, 0, 0, 0, 1, 0 } },
+ { "transition", KEYWORD_TRANSITION, { 0, 0, 0, 0, 1, 0 } },
+ { "transient", KEYWORD_TRANSIENT, { 0, 0, 0, 1, 0, 0 } },
+ { "try", KEYWORD_TRY, { 0, 1, 1, 0, 0, 0 } },
+ { "typedef", KEYWORD_TYPEDEF, { 1, 1, 1, 0, 1, 0 } },
+ { "typename", KEYWORD_TYPENAME, { 0, 1, 0, 0, 0, 0 } },
+ { "uint", KEYWORD_UINT, { 0, 0, 1, 0, 0, 0 } },
+ { "ulong", KEYWORD_ULONG, { 0, 0, 1, 0, 0, 0 } },
+ { "union", KEYWORD_UNION, { 1, 1, 0, 0, 0, 0 } },
+ { "unsigned", KEYWORD_UNSIGNED, { 1, 1, 1, 0, 0, 0 } },
+ { "until", KEYWORD_UNTIL, { 0, 0, 0, 0, 0, 1 } },
+ { "ushort", KEYWORD_USHORT, { 0, 0, 1, 0, 0, 0 } },
+ { "using", KEYWORD_USING, { 0, 1, 1, 0, 0, 0 } },
+ { "virtual", KEYWORD_VIRTUAL, { 0, 1, 1, 0, 1, 0 } },
+ { "void", KEYWORD_VOID, { 1, 1, 1, 1, 1, 1 } },
+ { "volatile", KEYWORD_VOLATILE, { 1, 1, 1, 1, 0, 0 } },
+ { "wchar_t", KEYWORD_WCHAR_T, { 1, 1, 1, 0, 0, 0 } },
+ { "while", KEYWORD_WHILE, { 1, 1, 1, 1, 0, 1 } }
};
/*
@@ -877,6 +911,21 @@
return result;
}
+static ycpKind ycpTagKind (const tagType type)
+{
+ ycpKind result = YK_UNDEFINED;
+ switch (type)
+ {
+ case TAG_FUNCTION: result = YK_FUNCTION; break;
+ case TAG_PROTOTYPE: result = YK_PROTOTYPE; break;
+ case TAG_LOCAL: result = YK_LOCAL; break;
+ case TAG_VARIABLE: result = YK_VARIABLE; break;
+
+ default: Assert ("Bad YCP tag type" == NULL); break;
+ }
+ return result;
+}
+
static const char *tagName (const tagType type)
{
const char* result;
@@ -886,6 +935,8 @@
result = JavaKinds [javaTagKind (type)].name;
else if (isLanguage (Lang_vera))
result = VeraKinds [veraTagKind (type)].name;
+ else if (isLanguage (Lang_ycp))
+ result = YCPKinds [ycpTagKind (type)].name;
else
result = CKinds [cTagKind (type)].name;
return result;
@@ -900,6 +951,8 @@
result = JavaKinds [javaTagKind (type)].letter;
else if (isLanguage (Lang_vera))
result = VeraKinds [veraTagKind (type)].letter;
+ else if (isLanguage (Lang_ycp))
+ result = YCPKinds [ycpTagKind (type)].letter;
else
result = CKinds [cTagKind (type)].letter;
return result;
@@ -955,7 +1008,8 @@
static void addContextSeparator (vString *const scope)
{
- if (isLanguage (Lang_c) || isLanguage (Lang_cpp))
+ if (isLanguage (Lang_c) || isLanguage (Lang_cpp) ||
+ isLanguage (Lang_ycp))
vStringCatS (scope, "::");
else if (isLanguage (Lang_java) || isLanguage (Lang_csharp))
vStringCatS (scope, ".");
@@ -1690,9 +1744,11 @@
case KEYWORD_NONE: processName (st); break;
case KEYWORD_ABSTRACT: st->implementation = IMP_ABSTRACT; break;
+ case KEYWORD_ANY: st->declaration = DECL_BASE; break;
case KEYWORD_ATTRIBUTE: skipParens (); initToken (token); break;
case KEYWORD_BIND: st->declaration = DECL_BASE; break;
case KEYWORD_BIT: st->declaration = DECL_BASE; break;
+ case KEYWORD_BYTEBLOCK: st->declaration = DECL_BASE; break;
case KEYWORD_CATCH: skipParens (); skipBraces (); break;
case KEYWORD_CHAR: st->declaration = DECL_BASE; break;
case KEYWORD_CLASS: st->declaration = DECL_CLASS; break;
@@ -1711,11 +1767,15 @@
case KEYWORD_INT: st->declaration = DECL_BASE; break;
case KEYWORD_INTEGER: st->declaration = DECL_BASE; break;
case KEYWORD_INTERFACE: st->declaration = DECL_INTERFACE; break;
+ case KEYWORD_LIST: st->declaration = DECL_BASE; break;
case KEYWORD_LOCAL: setAccess (st, ACCESS_LOCAL); break;
+ case KEYWORD_LOCALE: st->declaration = DECL_BASE; break;
case KEYWORD_LONG: st->declaration = DECL_BASE; break;
+ case KEYWORD_MAP: st->declaration = DECL_BASE; break;
case KEYWORD_NAMESPACE: st->declaration = DECL_NAMESPACE; break;
case KEYWORD_OPERATOR: readOperator (st); break;
case KEYWORD_PACKAGE: readPackage (st); break;
+ case KEYWORD_PATH: st->declaration = DECL_BASE; break;
case KEYWORD_PRIVATE: setAccess (st, ACCESS_PRIVATE); break;
case KEYWORD_PROGRAM: st->declaration = DECL_PROGRAM; break;
case KEYWORD_PROTECTED: setAccess (st, ACCESS_PROTECTED); break;
@@ -1725,7 +1785,9 @@
case KEYWORD_SIGNED: st->declaration = DECL_BASE; break;
case KEYWORD_STRING: st->declaration = DECL_BASE; break;
case KEYWORD_STRUCT: st->declaration = DECL_STRUCT; break;
+ case KEYWORD_SYMBOL: st->declaration = DECL_BASE; break;
case KEYWORD_TASK: st->declaration = DECL_TASK; break;
+ case KEYWORD_TERM: st->declaration = DECL_BASE; break;
case KEYWORD_THROWS: discardTypeList (token); break;
case KEYWORD_UNION: st->declaration = DECL_UNION; break;
case KEYWORD_UNSIGNED: st->declaration = DECL_BASE; break;
@@ -1764,7 +1826,9 @@
case KEYWORD_FOR:
case KEYWORD_IF:
+ case KEYWORD_REPEAT:
case KEYWORD_SWITCH:
+ case KEYWORD_UNTIL:
case KEYWORD_WHILE:
{
int c = skipToNonWhite ();
@@ -2253,7 +2317,8 @@
{
if (vStringLength (st->context->name) > 0)
{
- if (isLanguage (Lang_c) || isLanguage (Lang_cpp))
+ if (isLanguage (Lang_c) || isLanguage (Lang_cpp) ||
+ isLanguage (Lang_ycp))
vStringCatS (st->context->name, "::");
else if (isLanguage (Lang_java) || isLanguage (Lang_csharp))
vStringCatS (st->context->name, ".");
@@ -2569,7 +2634,12 @@
st->inFunction = TRUE;
/* fall through */
default:
- if (includeTag (TAG_LOCAL, FALSE))
+ if (isLanguage (Lang_ycp) && ! st->haveQualifyingName)
+ {
+ st->declaration = DECL_BLOCK;
+ createTags (nestLevel, st);
+ }
+ else if (includeTag (TAG_LOCAL, FALSE))
createTags (nestLevel, st);
else
skipToMatch ("{}");
@@ -2610,6 +2680,7 @@
}
}
else if (isContextualStatement (st) ||
+ st->declaration == DECL_BLOCK ||
st->declaration == DECL_NAMESPACE ||
st->declaration == DECL_PROGRAM)
{
@@ -2769,6 +2840,12 @@
buildKeywordHash (language, 4);
}
+static void initializeYcpParser (const langType language)
+{
+ Lang_ycp = language;
+ buildKeywordHash (language, 5);
+}
+
extern parserDefinition* CParser (void)
{
static const char *const extensions [] = { "c", NULL };
@@ -2835,4 +2912,16 @@
return def;
}
+extern parserDefinition* YcpParser (void)
+{
+ static const char *const extensions [] = { "ycp", NULL };
+ parserDefinition* def = parserNew ("YCP");
+ def->kinds = YCPKinds;
+ def->kindCount = KIND_COUNT (YCPKinds);
+ def->extensions = extensions;
+ def->parser2 = findCTags;
+ def->initialize = initializeYcpParser;
+ return def;
+}
+
/* vi:set tabstop=4 shiftwidth=4 noexpandtab: */
--- parsers.h
+++ parsers.h
@@ -48,7 +48,8 @@
VeraParser, \
VerilogParser, \
VimParser, \
- YaccParser
+ YaccParser, \
+ YcpParser
#endif /* _PARSERS_H */

176
ctags.changes Normal file
View File

@ -0,0 +1,176 @@
-------------------------------------------------------------------
Wed Dec 20 12:49:51 CET 2006 - schwab@suse.de
- Update etags from CVS.
-------------------------------------------------------------------
Tue May 30 15:10:42 CEST 2006 - schwab@suse.de
- Update to ctags 5.6
* Reformatted code for independence of tab stop setting.
* Changed default configuration to disable installation of etags links.
* Changed --langmap to first unmap each supplied extension from other
languages.
* Added support for ASP constants [ASP, Patch #961842].
* Added support for GNU make extensions [Make].
* Added .mk as extension recognized as a make language file [Make].
* Added missing help for list-maps options [Bug #1201826].
* Added new extension field "typeref" [thanks to Bram Moolenaar].
* Extended functionality of Ruby parser with patch from Elliot Hughes
[Ruby].
* Fixed creation of TAGS file with etags-include but no files [Bug
#941233].
* Fixed problem reading last line of list file (-L) without final
newline.
* Fixed infinite loop that could occur on files without final newline
[C, Java].
* Fixed incorrect tag for first field of table [SQL].
* Fixed missing tags for functions beginning with underscore [Sh].
* Fixed missing tags for functions with variable arg list [C, Bug
#1201689].
* Fixed parsing problem with parentheses in argument list [C, Bug
#1085585].
* Fixed problem in preprocessor directive handling [C, Bug #1086609].
- Update etags to 17.17.
-------------------------------------------------------------------
Tue Mar 7 23:18:46 CET 2006 - od@suse.de
- wrote and added a YCP parser based on the C code parser
(ctags-5.5.4-ycp-parser.diff)
-------------------------------------------------------------------
Wed Jan 25 21:35:15 CET 2006 - mls@suse.de
- converted neededforbuild to BuildRequires
-------------------------------------------------------------------
Wed Dec 7 20:46:09 CET 2005 - od@suse.de
- Added option -A/--allow-duplicates to gnuctags
-------------------------------------------------------------------
Wed Dec 7 02:28:07 CET 2005 - od@suse.de
- Don't strip etags/gnuctags
-------------------------------------------------------------------
Tue Oct 18 12:44:46 CEST 2005 - schwab@suse.de
- Update to etags 17.14.
-------------------------------------------------------------------
Mon Nov 15 17:06:34 CET 2004 - schwab@suse.de
- Update to etags 17.5.
-------------------------------------------------------------------
Tue May 4 22:17:18 CEST 2004 - schwab@suse.de
- Update to ctags 5.5.4.
-------------------------------------------------------------------
Sat Jan 10 20:57:54 CET 2004 - adrian@suse.de
- add %defattr
-------------------------------------------------------------------
Fri Sep 26 09:32:30 CEST 2003 - schwab@suse.de
- Update to ctags 5.5.2.
-------------------------------------------------------------------
Tue Aug 5 20:47:31 CEST 2003 - schwab@suse.de
- Update to ctags 5.5.1.
-------------------------------------------------------------------
Wed Apr 2 13:29:55 CEST 2003 - schwab@suse.de
- Update to ctags 5.5.
- Update to etags 16.56.
-------------------------------------------------------------------
Tue Sep 17 17:34:28 CEST 2002 - ro@suse.de
- removed bogus self-provides
-------------------------------------------------------------------
Tue Sep 17 17:11:00 CEST 2002 - schwab@suse.de
- Update to ctags 5.3.1.
-------------------------------------------------------------------
Thu Jul 18 10:53:15 CEST 2002 - schwab@suse.de
- Update to ctags 5.3.
-------------------------------------------------------------------
Fri Dec 14 15:59:05 CET 2001 - schwab@suse.de
- Update ctags to 5.1.
- Update etags to 14.21.
-------------------------------------------------------------------
Thu May 18 13:26:59 CEST 2000 - schwab@suse.de
- Use BuildRoot.
- Remove etags.c changes again.
-------------------------------------------------------------------
Wed May 17 19:33:55 CEST 2000 - kasal@suse.cz
- strip etags/gnuctags
- Fixed etags.c changes
-------------------------------------------------------------------
Mon May 15 16:49:20 CEST 2000 - schwab@suse.de
- Discard etags.c changes (#2772).
-------------------------------------------------------------------
Mon Jan 31 18:15:00 CET 2000 - werner@suse.de
- Really rename gctags to gnuctags
-------------------------------------------------------------------
Mon Jan 31 12:41:54 CET 2000 - kasal@suse.cz
- fixed spec file to really use the *dif files
- gctags renamed to gnuctags
- rewrote the NOTEs in the manpages and added
"see also (gnu)ctags(1), gctags(1) and global(1)"
- etags.c now uses #ifdef's
-------------------------------------------------------------------
Wed Jan 26 19:15:48 CET 2000 - werner@suse.de
- New ctags version 3.3.1
* Disable etags (is usable with `ctags -e')
- Add etags/ctags from Emacs sources
* rename this ctags with gctags
- Make some NOTEs within the manual pages of both packages
- Add a README.SuSE to explain why we have two versions
-------------------------------------------------------------------
Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de
- ran old prepare_spec on spec file to switch to new prepare_spec.
-------------------------------------------------------------------
Wed Sep 8 11:59:42 CEST 1999 - schwab@suse.de
- specfile cleanup
-------------------------------------------------------------------
Tue Jun 15 16:55:26 MEST 1999 - uli@suse.de
- update -> 3.2.2
----------------------------------------------------------------------------
Sun Apr 13 23:04:29 MEST 1997 - florian@suse.de
- new package with ctags 1.5 (used to be together with vim.tgz)

185
ctags.spec Normal file
View File

@ -0,0 +1,185 @@
#
# spec file for package ctags (Version 2006.12.26)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# norootforbuild
Name: ctags
License: GNU General Public License (GPL)
Group: Development/Tools/Navigators
Autoreqprov: on
%define exuberant_ver 5.6
%define emacs_ver 17.23
Version: 2006.12.26
Release: 1
Summary: A Program to Generate Tag Files for Use with vi and Other Editors
URL: http://ctags.sourceforge.net/
Source0: ftp://ftp.sourceforge.net/pub/sourceforge/c/ct/ctags/ctags-%{exuberant_ver}.tar.gz
Source1: etags-%{emacs_ver}.tar.gz
Source2: README.SuSE
Patch0: ctags-%{exuberant_ver}.diff
Patch1: ctags-ycp-parser.diff
Patch2: etags-%{emacs_ver}.diff
Patch3: etags-gnuctags-allow-duplicates.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
CTags (from Darren Hiebert) generates tag files from source code in C,
C++, Eiffel, Fortran, and Java to be used with vi and its derivatives,
Emacs, and several other editors.
ETags (from GNU Emacs sources) generates tag files from source code in
Pascal, Cobol, Ada, Perl, LaTeX, Scheme, Emacs Lisp/Common Lisp,
Postscript, Erlang, Python, Prolog, and most assembler-like syntaxes.
Authors:
--------
Darren Hiebert <darren@hiebert.com>
Ken Arnold
Francesco Potortì <pot@gnu.org>
%prep
%setup -n ctags-%{exuberant_ver} -b 1
%patch
%patch1
cd ../etags-%{emacs_ver}
%patch2
%patch3
%build
CC=gcc
CFLAGS="$RPM_OPT_FLAGS -Wall"
export CFLAGS CC
./configure --prefix=/usr --mandir=%{_mandir} --disable-etags
make
cd ../etags-%{emacs_ver}
CFLAGS="$CFLAGS -I../ctags-%{exuberant_ver}"
CFLAGS="$CFLAGS -DHAVE_CONFIG_H -DHAVE_UNISTD_H -DHAVE_GETCWD -DVERSION=\"%{emacs_ver}\""
$CC $CFLAGS -o etags etags.c
$CC $CFLAGS -DCTAGS -o gnuctags etags.c
%install
make install prefix=$RPM_BUILD_ROOT/usr mandir=$RPM_BUILD_ROOT%{_mandir}
mkdir -p $RPM_BUILD_ROOT%{_docdir}/ctags/Exuberant_Ctags
install -m 644 COPYING EXTENDING.html FAQ README $RPM_BUILD_ROOT%{_docdir}/ctags/Exuberant_Ctags
install -m 644 %{S:2} $RPM_BUILD_ROOT%{_docdir}/ctags
cd ../etags-%{emacs_ver}
install -m 755 etags gnuctags $RPM_BUILD_ROOT/usr/bin
install -m 644 etags.1 $RPM_BUILD_ROOT%{_mandir}/man1
ln -sf etags.1.gz $RPM_BUILD_ROOT%{_mandir}/man1/gnuctags.1.gz
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(-,root,root)
/usr/bin/ctags
/usr/bin/gnuctags
/usr/bin/etags
%{_mandir}/man1/ctags.1.gz
%{_mandir}/man1/gnuctags.1.gz
%{_mandir}/man1/etags.1.gz
%{_docdir}/ctags
%changelog -n ctags
* Wed Dec 20 2006 - schwab@suse.de
- Update etags from CVS.
* Tue May 30 2006 - schwab@suse.de
- Update to ctags 5.6
* Reformatted code for independence of tab stop setting.
* Changed default configuration to disable installation of etags links.
* Changed --langmap to first unmap each supplied extension from other
languages.
* Added support for ASP constants [ASP, Patch #961842].
* Added support for GNU make extensions [Make].
* Added .mk as extension recognized as a make language file [Make].
* Added missing help for list-maps options [Bug #1201826].
* Added new extension field "typeref" [thanks to Bram Moolenaar].
* Extended functionality of Ruby parser with patch from Elliot Hughes
[Ruby].
* Fixed creation of TAGS file with etags-include but no files [Bug
[#941233]].
* Fixed problem reading last line of list file (-L) without final
newline.
* Fixed infinite loop that could occur on files without final newline
[C, Java].
* Fixed incorrect tag for first field of table [SQL].
* Fixed missing tags for functions beginning with underscore [Sh].
* Fixed missing tags for functions with variable arg list [C, Bug
[#1201689]].
* Fixed parsing problem with parentheses in argument list [C, Bug
[#1085585]].
* Fixed problem in preprocessor directive handling [C, Bug #1086609].
- Update etags to 17.17.
* Tue Mar 07 2006 - od@suse.de
- wrote and added a YCP parser based on the C code parser
(ctags-5.5.4-ycp-parser.diff)
* Wed Jan 25 2006 - mls@suse.de
- converted neededforbuild to BuildRequires
* Wed Dec 07 2005 - od@suse.de
- Added option -A/--allow-duplicates to gnuctags
* Wed Dec 07 2005 - od@suse.de
- Don't strip etags/gnuctags
* Tue Oct 18 2005 - schwab@suse.de
- Update to etags 17.14.
* Mon Nov 15 2004 - schwab@suse.de
- Update to etags 17.5.
* Tue May 04 2004 - schwab@suse.de
- Update to ctags 5.5.4.
* Sat Jan 10 2004 - adrian@suse.de
- add %%defattr
* Fri Sep 26 2003 - schwab@suse.de
- Update to ctags 5.5.2.
* Tue Aug 05 2003 - schwab@suse.de
- Update to ctags 5.5.1.
* Wed Apr 02 2003 - schwab@suse.de
- Update to ctags 5.5.
- Update to etags 16.56.
* Tue Sep 17 2002 - ro@suse.de
- removed bogus self-provides
* Tue Sep 17 2002 - schwab@suse.de
- Update to ctags 5.3.1.
* Thu Jul 18 2002 - schwab@suse.de
- Update to ctags 5.3.
* Fri Dec 14 2001 - schwab@suse.de
- Update ctags to 5.1.
- Update etags to 14.21.
* Thu May 18 2000 - schwab@suse.de
- Use BuildRoot.
- Remove etags.c changes again.
* Wed May 17 2000 - kasal@suse.cz
- strip etags/gnuctags
- Fixed etags.c changes
* Mon May 15 2000 - schwab@suse.de
- Discard etags.c changes (#2772).
* Mon Jan 31 2000 - werner@suse.de
- Really rename gctags to gnuctags
* Mon Jan 31 2000 - kasal@suse.cz
- fixed spec file to really use the *dif files
- gctags renamed to gnuctags
- rewrote the NOTEs in the manpages and added
"see also (gnu)ctags(1), gctags(1) and global(1)"
- etags.c now uses #ifdef's
* Wed Jan 26 2000 - werner@suse.de
- New ctags version 3.3.1
* Disable etags (is usable with `ctags -e')
- Add etags/ctags from Emacs sources
* rename this ctags with gctags
- Make some NOTEs within the manual pages of both packages
- Add a README.SuSE to explain why we have two versions
* Mon Sep 13 1999 - bs@suse.de
- ran old prepare_spec on spec file to switch to new prepare_spec.
* Wed Sep 08 1999 - schwab@suse.de
- specfile cleanup
* Tue Jun 15 1999 - uli@suse.de
- update -> 3.2.2
* Sun Apr 13 1997 - florian@suse.de
- new package with ctags 1.5 (used to be together with vim.tgz)

152
etags-17.23.diff Normal file
View File

@ -0,0 +1,152 @@
--- etags.1
+++ etags.1
@@ -9,7 +9,7 @@
..
.SH NAME
-etags, ctags \- generate tag file for Emacs, vi
+etags, gnuctags \- generate tag file for Emacs, vi
.SH SYNOPSIS
.hy 0
.na
@@ -26,7 +26,7 @@
[\|\-\-help\|] [\|\-\-version\|]
\fIfile\fP .\|.\|.
-\fBctags\fP [\|\-aCdgIRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
+\fBgnuctags\fP [\|\-aCdgIRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
.if n .br
[\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|]
[\|\-\-parse\-stdin=\fIfile\fP\|]
@@ -46,7 +46,7 @@
The \|\fBetags\fP\| program is used to create a tag table file, in a format
understood by
.BR emacs ( 1 )\c
-\&; the \|\fBctags\fP\| program is used to create a similar table in a
+\&; the \|\fBgnuctags\fP\| program is used to create a similar table in a
format understood by
.BR vi ( 1 )\c
\&. Both forms of the program understand
@@ -56,7 +56,7 @@
most assembler\-like syntaxes.
Both forms read the files specified on the command line, and write a tag
table (defaults: \fBTAGS\fP for \fBetags\fP, \fBtags\fP for
-\fBctags\fP) in the current working directory.
+\fBgnuctags\fP) in the current working directory.
Files specified with relative file names will be recorded in the tag
table with file names relative to the directory where the tag table
resides. If the tag table is in /dev, however, the file names are made
@@ -71,7 +71,7 @@
language, overriding guesses based on filename extensions.
.SH OPTIONS
Some options make sense only for the \fBvi\fP style tag files produced
-by ctags;
+by gnuctags;
\fBetags\fP does not recognize them.
The programs accept unambiguous abbreviations for long option names.
.TP
@@ -85,7 +85,7 @@
the delimiter `\|\fB?\fP\|', to search \fIbackwards\fP through files.
The default is to use the delimiter `\|\fB/\fP\|', to search \fIforwards\fP
through files.
-Only \fBctags\fP accepts this option.
+Only \fBgnuctags\fP accepts this option.
.TP
.B \-\-declarations
In C and derived languages, create tags for function declarations,
@@ -94,24 +94,24 @@
.B \-d, \-\-defines
Create tag entries for C preprocessor constant definitions
and enum constants, too. Since this is the default behavior of
-\fBetags\fP, only \fBctags\fP accepts this option.
+\fBetags\fP, only \fBgnuctags\fP accepts this option.
.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.
-Since this is the default behavior of \fBctags\fP, only \fBetags\fP
+Since this is the default behavior of \fBgnuctags\fP, only \fBetags\fP
accepts this option.
.TP
.B \-\-globals
Create tag entries for global variables in C, C++, Objective C, Java,
and Perl.
-Since this is the default behavior of \fBetags\fP, only \fBctags\fP
+Since this is the default behavior of \fBetags\fP, only \fBgnuctags\fP
accepts this option.
.TP
.B \-\-no\-globals
Do not tag global variables. Typically this reduces the file size by
-one fourth. Since this is the default behavior of \fBctags\fP, only
+one fourth. Since this is the default behavior of \fBgnuctags\fP, only
\fBetags\fP accepts this option.
.TP
\fB\-i\fP \fIfile\fP, \fB\-\-include=\fIfile\fP
@@ -168,7 +168,7 @@
where \fItagregexp\fP is used to match the tag. It should not match
useless characters. If the match is 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
+add a \fInameregexp\fP, to narrow down the tag scope. \fBgnuctags\fP
ignores regexps without a \fInameregexp\fP. The syntax of regexps is
the same as in emacs. The following character escape sequences are
supported: \\a, \\b, \\d, \\e, \\f, \\n, \\r, \\t, \\v, which
@@ -224,7 +224,7 @@
.br
A regexp can be preceded by {\fIlang\fP}, thus restricting it to match
-lines of files of the specified language. Use \fBetags --help\fP to obtain
+lines of files of the specified language. Use \fBetags \-\-help\fP to obtain
a list of the recognised languages. This feature is particularly useful inside
\fBregex files\fP. A regex file contains one regex per line. Empty lines,
and those lines beginning with space or tab are ignored. Lines beginning
@@ -243,12 +243,12 @@
.TP
.B \-t, \-\-typedefs
Record typedefs in C code as tags. Since this is the default behavior
-of \fBetags\fP, only \fBctags\fP accepts this option.
+of \fBetags\fP, only \fBgnuctags\fP accepts this option.
.TP
.B \-T, \-\-typedefs\-and\-c++
Generate tag entries for typedefs, struct, enum, and union tags, and
C++ member functions. Since this is the default behavior
-of \fBetags\fP, only \fBctags\fP accepts this option.
+of \fBetags\fP, only \fBgnuctags\fP accepts this option.
.TP
.B \-u, \-\-update
Update tag entries for \fIfiles\fP specified on command line, leaving
@@ -256,11 +256,11 @@
by deleting the existing entries for the given files and then
rewriting the new entries at the end of the tags file. It is often
faster to simply rebuild the entire tag file than to use this.
-Only \fBctags\fP accepts this option.
+Only \fBgnuctags\fP accepts this option.
.TP
.B \-v, \-\-vgrind
Instead of generating a tag file, write index (in \fBvgrind\fP format)
-to standard output. Only \fBctags\fP accepts this option.
+to standard output. Only \fBgnuctags\fP accepts this option.
.TP
.B \-w, \-\-no\-warn
Suppress warning messages about duplicate entries. The \fBetags\fP
@@ -269,7 +269,7 @@
.TP
.B \-x, \-\-cxref
Instead of generating a tag file, write a cross reference (in
-\fBcxref\fP format) to standard output. Only \fBctags\fP accepts this option.
+\fBcxref\fP format) to standard output. Only \fBgnuctags\fP accepts this option.
.TP
.B \-h, \-H, \-\-help
Print usage information. Followed by one or more \-\-language=LANG
@@ -283,8 +283,10 @@
`\|\fBemacs\fP\|' entry in \fBinfo\fP; \fIGNU Emacs Manual\fP, Richard
Stallman.
.br
+.BR ctags ( 1 ),
.BR cxref ( 1 ),
.BR emacs ( 1 ),
+.BR gnuctags ( 1 ),
.BR vgrind ( 1 ),
.BR vi ( 1 ).

3
etags-17.23.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:516c03e78290d7e7258d24e32bfe6937567d6f1c174b7aa2ceb8859246919156
size 55258

View File

@ -0,0 +1,90 @@
--- etags.1
+++ etags.1
@@ -26,12 +26,12 @@
[\|\-\-help\|] [\|\-\-version\|]
\fIfile\fP .\|.\|.
-\fBgnuctags\fP [\|\-aCdgIRVh\|] [\|\-BtTuvwx\|] [\|\-l \fIlanguage\fP\|]
+\fBgnuctags\fP [\|\-aCdgIRVh\|] [\|\-ABtTuvwx\|] [\|\-l \fIlanguage\fP\|]
.if n .br
[\|\-o \fItagfile\fP\|] [\|\-r \fIregexp\fP\|]
[\|\-\-parse\-stdin=\fIfile\fP\|]
.br
-[\|\-\-append\|] [\|\-\-backward\-search\|]
+[\|\-\-allow\-duplicates\|] [\|\-\-append\|] [\|\-\-backward\-search\|]
[\|\-\-cxref\|] [\|\-\-defines\|] [\|\-\-forward\-search\|]
[\|\-\-globals\|] [\|\-\-ignore\-indentation\|]
[\|\-\-language=\fIlanguage\fP\|] [\|\-\-members\|]
@@ -75,6 +75,12 @@
\fBetags\fP does not recognize them.
The programs accept unambiguous abbreviations for long option names.
.TP
+.B \-A, \-\-allow\-duplicates
+Create entries for duplicate tags. Some editors accept tags files with
+entries for duplicate tags.
+Since this is the default behavior of \fBetags\fP, only \fBgnuctags\fP
+accepts this option.
+.TP
.B \-a, \-\-append
Append to existing tag file. (For \fBvi\fP-format tag files, see also
\fB\-\-update\fP.)
--- etags.c
+++ etags.c
@@ -444,6 +444,7 @@
*midtk = "ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz$0123456789";
static bool append_to_tagfile; /* -a: append to tags */
+static bool allow_duplicates; /* -A: allow duplicate tags */
/* The next four default to TRUE for etags, but to FALSE for ctags. */
static bool typedefs; /* -t: create tags for C and Ada typedefs */
static bool typedefs_or_cplusplus; /* -T: create tags for C typedefs, level */
@@ -496,6 +497,7 @@
{ "version", no_argument, NULL, 'V' },
#if CTAGS /* Ctags options */
+ { "allow-duplicates", no_argument, NULL, 'A' },
{ "backward-search", no_argument, NULL, 'B' },
{ "cxref", no_argument, NULL, 'x' },
{ "defines", no_argument, NULL, 'd' },
@@ -875,6 +877,12 @@
Absolute names are stored in the output file as they are.\n\
Relative ones are stored relative to the output file's directory.\n");
+ if (CTAGS)
+ {
+ puts ("-A, --allow-duplicates\n\
+ Allow duplicate tag entries.");
+ }
+
puts ("-a, --append\n\
Append tag entries to existing tags file.");
@@ -1175,7 +1183,7 @@
non-options arguments to be at the end, but leaves them alone. */
optstring = concat (NO_LONG_OPTIONS ? "" : "-",
"ac:Cf:Il:o:r:RSVhH",
- (CTAGS) ? "BxdtTuvw" : "Di:");
+ (CTAGS) ? "ABxdtTuvw" : "Di:");
while ((opt = getopt_long (argc, argv, optstring, longopts, NULL)) != EOF)
switch (opt)
@@ -1259,6 +1267,7 @@
case 'i': included_files[nincluded_files++] = optarg; break;
/* Ctags options. */
+ case 'A': allow_duplicates = TRUE; break;
case 'B': searchar = '?'; break;
case 'd': constantypedefs = TRUE; break;
case 't': typedefs = TRUE; break;
@@ -2167,8 +2176,10 @@
/*
* If this tag name matches an existing one, then
* do not add the node, but maybe print a warning.
+ * If duplicates are allowed, continue looking for
+ * a node with a branch where we can insert this node.
*/
- if (!dif)
+ if (!allow_duplicates && !dif)
{
if (np->fdp == cur_node->fdp)
{

1
get_version_number.sh Normal file
View File

@ -0,0 +1 @@
get_date_version_string `find_newest_file *.changes`

0
ready Normal file
View File