X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=lib%2Fmodules%2Fswftext.c;h=b0d3de5be79bac50236047895cc118c3b2353050;hb=ac58a40c594fa441eb4192cc4c86068372a7f18e;hp=7d8c79a0fcb35aa9c93e8bb3a793973333c3c08c;hpb=bc22161af24c31b2b9ad2732d61146c625d70989;p=swftools.git diff --git a/lib/modules/swftext.c b/lib/modules/swftext.c index 7d8c79a..b0d3de5 100644 --- a/lib/modules/swftext.c +++ b/lib/modules/swftext.c @@ -312,6 +312,8 @@ int swf_FontExtract_DefineFont2(int id, SWFFONT * font, TAG * tag) if (glyphcount) /* this _if_ is not in the specs */ swf_GetU16(tag); // fontcodeoffset } + /* TODO: we should use the offset positions, not just + blindly read in shapes */ for (t = 0; t < glyphcount; t++) swf_GetSimpleShape(tag, &(font->glyph[t].shape)); @@ -835,7 +837,7 @@ int swf_FontSetDefine2(TAG * tag, SWFFONT * f) swf_SetBlock(tag, f->name, strlen(f->name)); } else { /* font name (="") */ - swf_SetU8(tag, 0); /*placeholder */ + swf_SetU8(tag, 0); } /* number of glyphs */ swf_SetU16(tag, f->numchars); @@ -866,8 +868,7 @@ int swf_FontSetDefine2(TAG * tag, SWFFONT * f) if(f->glyph[t].shape) { swf_SetSimpleShape(tag, f->glyph[t].shape); } else { - swf_SetU8(tag, 0); - swf_SetU8(tag, 0); + swf_SetU8(tag, 0); //non-edge(1) + edge flags(5) } } } @@ -1019,10 +1020,16 @@ int swf_TextSetInfoRecord(TAG * t, SWFFONT * font, U16 size, RGBA * color, int d else swf_SetRGB(t, color); } - if (dx) + if (dx) { + if(dx>32767 || dx<-32768) + fprintf(stderr, "Warning: Horizontal char position overflow: %d\n", dx); swf_SetS16(t, dx); - if (dy) + } + if (dy) { + if(dy>32767 || dy<-32768) + fprintf(stderr, "Warning: Vertical char position overflow: %d\n", dy); swf_SetS16(t, dy); + } if (font) swf_SetU16(t, size); @@ -1180,7 +1187,7 @@ SWFFONT *swf_ReadFont(char *filename) SWF swf; if (!filename) return 0; - f = open(filename, O_RDONLY); + f = open(filename, O_RDONLY|O_BINARY); if (f < 0 || swf_ReadSWF(f, &swf) < 0) { fprintf(stderr, "%s is not a valid SWF font file or contains errors.\n", filename); @@ -1353,7 +1360,7 @@ void swf_WriteFont(SWFFONT * font, char *filename) t = swf_InsertTag(t, ST_END); - f = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0644); + f = open(filename, O_RDWR | O_CREAT | O_TRUNC | O_BINARY, 0644); if FAILED (swf_WriteSWF(f, &swf)) fprintf(stderr, "WriteSWF() failed in writeFont().\n"); close(f);