#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;
}
else
{ int i;
+ int buf[256];
for (i=0;i<flags;i++)
{ int glyph;
int adv;
if (jobs&FEDTJ_MODIFY)
/*if (!f->glyph[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);
}
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;
swf.fileVersion = 4;
swf.frameRate = 0x4000;
- swf.movieSize.xmax = 20*640;
- swf.movieSize.ymax = 20*480;
if(!useDefineFont2)
/* if we use DefineFont1 to store the characters,
{ int textscale = 400;
int s;
int xmax = 0;
- int ymax = textscale * 2 * 20;
+ int ymax = textscale * 2 * (font->maxascii/16+1);
U8 gbits,abits;
- char text[257];
+ char text[MAX_CHAR_PER_FONT+1];
int x,y;
- text[256]=0;
- for(s=0;s<256;s++)
+ text[MAX_CHAR_PER_FONT]=0;
+ for(s=0;s<font->maxascii;s++)
{
int g = font->ascii2glyph[s];
text[s] = s;
if(g>=0) {
- if(font->glyph[g].advance*textscale/100 > xmax)
- xmax = font->glyph[g].advance*textscale/100;
+ if(font->glyph[g].advance*textscale/50 > xmax)
+ xmax = font->glyph[g].advance*textscale/50;
}
}
swf.movieSize.xmax = xmax*20;
rgb.r = 0x00;
rgb.g = 0x00;
rgb.b = 0x00;
- for(y=0;y<16;y++)
+ for(y=0;y<=((font->maxascii-1)/16);y++)
{
int c=0,lastx=-1, firstx=0;
for(x=0;x<16;x++) {
- int g = font->ascii2glyph[y*16+x];
+ int g = (y*16+x<font->maxascii)?font->ascii2glyph[y*16+x]:-1;
if(g>=0 && font->glyph[g].shape) {
c++;
if(lastx<0)
swf_TextSetInfoRecord(t,font,textscale,&rgb,lastx+1,textscale*y*2);
for(x=0;x<16;x++)
{
- int g = font->ascii2glyph[y*16+x];
+ int g = (y*16+x<font->maxascii)?font->ascii2glyph[y*16+x]:-1;
if(g>=0 && font->glyph[g].shape) {
if(lastx != x*xmax) {
swf_TextSetInfoRecord(t,0,0,0,x*xmax+1,0);