cosmopolitan/third_party/ctags/parse.h

126 lines
5.0 KiB
C

#ifndef _PARSE_H
#define _PARSE_H
#include "third_party/ctags/general.h"
/* must always come first */
#include "third_party/ctags/parsers.h"
#include "third_party/ctags/strlist.h"
/*
* MACROS
*/
#define KIND_COUNT(kindTable) (sizeof(kindTable) / sizeof(kindOption))
#define LANG_AUTO (-1)
#define LANG_IGNORE (-2)
/*
* DATA DECLARATIONS
*/
typedef int langType;
typedef void (*createRegexTag)(const vString* const name);
typedef void (*simpleParser)(void);
typedef boolean (*rescanParser)(const unsigned int passCount);
typedef void (*parserInitialize)(langType language);
typedef struct sKindOption {
boolean enabled; /* are tags for kind enabled? */
int letter; /* kind letter */
const char* name; /* kind name */
const char* description; /* displayed in --help output */
} kindOption;
typedef struct {
/* defined by parser */
char* name; /* name of language */
kindOption* kinds; /* tag kinds handled by parser */
unsigned int kindCount; /* size of `kinds' list */
const char* const* extensions; /* list of default extensions */
const char* const* patterns; /* list of default file name patterns */
parserInitialize initialize; /* initialization routine, if needed */
simpleParser parser; /* simple parser (common case) */
rescanParser parser2; /* rescanning parser (unusual case) */
boolean regex; /* is this a regex parser? */
/* used internally */
unsigned int id; /* id assigned to language */
boolean enabled; /* currently enabled? */
stringList* currentPatterns; /* current list of file name patterns */
stringList* currentExtensions; /* current list of extensions */
} parserDefinition;
typedef parserDefinition*(parserDefinitionFunc)(void);
typedef struct {
size_t start; /* character index in line where match starts */
size_t length; /* length of match */
} regexMatch;
typedef void (*regexCallback)(const char* line, const regexMatch* matches,
unsigned int count);
/*
* FUNCTION PROTOTYPES
*/
/* Each parsers' definition function is called. The routine is expected to
* return a structure allocated using parserNew(). This structure must,
* at minimum, set the `parser' field.
*/
extern parserDefinitionFunc PARSER_LIST;
/* Legacy interface */
extern boolean includingDefineTags(void);
/* Language processing and parsing */
extern void makeSimpleTag(const vString* const name, kindOption* const kinds,
const int kind);
extern parserDefinition* parserNew(const char* name);
extern const char* getLanguageName(const langType language);
extern langType getNamedLanguage(const char* const name);
extern langType getFileLanguage(const char* const fileName);
extern void installLanguageMapDefault(const langType language);
extern void installLanguageMapDefaults(void);
extern void clearLanguageMap(const langType language);
extern boolean removeLanguageExtensionMap(const char* const extension);
extern void addLanguageExtensionMap(const langType language,
const char* extension);
extern void addLanguagePatternMap(const langType language, const char* ptrn);
extern void printLanguageMap(const langType language);
extern void printLanguageMaps(const langType language);
extern void enableLanguages(const boolean state);
extern void enableLanguage(const langType language, const boolean state);
extern void initializeParsing(void);
extern void freeParserResources(void);
extern void processLanguageDefineOption(const char* const option,
const char* const parameter);
extern boolean processKindOption(const char* const option,
const char* const parameter);
extern void printKindOptions(void);
extern void printLanguageKinds(const langType language);
extern void printLanguageList(void);
extern boolean parseFile(const char* const fileName);
/* Regex interface */
#ifdef HAVE_REGEX
extern void findRegexTags(void);
extern boolean matchRegex(const vString* const line, const langType language);
#endif
extern boolean processRegexOption(const char* const option,
const char* const parameter);
extern void addLanguageRegex(const langType language, const char* const regex);
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* const flags,
const regexCallback callback);
extern void disableRegexKinds(const langType language);
extern boolean enableRegexKind(const langType language, const int kind,
const boolean mode);
extern void printRegexKinds(const langType language, boolean indent);
extern void freeRegexResources(void);
extern void checkRegex(void);
#endif /* _PARSE_H */