X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftext.c;h=ddfd76182ba63f48fefd6f4cb9dec4d81bfc74da;hb=8361cd1de3449cf6bb9c357853c9637bf50e9ce2;hp=53abace552d2fae4a2782cab54028a3ba539c855;hpb=0784a8a882e7b98299fb6a90f0f9a7ebb322562b;p=swftools.git diff --git a/lib/modules/swftext.c b/lib/modules/swftext.c index 53abace..ddfd761 100644 --- a/lib/modules/swftext.c +++ b/lib/modules/swftext.c @@ -22,6 +22,8 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "../rfxswf.h" + U32 readUTF8char(U8 ** text) { U32 c = 0; @@ -118,7 +120,6 @@ int swf_FontEnumerate(SWF * swf, void (*FontCallback) (void*, U16, U8 *), void*s int l; U8 s[257]; s[0] = 0; - swf_SaveTagPos(t); swf_SetTagPos(t, 0); id = swf_GetU16(t); @@ -130,8 +131,6 @@ int swf_FontEnumerate(SWF * swf, void (*FontCallback) (void*, U16, U8 *), void*s } (FontCallback) (self, id, s); - - swf_RestoreTagPos(t); } } t = swf_NextTag(t); @@ -142,7 +141,6 @@ int swf_FontEnumerate(SWF * swf, void (*FontCallback) (void*, U16, U8 *), void*s int swf_FontExtract_DefineFont(int id, SWFFONT * f, TAG * t) { U16 fid; - swf_SaveTagPos(t); swf_SetTagPos(t, 0); fid = swf_GetU16(t); @@ -164,8 +162,6 @@ int swf_FontExtract_DefineFont(int id, SWFFONT * f, TAG * t) for (i = 0; i < n; i++) swf_GetSimpleShape(t, &f->glyph[i].shape); } - - swf_RestoreTagPos(t); return id; } @@ -174,7 +170,6 @@ int swf_FontExtract_DefineFontInfo(int id, SWFFONT * f, TAG * t) U16 fid; U16 maxcode; U8 flags; - swf_SaveTagPos(t); swf_SetTagPos(t, 0); fid = swf_GetU16(t); @@ -229,15 +224,12 @@ int swf_FontExtract_DefineFontInfo(int id, SWFFONT * f, TAG * t) for (i = 0; i < f->numchars; i++) f->ascii2glyph[f->glyph2ascii[i]] = i; } - - swf_RestoreTagPos(t); return id; } int swf_FontExtract_GlyphNames(int id, SWFFONT * f, TAG * tag) { U16 fid; - swf_SaveTagPos(tag); swf_SetTagPos(tag, 0); fid = swf_GetU16(tag); @@ -250,8 +242,6 @@ int swf_FontExtract_GlyphNames(int id, SWFFONT * f, TAG * tag) f->glyphnames[t] = strdup(swf_GetString(tag)); } } - - swf_RestoreTagPos(tag); return id; } @@ -264,7 +254,6 @@ int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag) U32 offset_start; U32 *offset; U8 flags1, flags2, namelen; - swf_SaveTagPos(tag); swf_SetTagPos(tag, 0); font->version = 2; fid = swf_GetU16(tag); @@ -321,7 +310,8 @@ int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag) swf_GetSimpleShape(tag, &(font->glyph[t].shape)); } - swf_SetTagPos(tag, offset[glyphcount]+offset_start); + if(glyphcount) + swf_SetTagPos(tag, offset[glyphcount]+offset_start); free(offset); @@ -380,7 +370,6 @@ int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag) } } } - swf_RestoreTagPos(t); return font->id; } @@ -405,7 +394,6 @@ swf_FontExtract_DefineTextCallback(int id, SWFFONT * f, TAG * t, int jobs, memset(&color, 0, sizeof(color)); - swf_SaveTagPos(t); swf_SetTagPos(t, 0); cid = swf_GetU16(t); @@ -476,7 +464,6 @@ swf_FontExtract_DefineTextCallback(int id, SWFFONT * f, TAG * t, int jobs, } } - swf_RestoreTagPos(t); return id; } @@ -815,6 +802,7 @@ int swf_FontInitUsage(SWFFONT * f) f->use->is_reduced = 0; f->use->used_glyphs = 0; f->use->chars = (int*)rfx_calloc(sizeof(f->use->chars[0]) * f->numchars); + f->use->glyphs_specified = 0; return 0; } @@ -956,10 +944,11 @@ int swf_FontSetDefine2(TAG * tag, SWFFONT * f) swf_SetU8(tag, 0); //reserved flags if (f->name) { /* font name */ - swf_SetU8(tag, strlen((const char*)f->name)); - swf_SetBlock(tag, f->name, strlen((const char*)f->name)); + swf_SetU8(tag, strlen((const char*)f->name)+1); + swf_SetBlock(tag, f->name, strlen((const char*)f->name)+1); } else { /* font name (="") */ + swf_SetU8(tag, 1); swf_SetU8(tag, 0); } /* number of glyphs */ @@ -1136,14 +1125,14 @@ void swf_FontFree(SWFFONT * f) rfx_free(f); } -int swf_TextSetInfoRecord(TAG * t, SWFFONT * font, U16 size, RGBA * color, int dx, int dy) +int swf_TextSetInfoRecord(TAG * t, SWFFONT * font, U16 size, RGBA * color, int x, int y) { U8 flags; if (!t) return -1; - flags = TF_TEXTCONTROL | (font ? TF_HASFONT : 0) | (color ? TF_HASCOLOR : 0) | (dx ? TF_HASXOFFSET : 0) - | (dy ? TF_HASYOFFSET : 0); + flags = TF_TEXTCONTROL | (font ? TF_HASFONT : 0) | (color ? TF_HASCOLOR : 0) | (x ? TF_HASXOFFSET : 0) + | (y ? TF_HASYOFFSET : 0); swf_SetU8(t, flags); if (font) @@ -1154,20 +1143,20 @@ int swf_TextSetInfoRecord(TAG * t, SWFFONT * font, U16 size, RGBA * color, int d else swf_SetRGB(t, color); } - if (dx) { - if(dx != SET_TO_ZERO) { - if(dx>32767 || dx<-32768) - fprintf(stderr, "Warning: Horizontal char position overflow: %d\n", dx); - swf_SetS16(t, dx); + if (x) { + if(x != SET_TO_ZERO) { + if(x>32767 || x<-32768) + fprintf(stderr, "Warning: Horizontal char position overflow: %d\n", x); + swf_SetS16(t, x); } else { swf_SetS16(t, 0); } } - if (dy) { - if(dy != SET_TO_ZERO) { - if(dy>32767 || dy<-32768) - fprintf(stderr, "Warning: Vertical char position overflow: %d\n", dy); - swf_SetS16(t, dy); + if (y) { + if(y != SET_TO_ZERO) { + if(y>32767 || y<-32768) + fprintf(stderr, "Warning: Vertical char position overflow: %d\n", y); + swf_SetS16(t, y); } else { swf_SetS16(t, 0); }