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