+void dumpButton(TAG*tag, char*prefix)
+{
+ swf_SetTagPos(tag, 0);
+ swf_GetU16(tag); // id
+ while (1) {
+ U8 flags = swf_GetU8(tag);
+ if(!flags)
+ break;
+ U16 id = swf_GetU16(tag);
+ U16 depth = swf_GetU16(tag);
+ char event[80];
+ sprintf(event, "%s%s%s%s",
+ (flags&BS_HIT)?"[hit]":"",
+ (flags&BS_DOWN)?"[down]":"",
+ (flags&BS_OVER)?"[over]":"",
+ (flags&BS_UP)?"[up]":"");
+ if(flags&0xf0) {
+ printf("%s | Show %d at depth %d for %s flags=%02x\n", prefix, id, depth, event, flags);
+ } else {
+ printf("%s | Show %d at depth %d for %s\n", prefix, id, depth, event);
+ }
+ swf_GetMatrix(tag,NULL); // matrix
+ }
+}
+
+void dumpFont(TAG*tag, char*prefix)
+{
+ SWFFONT* font = malloc(sizeof(SWFFONT));
+ memset(font, 0, sizeof(SWFFONT));
+ if(tag->id == ST_DEFINEFONT2) {
+ swf_FontExtract_DefineFont2(0, font, tag);
+ } else if(tag->id == ST_DEFINEFONT) {
+ swf_FontExtract_DefineFont(0, font, tag);
+ } else {
+ printf("%sCan't parse %s yet\n", prefix,swf_TagGetName(tag));
+ }
+ printf("%sID: %d\n", prefix,font->id);
+ printf("%sVersion: %d\n", prefix,font->version);
+ printf("%sname: %s\n", prefix,font->name);
+ printf("%scharacters: %d\n", prefix,font->numchars);
+ printf("%shightest mapped unicode value: %d\n", prefix,font->maxascii);
+ if(font->layout)
+ {
+ printf("%sascent:%.2f\n", prefix,font->layout->ascent / 20.0);
+ printf("%sdescent:%.2f\n", prefix,font->layout->descent / 20.0);
+ printf("%sleading:%.2f\n", prefix,font->layout->leading / 20.0);
+ printf("%skerning records:%d\n", prefix,font->layout->kerningcount);
+ }
+ printf("%sstyle: %d\n", prefix,font->style);
+ printf("%sencoding: %02x\n", prefix,font->encoding);
+ printf("%slanguage: %02x\n", prefix,font->language);
+ int t;
+ for(t=0;t<font->numchars;t++) {
+ int u = font->glyph2ascii?font->glyph2ascii[t]:-1;
+ printf("%s== Glyph %d: advance=%d encoding=%d ==\n", prefix, t, font->glyph[t].advance, u);
+ SHAPE2* shape = swf_ShapeToShape2(font->glyph[t].shape);
+ SHAPELINE*line = shape->lines;
+
+ while(line) {
+ if(line->type == moveTo) {
+ printf("%smoveTo %.2f %.2f\n", prefix, line->x/20.0, line->y/20.0);
+ } else if(line->type == lineTo) {
+ printf("%slineTo %.2f %.2f\n", prefix, line->x/20.0, line->y/20.0);
+ } else if(line->type == splineTo) {
+ printf("%ssplineTo (%.2f %.2f) %.2f %.2f\n", prefix,
+ line->sx/20.0, line->sy/20.0,
+ line->x/20.0, line->y/20.0
+ );
+ }
+ line = line->next;
+ }
+ swf_Shape2Free(shape);
+ free(shape);
+ }
+
+ /*
+ not part of the file
+
+ printf("%sencoding table:", prefix, prefix);
+ char filled0=0, lastfilled=0;
+ for(t=0;t<font->maxascii;t++) {
+ if((t&15)==0) {
+ printf("\n%s%08x ", prefix, t);
+ int s;
+ if(!filled0 && t) {
+ for(s=t;s<font->maxascii;s++) {
+ if(font->ascii2glyph[s]>=0) break;
+ }
+ if(s>t+32) {
+ printf("*");
+ t = ((s-16)&~15)-1;
+ continue;
+ }
+ }
+ filled0 = 0;
+ for(s=t;s<t+16 && s<font->maxascii;s++) {
+ if(font->ascii2glyph[s]>=0) filled0=1;
+ }
+ }
+ printf("%4d ", font->ascii2glyph[t]);
+ }
+ printf("\n");*/
+
+ swf_FontFree(font);
+}
+
+static SWF swf;
+static int fontnum = 0;
+static SWFFONT**fonts;