xref: /Universal-ctags/main/subparser.h (revision 51258ebfd499177f18118fb659aee3c1b678327a)
1ee6cbc52SMasatake YAMATO /*
2ee6cbc52SMasatake YAMATO  *
3ee6cbc52SMasatake YAMATO  *  Copyright (c) 2017, Red Hat, Inc.
4ee6cbc52SMasatake YAMATO  *  Copyright (c) 2017, Masatake YAMATO
5ee6cbc52SMasatake YAMATO  *
6ee6cbc52SMasatake YAMATO  *  Author: Masatake YAMATO <yamato@redhat.com>
7ee6cbc52SMasatake YAMATO  *
8ee6cbc52SMasatake YAMATO  *   This source code is released for free distribution under the terms of the
9ee6cbc52SMasatake YAMATO  *   GNU General Public License version 2 or (at your option) any later version.
10ee6cbc52SMasatake YAMATO  *
11ee6cbc52SMasatake YAMATO  */
12ee6cbc52SMasatake YAMATO #ifndef CTAGS_MAIN_SUBPARSER_H
13ee6cbc52SMasatake YAMATO #define CTAGS_MAIN_SUBPARSER_H
14ee6cbc52SMasatake YAMATO 
15ee6cbc52SMasatake YAMATO #include "general.h"
16ee6cbc52SMasatake YAMATO 
17edc12faeSMasatake YAMATO #include "dependency.h"
18ee6cbc52SMasatake YAMATO #include "types.h"
19ee6cbc52SMasatake YAMATO 
20bc924efdSMasatake YAMATO /*
21bc924efdSMasatake YAMATO *   MACROS
22bc924efdSMasatake YAMATO */
23bc924efdSMasatake YAMATO #define foreachSubparser(VAR, INCLUDING_NONE_CRAFTED_PARSER)\
24bc924efdSMasatake YAMATO 	VAR = NULL;								\
25bc924efdSMasatake YAMATO 	while ((VAR = getNextSubparser (VAR, INCLUDING_NONE_CRAFTED_PARSER)) != NULL)
26ee6cbc52SMasatake YAMATO 
27bc924efdSMasatake YAMATO /*
28bc924efdSMasatake YAMATO *   DATA DECLARATIONS
29bc924efdSMasatake YAMATO */
30ee6cbc52SMasatake YAMATO typedef enum eSubparserRunDirection {
3111fea497SMasatake YAMATO 	SUBPARSER_UNKNOWN_DIRECTION =  0,
32ee6cbc52SMasatake YAMATO 	SUBPARSER_BASE_RUNS_SUB = 1 << 0,
33ee6cbc52SMasatake YAMATO 	SUBPARSER_SUB_RUNS_BASE = 1 << 1,
34ee6cbc52SMasatake YAMATO 	SUBPARSER_BI_DIRECTION  = SUBPARSER_BASE_RUNS_SUB|SUBPARSER_SUB_RUNS_BASE,
35ee6cbc52SMasatake YAMATO } subparserRunDirection;
36ee6cbc52SMasatake YAMATO 
37ee6cbc52SMasatake YAMATO struct sSubparser {
38ee6cbc52SMasatake YAMATO 	/* private in the main part */
39ee6cbc52SMasatake YAMATO 	slaveParser *slaveParser;
40ee6cbc52SMasatake YAMATO 	subparser *next;
41ee6cbc52SMasatake YAMATO 	bool schedulingBaseparserExplicitly;
4209b4041bSMasatake YAMATO 	bool chosenAsExclusiveSubparser;
43ee6cbc52SMasatake YAMATO 
44ee6cbc52SMasatake YAMATO 	/* public to the parser */
45ee6cbc52SMasatake YAMATO 	subparserRunDirection direction;
46ee6cbc52SMasatake YAMATO 
47ee6cbc52SMasatake YAMATO 	void (* inputStart) (subparser *s);
48ee6cbc52SMasatake YAMATO 	void (* inputEnd) (subparser *s);
49ce4ea610SMasatake YAMATO 	void (* exclusiveSubparserChosenNotify) (subparser *s, void *data);
501ed0645cSMasatake YAMATO 	void (* makeTagEntryNotify) (subparser *s, const tagEntryInfo *tag, int corkIndex);
51ee6cbc52SMasatake YAMATO };
52ee6cbc52SMasatake YAMATO 
53bc924efdSMasatake YAMATO /*
54bc924efdSMasatake YAMATO *   FUNCTION PROTOTYPES
55bc924efdSMasatake YAMATO */
56ee6cbc52SMasatake YAMATO 
57ee6cbc52SMasatake YAMATO /* Interface for Baseparser */
5811358a9dSMasatake YAMATO extern subparser *getNextSubparser(subparser *last, bool includingNoneCraftedParser);
593abcac5dSMasatake YAMATO extern void enterSubparser(subparser *subparser);
603abcac5dSMasatake YAMATO extern void leaveSubparser(void);
61ee6cbc52SMasatake YAMATO extern subparser* getSubparserRunningBaseparser (void);
62ce4ea610SMasatake YAMATO extern void chooseExclusiveSubparser (subparser *s, void *data);
63ee6cbc52SMasatake YAMATO 
64*51258ebfSMasatake YAMATO extern subparser *getLanguageSubparser (langType sublang, bool including_none_crafted_parser);
65*51258ebfSMasatake YAMATO 
66ee6cbc52SMasatake YAMATO /* Interface for Subparsers   */
67ee6cbc52SMasatake YAMATO #define RUN_DEFAULT_SUBPARSERS -1
68ee6cbc52SMasatake YAMATO extern void scheduleRunningBaseparser (int dependencyIndex);
69ee6cbc52SMasatake YAMATO 
70ee6cbc52SMasatake YAMATO #endif	/* CTAGS_MAIN_SUBPARSER_H */
71