swf_WriteFont/swf_ReadFont now also work on Windows.
[swftools.git] / lib / modules / swftext.c
index 7d8c79a..b0d3de5 100644 (file)
@@ -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);