@@ -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