Skip to content

Commit 8f9ce8f

Browse files
committed
added lex.h and parser.h to the cdef
1 parent 7774dea commit 8f9ce8f

File tree

1 file changed

+188
-2
lines changed

1 file changed

+188
-2
lines changed

tdl/tdl_cdef.h

Lines changed: 188 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,11 +1098,197 @@ void TCOD_namegen_destroy (void);
10981098

10991099
// ---------------------------------------------------------------------------
11001100
// lex.h
1101-
// TODO: this module requires too many hacks to reasonably export
1101+
1102+
typedef struct {
1103+
int file_line, token_type, token_int_val, token_idx;
1104+
float token_float_val;
1105+
char *tok;
1106+
int toklen;
1107+
char lastStringDelim;
1108+
char *pos;
1109+
char *buf;
1110+
char *filename;
1111+
char *last_javadoc_comment;
1112+
/* private stuff */
1113+
int nb_symbols, nb_keywords, flags;
1114+
char symbols[...][...],
1115+
keywords[...][...];
1116+
const char *simpleCmt;
1117+
const char *cmtStart, *cmtStop, *javadocCmtStart;
1118+
const char *stringDelim;
1119+
bool javadoc_read;
1120+
bool allocBuf;
1121+
bool savept; /* is this object a savepoint (no free in destructor) */
1122+
} TCOD_lex_t;
1123+
1124+
TCOD_lex_t *TCOD_lex_new_intern();
1125+
TCOD_lex_t *TCOD_lex_new(const char **symbols, const char **keywords, const char *simpleComment,
1126+
const char *commentStart, const char *commentStop, const char *javadocCommentStart, const char *stringDelim, int flags);
1127+
void TCOD_lex_delete(TCOD_lex_t *lex);
1128+
1129+
void TCOD_lex_set_data_buffer(TCOD_lex_t *lex,char *dat);
1130+
bool TCOD_lex_set_data_file(TCOD_lex_t *lex,const char *filename);
1131+
1132+
int TCOD_lex_parse(TCOD_lex_t *lex);
1133+
int TCOD_lex_parse_until_token_type(TCOD_lex_t *lex,int token_type);
1134+
int TCOD_lex_parse_until_token_value(TCOD_lex_t *lex,const char *token_value);
1135+
1136+
bool TCOD_lex_expect_token_type(TCOD_lex_t *lex,int token_type);
1137+
bool TCOD_lex_expect_token_value(TCOD_lex_t *lex,int token_type,const char *token_value);
1138+
1139+
void TCOD_lex_savepoint(TCOD_lex_t *lex,TCOD_lex_t *savept);
1140+
void TCOD_lex_restore(TCOD_lex_t *lex,TCOD_lex_t *savept);
1141+
char *TCOD_lex_get_last_javadoc(TCOD_lex_t *lex);
1142+
const char *TCOD_lex_get_token_name(int token_type);
1143+
char *TCOD_lex_get_last_error();
1144+
1145+
int TCOD_lex_hextoint(char c);
11021146

11031147
// ---------------------------------------------------------------------------
11041148
// parser.h
1105-
// TODO: requires lex.h to work
1149+
1150+
/* generic type */
1151+
typedef enum {
1152+
TCOD_TYPE_NONE,
1153+
TCOD_TYPE_BOOL,
1154+
TCOD_TYPE_CHAR,
1155+
TCOD_TYPE_INT,
1156+
TCOD_TYPE_FLOAT,
1157+
TCOD_TYPE_STRING,
1158+
TCOD_TYPE_COLOR,
1159+
TCOD_TYPE_DICE,
1160+
TCOD_TYPE_VALUELIST00,
1161+
TCOD_TYPE_VALUELIST01,
1162+
TCOD_TYPE_VALUELIST02,
1163+
TCOD_TYPE_VALUELIST03,
1164+
TCOD_TYPE_VALUELIST04,
1165+
TCOD_TYPE_VALUELIST05,
1166+
TCOD_TYPE_VALUELIST06,
1167+
TCOD_TYPE_VALUELIST07,
1168+
TCOD_TYPE_VALUELIST08,
1169+
TCOD_TYPE_VALUELIST09,
1170+
TCOD_TYPE_VALUELIST10,
1171+
TCOD_TYPE_VALUELIST11,
1172+
TCOD_TYPE_VALUELIST12,
1173+
TCOD_TYPE_VALUELIST13,
1174+
TCOD_TYPE_VALUELIST14,
1175+
TCOD_TYPE_VALUELIST15,
1176+
TCOD_TYPE_CUSTOM00,
1177+
TCOD_TYPE_CUSTOM01,
1178+
TCOD_TYPE_CUSTOM02,
1179+
TCOD_TYPE_CUSTOM03,
1180+
TCOD_TYPE_CUSTOM04,
1181+
TCOD_TYPE_CUSTOM05,
1182+
TCOD_TYPE_CUSTOM06,
1183+
TCOD_TYPE_CUSTOM07,
1184+
TCOD_TYPE_CUSTOM08,
1185+
TCOD_TYPE_CUSTOM09,
1186+
TCOD_TYPE_CUSTOM10,
1187+
TCOD_TYPE_CUSTOM11,
1188+
TCOD_TYPE_CUSTOM12,
1189+
TCOD_TYPE_CUSTOM13,
1190+
TCOD_TYPE_CUSTOM14,
1191+
TCOD_TYPE_CUSTOM15,
1192+
TCOD_TYPE_LIST=1024
1193+
} TCOD_value_type_t;
1194+
1195+
/* generic value */
1196+
typedef union {
1197+
bool b;
1198+
char c;
1199+
int32 i;
1200+
float f;
1201+
char *s;
1202+
TCOD_color_t col;
1203+
TCOD_dice_t dice;
1204+
TCOD_list_t list;
1205+
void *custom;
1206+
} TCOD_value_t;
1207+
1208+
/* parser structures */
1209+
typedef void *TCOD_parser_struct_t;
1210+
const char *TCOD_struct_get_name(TCOD_parser_struct_t def);
1211+
void TCOD_struct_add_property(TCOD_parser_struct_t def, const char *name,TCOD_value_type_t type, bool mandatory);
1212+
void TCOD_struct_add_list_property(TCOD_parser_struct_t def, const char *name,TCOD_value_type_t type, bool mandatory);
1213+
void TCOD_struct_add_value_list(TCOD_parser_struct_t def,const char *name, const char **value_list, bool mandatory);
1214+
void TCOD_struct_add_value_list_sized(TCOD_parser_struct_t def,const char *name, const char **value_list, int size, bool mandatory);
1215+
void TCOD_struct_add_flag(TCOD_parser_struct_t def,const char *propname);
1216+
void TCOD_struct_add_structure(TCOD_parser_struct_t def,TCOD_parser_struct_t sub_structure);
1217+
bool TCOD_struct_is_mandatory(TCOD_parser_struct_t def,const char *propname);
1218+
TCOD_value_type_t TCOD_struct_get_type(TCOD_parser_struct_t def, const char *propname);
1219+
1220+
1221+
/* parser listener */
1222+
typedef struct {
1223+
bool (*new_struct)(TCOD_parser_struct_t str,const char *name);
1224+
bool (*new_flag)(const char *name);
1225+
bool (*new_property)(const char *propname, TCOD_value_type_t type, TCOD_value_t value);
1226+
bool (*end_struct)(TCOD_parser_struct_t str, const char *name);
1227+
void (*error)(const char *msg);
1228+
} TCOD_parser_listener_t;
1229+
1230+
/* a custom type parser */
1231+
typedef TCOD_value_t (*TCOD_parser_custom_t)(TCOD_lex_t *lex, TCOD_parser_listener_t *listener, TCOD_parser_struct_t str, char *propname);
1232+
1233+
/* the parser */
1234+
typedef void *TCOD_parser_t;
1235+
1236+
TCOD_parser_t TCOD_parser_new();
1237+
TCOD_parser_struct_t TCOD_parser_new_struct(TCOD_parser_t parser, char *name);
1238+
TCOD_value_type_t TCOD_parser_new_custom_type(TCOD_parser_t parser,TCOD_parser_custom_t custom_type_parser);
1239+
void TCOD_parser_run(TCOD_parser_t parser, const char *filename, TCOD_parser_listener_t *listener);
1240+
void TCOD_parser_delete(TCOD_parser_t parser);
1241+
/* error during parsing. can be called by the parser listener */
1242+
void TCOD_parser_error(const char *msg, ...);
1243+
/* default parser listener */
1244+
bool TCOD_parser_get_bool_property(TCOD_parser_t parser, const char *name);
1245+
int TCOD_parser_get_char_property(TCOD_parser_t parser, const char *name);
1246+
int TCOD_parser_get_int_property(TCOD_parser_t parser, const char *name);
1247+
float TCOD_parser_get_float_property(TCOD_parser_t parser, const char *name);
1248+
const char * TCOD_parser_get_string_property(TCOD_parser_t parser, const char *name);
1249+
TCOD_color_t TCOD_parser_get_color_property(TCOD_parser_t parser, const char *name);
1250+
TCOD_dice_t TCOD_parser_get_dice_property(TCOD_parser_t parser, const char *name);
1251+
void TCOD_parser_get_dice_property_py(TCOD_parser_t parser, const char *name, TCOD_dice_t *dice);
1252+
void * TCOD_parser_get_custom_property(TCOD_parser_t parser, const char *name);
1253+
TCOD_list_t TCOD_parser_get_list_property(TCOD_parser_t parser, const char *name, TCOD_value_type_t type);
1254+
1255+
/* parser internals (may be used by custom type parsers) */
1256+
/* parser structures */
1257+
typedef struct {
1258+
char *name; /* entity type name */
1259+
/* list of flags */
1260+
TCOD_list_t flags;
1261+
/* list of properties (name, type, mandatory) */
1262+
TCOD_list_t props;
1263+
/* list of value lists */
1264+
TCOD_list_t lists;
1265+
/* list of sub-structures */
1266+
TCOD_list_t structs;
1267+
} TCOD_struct_int_t;
1268+
/* the parser */
1269+
typedef struct {
1270+
/* list of structures */
1271+
TCOD_list_t structs;
1272+
/* list of custom type parsers */
1273+
TCOD_parser_custom_t customs[16];
1274+
/* fatal error occured */
1275+
bool fatal;
1276+
/* list of properties if default listener is used */
1277+
TCOD_list_t props;
1278+
} TCOD_parser_int_t;
1279+
1280+
// TODO: this code causes CFFI to raise NotImplementedError
1281+
/*
1282+
TCOD_value_t TCOD_parse_bool_value();
1283+
TCOD_value_t TCOD_parse_char_value();
1284+
TCOD_value_t TCOD_parse_integer_value();
1285+
TCOD_value_t TCOD_parse_float_value();
1286+
TCOD_value_t TCOD_parse_string_value();
1287+
TCOD_value_t TCOD_parse_color_value();
1288+
TCOD_value_t TCOD_parse_dice_value();
1289+
TCOD_value_t TCOD_parse_value_list_value(TCOD_struct_int_t *def,int listnum);
1290+
TCOD_value_t TCOD_parse_property_value(TCOD_parser_int_t *parser, TCOD_parser_struct_t def, char *propname, bool list);
1291+
*/
11061292

11071293
// ---------------------------------------------------------------------------
11081294
// txtfield.h

0 commit comments

Comments
 (0)