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