libtcod
Loading...
Searching...
No Matches
parser.h
Go to the documentation of this file.
1/* BSD 3-Clause License
2 *
3 * Copyright © 2008-2025, Jice and the libtcod contributors.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright notice,
10 * this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright notice,
13 * this list of conditions and the following disclaimer in the documentation
14 * and/or other materials provided with the distribution.
15 *
16 * 3. Neither the name of the copyright holder nor the names of its
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
24 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
31 */
34#pragma once
35#ifndef TCOD_PARSER_H_
36#define TCOD_PARSER_H_
37
38#include "color.h"
39#include "lex.h"
40#include "list.h"
41#include "mersenne.h"
42#include "portability.h"
43
44#ifdef __cplusplus
45extern "C" {
46#endif
47/* generic type */
48typedef enum {
49 TCOD_TYPE_NONE,
50 TCOD_TYPE_BOOL,
51 TCOD_TYPE_CHAR,
52 TCOD_TYPE_INT,
53 TCOD_TYPE_FLOAT,
54 TCOD_TYPE_STRING,
55 TCOD_TYPE_COLOR,
56 TCOD_TYPE_DICE,
57 TCOD_TYPE_VALUELIST00,
58 TCOD_TYPE_VALUELIST01,
59 TCOD_TYPE_VALUELIST02,
60 TCOD_TYPE_VALUELIST03,
61 TCOD_TYPE_VALUELIST04,
62 TCOD_TYPE_VALUELIST05,
63 TCOD_TYPE_VALUELIST06,
64 TCOD_TYPE_VALUELIST07,
65 TCOD_TYPE_VALUELIST08,
66 TCOD_TYPE_VALUELIST09,
67 TCOD_TYPE_VALUELIST10,
68 TCOD_TYPE_VALUELIST11,
69 TCOD_TYPE_VALUELIST12,
70 TCOD_TYPE_VALUELIST13,
71 TCOD_TYPE_VALUELIST14,
72 TCOD_TYPE_VALUELIST15,
73 TCOD_TYPE_CUSTOM00,
74 TCOD_TYPE_CUSTOM01,
75 TCOD_TYPE_CUSTOM02,
76 TCOD_TYPE_CUSTOM03,
77 TCOD_TYPE_CUSTOM04,
78 TCOD_TYPE_CUSTOM05,
79 TCOD_TYPE_CUSTOM06,
80 TCOD_TYPE_CUSTOM07,
81 TCOD_TYPE_CUSTOM08,
82 TCOD_TYPE_CUSTOM09,
83 TCOD_TYPE_CUSTOM10,
84 TCOD_TYPE_CUSTOM11,
85 TCOD_TYPE_CUSTOM12,
86 TCOD_TYPE_CUSTOM13,
87 TCOD_TYPE_CUSTOM14,
88 TCOD_TYPE_CUSTOM15,
89 TCOD_TYPE_LIST = 1024
90} TCOD_value_type_t;
91
92/* generic value */
93typedef union {
94 bool b;
95 char c;
96 int32_t i;
97 float f;
98 char* s;
99 TCOD_color_t col;
100 TCOD_dice_t dice;
101 TCOD_list_t list;
102 void* custom;
104
105// Forward declarations for callback.
107struct TCOD_ParserStruct;
108
109/* a custom type parser */
110typedef TCOD_value_t (*TCOD_parser_custom_t)(
111 TCOD_lex_t* lex, struct TCOD_parser_listener_t* listener, struct TCOD_ParserStruct* str, char* propname);
112
113
116typedef struct TCOD_ParserStruct {
117 char* name; // Entity type name.
118 TCOD_list_t flags; // List of flags.
119 TCOD_list_t props; // List of properties (name, type, mandatory)
120 TCOD_list_t lists; // List of value lists.
121 TCOD_list_t structs; // List of sub-structures.
123typedef struct TCOD_ParserStruct TCOD_struct_int_t; // Deprecated
124typedef struct TCOD_ParserStruct* TCOD_parser_struct_t; // Deprecated
125
126
129typedef struct TCOD_Parser {
130 TCOD_list_t structs; // List of structures.
131 TCOD_parser_custom_t customs[16]; // List of custom type parsers.
132 bool fatal; // True if a fatal error has occurred.
133 TCOD_list_t props; // List of properties if default listener is used.
135typedef struct TCOD_Parser TCOD_parser_int_t; // Deprecated
136
137/* parser structures */
138TCODLIB_API const char* TCOD_struct_get_name(const TCOD_ParserStruct* def);
139TCODLIB_API void TCOD_struct_add_property(
140 TCOD_ParserStruct* def, const char* name, TCOD_value_type_t type, bool mandatory);
141TCODLIB_API void TCOD_struct_add_list_property(
142 TCOD_ParserStruct* def, const char* name, TCOD_value_type_t type, bool mandatory);
143TCODLIB_API void TCOD_struct_add_value_list(
144 TCOD_ParserStruct* def, const char* name, const char* const* value_list, bool mandatory);
145TCODLIB_API void TCOD_struct_add_value_list_sized(
146 TCOD_ParserStruct* def, const char* name, const char* const* value_list, int size, bool mandatory);
147TCODLIB_API void TCOD_struct_add_flag(TCOD_ParserStruct* def, const char* propname);
148TCODLIB_API void TCOD_struct_add_structure(TCOD_ParserStruct* def, const TCOD_ParserStruct* sub_structure);
149TCODLIB_API bool TCOD_struct_is_mandatory(TCOD_ParserStruct* def, const char* propname);
150TCODLIB_API TCOD_value_type_t TCOD_struct_get_type(const TCOD_ParserStruct* def, const char* propname);
151
152/* parser listener */
154 bool (*new_struct)(TCOD_ParserStruct* str, const char* name);
155 bool (*new_flag)(const char* name);
156 bool (*new_property)(const char* propname, TCOD_value_type_t type, TCOD_value_t value);
157 bool (*end_struct)(TCOD_ParserStruct* str, const char* name);
158 void (*error)(const char* msg);
160
161/* the parser */
162struct TCOD_Parser;
163typedef struct TCOD_Parser* TCOD_parser_t;
164
165TCODLIB_API TCOD_Parser* TCOD_parser_new(void);
166TCODLIB_API TCOD_ParserStruct* TCOD_parser_new_struct(TCOD_Parser* parser, const char* name);
167TCODLIB_API TCOD_value_type_t TCOD_parser_new_custom_type(TCOD_Parser* parser, TCOD_parser_custom_t custom_type_parser);
168TCODLIB_API void TCOD_parser_run(TCOD_Parser* parser, const char* filename, TCOD_parser_listener_t* listener);
169TCODLIB_API void TCOD_parser_delete(TCOD_Parser* parser);
170/* error during parsing. can be called by the parser listener */
171TCODLIB_FORMAT(1, 2)
172TCODLIB_API void TCOD_parser_error(const char* msg, ...);
173/* default parser listener */
174TCODLIB_API bool TCOD_parser_has_property(TCOD_Parser* parser, const char* name);
175TCODLIB_API bool TCOD_parser_get_bool_property(TCOD_Parser* parser, const char* name);
176TCODLIB_API int TCOD_parser_get_char_property(TCOD_Parser* parser, const char* name);
177TCODLIB_API int TCOD_parser_get_int_property(TCOD_Parser* parser, const char* name);
178TCODLIB_API float TCOD_parser_get_float_property(TCOD_Parser* parser, const char* name);
179TCODLIB_API const char* TCOD_parser_get_string_property(TCOD_Parser* parser, const char* name);
180TCODLIB_API TCOD_color_t TCOD_parser_get_color_property(TCOD_Parser* parser, const char* name);
181TCODLIB_API TCOD_dice_t TCOD_parser_get_dice_property(TCOD_Parser* parser, const char* name);
182TCODLIB_API void TCOD_parser_get_dice_property_py(TCOD_Parser* parser, const char* name, TCOD_dice_t* dice);
183TCODLIB_API void* TCOD_parser_get_custom_property(TCOD_Parser* parser, const char* name);
184TCODLIB_API TCOD_list_t TCOD_parser_get_list_property(TCOD_Parser* parser, const char* name, TCOD_value_type_t type);
185
186TCODLIB_API TCOD_value_t TCOD_parse_bool_value(void);
187TCODLIB_API TCOD_value_t TCOD_parse_char_value(void);
188TCODLIB_API TCOD_value_t TCOD_parse_integer_value(void);
189TCODLIB_API TCOD_value_t TCOD_parse_float_value(void);
190TCODLIB_API TCOD_value_t TCOD_parse_string_value(void);
191TCODLIB_API TCOD_value_t TCOD_parse_color_value(void);
192TCODLIB_API TCOD_value_t TCOD_parse_dice_value(void);
193TCODLIB_API TCOD_value_t TCOD_parse_value_list_value(TCOD_ParserStruct* def, int list_num);
194TCODLIB_API TCOD_value_t
195TCOD_parse_property_value(TCOD_Parser* parser, TCOD_ParserStruct* def, char* propname, bool list);
196#ifdef __cplusplus
197}
198#endif
199#endif // TCOD_PARSER_H_
Color handling module.
Internal tokenizer module.
Deprecated libtcod list module.
Random number generator functions.
Miscellaneous tools needed across platforms.
Parser, member variables are for internal use.
Definition parser.h:129
Parser struct, member variables are for internal use.
Definition parser.h:116
Definition mersenne_types.h:45
Definition parser.h:153
Definition parser.h:93