X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftext.c;h=fb708fa84b7677c9b64dc932f11009c109689de8;hb=51c19ac56edb61ae987df0488bb8cd0f8884b37e;hp=62618f2de590cf4ffe963f4134b3111ba5a4ca2d;hpb=8ba18b06bf6cab78a150946da70d36f8f6b3c1e4;p=swftools.git diff --git a/lib/modules/swftext.c b/lib/modules/swftext.c index 62618f2..fb708fa 100644 --- a/lib/modules/swftext.c +++ b/lib/modules/swftext.c @@ -46,7 +46,8 @@ int swf_FontEnumerate(SWF * swf,void (*FontCallback) (U16,U8*)) n = 0; while (t) - { if (swf_GetTagID(t)==ST_DEFINEFONTINFO) + { if (swf_GetTagID(t)==ST_DEFINEFONTINFO || + swf_GetTagID(t)==ST_DEFINEFONT2) { n++; if (FontCallback) { U16 id; @@ -54,8 +55,10 @@ int swf_FontEnumerate(SWF * swf,void (*FontCallback) (U16,U8*)) U8 s[257]; swf_SaveTagPos(t); swf_SetTagPos(t,0); - + id = swf_GetU16(t); + if(swf_GetTagID(t) == ST_DEFINEFONT2) + swf_GetU16(t); l = swf_GetU8(t); swf_GetBlock(t,s,l); s[l] = 0; @@ -155,9 +158,15 @@ int swf_FontExtract_DefineFont2(int id,SWFFONT * font,TAG * tag) { int t, glyphcount; int maxcode; + int fid; U8 flags1,flags2,namelen; + swf_SaveTagPos(tag); + swf_SetTagPos(tag,0); font->version=2; - font->id = swf_GetU16(tag); + fid = swf_GetU16(tag); + if(id && id!=fid) + return; + font->id = fid; flags1 = swf_GetU8(tag); flags2 = swf_GetU8(tag); //reserved flags namelen = swf_GetU8(tag); @@ -235,13 +244,14 @@ int swf_FontExtract_DefineFont2(int id,SWFFONT * font,TAG * tag) font->layout->kerning[t].char1 = swf_GetU16(tag); font->layout->kerning[t].char2 = swf_GetU16(tag); } else { - font->layout->kerning[t].char1 = swf_GetU16(tag); - font->layout->kerning[t].char2 = swf_GetU16(tag); + font->layout->kerning[t].char1 = swf_GetU8(tag); + font->layout->kerning[t].char2 = swf_GetU8(tag); } font->layout->kerning[t].adjustment = swf_GetS16(tag); } } } + swf_RestoreTagPos(t); return font->id; } @@ -293,7 +303,7 @@ int swf_FontExtract_DefineText(int id,SWFFONT * f,TAG * t,int jobs) { int code = f->glyph2ascii[glyph]; if (jobs&FEDTJ_PRINT) printf("%c",code); if (jobs&FEDTJ_MODIFY) - /*if (!f->glyph[code].advance)*/ f->glyph[code].advance = adv; + /*if (!f->glyph[code].advance)*/ f->glyph[glyph].advance = adv; } } if ((id==fid)&&(jobs&FEDTJ_PRINT)) printf("\n"); @@ -362,9 +372,9 @@ int swf_FontReduce(SWFFONT * f,FONTUSAGE * use) } else { swf_ShapeFree(f->glyph[i].shape); - f->ascii2glyph[f->glyph2ascii[i]] = -1; + f->ascii2glyph[f->glyph2ascii[i]] = -1; f->glyph2ascii[i] = 0; - f->glyph[i].shape = 0; + f->glyph[i].shape = NULL; f->glyph[i].advance = 0; } } else f->ascii2glyph[f->glyph2ascii[i]] = -1; @@ -690,10 +700,10 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2) { t = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR); swf.firstTag = t; - rgb.r = 0xff; - rgb.g = 0xff; - rgb.b = 0xff; - swf_SetRGB(t,&rgb); + rgb.r = 0xff; + rgb.g = 0xff; + rgb.b = 0xff; + swf_SetRGB(t,&rgb); t = swf_InsertTag(t,ST_DEFINEFONT); } else @@ -708,8 +718,7 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2) swf_FontSetInfo(t,font); if(!useDefineFont2) - { - int textscale = 400; + { int textscale = 400; int s; int xmax = 0; int ymax = textscale * 20; @@ -781,12 +790,13 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2) } } swf_SetU8(t,0); + - t = swf_InsertTag(t,ST_PLACEOBJECT2); + t = swf_InsertTag(t,ST_PLACEOBJECT2); - swf_ObjectPlace(t,font->id+1,1,NULL,NULL,NULL); + swf_ObjectPlace(t,font->id+1,1,NULL,NULL,NULL); - t = swf_InsertTag(t,ST_SHOWFRAME); + t = swf_InsertTag(t,ST_SHOWFRAME); } t = swf_InsertTag(t,ST_END);