X-Git-Url: http://git.asbjorn.it/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftext.c;h=a5db863ff3a00826db52420a80cba92a56c971bc;hb=a822c616be5fcdad5a3ef2c8e402571da5facee0;hp=270447d19ab4c15d32267f814fec9753b4acdbf7;hpb=727c1172f6b10691735fa9d8f94d27b960d4feec;p=swftools.git diff --git a/lib/modules/swftext.c b/lib/modules/swftext.c index 270447d..a5db863 100644 --- a/lib/modules/swftext.c +++ b/lib/modules/swftext.c @@ -258,8 +258,10 @@ int swf_FontExtract_DefineFont2(int id,SWFFONT * font,TAG * tag) #define FEDTJ_PRINT 0x01 #define FEDTJ_MODIFY 0x02 +#define FEDTJ_CALLBACK 0x04 -int swf_FontExtract_DefineText(int id,SWFFONT * f,TAG * t,int jobs) +int swf_FontExtract_DefineTextCallback(int id,SWFFONT * f,TAG * t,int jobs, + void(*callback)(int*chars, int nr, int fontid)) { U16 cid; SRECT r; MATRIX m; @@ -294,6 +296,7 @@ int swf_FontExtract_DefineText(int id,SWFFONT * f,TAG * t,int jobs) } else { int i; + int buf[256]; for (i=0;iglyph[code].advance)*/ f->glyph[glyph].advance = adv; } + buf[i] = glyph; } if ((id==fid)&&(jobs&FEDTJ_PRINT)) printf("\n"); + if (jobs&FEDTJ_CALLBACK) + callback(buf, flags, fid); } flags = swf_GetU8(t); } @@ -315,6 +321,11 @@ int swf_FontExtract_DefineText(int id,SWFFONT * f,TAG * t,int jobs) return id; } +int swf_FontExtract_DefineText(int id,SWFFONT * f,TAG * t,int jobs) +{ + return swf_FontExtract_DefineTextCallback(id,f,t,jobs,0); +} + int swf_FontExtract(SWF * swf,int id,SWFFONT * * font) { TAG * t; SWFFONT * f; @@ -372,9 +383,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; @@ -671,15 +682,39 @@ U32 swf_TextGetWidth(SWFFONT * font,U8 * s,int scale) return res; } -void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2) +SWFFONT* swf_ReadFont(char* filename) +{ + int f; + SWF swf; + if(!filename) + return 0; + f = open(filename,O_RDONLY); + + if (f<0 || swf_ReadSWF(f,&swf)<0) + { fprintf(stderr,"%s is not a valid SWF font file or contains errors.\n",filename); + close(f); + return 0; + } + else + { SWFFONT*font; + close(f); + if(swf_FontExtract(&swf, WRITEFONTID, &font) < 0) + return 0; + swf_FreeTags(&swf); + return font; + } +} + +void swf_WriteFont(SWFFONT*font, char* filename) { SWF swf; TAG * t; SRECT r; RGBA rgb; int f; + int useDefineFont2 = 1; if(useDefineFont2) { - fprintf(stderr, "DefineFont2 is not yet supported!\n"); + //fprintf(stderr, "DefineFont2 is not yet supported!\n"); useDefineFont2 = 0; } @@ -700,10 +735,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 @@ -718,11 +753,10 @@ 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; + int ymax = textscale * 2 * 20; U8 gbits,abits; char text[257]; int x,y; @@ -773,7 +807,7 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2) } } if(c) { - swf_TextSetInfoRecord(t,font,textscale,&rgb,lastx+1,textscale*y); + swf_TextSetInfoRecord(t,font,textscale,&rgb,lastx+1,textscale*y*2); for(x=0;x<16;x++) { int g = font->ascii2glyph[y*16+x]; @@ -791,12 +825,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); @@ -808,26 +843,4 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2) swf_FreeTags(&swf); } -SWFFONT* swf_ReadFont(char* filename) -{ - int f; - SWF swf; - if(!filename) - return 0; - f = open(filename,O_RDONLY); - - if (f<0 || swf_ReadSWF(f,&swf)<0) - { fprintf(stderr,"%s is not a valid SWF font file or contains errors.\n",filename); - close(f); - return 0; - } - else - { SWFFONT*font; - close(f); - if(swf_FontExtract(&swf, WRITEFONTID, &font) < 0) - return 0; - swf_FreeTags(&swf); - return font; - } -}