X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftext.c;h=363b55d1ba15f21952e227f70faa846a97cb50fe;hb=3ef17c4cee41231e1eed731c08381d3ddf0c8d1a;hp=4b57c83689bbd9c6164c446c4df6574144d7fd2a;hpb=f87cabd9d7dc5e891104f98b8b60f65b8bc86559;p=swftools.git diff --git a/lib/modules/swftext.c b/lib/modules/swftext.c index 4b57c83..363b55d 100644 --- a/lib/modules/swftext.c +++ b/lib/modules/swftext.c @@ -22,7 +22,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -static U32 readUTF8char(U8 ** text) +U32 readUTF8char(U8 ** text) { U32 c = 0; if (!(*(*text) & 0x80)) @@ -463,7 +463,7 @@ swf_FontExtract_DefineTextCallback(int id, SWFFONT * f, TAG * t, int jobs, if (id == fid) { if (jobs & FEDTJ_PRINT) { int code = f->glyph2ascii[glyph]; - printf("%c", code); + printf("%lc", code); } if (jobs & FEDTJ_MODIFY) f->glyph[glyph].advance = adv * 20; //? @@ -572,18 +572,20 @@ void swf_LayoutFree(SWFLAYOUT * l) static void font_freeglyphnames(SWFFONT*f) { - if (f->glyphnames) { - int t; - for (t = 0; t < f->numchars; t++) { - if (f->glyphnames[t]) { - rfx_free(f->glyphnames[t]); - f->glyphnames[t] = 0; - } + if (f->glyphnames) + { + int t; + for (t = 0; t < f->numchars; t++) + { + if (f->glyphnames[t]) + { + rfx_free(f->glyphnames[t]); + f->glyphnames[t] = 0; + } + } + rfx_free(f->glyphnames); + f->glyphnames = 0; } - rfx_free(f->glyphnames); - f->glyphnames = 0; - } - } static void font_freeusage(SWFFONT*f) { @@ -663,21 +665,27 @@ int swf_FontReduce(SWFFONT * f) font_freelayout(f); font_freeglyphnames(f); + f->use->used_glyphs= 0; for (i = 0; i < f->numchars; i++) { if(!f->use->chars[i]) { - f->glyph2ascii[i] = 0; + if(f->glyph2ascii) { + f->glyph2ascii[i] = 0; + } if(f->glyph[i].shape) { swf_ShapeFree(f->glyph[i].shape); f->glyph[i].shape = 0; f->glyph[i].advance = 0; } + f->use->used_glyphs++; } else { max_glyph = i+1; } } for (i = 0; i < f->maxascii; i++) { if(!f->use->chars[f->ascii2glyph[i]]) { - f->ascii2glyph[i] = -1; + if(f->ascii2glyph) { + f->ascii2glyph[i] = -1; + } } else { max_unicode = i+1; } @@ -778,13 +786,11 @@ void swf_FontClearUsage(SWFFONT * f) int swf_FontUse(SWFFONT * f, U8 * s) { - if (!f->use) - swf_FontInitUsage(f); if( (!s)) return -1; while (*s) { if(*s < f->maxascii && f->ascii2glyph[*s]>=0) - f->use->chars[f->ascii2glyph[*s]] = 1; + swf_FontUseGlyph(f, f->ascii2glyph[*s]); s++; } return 0; @@ -796,6 +802,8 @@ int swf_FontUseGlyph(SWFFONT * f, int glyph) swf_FontInitUsage(f); if(glyph < 0 || glyph >= f->numchars) return -1; + if(!f->use->chars[glyph]) + f->use->used_glyphs++; f->use->chars[glyph] = 1; return 0; } @@ -923,14 +931,22 @@ int swf_FontSetDefine2(TAG * tag, SWFFONT * f) /* font code table */ - if (flags & 4) { /* wide codes */ - for (t = 0; t < f->numchars; t++) { - swf_SetU16(tag, f->glyph2ascii[t]); + for (t = 0; t < f->numchars; t++) { + if (flags & 4) { /* wide codes */ + if(f->glyph2ascii[t]) { + swf_SetU16(tag, f->glyph2ascii[t]); + } else { + swf_SetU16(tag, 0); + } + } else { + if(f->glyph2ascii[t]) { + swf_SetU8(tag, f->glyph2ascii[t]); + } else { + swf_SetU8(tag, 0); + } } - } else { - for (t = 0; t < f->numchars; t++) - swf_SetU8(tag, f->glyph2ascii[t]); } + if (f->layout) { swf_SetU16(tag, f->layout->ascent); swf_SetU16(tag, f->layout->descent); @@ -1000,7 +1016,7 @@ int swf_FontSetInfo(TAG * t, SWFFONT * f) for (i = 0; i < f->numchars; i++) { if (f->glyph[i].shape) { - int g2a = f->glyph2ascii[i]; + int g2a = f->glyph2ascii?f->glyph2ascii[i]:0; wide ? swf_SetU16(t, g2a) : swf_SetU8(t, g2a); } } @@ -1022,24 +1038,28 @@ void swf_FontFree(SWFFONT * f) { int i; if (!f) - return; + return; - if (f->glyph) { - for (i = 0; i < f->numchars; i++) - if (f->glyph[i].shape) { - swf_ShapeFree(f->glyph[i].shape); - f->glyph[i].shape = NULL; - } - rfx_free(f->glyph); - f->glyph = NULL; + if (f->glyph) + { + for (i = 0; i < f->numchars; i++) + if (f->glyph[i].shape) + { + swf_ShapeFree(f->glyph[i].shape); + f->glyph[i].shape = NULL; + } + rfx_free(f->glyph); + f->glyph = NULL; } - if (f->ascii2glyph) { - rfx_free(f->ascii2glyph); - f->ascii2glyph = NULL; + if (f->ascii2glyph) + { + rfx_free(f->ascii2glyph); + f->ascii2glyph = NULL; } - if (f->glyph2ascii) { - rfx_free(f->glyph2ascii); - f->glyph2ascii = NULL; + if (f->glyph2ascii) + { + rfx_free(f->glyph2ascii); + f->glyph2ascii = NULL; } font_freename(f); font_freelayout(f); @@ -1551,8 +1571,6 @@ SRECT swf_SetDefineText(TAG * tag, SWFFONT * font, RGBA * rgb, char *text, int s swf_TextSetCharRecordUTF8(tag, font, upos, scale * 20, gbits, abits); upos= next; - - printf("%s\n", upos); } free(utext);