parse: some simple syncs and include syncs
Addition of dependency.c/h and promise.c/h. Also moved tagEntryFunction definitions to geany.c/h.
This commit is contained in:
parent
2f83d0d164
commit
051b780745
@ -58,6 +58,8 @@ libctags_la_SOURCES = \
|
|||||||
main/ctags.h \
|
main/ctags.h \
|
||||||
main/debug.h \
|
main/debug.h \
|
||||||
main/debug.c \
|
main/debug.c \
|
||||||
|
main/dependency.h \
|
||||||
|
main/dependency.c \
|
||||||
main/e_msoft.h \
|
main/e_msoft.h \
|
||||||
main/entry.c \
|
main/entry.c \
|
||||||
main/entry.h \
|
main/entry.h \
|
||||||
@ -101,6 +103,8 @@ libctags_la_SOURCES = \
|
|||||||
main/parsers.h \
|
main/parsers.h \
|
||||||
main/pcoproc.c \
|
main/pcoproc.c \
|
||||||
main/pcoproc.h \
|
main/pcoproc.h \
|
||||||
|
main/promise.c \
|
||||||
|
main/promise.h \
|
||||||
main/ptag.c \
|
main/ptag.c \
|
||||||
main/ptag.h \
|
main/ptag.h \
|
||||||
main/ptrarray.c \
|
main/ptrarray.c \
|
||||||
|
102
ctags/main/dependency.c
Normal file
102
ctags/main/dependency.c
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016, Red Hat, Inc.
|
||||||
|
* Copyright (c) 2016, Masatake YAMATO
|
||||||
|
*
|
||||||
|
* Author: Masatake YAMATO <yamato@redhat.com>
|
||||||
|
*
|
||||||
|
* This source code is released for free distribution under the terms of the
|
||||||
|
* GNU General Public License version 2 or (at your option) any later version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "general.h" /* must always come first */
|
||||||
|
|
||||||
|
#include "dependency.h"
|
||||||
|
#include "parse.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
static void linkKinds (kindOption *masterKind, kindOption *slaveKind)
|
||||||
|
{
|
||||||
|
kindOption *tail;
|
||||||
|
|
||||||
|
slaveKind->master = masterKind;
|
||||||
|
|
||||||
|
tail = slaveKind;
|
||||||
|
while (tail->slave)
|
||||||
|
{
|
||||||
|
tail->enabled = masterKind->enabled;
|
||||||
|
tail = tail->slave;
|
||||||
|
}
|
||||||
|
|
||||||
|
tail->slave = masterKind->slave;
|
||||||
|
masterKind->slave = slaveKind;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void linkKindDependency (parserDefinition *const masterParser,
|
||||||
|
parserDefinition *const slaveParser)
|
||||||
|
{
|
||||||
|
unsigned int k_slave, k_master;
|
||||||
|
kindOption *kind_slave, *kind_master;
|
||||||
|
|
||||||
|
for (k_slave = 0; k_slave < slaveParser->kindCount; k_slave++)
|
||||||
|
{
|
||||||
|
if (slaveParser->kinds [k_slave].syncWith == LANG_AUTO)
|
||||||
|
{
|
||||||
|
kind_slave = slaveParser->kinds + k_slave;
|
||||||
|
for (k_master = 0; k_master < masterParser->kindCount; k_master++)
|
||||||
|
{
|
||||||
|
kind_master = masterParser->kinds + k_master;
|
||||||
|
if ((kind_slave->letter == kind_master->letter)
|
||||||
|
&& (strcmp (kind_slave->name, kind_master->name) == 0))
|
||||||
|
{
|
||||||
|
linkKinds (kind_master, kind_slave);
|
||||||
|
kind_slave->syncWith = masterParser->id;
|
||||||
|
kind_master->syncWith = masterParser->id;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void linkDependencyAtInitializeParsing (depType dtype,
|
||||||
|
parserDefinition *const masterParser,
|
||||||
|
parserDefinition *const slaveParser)
|
||||||
|
{
|
||||||
|
if (dtype == DEPTYPE_KIND_OWNER)
|
||||||
|
linkKindDependency (masterParser, slaveParser);
|
||||||
|
else if (dtype == DEPTYPE_SUBPARSER)
|
||||||
|
{
|
||||||
|
subparser *s = xMalloc (1, subparser);
|
||||||
|
|
||||||
|
s->id = slaveParser->id;
|
||||||
|
s->next = masterParser->subparsers;
|
||||||
|
masterParser->subparsers = s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void initializeSubparsers (const parserDefinition *parser)
|
||||||
|
{
|
||||||
|
subparser *sp;
|
||||||
|
|
||||||
|
for (sp = parser->subparsers; sp; sp = sp->next)
|
||||||
|
initializeParser (sp->id);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void finalizeSubparsers (parserDefinition *parser)
|
||||||
|
{
|
||||||
|
subparser *sp;
|
||||||
|
subparser *tmp;
|
||||||
|
|
||||||
|
for (sp = parser->subparsers; sp;)
|
||||||
|
{
|
||||||
|
tmp = sp;
|
||||||
|
sp = sp->next;
|
||||||
|
tmp->next = NULL;
|
||||||
|
eFree (tmp);
|
||||||
|
}
|
||||||
|
parser->subparsers = NULL;
|
||||||
|
}
|
45
ctags/main/dependency.h
Normal file
45
ctags/main/dependency.h
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016, Red Hat, Inc.
|
||||||
|
* Copyright (c) 2016, Masatake YAMATO
|
||||||
|
*
|
||||||
|
* Author: Masatake YAMATO <yamato@redhat.com>
|
||||||
|
*
|
||||||
|
* This source code is released for free distribution under the terms of the
|
||||||
|
* GNU General Public License version 2 or (at your option) any later version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef CTAGS_MAIN_DEPENDENCY_H
|
||||||
|
#define CTAGS_MAIN_DEPENDENCY_H
|
||||||
|
|
||||||
|
#include "general.h"
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum eDepType {
|
||||||
|
DEPTYPE_KIND_OWNER,
|
||||||
|
DEPTYPE_SUBPARSER,
|
||||||
|
COUNT_DEPTYPES,
|
||||||
|
} depType;
|
||||||
|
|
||||||
|
typedef struct sParserDependency {
|
||||||
|
depType type;
|
||||||
|
const char *upperParser;
|
||||||
|
void *data;
|
||||||
|
} parserDependency;
|
||||||
|
|
||||||
|
extern void linkDependencyAtInitializeParsing (depType dtype,
|
||||||
|
parserDefinition *const masterParser,
|
||||||
|
parserDefinition *const slaveParser);
|
||||||
|
|
||||||
|
typedef struct sSubparser subparser;
|
||||||
|
struct sSubparser {
|
||||||
|
langType id;
|
||||||
|
subparser *next;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void initializeSubparsers (const parserDefinition *parser);
|
||||||
|
extern void finalizeSubparsers (parserDefinition *parser);
|
||||||
|
|
||||||
|
#endif /* CTAGS_MAIN_DEPENDENCY_H */
|
@ -11,6 +11,7 @@
|
|||||||
* INCLUDE FILES
|
* INCLUDE FILES
|
||||||
*/
|
*/
|
||||||
#include "general.h" /* must always come first */
|
#include "general.h" /* must always come first */
|
||||||
|
#include "geany.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h> /* to define isspace () */
|
#include <ctype.h> /* to define isspace () */
|
||||||
@ -1092,8 +1093,7 @@ static void writeTagEntry (const tagEntryInfo *const tag)
|
|||||||
buildFqTagCache (tag);
|
buildFqTagCache (tag);
|
||||||
*/
|
*/
|
||||||
/* length = writer->writeEntry (TagFile.mio, tag, writerData); */
|
/* length = writer->writeEntry (TagFile.mio, tag, writerData); */
|
||||||
if (TagEntryFunction != NULL)
|
length = callTagEntryFunction (tag);
|
||||||
length = TagEntryFunction(tag, TagEntryUserData);
|
|
||||||
|
|
||||||
++TagFile.numTags.added;
|
++TagFile.numTags.added;
|
||||||
rememberMaxLengths (strlen (tag->name), (size_t) length);
|
rememberMaxLengths (strlen (tag->name), (size_t) length);
|
||||||
|
@ -15,6 +15,9 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
static tagEntryFunction TagEntryFunction = NULL;
|
||||||
|
static void *TagEntryUserData = NULL;
|
||||||
|
|
||||||
/* tags_ignore is a NULL-terminated array of strings, read from ~/.config/geany/ignore.tags.
|
/* tags_ignore is a NULL-terminated array of strings, read from ~/.config/geany/ignore.tags.
|
||||||
* This file contains a space or newline separated list of symbols which should be ignored
|
* This file contains a space or newline separated list of symbols which should be ignored
|
||||||
* by the C/C++ parser, see -I command line option of ctags for details. */
|
* by the C/C++ parser, see -I command line option of ctags for details. */
|
||||||
@ -78,3 +81,17 @@ extern bool isIgnoreToken (const char *const name,
|
|||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void setTagEntryFunction(tagEntryFunction entry_function, void *user_data)
|
||||||
|
{
|
||||||
|
TagEntryFunction = entry_function;
|
||||||
|
TagEntryUserData = user_data;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int callTagEntryFunction(const tagEntryInfo *const tag)
|
||||||
|
{
|
||||||
|
int length = 0;
|
||||||
|
if (TagEntryFunction != NULL)
|
||||||
|
length = TagEntryFunction(tag, TagEntryUserData);
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
@ -9,6 +9,14 @@
|
|||||||
#ifndef CTAGS_GEANY_H
|
#ifndef CTAGS_GEANY_H
|
||||||
#define CTAGS_GEANY_H
|
#define CTAGS_GEANY_H
|
||||||
|
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
typedef int (*tagEntryFunction) (const tagEntryInfo *const tag, void *user_data);
|
||||||
|
|
||||||
|
|
||||||
extern bool isIgnoreToken (const char *const name, bool *const pIgnoreParens, const char **const replacement);
|
extern bool isIgnoreToken (const char *const name, bool *const pIgnoreParens, const char **const replacement);
|
||||||
|
|
||||||
|
extern void setTagEntryFunction(tagEntryFunction entry_function, void *user_data);
|
||||||
|
extern int callTagEntryFunction(const tagEntryInfo *const tag);
|
||||||
|
|
||||||
#endif /* CTAGS_GEANY_H */
|
#endif /* CTAGS_GEANY_H */
|
||||||
|
@ -16,16 +16,21 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "mio.h"
|
|
||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
|
#include "flags.h"
|
||||||
#include "keyword.h"
|
#include "keyword.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#define OPTION_WRITE
|
#define OPTION_WRITE
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
#include "parsers.h"
|
#include "parsers.h"
|
||||||
|
#include "promise.h"
|
||||||
|
#include "ptag.h"
|
||||||
#include "read.h"
|
#include "read.h"
|
||||||
#include "vstring.h"
|
|
||||||
#include "routines.h"
|
#include "routines.h"
|
||||||
|
#include "vstring.h"
|
||||||
|
#ifdef HAVE_ICONV
|
||||||
|
# include "mbcs.h"
|
||||||
|
#endif
|
||||||
#include "xtag.h"
|
#include "xtag.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -41,20 +46,10 @@ static kindOption defaultFileKind = {
|
|||||||
.description = KIND_FILE_DEFAULT_LONG,
|
.description = KIND_FILE_DEFAULT_LONG,
|
||||||
};
|
};
|
||||||
|
|
||||||
tagEntryFunction TagEntryFunction = NULL;
|
|
||||||
void *TagEntryUserData = NULL;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION DEFINITIONS
|
* FUNCTION DEFINITIONS
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extern void setTagEntryFunction(tagEntryFunction entry_function, void *user_data)
|
|
||||||
{
|
|
||||||
TagEntryFunction = entry_function;
|
|
||||||
TagEntryUserData = user_data;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
extern void makeSimpleTag (const vString* const name,
|
extern void makeSimpleTag (const vString* const name,
|
||||||
kindOption* const kinds, const int kind)
|
kindOption* const kinds, const int kind)
|
||||||
{
|
{
|
||||||
@ -287,6 +282,12 @@ extern void addLanguageExtensionMap (const langType language,
|
|||||||
stringListAdd (LanguageTable [language]->currentExtensions, str);
|
stringListAdd (LanguageTable [language]->currentExtensions, str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void enableLanguage (const langType language, const bool state)
|
||||||
|
{
|
||||||
|
Assert (0 <= language && language < (int) LanguageCount);
|
||||||
|
LanguageTable [language]->enabled = state;
|
||||||
|
}
|
||||||
|
|
||||||
extern void enableLanguages (const bool state)
|
extern void enableLanguages (const bool state)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
@ -294,12 +295,6 @@ extern void enableLanguages (const bool state)
|
|||||||
LanguageTable [i]->enabled = state;
|
LanguageTable [i]->enabled = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void enableLanguage (const langType language, const bool state)
|
|
||||||
{
|
|
||||||
Assert (0 <= language && language < (int) LanguageCount);
|
|
||||||
LanguageTable [language]->enabled = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void initializeParserOne (langType lang)
|
static void initializeParserOne (langType lang)
|
||||||
{
|
{
|
||||||
parserDefinition *const parser = LanguageTable [lang];
|
parserDefinition *const parser = LanguageTable [lang];
|
||||||
@ -371,22 +366,6 @@ extern void initializeParsing (void)
|
|||||||
initializeParsers ();
|
initializeParsers ();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void freeParserResources (void)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
for (i = 0 ; i < LanguageCount ; ++i)
|
|
||||||
{
|
|
||||||
freeList (&LanguageTable [i]->currentPatterns);
|
|
||||||
freeList (&LanguageTable [i]->currentExtensions);
|
|
||||||
eFree (LanguageTable [i]->name);
|
|
||||||
LanguageTable [i]->name = NULL;
|
|
||||||
eFree (LanguageTable [i]);
|
|
||||||
}
|
|
||||||
eFree (LanguageTable);
|
|
||||||
LanguageTable = NULL;
|
|
||||||
LanguageCount = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Option parsing
|
* Option parsing
|
||||||
*/
|
*/
|
||||||
@ -396,8 +375,14 @@ extern void processLanguageDefineOption (const char *const option,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
extern bool processKindOption (const char *const option,
|
extern bool processKindOption (
|
||||||
const char *const parameter)
|
const char *const option, const char *const parameter)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern bool processAliasOption (
|
||||||
|
const char *const option, const char *const parameter)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -440,9 +425,3 @@ extern void installKeywordTable (const langType language)
|
|||||||
lang->keywordInstalled = true;
|
lang->keywordInstalled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern bool processAliasOption (
|
|
||||||
const char *const option, const char *const parameter)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
@ -13,10 +13,13 @@
|
|||||||
* INCLUDE FILES
|
* INCLUDE FILES
|
||||||
*/
|
*/
|
||||||
#include "general.h" /* must always come first */
|
#include "general.h" /* must always come first */
|
||||||
|
#include "types.h"
|
||||||
|
|
||||||
|
#include "dependency.h"
|
||||||
|
#include "field.h"
|
||||||
|
#include "kind.h"
|
||||||
#include "parsers.h" /* contains list of parsers */
|
#include "parsers.h" /* contains list of parsers */
|
||||||
#include "strlist.h"
|
#include "strlist.h"
|
||||||
#include "entry.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MACROS
|
* MACROS
|
||||||
@ -32,7 +35,6 @@ typedef void (*createRegexTag) (const vString* const name);
|
|||||||
typedef void (*simpleParser) (void);
|
typedef void (*simpleParser) (void);
|
||||||
typedef bool (*rescanParser) (const unsigned int passCount);
|
typedef bool (*rescanParser) (const unsigned int passCount);
|
||||||
typedef void (*parserInitialize) (langType language);
|
typedef void (*parserInitialize) (langType language);
|
||||||
typedef int (*tagEntryFunction) (const tagEntryInfo *const tag, void *user_data);
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
METHOD_NOT_CRAFTED = 1 << 0,
|
METHOD_NOT_CRAFTED = 1 << 0,
|
||||||
@ -44,10 +46,10 @@ typedef enum {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *const regex;
|
const char *const regex;
|
||||||
const char *const name;
|
const char* const name;
|
||||||
const char *const kinds;
|
const char* const kinds;
|
||||||
const char *const flags;
|
const char *const flags;
|
||||||
bool *disabled;
|
bool *disabled;
|
||||||
} tagRegexTable;
|
} tagRegexTable;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -66,7 +68,7 @@ struct sParserDefinition {
|
|||||||
parserInitialize initialize; /* initialization routine, if needed */
|
parserInitialize initialize; /* initialization routine, if needed */
|
||||||
simpleParser parser; /* simple parser (common case) */
|
simpleParser parser; /* simple parser (common case) */
|
||||||
rescanParser parser2; /* rescanning parser (unusual case) */
|
rescanParser parser2; /* rescanning parser (unusual case) */
|
||||||
unsigned int method; /* See PARSE__... definitions above */
|
unsigned int method; /* See METHOD_ definitions above */
|
||||||
|
|
||||||
/* used internally */
|
/* used internally */
|
||||||
unsigned int id; /* id assigned to language */
|
unsigned int id; /* id assigned to language */
|
||||||
@ -79,6 +81,9 @@ struct sParserDefinition {
|
|||||||
unsigned int keywordCount;
|
unsigned int keywordCount;
|
||||||
|
|
||||||
unsigned int initialized:1; /* initialize() is called or not */
|
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 tagRegexInstalled:1; /* tagRegexTable is installed or not. */
|
||||||
unsigned int keywordInstalled:1; /* keywordTable is installed or not. */
|
unsigned int keywordInstalled:1; /* keywordTable is installed or not. */
|
||||||
};
|
};
|
||||||
@ -86,7 +91,7 @@ struct sParserDefinition {
|
|||||||
typedef parserDefinition* (parserDefinitionFunc) (void);
|
typedef parserDefinition* (parserDefinitionFunc) (void);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int start; /* character index in line where match starts */
|
size_t start; /* character index in line where match starts */
|
||||||
size_t length; /* length of match */
|
size_t length; /* length of match */
|
||||||
} regexMatch;
|
} regexMatch;
|
||||||
|
|
||||||
@ -98,6 +103,7 @@ typedef enum {
|
|||||||
LMAP_ALL = LMAP_PATTERN | LMAP_EXTENSION,
|
LMAP_ALL = LMAP_PATTERN | LMAP_EXTENSION,
|
||||||
} langmapType;
|
} langmapType;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* FUNCTION PROTOTYPES
|
* FUNCTION PROTOTYPES
|
||||||
*/
|
*/
|
||||||
@ -131,7 +137,6 @@ extern void enableLanguages (const bool state);
|
|||||||
extern void enableLanguage (const langType language, const bool state);
|
extern void enableLanguage (const langType language, const bool state);
|
||||||
extern void initializeParsing (void);
|
extern void initializeParsing (void);
|
||||||
extern void initializeParser (langType language);
|
extern void initializeParser (langType language);
|
||||||
extern void freeParserResources (void);
|
|
||||||
extern void processLanguageDefineOption (const char *const option, const char *const parameter);
|
extern void processLanguageDefineOption (const char *const option, const char *const parameter);
|
||||||
extern bool processKindOption (const char *const option, const char *const parameter);
|
extern bool processKindOption (const char *const option, const char *const parameter);
|
||||||
|
|
||||||
@ -147,15 +152,8 @@ extern void addTagRegex (const langType language, const char* const regex, const
|
|||||||
extern void addCallbackRegex (const langType language, const char* const regex, const char* flags, const regexCallback callback);
|
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);
|
extern void disableRegexKinds (const langType language CTAGS_ATTR_UNUSED);
|
||||||
extern bool enableRegexKind (const langType language, const int kind, const bool mode);
|
extern bool enableRegexKind (const langType language, const int kind, const bool mode);
|
||||||
extern void printRegexKindOptions (const langType language);
|
|
||||||
extern void printRegexKinds (const langType language, bool indent);
|
extern void printRegexKinds (const langType language, bool indent);
|
||||||
extern void freeRegexResources (void);
|
extern void freeRegexResources (void);
|
||||||
extern bool checkRegex (void);
|
extern bool checkRegex (void);
|
||||||
|
|
||||||
|
|
||||||
/* Extra stuff for Tag Manager */
|
|
||||||
extern tagEntryFunction TagEntryFunction;
|
|
||||||
extern void *TagEntryUserData;
|
|
||||||
extern void setTagEntryFunction(tagEntryFunction entry_function, void *user_data);
|
|
||||||
|
|
||||||
#endif /* CTAGS_MAIN_PARSE_H */
|
#endif /* CTAGS_MAIN_PARSE_H */
|
||||||
|
102
ctags/main/promise.c
Normal file
102
ctags/main/promise.c
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016, Red Hat, Inc.
|
||||||
|
* Copyright (c) 2016, Masatake YAMATO
|
||||||
|
*
|
||||||
|
* Author: Masatake YAMATO <yamato@redhat.com>
|
||||||
|
*
|
||||||
|
* This source code is released for free distribution under the terms of the
|
||||||
|
* GNU General Public License version 2 or (at your option) any later version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "general.h"
|
||||||
|
#include "promise.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "xtag.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct promise {
|
||||||
|
langType lang;
|
||||||
|
unsigned long startLine;
|
||||||
|
int startCharOffset;
|
||||||
|
unsigned long endLine;
|
||||||
|
int endCharOffset;
|
||||||
|
unsigned long sourceLineOffset;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct promise *promises;
|
||||||
|
static int promise_count;
|
||||||
|
static int promise_allocated;
|
||||||
|
|
||||||
|
int makePromise (const char *parser,
|
||||||
|
unsigned long startLine, int startCharOffset,
|
||||||
|
unsigned long endLine, int endCharOffset,
|
||||||
|
unsigned long sourceLineOffset)
|
||||||
|
{
|
||||||
|
struct promise *p;
|
||||||
|
int r;
|
||||||
|
langType lang;
|
||||||
|
|
||||||
|
if (!isXtagEnabled (XTAG_TAGS_GENERATED_BY_SUB_PARSERS))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
lang = getNamedLanguage (parser, 0);
|
||||||
|
if (lang == LANG_IGNORE)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if ( promise_count == promise_allocated)
|
||||||
|
{
|
||||||
|
size_t c = promise_allocated? (promise_allocated * 2): 8;
|
||||||
|
promises = xRealloc (promises, c, struct promise);
|
||||||
|
promise_allocated = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
p = promises + promise_count;
|
||||||
|
|
||||||
|
p->lang = lang;
|
||||||
|
p->startLine = startLine;
|
||||||
|
p->startCharOffset = startCharOffset;
|
||||||
|
p->endLine = endLine;
|
||||||
|
p->endCharOffset = endCharOffset;
|
||||||
|
p->sourceLineOffset = sourceLineOffset;
|
||||||
|
|
||||||
|
r = promise_count;
|
||||||
|
promise_count++;
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
void breakPromisesAfter (int promise)
|
||||||
|
{
|
||||||
|
Assert (promise_count >= promise);
|
||||||
|
|
||||||
|
promise_count = promise;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool forcePromises (void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
bool tagFileResized = false;
|
||||||
|
|
||||||
|
for (i = 0; i < promise_count; ++i)
|
||||||
|
{
|
||||||
|
struct promise *p = promises + i;
|
||||||
|
/* tagFileResized = runParserInNarrowedInputStream (p->lang,
|
||||||
|
p->startLine,
|
||||||
|
p->startCharOffset,
|
||||||
|
p->endLine,
|
||||||
|
p->endCharOffset,
|
||||||
|
p->sourceLineOffset)
|
||||||
|
? true
|
||||||
|
: tagFileResized;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
promise_count = 0;
|
||||||
|
return tagFileResized;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int getLastPromise (void)
|
||||||
|
{
|
||||||
|
return promise_count - 1;
|
||||||
|
}
|
27
ctags/main/promise.h
Normal file
27
ctags/main/promise.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016, Red Hat, Inc.
|
||||||
|
* Copyright (c) 2016, Masatake YAMATO
|
||||||
|
*
|
||||||
|
* Author: Masatake YAMATO <yamato@redhat.com>
|
||||||
|
*
|
||||||
|
* This source code is released for free distribution under the terms of the
|
||||||
|
* GNU General Public License version 2 or (at your option) any later version.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#ifndef CTAGS_MAIN_PROMISE_H
|
||||||
|
#define CTAGS_MAIN_PROMISE_H
|
||||||
|
|
||||||
|
#include "general.h"
|
||||||
|
#include "mio.h"
|
||||||
|
#include "parse.h"
|
||||||
|
|
||||||
|
int makePromise (const char *parser,
|
||||||
|
unsigned long startLine, int startCharOffset,
|
||||||
|
unsigned long endLine, int endCharOffset,
|
||||||
|
unsigned long sourceLineOffset);
|
||||||
|
bool forcePromises (void);
|
||||||
|
void breakPromisesAfter (int promise);
|
||||||
|
int getLastPromise (void);
|
||||||
|
|
||||||
|
#endif /* CTAGS_MAIN_PROMISE_H */
|
@ -21,6 +21,7 @@
|
|||||||
#include "read.h"
|
#include "read.h"
|
||||||
#include "vstring.h"
|
#include "vstring.h"
|
||||||
#include "routines.h"
|
#include "routines.h"
|
||||||
|
#include "entry.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DATA DEFINITIONS
|
* DATA DEFINITIONS
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "vstring.h"
|
#include "vstring.h"
|
||||||
#include "nestlevel.h"
|
#include "nestlevel.h"
|
||||||
#include "routines.h"
|
#include "routines.h"
|
||||||
|
#include "entry.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DATA DEFINITIONS
|
* DATA DEFINITIONS
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "read.h"
|
#include "read.h"
|
||||||
#include "vstring.h"
|
#include "vstring.h"
|
||||||
#include "routines.h"
|
#include "routines.h"
|
||||||
|
#include "entry.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DATA DEFINITIONS
|
* DATA DEFINITIONS
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "read.h"
|
#include "read.h"
|
||||||
#include "vstring.h"
|
#include "vstring.h"
|
||||||
#include "routines.h"
|
#include "routines.h"
|
||||||
|
#include "entry.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DATA DEFINITIONS
|
* DATA DEFINITIONS
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include "vstring.h"
|
#include "vstring.h"
|
||||||
#include "nestlevel.h"
|
#include "nestlevel.h"
|
||||||
#include "routines.h"
|
#include "routines.h"
|
||||||
|
#include "entry.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DATA DEFINITIONS
|
* DATA DEFINITIONS
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "nestlevel.h"
|
#include "nestlevel.h"
|
||||||
#include "vstring.h"
|
#include "vstring.h"
|
||||||
#include "routines.h"
|
#include "routines.h"
|
||||||
|
#include "entry.h"
|
||||||
|
|
||||||
|
|
||||||
/* as any character may happen in an input, use something highly unlikely */
|
/* as any character may happen in an input, use something highly unlikely */
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
#include "entry.h"
|
#include "entry.h"
|
||||||
#include "parse.h"
|
#include "parse.h"
|
||||||
#include "read.h"
|
#include "read.h"
|
||||||
|
#include "geany.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
TMCtagsNewTagCallback tag_callback;
|
TMCtagsNewTagCallback tag_callback;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user