Revision: 1636 http://svn.sourceforge.net/geany/?rev=1636&view=rev Author: eht16 Date: 2007-06-23 09:49:15 -0700 (Sat, 23 Jun 2007)
Log Message: ----------- Merge recent changes from CTags SVN.
Modified Paths: -------------- trunk/ChangeLog trunk/tagmanager/basic.c
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2007-06-22 17:34:31 UTC (rev 1635) +++ trunk/ChangeLog 2007-06-23 16:49:15 UTC (rev 1636) @@ -1,3 +1,8 @@ +2007-06-23 Enrico Tröger enrico.troeger@uvena.de + + * tagmanager/basic.c: Merge recent changes from CTags SVN. + + 2007-06-22 Enrico Tröger enrico.troeger@uvena.de
* tagmanager/c.c, tagmanager/get.c, tagmanager/get.h:
Modified: trunk/tagmanager/basic.c =================================================================== --- trunk/tagmanager/basic.c 2007-06-22 17:34:31 UTC (rev 1635) +++ trunk/tagmanager/basic.c 2007-06-23 16:49:15 UTC (rev 1636) @@ -38,6 +38,7 @@ typedef struct { char const *token; BasicKind kind; + int skip; } KeyWord;
static kindOption BasicKinds[] = { @@ -50,37 +51,38 @@ };
static KeyWord blitzbasic_keywords[] = { - {"const", K_CONST}, - {"global", K_VARIABLE}, - {"dim", K_VARIABLE}, - {"function", K_FUNCTION}, - {"type", K_TYPE}, - {NULL, 0} + {"const", K_CONST, 0}, + {"global", K_VARIABLE, 0}, + {"dim", K_VARIABLE, 0}, + {"function", K_FUNCTION, 0}, + {"type", K_TYPE, 0}, + {NULL, 0, 0} };
static KeyWord purebasic_keywords[] = { - {"newlist", K_VARIABLE}, - {"global", K_VARIABLE}, - {"dim", K_VARIABLE}, - {"procedure", K_FUNCTION}, - {"interface", K_TYPE}, - {"structure", K_TYPE}, - {NULL, 0} + {"newlist", K_VARIABLE, 0}, + {"global", K_VARIABLE, 0}, + {"dim", K_VARIABLE, 0}, + {"procedure", K_FUNCTION, 0}, + {"interface", K_TYPE, 0}, + {"structure", K_TYPE, 0}, + {NULL, 0, 0} };
static KeyWord freebasic_keywords[] = { - {"const", K_CONST}, - {"dim", K_VARIABLE}, - {"common", K_VARIABLE}, - {"function", K_FUNCTION}, - {"sub", K_FUNCTION}, - {"private sub", K_FUNCTION}, - {"public sub", K_FUNCTION}, - {"private function", K_FUNCTION}, - {"public function", K_FUNCTION}, - {"type", K_TYPE}, - {"enum", K_ENUM}, - {NULL, 0} + {"const", K_CONST, 0}, + {"dim as", K_VARIABLE, 1}, + {"dim", K_VARIABLE, 0}, + {"common", K_VARIABLE, 0}, + {"function", K_FUNCTION, 0}, + {"sub", K_FUNCTION, 0}, + {"private sub", K_FUNCTION, 0}, + {"public sub", K_FUNCTION, 0}, + {"private function", K_FUNCTION, 0}, + {"public function", K_FUNCTION, 0}, + {"type", K_TYPE, 0}, + {"enum", K_ENUM, 0}, + {NULL, 0, 0} };
/* @@ -88,7 +90,7 @@ */
/* Match the name of a tag (function, variable, type, ...) starting at pos. */ -static void extract_name (char const *pos, vString * name) +static char const *extract_name (char const *pos, vString * name) { while (isspace (*pos)) pos++; @@ -96,29 +98,29 @@ for (; *pos && !isspace (*pos) && *pos != '(' && *pos != ','; pos++) vStringPut (name, *pos); vStringTerminate (name); + return pos; }
/* Match a keyword starting at p (case insensitive). */ -static void match_keyword (const char *p, const char *keyword, BasicKind kind) +static int match_keyword (const char *p, KeyWord const *kw) { vString *name; size_t i; - for (i = 0; i < strlen (keyword); i++) + int j; + for (i = 0; i < strlen (kw->token); i++) { - if (tolower (p[i]) != keyword[i]) - return; + if (tolower (p[i]) != kw->token[i]) + return 0; } name = vStringNew (); - extract_name (p + i, name); - // if we have "DIM AS STRING str" we should skip "AS STRING" - eht16 - if (strcmp(keyword, "dim") == 0 && strncasecmp (name->buffer, "as", 2) == 0) + p += i; + for (j = 0; j < 1 + kw->skip; j++) { - char *new_start = strchr (p + i + 4, ' '); // + 4 skips " AS " - if (new_start != NULL) - extract_name (new_start + 1, name); - } - makeSimpleTag (name, BasicKinds, kind); + p = extract_name (p, name); + } + makeSimpleTag (name, BasicKinds, kw->kind); vStringDelete (name); + return 1; }
/* Match a "label:" style label. */ @@ -167,7 +169,7 @@
/* In Basic, keywords always are at the start of the line. */ for (kw = keywords; kw->token; kw++) - match_keyword (p, kw->token, kw->kind); + if (match_keyword (p, kw)) break;
/* Is it a label? */ label (p);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.