minor fixes: new font structure in dumpfont.c, commented obsolete functions, ...
[swftools.git] / lib / modules / swftext.c
index 62618f2..fb708fa 100644 (file)
@@ -46,7 +46,8 @@ int swf_FontEnumerate(SWF * swf,void (*FontCallback) (U16,U8*))
   n = 0;
 
   while (t)
-  { if (swf_GetTagID(t)==ST_DEFINEFONTINFO)
+  { if (swf_GetTagID(t)==ST_DEFINEFONTINFO ||
+         swf_GetTagID(t)==ST_DEFINEFONT2)
     { n++;
       if (FontCallback)
       { U16 id;
@@ -54,8 +55,10 @@ int swf_FontEnumerate(SWF * swf,void (*FontCallback) (U16,U8*))
         U8 s[257];
         swf_SaveTagPos(t);
         swf_SetTagPos(t,0);
-
+       
         id  = swf_GetU16(t);
+       if(swf_GetTagID(t) == ST_DEFINEFONT2)
+           swf_GetU16(t);
         l   = swf_GetU8(t);
         swf_GetBlock(t,s,l);
         s[l] = 0;
@@ -155,9 +158,15 @@ int swf_FontExtract_DefineFont2(int id,SWFFONT * font,TAG * tag)
 {
     int t, glyphcount;
     int maxcode;
+    int fid;
     U8 flags1,flags2,namelen;
+    swf_SaveTagPos(tag);
+    swf_SetTagPos(tag,0);
     font->version=2;
-    font->id = swf_GetU16(tag);
+    fid = swf_GetU16(tag);
+    if(id && id!=fid)
+       return;
+    font->id = fid;
     flags1 = swf_GetU8(tag);
     flags2 = swf_GetU8(tag); //reserved flags
     namelen = swf_GetU8(tag);
@@ -235,13 +244,14 @@ int swf_FontExtract_DefineFont2(int id,SWFFONT * font,TAG * tag)
                    font->layout->kerning[t].char1 = swf_GetU16(tag);
                    font->layout->kerning[t].char2 = swf_GetU16(tag);
                } else {
-                   font->layout->kerning[t].char1 = swf_GetU16(tag);
-                   font->layout->kerning[t].char2 = swf_GetU16(tag);
+                   font->layout->kerning[t].char1 = swf_GetU8(tag);
+                   font->layout->kerning[t].char2 = swf_GetU8(tag);
                }
                font->layout->kerning[t].adjustment = swf_GetS16(tag);
            }
        }
     }
+    swf_RestoreTagPos(t);
     return font->id;
 }
 
@@ -293,7 +303,7 @@ int swf_FontExtract_DefineText(int id,SWFFONT * f,TAG * t,int jobs)
         { int code = f->glyph2ascii[glyph];
           if (jobs&FEDTJ_PRINT) printf("%c",code);
           if (jobs&FEDTJ_MODIFY)
-            /*if (!f->glyph[code].advance)*/ f->glyph[code].advance = adv;
+            /*if (!f->glyph[code].advance)*/ f->glyph[glyph].advance = adv;
         }
       }
       if ((id==fid)&&(jobs&FEDTJ_PRINT)) printf("\n");
@@ -362,9 +372,9 @@ int swf_FontReduce(SWFFONT * f,FONTUSAGE * use)
       }
       else
       { swf_ShapeFree(f->glyph[i].shape);
-       f->ascii2glyph[f->glyph2ascii[i]] = -1;
+        f->ascii2glyph[f->glyph2ascii[i]] = -1;
        f->glyph2ascii[i] = 0;
-        f->glyph[i].shape   = 0;
+        f->glyph[i].shape   = NULL;
         f->glyph[i].advance = 0;
       }
     } else f->ascii2glyph[f->glyph2ascii[i]] = -1;
@@ -690,10 +700,10 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2)
   {
       t = swf_InsertTag(NULL,ST_SETBACKGROUNDCOLOR);
       swf.firstTag = t;
-           rgb.r = 0xff;
-           rgb.g = 0xff;
-           rgb.b = 0xff;
-           swf_SetRGB(t,&rgb);
+            rgb.r = 0xff;
+            rgb.g = 0xff;
+            rgb.b = 0xff;
+            swf_SetRGB(t,&rgb);
       t = swf_InsertTag(t,ST_DEFINEFONT);
   }
   else
@@ -708,8 +718,7 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2)
         swf_FontSetInfo(t,font);
 
   if(!useDefineFont2)
-  {
-       int textscale = 400;
+  {     int textscale = 400;
        int s;
        int xmax = 0;
        int ymax = textscale * 20;
@@ -781,12 +790,13 @@ void swf_WriteFont(SWFFONT*font, char* filename, int useDefineFont2)
                } 
            }
            swf_SetU8(t,0);
+
         
-       t = swf_InsertTag(t,ST_PLACEOBJECT2);
+        t = swf_InsertTag(t,ST_PLACEOBJECT2);
 
-           swf_ObjectPlace(t,font->id+1,1,NULL,NULL,NULL);
+            swf_ObjectPlace(t,font->id+1,1,NULL,NULL,NULL);
      
-       t = swf_InsertTag(t,ST_SHOWFRAME);
+        t = swf_InsertTag(t,ST_SHOWFRAME);
   }
   
   t = swf_InsertTag(t,ST_END);