Ticket #3128: parse.h

File parse.h, 5.0 KB (added by yves@…, 19 years ago)

The faulty parse.h

Line 
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*/
33typedef int langType;
34
35typedef void (*createRegexTag) (const vString* const name);
36typedef void (*simpleParser) (void);
37typedef boolean (*rescanParser) (const unsigned int passCount);
38typedef void (*parserInitialize) (langType language);
39typedef int (*tagEntryFunction) (const tagEntryInfo *const tag);
40
41typedef 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
48typedef 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
67typedef parserDefinition* (parserDefinitionFunc) (void);
68
69typedef struct {
70    off_t start;        /* character index in line where match starts */
71    size_t length;      /* length of match */
72} regexMatch;
73
74typedef 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 */
84extern parserDefinitionFunc PARSER_LIST;
85extern parserDefinition** LanguageTable;
86/* Legacy interface */
87extern boolean includingDefineTags (void);
88extern void processLegacyKindOption (const char *const parameter);
89
90/* Language processing and parsing */
91extern void makeSimpleTag (const vString* const name, kindOption* const kinds, const int kind);
92extern parserDefinition* parserNew (const char* name);
93extern const char *getLanguageName (const langType language);
94extern langType getNamedLanguage (const char *const name);
95extern langType getFileLanguage (const char *const fileName);
96extern void installLanguageMapDefault (const langType language);
97extern void installLanguageMapDefaults (void);
98extern void clearLanguageMap (const langType language);
99extern void addLanguageExtensionMap (const langType language, const char* extension);
100extern void addLanguagePatternMap (const langType language, const char* ptrn);
101extern void printLanguageMap (const langType language);
102extern void enableLanguages (const boolean state);
103extern void enableLanguage (const langType language, const boolean state);
104extern void initializeParsing (void);
105extern void freeParserResources (void);
106extern void processLanguageDefineOption (const char *const option, const char *const parameter);
107extern boolean processKindOption (const char *const option, const char *const parameter);
108extern void printKindOptions (void);
109extern boolean parseFile (const char *const fileName);
110
111/* Regex interface */
112#ifdef HAVE_REGEX
113extern void findRegexTags (void);
114extern void matchRegex (const vString* const line, const langType language);
115#endif
116extern boolean processRegexOption (const char *const option, const char *const parameter);
117extern void addLanguageRegex (const langType language, const char* const regex);
118extern void addTagRegex (const langType language, const char* const regex, const char* const name, const char* const kinds, const char* const flags);
119extern void addCallbackRegex (const langType language, const char* const regex, const char* flags, const regexCallback callback);
120extern void disableRegexKinds (const langType __unused__ language);
121extern boolean enableRegexKind (const langType language, const int kind, const boolean mode);
122extern void printRegexKindOptions (const langType language);
123extern void freeRegexResources (void);
124extern void checkRegex (void);
125
126
127/* Extra stuff for Tag Manager */
128extern tagEntryFunction TagEntryFunction;
129extern void setTagEntryFunction(tagEntryFunction entry_function);
130
131#endif  /* _PARSE_H */
132
133/* vi:set tabstop=8 shiftwidth=4: */