[geany/geany] b6ca38: parse: other small syncs
Jiří Techet
git-noreply at xxxxx
Mon Dec 17 21:05:52 UTC 2018
Branch: refs/heads/master
Author: Jiří Techet <techet at gmail.com>
Committer: Jiří Techet <techet at gmail.com>
Date: Tue, 11 Oct 2016 21:40:20 UTC
Commit: b6ca38712f944c87ecdcafbbf3dba55a6279405b
https://github.com/geany/geany/commit/b6ca38712f944c87ecdcafbbf3dba55a6279405b
Log Message:
-----------
parse: other small syncs
Modified Paths:
--------------
ctags/main/parse.c
ctags/main/parse.h
src/tagmanager/tm_ctags_wrappers.c
Modified: ctags/main/parse.c
102 lines changed, 67 insertions(+), 35 deletions(-)
===================================================================
@@ -33,12 +33,19 @@
#endif
#include "xtag.h"
+/*
+ * FUNCTION PROTOTYPES
+ */
+
+static void installKeywordTable (const langType language);
+static void installTagRegexTable (const langType language);
+
/*
* DATA DEFINITIONS
*/
static parserDefinitionFunc* BuiltInParsers[] = { PARSER_LIST };
parserDefinition** LanguageTable = NULL;
-unsigned int LanguageCount = 0;
+static unsigned int LanguageCount = 0;
static kindOption defaultFileKind = {
.enabled = false,
.letter = KIND_FILE_DEFAULT,
@@ -50,16 +57,24 @@ static kindOption defaultFileKind = {
* FUNCTION DEFINITIONS
*/
-extern void makeSimpleTag (const vString* const name,
- kindOption* const kinds, const int kind)
+extern unsigned int countParsers (void)
+{
+ return LanguageCount;
+}
+
+extern int makeSimpleTag (
+ const vString* const name, kindOption* const kinds, const int kind)
{
+ int r = CORK_NIL;
+
if (name != NULL && vStringLength (name) > 0)
{
tagEntryInfo e;
- initTagEntry (&e, vStringValue (name), &(kinds [kind]));
+ initTagEntry (&e, vStringValue (name), & kinds [kind]);
- makeTagEntry (&e);
+ r = makeTagEntry (&e);
}
+ return r;
}
@@ -86,9 +101,15 @@ extern parserDefinition* parserNewFull (const char* name, char fileKind)
extern const char *getLanguageName (const langType language)
{
- /*Assert (0 <= language && language < (int) LanguageCount);*/
- if (language < 0) return NULL;
- return LanguageTable [language]->name;
+ const char* result;
+ if (language == LANG_IGNORE)
+ result = "unknown";
+ else
+ {
+ Assert (0 <= language && language < (int) LanguageCount);
+ result = LanguageTable [language]->name;
+ }
+ return result;
}
extern kindOption* getLanguageFileKind (const langType language)
@@ -173,9 +194,9 @@ static vString* determineInterpreter (const char* const cmd)
do
{
vStringClear (interpreter);
- for ( ; isspace (*p) ; ++p)
+ for ( ; isspace ((int) *p) ; ++p)
; /* no-op */
- for ( ; *p != '\0' && ! isspace (*p) ; ++p)
+ for ( ; *p != '\0' && ! isspace ((int) *p) ; ++p)
vStringPut (interpreter, (int) *p);
} while (strcmp (vStringValue (interpreter), "env") == 0);
return interpreter;
@@ -227,33 +248,42 @@ extern void printLanguageMap (const langType language)
extern void installLanguageMapDefault (const langType language)
{
- Assert (language >= 0);
- if (LanguageTable [language]->currentPatterns != NULL)
- stringListDelete (LanguageTable [language]->currentPatterns);
- if (LanguageTable [language]->currentExtensions != NULL)
- stringListDelete (LanguageTable [language]->currentExtensions);
-
- if (LanguageTable [language]->patterns == NULL)
- LanguageTable [language]->currentPatterns = stringListNew ();
+ parserDefinition* lang;
+ Assert (0 <= language && language < (int) LanguageCount);
+ lang = LanguageTable [language];
+ if (lang->currentPatterns != NULL)
+ stringListDelete (lang->currentPatterns);
+ if (lang->currentExtensions != NULL)
+ stringListDelete (lang->currentExtensions);
+
+ if (lang->patterns == NULL)
+ lang->currentPatterns = stringListNew ();
else
{
- LanguageTable [language]->currentPatterns =
- stringListNewFromArgv (LanguageTable [language]->patterns);
+ lang->currentPatterns =
+ stringListNewFromArgv (lang->patterns);
}
- if (LanguageTable [language]->extensions == NULL)
- LanguageTable [language]->currentExtensions = stringListNew ();
+ if (lang->extensions == NULL)
+ lang->currentExtensions = stringListNew ();
else
{
- LanguageTable [language]->currentExtensions =
- stringListNewFromArgv (LanguageTable [language]->extensions);
+ lang->currentExtensions =
+ stringListNewFromArgv (lang->extensions);
+ }
+ BEGIN_VERBOSE(vfp);
+ {
+ printLanguageMap (language);
+ putc ('\n', vfp);
}
+ END_VERBOSE();
}
extern void installLanguageMapDefaults (void)
{
unsigned int i;
for (i = 0 ; i < LanguageCount ; ++i)
{
+ verbose (" %s: ", getLanguageName (i));
installLanguageMapDefault (i);
}
}
@@ -268,10 +298,12 @@ extern void clearLanguageMap (const langType language)
extern void addLanguagePatternMap (const langType language, const char* ptrn)
{
vString* const str = vStringNewInit (ptrn);
+ parserDefinition* lang;
Assert (0 <= language && language < (int) LanguageCount);
- if (LanguageTable [language]->currentPatterns == NULL)
- LanguageTable [language]->currentPatterns = stringListNew ();
- stringListAdd (LanguageTable [language]->currentPatterns, str);
+ lang = LanguageTable [language];
+ if (lang->currentPatterns == NULL)
+ lang->currentPatterns = stringListNew ();
+ stringListAdd (lang->currentPatterns, str);
}
extern void addLanguageExtensionMap (const langType language,
@@ -314,7 +346,7 @@ extern void initializeParser (langType lang)
if (lang == LANG_AUTO)
{
int i;
- for (i = 0; i < LanguageCount; i++)
+ for (i = 0; i < countParsers(); i++)
initializeParserOne (i);
}
else
@@ -333,9 +365,10 @@ extern void initializeParsing (void)
unsigned int builtInCount;
unsigned int i;
- builtInCount = sizeof (BuiltInParsers) / sizeof (BuiltInParsers [0]);
+ builtInCount = ARRAY_SIZE (BuiltInParsers);
LanguageTable = xMalloc (builtInCount, parserDefinition*);
+ verbose ("Installing parsers: ");
for (i = 0 ; i < builtInCount ; ++i)
{
parserDefinition* const def = (*BuiltInParsers [i]) ();
@@ -357,6 +390,7 @@ extern void initializeParsing (void)
accepted = true;
if (accepted)
{
+ verbose ("%s%s", i > 0 ? ", " : "", def->name);
def->id = LanguageCount++;
LanguageTable [def->id] = def;
}
@@ -387,7 +421,7 @@ extern bool processAliasOption (
return false;
}
-extern void installTagRegexTable (const langType language)
+static void installTagRegexTable (const langType language)
{
parserDefinition* lang;
unsigned int i;
@@ -396,32 +430,30 @@ extern void installTagRegexTable (const langType language)
lang = LanguageTable [language];
- if ((lang->tagRegexTable != NULL) && (lang->tagRegexInstalled == false))
+ if (lang->tagRegexTable != NULL)
{
for (i = 0; i < lang->tagRegexCount; ++i)
addTagRegex (language,
lang->tagRegexTable [i].regex,
lang->tagRegexTable [i].name,
lang->tagRegexTable [i].kinds,
lang->tagRegexTable [i].flags);
- lang->tagRegexInstalled = true;
}
}
-extern void installKeywordTable (const langType language)
+static void installKeywordTable (const langType language)
{
parserDefinition* lang;
unsigned int i;
Assert (0 <= language && language < (int) LanguageCount);
lang = LanguageTable [language];
- if ((lang->keywordTable != NULL) && (lang->keywordInstalled == false))
+ if (lang->keywordTable != NULL)
{
for (i = 0; i < lang->keywordCount; ++i)
addKeyword (lang->keywordTable [i].name,
language,
lang->keywordTable [i].id);
- lang->keywordInstalled = true;
}
}
Modified: ctags/main/parse.h
13 lines changed, 4 insertions(+), 9 deletions(-)
===================================================================
@@ -83,9 +83,6 @@ struct sParserDefinition {
unsigned int initialized:1; /* initialize() is called or not */
subparser *subparsers; /* The parsers on this list must be initialized when
this parser is initialized. */
-
- unsigned int tagRegexInstalled:1; /* tagRegexTable is installed or not. */
- unsigned int keywordInstalled:1; /* keywordTable is installed or not. */
};
typedef parserDefinition* (parserDefinitionFunc) (void);
@@ -112,14 +109,14 @@ typedef enum {
* return a structure allocated using parserNew(). This structure must,
* at minimum, set the `parser' field.
*/
-extern parserDefinitionFunc PARSER_LIST;
extern parserDefinition** LanguageTable;
-extern unsigned int LanguageCount;
+extern parserDefinitionFunc PARSER_LIST;
/* Legacy interface */
extern bool includingDefineTags (void);
+
/* Language processing and parsing */
-extern void makeSimpleTag (const vString* const name, kindOption* const kinds, const int kind);
+extern int makeSimpleTag (const vString* const name, kindOption* const kinds, const int kind);
extern parserDefinition* parserNew (const char* name);
extern parserDefinition* parserNewFull (const char* name, char fileKind);
@@ -137,17 +134,15 @@ extern void enableLanguages (const bool state);
extern void enableLanguage (const langType language, const bool state);
extern void initializeParsing (void);
extern void initializeParser (langType language);
+extern unsigned int countParsers (void);
extern void processLanguageDefineOption (const char *const option, const char *const parameter);
extern bool processKindOption (const char *const option, const char *const parameter);
-extern void installKeywordTable (const langType language);
-
/* Regex interface */
extern void findRegexTags (void);
extern bool matchRegex (const vString* const line, const langType language);
extern bool processRegexOption (const char *const option, const char *const parameter);
extern void addLanguageRegex (const langType language, const char* const regex);
-extern void installTagRegexTable (const langType language);
extern void addTagRegex (const langType language, const char* const regex, const char* const name, const char* const kinds, const char* const flags);
extern void addCallbackRegex (const langType language, const char* const regex, const char* flags, const regexCallback callback);
extern void disableRegexKinds (const langType language CTAGS_ATTR_UNUSED);
Modified: src/tagmanager/tm_ctags_wrappers.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -153,5 +153,5 @@ gboolean tm_ctags_is_using_regex_parser(TMParserType lang)
guint tm_ctags_get_lang_count(void)
{
- return LanguageCount;
+ return countParsers();
}
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list