applied patches from Huub Schaeks
[swftools.git] / lib / modules / swftext.c
index 0f203ca..363b55d 100644 (file)
@@ -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,6 +665,7 @@ 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]) {
            if(f->glyph2ascii) {
@@ -673,6 +676,7 @@ int swf_FontReduce(SWFFONT * f)
                f->glyph[i].shape = 0;
                f->glyph[i].advance = 0;
            }
+           f->use->used_glyphs++;
        } else {
            max_glyph = i+1;
        }
@@ -782,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;
@@ -800,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;
 }
@@ -1034,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);
@@ -1563,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);