1 | /* |
---|
2 | * |
---|
3 | * Copyright (c) 1998-2001, Darren Hiebert |
---|
4 | * |
---|
5 | * This source code is released for free distribution under the terms of the |
---|
6 | * GNU General Public License. |
---|
7 | * |
---|
8 | * Private definitions for parsing support. |
---|
9 | */ |
---|
10 | #ifndef _PARSE_H |
---|
11 | #define _PARSE_H |
---|
12 | |
---|
13 | /* |
---|
14 | * INCLUDE FILES |
---|
15 | */ |
---|
16 | #include "general.h" /* must always come first */ |
---|
17 | |
---|
18 | #include "parsers.h" /* contains list of parsers */ |
---|
19 | #include "strlist.h" |
---|
20 | #include "entry.h" |
---|
21 | |
---|
22 | /* |
---|
23 | * MACROS |
---|
24 | */ |
---|
25 | #define KIND_COUNT(kindTable) (sizeof(kindTable)/sizeof(kindOption)) |
---|
26 | |
---|
27 | #define LANG_AUTO (-1) |
---|
28 | #define LANG_IGNORE (-2) |
---|
29 | |
---|
30 | /* |
---|
31 | * DATA DECLARATIONS |
---|
32 | */ |
---|
33 | typedef int langType; |
---|
34 | |
---|
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); |
---|
40 | |
---|
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; |
---|
47 | |
---|
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? */ |
---|
59 | |
---|
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; |
---|
66 | |
---|
67 | typedef parserDefinition* (parserDefinitionFunc) (void); |
---|
68 | |
---|
69 | typedef struct { |
---|
70 | off_t start; /* character index in line where match starts */ |
---|
71 | size_t length; /* length of match */ |
---|
72 | } regexMatch; |
---|
73 | |
---|
74 | typedef void (*regexCallback) (const char *line, const regexMatch *matches, unsigned int count); |
---|
75 | |
---|
76 | /* |
---|
77 | * FUNCTION PROTOTYPES |
---|
78 | */ |
---|
79 | |
---|
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. |
---|
83 | */ |
---|
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); |
---|
89 | |
---|
90 | /* Language processing and parsing */ |
---|
91 | extern void makeSimpleTag (const vString* const name, kindOption* const kinds, const int kind); |
---|
92 | extern parserDefinition* parserNew (const char* name); |
---|
93 | extern const char *getLanguageName (const langType language); |
---|
94 | extern langType getNamedLanguage (const char *const name); |
---|
95 | extern langType getFileLanguage (const char *const fileName); |
---|
96 | extern void installLanguageMapDefault (const langType language); |
---|
97 | extern void installLanguageMapDefaults (void); |
---|
98 | extern void clearLanguageMap (const langType language); |
---|
99 | extern void addLanguageExtensionMap (const langType language, const char* extension); |
---|
100 | extern void addLanguagePatternMap (const langType language, const char* ptrn); |
---|
101 | extern void printLanguageMap (const langType language); |
---|
102 | extern void enableLanguages (const boolean state); |
---|
103 | extern void enableLanguage (const langType language, const boolean state); |
---|
104 | extern void initializeParsing (void); |
---|
105 | extern void freeParserResources (void); |
---|
106 | extern void processLanguageDefineOption (const char *const option, const char *const parameter); |
---|
107 | extern boolean processKindOption (const char *const option, const char *const parameter); |
---|
108 | extern void printKindOptions (void); |
---|
109 | extern boolean parseFile (const char *const fileName); |
---|
110 | |
---|
111 | /* Regex interface */ |
---|
112 | #ifdef HAVE_REGEX |
---|
113 | extern void findRegexTags (void); |
---|
114 | extern void matchRegex (const vString* const line, const langType language); |
---|
115 | #endif |
---|
116 | extern boolean processRegexOption (const char *const option, const char *const parameter); |
---|
117 | extern void addLanguageRegex (const langType language, const char* const regex); |
---|
118 | extern void addTagRegex (const langType language, const char* const regex, const char* const name, const char* const kinds, const char* const flags); |
---|
119 | extern void addCallbackRegex (const langType language, const char* const regex, const char* flags, const regexCallback callback); |
---|
120 | extern void disableRegexKinds (const langType __unused__ language); |
---|
121 | extern boolean enableRegexKind (const langType language, const int kind, const boolean mode); |
---|
122 | extern void printRegexKindOptions (const langType language); |
---|
123 | extern void freeRegexResources (void); |
---|
124 | extern void checkRegex (void); |
---|
125 | |
---|
126 | |
---|
127 | /* Extra stuff for Tag Manager */ |
---|
128 | extern tagEntryFunction TagEntryFunction; |
---|
129 | extern void setTagEntryFunction(tagEntryFunction entry_function); |
---|
130 | |
---|
131 | #endif /* _PARSE_H */ |
---|
132 | |
---|
133 | /* vi:set tabstop=8 shiftwidth=4: */ |
---|