%{ #include "hack.h" #include "save_xml.h" #include "restore_xml.h" %} %option nounput %s TAG ENDTAG ELEMENT VAL_TAG VAL_TYPE STRUCT_TAG STRUCT_TYPE GLYPH_TAG GLYPH_TYPE %% \< {BEGIN(TAG); return '<';} > {BEGIN(ELEMENT); return '>';} > {BEGIN(ELEMENT); return '>';} > {BEGIN(INITIAL); return '>';} \/ {BEGIN(ENDTAG); return '/';} = return '='; = return '='; , return ','; ARRAY return ARRAY; STRUCT {BEGIN(STRUCT_TAG); return STRUCT;} RM_BACKGROUND return RM_BACKGROUND; RM_REGION return RM_REGION; RM_POINTER return RM_POINTER; COMMENT return COMMENT; ARTIFACT return ARTIFACT; ARTIFACTS return ARTIFACTS; BONEDATA return BONEDATA; BRANCHES return BRANCHES; BUBBLES return BUBBLES; CMAP return CMAP; CONTENTS return CONTENTS; CURRENT_STAT return CURRENT_STAT; DAMAGES return DAMAGES; DUNGEON return DUNGEON; DUNGEON_OVERVIEW return DUNGEON_OVERVIEW; ENGRAVINGS return ENGRAVINGS; FLOOR return FLOOR; FRUITS return FRUITS; GAMESTAT return GAMESTAT; GLYPH {BEGIN(GLYPH_TAG); return GLYPH;} LAUNCH return LAUNCH; LEVCHN return LEVCHN; LEVELDATA return LEVELDATA; LEVELS return LEVELS; LIGHT_SOURCES return LIGHT_SOURCES; MONSTER return MONSTER; MONSTERS return MONSTERS; MON_EXTRA_DATA return MON_EXTRA_DATA; OBJECT return OBJECT; OBJECTS return OBJECTS; OBJECT_CLASS return OBJECT_CLASS; OBJECT_CLASSES return OBJECT_CLASSES; OBJ_ATTACHED return OBJ_ATTACHED; ORACLES return ORACLES; PROPERTY return PROPERTY; REGIONS return REGIONS; RM_TYPE return RM_TYPE; ROOM return ROOM_DATA; SUBROOM return SUBROOM; SAVEDATA return SAVEDATA; SPELL_BOOK return SPELL_BOOK; TIMER return TIMER; TIMERS return TIMERS; TRAPS return TRAPS; VERSION return VERSION; WATERLEBEL return WATERLEBEL; WORM return WORM; WORMS return WORMS; WORM_SEGMENT return WORM_SEGMENT; OBJ_NAME return OBJECT_NAME; OBJ_UNKNOWN_NAME return OBJ_UNKNOWN_NAME; OBJCLASS return OBJCLASS; MONS_NAME return MONS_NAME; ROLE return ROLE; RACE return RACE; GENDER return GENDER; ALIGN return ALIGN; QUEST return QUEST; BITFIELDS return BIT_FIELD; BOOL return BOOL; VAL {BEGIN(VAL_TAG); return VAL;} STRING return STRING; id return ID; num return NUM; type return TYPE; type {BEGIN(VAL_TYPE); return TYPE;} type {BEGIN(STRUCT_TYPE); return TYPE;} type {BEGIN(GLYPH_TYPE); return TYPE;} wgrowtime return WGROWTIME; class return CLASS; bits return BITS; size return F_SIZE; index return INDEX; region return REGION_PARM; \"char\" {BEGIN(TAG); return CHAR; } \"schar\" {BEGIN(TAG); return SCHAR; } \"uchar\" {BEGIN(TAG); return UCHAR; } \"int\" {BEGIN(TAG); return INT; } \"uint\" {BEGIN(TAG); return UINT; } \"short\" {BEGIN(TAG); return SHORT; } \"ushort\" {BEGIN(TAG); return USHORT; } \"long\" {BEGIN(TAG); return LONG; } \"ulong\" {BEGIN(TAG); return ULONG; } \"time_t\" {BEGIN(TAG); return TIME_T; } \"[^"]*\" {BEGIN(TAG); return UNKNOWN; } \"invalid\" {BEGIN(TAG); return GLYPH_INVALID; } \"warning\" {BEGIN(TAG); return GLYPH_WARNING; } \"swallow\ border\" {BEGIN(TAG); return GLYPH_SWALLOW; } \"zap\ beam\" {BEGIN(TAG); return GLYPH_ZAP; } \"explosion\" {BEGIN(TAG); return GLYPH_EXPLOSION; } \"cmap\" {BEGIN(TAG); return GLYPH_CMAP; } \"object\" {BEGIN(TAG); return GLYPH_OBJECT; } \"ridden\ mon\" {BEGIN(TAG); return GLYPH_RIDDEN; } \"corpse\" {BEGIN(TAG); return GLYPH_CORPSE; } \"detected\ mon\" {BEGIN(TAG); return GLYPH_DETECTED; } \"invisible\ mon\" {BEGIN(TAG); return GLYPH_INVIS_MON; } \"pet\" {BEGIN(TAG); return GLYPH_PET; } \"monster\" {BEGIN(TAG); return GLYPH_MONST; } \"[^"]*\" {BEGIN(TAG); return UNKNOWN; } \"[^"]+\" { char *ptr = unescape_string(yytext, TRUE); int len; /* remove first and last '"' */ ptr++; len = strlen(ptr); ptr[len-1] = 0; BEGIN(TAG); yylval.i = serach_struct_id(ptr); return STRUCT_ID; } [+\-]?[0-9]+ | 0x[0-9a-fA-F]+ { yylval.i = strtol(yytext, NULL, 0); return NUMBER_DATA; } \"[^"]*\" | \"[^"]*\" { yylval.string = unescape_string(yytext, TRUE); return STRING_DATA; } \n|[ \t]+ | \n|[ \t]+ | \n|[ \t]+ | \n|[ \t]+ ; [a-zA-Z_][a-zA-Z_0-9]* return UNKNOWN_TAG; [^<\n]+ { yylval.string = unescape_string(yytext, TRUE); return DATA; } \n ; \r ; . return UNKNOWN_DATA; %% int yywrap() { return 1; }