xref: /Universal-ctags/parsers/yaml.h (revision 96a5e6d9b8a80727781401ce7b4dd0c5308ec6fc)
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