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.
16 #include "general.h" /* must always come first */
18 #include "parsers.h" /* contains list of parsers */
25 #define KIND_COUNT(kindTable) (sizeof(kindTable)/sizeof(kindOption))
27 #define LANG_AUTO (-1)
28 #define LANG_IGNORE (-2)
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 typedef void (*tagEntrySetArglistFunction
) (const char *tag_name
, const char *arglist
);
42 typedef struct sKindOption
{
43 boolean enabled
; /* are tags for kind enabled? */
44 const int letter
; /* kind letter */
45 const char* name
; /* kind name */
46 const char* const description
; /* displayed in --help output */
50 /* defined by parser */
51 char* name
; /* name of language */
52 kindOption
* kinds
; /* tag kinds handled by parser */
53 unsigned int kindCount
; /* size of `kinds' list */
54 const char* const* extensions
; /* list of default extensions */
55 const char* const* patterns
; /* list of default file name patterns */
56 parserInitialize initialize
; /* initialization routine, if needed */
57 simpleParser parser
; /* simple parser (common case) */
58 rescanParser parser2
; /* rescanning parser (unusual case) */
59 boolean regex
; /* is this a regex parser? */
62 unsigned int id
; /* id assigned to language */
63 boolean enabled
; /* currently enabled? */
64 stringList
* currentPatterns
; /* current list of file name patterns */
65 stringList
* currentExtensions
; /* current list of extensions */
68 typedef parserDefinition
* (parserDefinitionFunc
) (void);
71 int start
; /* character index in line where match starts */
72 size_t length
; /* length of match */
75 typedef void (*regexCallback
) (const char *line
, const regexMatch
*matches
, unsigned int count
);
81 /* Each parsers' definition function is called. The routine is expected to
82 * return a structure allocated using parserNew(). This structure must,
83 * at minimum, set the `parser' field.
85 extern parserDefinitionFunc PARSER_LIST
;
86 extern parserDefinition
** LanguageTable
;
87 /* Legacy interface */
88 extern boolean
includingDefineTags (void);
89 extern void processLegacyKindOption (const char *const parameter
);
91 /* Language processing and parsing */
92 extern void makeSimpleTag (const vString
* const name
, kindOption
* const kinds
, const int kind
);
93 extern void makeSimpleScopedTag (const vString
* const name
, kindOption
* const kinds
, const int kind
, const char* scope
, const char* scope2
, const char *access
);
95 extern parserDefinition
* parserNew (const char* name
);
96 extern const char *getLanguageName (const langType language
);
97 extern langType
getNamedLanguage (const char *const name
);
98 extern langType
getFileLanguage (const char *const fileName
);
99 extern void installLanguageMapDefault (const langType language
);
100 extern void installLanguageMapDefaults (void);
101 extern void clearLanguageMap (const langType language
);
102 extern void addLanguageExtensionMap (const langType language
, const char* extension
);
103 extern void addLanguagePatternMap (const langType language
, const char* ptrn
);
104 extern void printLanguageMap (const langType language
);
105 extern void enableLanguages (const boolean state
);
106 extern void enableLanguage (const langType language
, const boolean state
);
107 extern void initializeParsing (void);
108 extern void freeParserResources (void);
109 extern void processLanguageDefineOption (const char *const option
, const char *const parameter
);
110 extern boolean
processKindOption (const char *const option
, const char *const parameter
);
111 extern void printKindOptions (void);
112 extern boolean
parseFile (const char *const fileName
);
114 /* Regex interface */
116 extern void findRegexTags (void);
117 extern boolean
matchRegex (const vString
* const line
, const langType language
);
119 extern boolean
processRegexOption (const char *const option
, const char *const parameter
);
120 extern void addLanguageRegex (const langType language
, const char* const regex
);
121 extern void addTagRegex (const langType language
, const char* const regex
, const char* const name
, const char* const kinds
, const char* const flags
);
122 extern void addCallbackRegex (const langType language
, const char* const regex
, const char* flags
, const regexCallback callback
);
123 extern void disableRegexKinds (const langType __unused__ language
);
124 extern boolean
enableRegexKind (const langType language
, const int kind
, const boolean mode
);
125 extern void printRegexKindOptions (const langType language
);
126 extern void freeRegexResources (void);
127 extern void checkRegex (void);
130 /* Extra stuff for Tag Manager */
131 extern tagEntryFunction TagEntryFunction
;
132 extern tagEntrySetArglistFunction TagEntrySetArglistFunction
;
133 extern void setTagEntryFunction(tagEntryFunction entry_function
);
135 #endif /* _PARSE_H */
137 /* vi:set tabstop=8 shiftwidth=4: */