check for too old gcc
[swftools.git] / lib / gfxfont.c
index 8fba3de..6ec1a4f 100644 (file)
@@ -211,12 +211,13 @@ gfxfont_t* gfxfont_load(char*filename, double quality)
           the encoding is no longer unicode. 
           TODO: find a way to convert the encoding to unicode
         */
           the encoding is no longer unicode. 
           TODO: find a way to convert the encoding to unicode
         */
-       if(font->max_unicode == 0 && charmap < face->num_charmaps - 1) {
+       if(font->max_unicode == 0 && charmap < face->num_charmaps-1 && 
+               face->charmaps[charmap+1]->encoding != 0x41444243 /* custom */)
+               {
            charmap++;
            FT_Set_Charmap(face, face->charmaps[charmap]);
            charmap++;
            FT_Set_Charmap(face, face->charmaps[charmap]);
-           //font->encoding = 0;//anything but unicode FIXME
            isunicode = 0;
            isunicode = 0;
-       } else 
+       } else
            break;
     }
 
            break;
     }
 
@@ -294,7 +295,7 @@ gfxfont_t* gfxfont_load(char*filename, double quality)
                    fprintf(stderr, "Warning: glyph %d/%d (unicode %d, name %s) has return code %d\n", t, face->num_glyphs, glyph2unicode[t], name, error);
                else
                    fprintf(stderr, "Warning: glyph %d/%d (unicode %d) has return code %d\n", t, face->num_glyphs, glyph2unicode[t], error);
                    fprintf(stderr, "Warning: glyph %d/%d (unicode %d, name %s) has return code %d\n", t, face->num_glyphs, glyph2unicode[t], name, error);
                else
                    fprintf(stderr, "Warning: glyph %d/%d (unicode %d) has return code %d\n", t, face->num_glyphs, glyph2unicode[t], error);
-               omit = 1;
+               omit = 2;
 
 #if 0
                if(!has_had_errors) {
 
 #if 0
                if(!has_had_errors) {
@@ -317,7 +318,7 @@ gfxfont_t* gfxfont_load(char*filename, double quality)
            error = FT_Get_Glyph(face->glyph, &glyph);
            if(error) {
                fprintf(stderr, "Couldn't get glyph %d/%d, error:%d\n", t, face->num_glyphs, error);
            error = FT_Get_Glyph(face->glyph, &glyph);
            if(error) {
                fprintf(stderr, "Couldn't get glyph %d/%d, error:%d\n", t, face->num_glyphs, error);
-               omit = 1;
+               omit = 3;
            }
        }
 
            }
        }
 
@@ -335,9 +336,9 @@ gfxfont_t* gfxfont_load(char*filename, double quality)
                fprintf(stderr, "Couldn't decompose glyph %d\n", t);
                gfxline_free((gfxline_t*)draw.result(&draw));
                FT_Done_Glyph(glyph);
                fprintf(stderr, "Couldn't decompose glyph %d\n", t);
                gfxline_free((gfxline_t*)draw.result(&draw));
                FT_Done_Glyph(glyph);
-               omit = 1;
+               omit = 4;
            } else {
            } else {
-               font->glyphs[font->num_glyphs].advance = glyph->advance.x*20/65536;
+               font->glyphs[font->num_glyphs].advance = (glyph->advance.x*20)/65536;
                font->glyphs[font->num_glyphs].line = (gfxline_t*)draw.result(&draw);
            }
            l = font->glyphs[font->num_glyphs].line;
                font->glyphs[font->num_glyphs].line = (gfxline_t*)draw.result(&draw);
            }
            l = font->glyphs[font->num_glyphs].line;
@@ -347,7 +348,7 @@ gfxfont_t* gfxfont_load(char*filename, double quality)
                }
                l = l->next;
            }
                }
                l = l->next;
            }
-           if(!ok) {
+           if(!ok && !name) {
                gfxline_free(font->glyphs[font->num_glyphs].line);
                font->glyphs[font->num_glyphs].line = 0;
                font->glyphs[font->num_glyphs].advance = 0;
                gfxline_free(font->glyphs[font->num_glyphs].line);
                font->glyphs[font->num_glyphs].line = 0;
                font->glyphs[font->num_glyphs].advance = 0;
@@ -357,15 +358,14 @@ gfxfont_t* gfxfont_load(char*filename, double quality)
                   have unicode indices attached to them.
                   Remove that information, in order to not confuse
                   any converter applications.
                   have unicode indices attached to them.
                   Remove that information, in order to not confuse
                   any converter applications.
-
-                   TODO: what about space characters? */
+                   */
                font->glyphs[font->num_glyphs].unicode = 0;
                if(font->glyphs[font->num_glyphs].name) {
                    free(font->glyphs[font->num_glyphs].name);
                    font->glyphs[font->num_glyphs].name = 0;
                }
                FT_Done_Glyph(glyph);
                font->glyphs[font->num_glyphs].unicode = 0;
                if(font->glyphs[font->num_glyphs].name) {
                    free(font->glyphs[font->num_glyphs].name);
                    font->glyphs[font->num_glyphs].name = 0;
                }
                FT_Done_Glyph(glyph);
-               omit = 1;
+               omit = 5;
            }
        }
 
            }
        }
 
@@ -392,8 +392,8 @@ gfxfont_t* gfxfont_load(char*filename, double quality)
 
     FT_Done_Face(face);
     FT_Done_FreeType(ftlibrary);ftlibrary=0;
 
     FT_Done_Face(face);
     FT_Done_FreeType(ftlibrary);ftlibrary=0;
-  
-    if(!isunicode && font->num_glyphs>0) {
+    if(!isunicode && font->num_glyphs>0 && font->max_unicode) {
        /* if the encoding isn't unicode, remap the font
           so that the encoding equals the char position, and
           remove the unicode table */
        /* if the encoding isn't unicode, remap the font
           so that the encoding equals the char position, and
           remove the unicode table */