187214e15SMasatake YAMATO /* 287214e15SMasatake YAMATO * 387214e15SMasatake YAMATO * Copyright (c) 2016, Masatake YAMATO 487214e15SMasatake YAMATO * Copyright (c) 2016, Red Hat, K.K. 5ac85afa5SMasatake YAMATO * Copyright (c) 2022, Vasily Kulikov 687214e15SMasatake YAMATO * 787214e15SMasatake YAMATO * This source code is released for free distribution under the terms of the 887214e15SMasatake YAMATO * GNU General Public License version 2 or (at your option) any later version. 987214e15SMasatake YAMATO * 1087214e15SMasatake YAMATO */ 1187214e15SMasatake YAMATO 1287214e15SMasatake YAMATO #ifndef CTAGS_YAML__H 1387214e15SMasatake YAMATO #define CTAGS_YAML__H 1487214e15SMasatake YAMATO 1587214e15SMasatake YAMATO #include "general.h" 160051d650SMasatake YAMATO #include "subparser.h" 1787214e15SMasatake YAMATO #include "types.h" 1887214e15SMasatake YAMATO 1987214e15SMasatake YAMATO #ifdef HAVE_LIBYAML 2087214e15SMasatake YAMATO #include <yaml.h> 2187214e15SMasatake YAMATO #else 2287214e15SMasatake YAMATO #define yaml_token_t void 2387214e15SMasatake YAMATO #endif 2487214e15SMasatake YAMATO 25ac85afa5SMasatake YAMATO struct ypathTypeStack; 26ac85afa5SMasatake YAMATO 270051d650SMasatake YAMATO typedef struct sYamlSubparser yamlSubparser; 280051d650SMasatake YAMATO struct sYamlSubparser { 290051d650SMasatake YAMATO subparser subparser; 300051d650SMasatake YAMATO void (* newTokenNotfify) (yamlSubparser *s, yaml_token_t *token); 31ac85afa5SMasatake YAMATO struct ypathTypeStack *ypathTypeStack; 3287214e15SMasatake YAMATO }; 33ac85afa5SMasatake YAMATO #define YAML(S) ((yamlSubparser *)S) 3487214e15SMasatake YAMATO 3587214e15SMasatake YAMATO extern void attachYamlPosition (tagEntryInfo *tag, yaml_token_t *token, bool asEndPosition); 3687214e15SMasatake YAMATO 37ac85afa5SMasatake YAMATO /* 38ac85afa5SMasatake YAMATO * Experimental Ypath code 39ac85afa5SMasatake YAMATO */ 40ac85afa5SMasatake YAMATO typedef struct sTagYpathTable { 41ac85afa5SMasatake YAMATO const char * ypath; 42ac85afa5SMasatake YAMATO int expected_state; 43*96a5e6d9SMasatake YAMATO /* If INITTAGENTRY filed is non-NULL, call it for initializing 44*96a5e6d9SMasatake YAMATO * a tagEntry. If it is NULL, initializing the tagEntry in usual way: 45*96a5e6d9SMasatake YAMATO * call initTagEntry() defined in the main part with KIND. */ 46ac85afa5SMasatake YAMATO int kind; 47*96a5e6d9SMasatake YAMATO bool (* initTagEntry) (tagEntryInfo *, char *, void *); 48*96a5e6d9SMasatake YAMATO void *data; 49*96a5e6d9SMasatake YAMATO void *code; /* YAML base parser private */ 50ac85afa5SMasatake YAMATO } tagYpathTable; 51ac85afa5SMasatake YAMATO 52ac85afa5SMasatake YAMATO extern int ypathCompileTable (langType language, tagYpathTable *table, int keywordId); 53ac85afa5SMasatake YAMATO extern void ypathCompileTables (langType language, tagYpathTable tables[], size_t count, int keywordId); 54ac85afa5SMasatake YAMATO extern void ypathCompiledCodeDelete (tagYpathTable tables[], size_t count); 55ac85afa5SMasatake YAMATO 56ac85afa5SMasatake YAMATO extern void ypathHandleToken (yamlSubparser *yaml, yaml_token_t *token, int state, tagYpathTable tables[], size_t count); 57ac85afa5SMasatake YAMATO 58ac85afa5SMasatake YAMATO extern void ypathPushType (yamlSubparser *yaml, yaml_token_t *token); 59ac85afa5SMasatake YAMATO extern void ypathPopType (yamlSubparser *yaml); 60ac85afa5SMasatake YAMATO extern void ypathPopAllTypes (yamlSubparser *yaml); 61ac85afa5SMasatake YAMATO extern void ypathFillKeywordOfTokenMaybe (yamlSubparser *yaml, yaml_token_t *token, langType lang); 62ac85afa5SMasatake YAMATO 63ac85afa5SMasatake YAMATO extern void ypathPrintTypeStack(yamlSubparser *yaml); 6487214e15SMasatake YAMATO #endif 65