Improve ctags callback API
[geany-mirror.git] / tagmanager / ctags / parse.h
blob97dcbf74bb7a56fca400b3bd3b9179a41e18e30c
1 /*
3 * Copyright (c) 1998-2001, Darren Hiebert
5 * This source code is released for free distribution under the terms of the
6 * GNU General Public License.
8 * Private definitions for parsing support.
9 */
10 #ifndef _PARSE_H
11 #define _PARSE_H
14 * INCLUDE FILES
16 #include "general.h" /* must always come first */
18 #include "parsers.h" /* contains list of parsers */
19 #include "strlist.h"
20 #include "entry.h"
23 * MACROS
25 #define KIND_COUNT(kindTable) (sizeof(kindTable)/sizeof(kindOption))
27 #define LANG_AUTO (-1)
28 #define LANG_IGNORE (-2)
31 * DATA DECLARATIONS
33 typedef int langType;
35 typedef void (*createRegexTag) (const vString* const name);
36 typedef void (*simpleParser) (void);
37 typedef boolean (*rescanParser) (const unsigned int passCount);
38 typedef void (*parserInitialize) (langType language);
39 typedef int (*tagEntryFunction) (const tagEntryInfo *const tag, void *user_data);
41 typedef struct sKindOption {
42 boolean enabled; /* are tags for kind enabled? */
43 const int letter; /* kind letter */
44 const char* name; /* kind name */
45 const char* const description; /* displayed in --help output */
46 } kindOption;
48 typedef struct {
49 /* defined by parser */
50 char* name; /* name of language */
51 kindOption* kinds; /* tag kinds handled by parser */
52 unsigned int kindCount; /* size of `kinds' list */
53 const char* const* extensions; /* list of default extensions */
54 const char* const* patterns; /* list of default file name patterns */
55 parserInitialize initialize; /* initialization routine, if needed */
56 simpleParser parser; /* simple parser (common case) */
57 rescanParser parser2; /* rescanning parser (unusual case) */
58 boolean regex; /* is this a regex parser? */
60 /* used internally */
61 unsigned int id; /* id assigned to language */
62 boolean enabled; /* currently enabled? */
63 stringList* currentPatterns; /* current list of file name patterns */
64 stringList* currentExtensions; /* current list of extensions */
65 } parserDefinition;
67 typedef parserDefinition* (parserDefinitionFunc) (void);
69 typedef struct {
70 int start; /* character index in line where match starts */
71 size_t length; /* length of match */
72 } regexMatch;
74 typedef void (*regexCallback) (const char *line, const regexMatch *matches, unsigned int count);
77 * FUNCTION PROTOTYPES
80 /* Each parsers' definition function is called. The routine is expected to
81 * return a structure allocated using parserNew(). This structure must,
82 * at minimum, set the `parser' field.
84 extern parserDefinitionFunc PARSER_LIST;
85 extern parserDefinition** LanguageTable;
86 /* Legacy interface */
87 extern boolean includingDefineTags (void);
88 extern void processLegacyKindOption (const char *const parameter);
90 /* Language processing and parsing */
91 extern void makeSimpleTag (const vString* const name, kindOption* const kinds, const int kind);
92 extern void makeSimpleScopedTag (const vString* const name, kindOption* const kinds, const int kind, const char* scope, const char* scope2, const char *access);
94 extern parserDefinition* parserNew (const char* name);
95 extern const char *getLanguageName (const langType language);
96 extern langType getNamedLanguage (const char *const name);
97 extern langType getFileLanguage (const char *const fileName);
98 extern void installLanguageMapDefault (const langType language);
99 extern void installLanguageMapDefaults (void);
100 extern void clearLanguageMap (const langType language);
101 extern void addLanguageExtensionMap (const langType language, const char* extension);
102 extern void addLanguagePatternMap (const langType language, const char* ptrn);
103 extern void printLanguageMap (const langType language);
104 extern void enableLanguages (const boolean state);
105 extern void enableLanguage (const langType language, const boolean state);
106 extern void initializeParsing (void);
107 extern void freeParserResources (void);
108 extern void processLanguageDefineOption (const char *const option, const char *const parameter);
109 extern boolean processKindOption (const char *const option, const char *const parameter);
110 extern void printKindOptions (void);
111 extern boolean parseFile (const char *const fileName);
113 /* Regex interface */
114 #ifdef HAVE_REGEX
115 extern void findRegexTags (void);
116 extern boolean matchRegex (const vString* const line, const langType language);
117 #endif
118 extern boolean processRegexOption (const char *const option, const char *const parameter);
119 extern void addLanguageRegex (const langType language, const char* const regex);
120 extern void addTagRegex (const langType language, const char* const regex, const char* const name, const char* const kinds, const char* const flags);
121 extern void addCallbackRegex (const langType language, const char* const regex, const char* flags, const regexCallback callback);
122 extern void disableRegexKinds (const langType UNUSED language);
123 extern boolean enableRegexKind (const langType language, const int kind, const boolean mode);
124 extern void printRegexKindOptions (const langType language);
125 extern void freeRegexResources (void);
126 extern void checkRegex (void);
129 /* Extra stuff for Tag Manager */
130 extern tagEntryFunction TagEntryFunction;
131 extern void *TagEntryUserData;
132 extern void setTagEntryFunction(tagEntryFunction entry_function, void *user_data);
134 #endif /* _PARSE_H */
136 /* vi:set tabstop=8 shiftwidth=4: */