]> git.wh0rd.org - fontconfig.git/blobdiff - src/fcfreetype.c
[int] Define MIN/MAX/ABS macros
[fontconfig.git] / src / fcfreetype.c
index 7e30fdf718da29d73ed7dbddee9bd341a45df353..c30826e52549264ebe7161400ddc4842d0468be0 100644 (file)
@@ -13,9 +13,9 @@
  * representations about the suitability of this software for any purpose.  It
  * is provided "as is" without express or implied warranty.
  *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
  * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
@@ -120,11 +120,11 @@ static const FcFtEncoding   fcFtEncoding[] = {
  {  TT_PLATFORM_MACINTOSH,     TT_MAC_ID_JAPANESE,     "SJIS" },
  {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_UNICODE_CS,    "UTF-16BE" },
  {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_SJIS,          "SJIS-WIN" },
- {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_GB2312,        "GB3212" },
+ {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_GB2312,        "GB2312" },
  {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_BIG_5,         "BIG-5" },
  {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_WANSUNG,       "Wansung" },
  {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_JOHAB,         "Johab" },
- {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_UCS_4,         "UCS4" },
+ {  TT_PLATFORM_MICROSOFT,     TT_MS_ID_UCS_4,         "UCS-2BE" },
  {  TT_PLATFORM_ISO,           TT_ISO_ID_7BIT_ASCII,   "ASCII" },
  {  TT_PLATFORM_ISO,           TT_ISO_ID_10646,        "UCS-2BE" },
  {  TT_PLATFORM_ISO,           TT_ISO_ID_8859_1,       "ISO-8859-1" },
@@ -1091,10 +1091,16 @@ static const FT_UShort platform_order[] = {
 #define NUM_PLATFORM_ORDER (sizeof (platform_order) / sizeof (platform_order[0]))
 
 static const FT_UShort nameid_order[] = {
+#ifdef TT_NAME_ID_WWS_FAMILY
+    TT_NAME_ID_WWS_FAMILY,
+#endif
     TT_NAME_ID_PREFERRED_FAMILY,
     TT_NAME_ID_FONT_FAMILY,
     TT_NAME_ID_MAC_FULL_NAME,
     TT_NAME_ID_FULL_NAME,
+#ifdef TT_NAME_ID_WWS_SUBFAMILY
+    TT_NAME_ID_WWS_SUBFAMILY,
+#endif
     TT_NAME_ID_PREFERRED_SUBFAMILY,
     TT_NAME_ID_FONT_SUBFAMILY,
     TT_NAME_ID_TRADEMARK,
@@ -1236,6 +1242,9 @@ FcFreeTypeQueryFace (const FT_Face  face,
                    continue;
 
                switch (sname.name_id) {
+#ifdef TT_NAME_ID_WWS_FAMILY
+               case TT_NAME_ID_WWS_FAMILY:
+#endif
                case TT_NAME_ID_PREFERRED_FAMILY:
                case TT_NAME_ID_FONT_FAMILY:
 #if 0      
@@ -1266,6 +1275,9 @@ FcFreeTypeQueryFace (const FT_Face  face,
                    np = &nfullname;
                    nlangp = &nfullname_lang;
                    break;
+#ifdef TT_NAME_ID_WWS_SUBFAMILY
+               case TT_NAME_ID_WWS_SUBFAMILY:
+#endif
                case TT_NAME_ID_PREFERRED_SUBFAMILY:
                case TT_NAME_ID_FONT_SUBFAMILY:
                    if (FcDebug () & FC_DBG_SCANV)
@@ -1662,7 +1674,7 @@ FcFreeTypeQueryFace (const FT_Face  face,
     /*
      * Skip over PCF fonts that have no encoded characters; they're
      * usually just Unicode fonts transcoded to some legacy encoding
-     * ftglue.c forces us to approximate whether a font is a PCF font
+     * FT forces us to approximate whether a font is a PCF font
      * or not by whether it has any BDF properties.  Try PIXEL_SIZE;
      * I don't know how to get a list of BDF properties on the font. -PL
      */
@@ -2525,9 +2537,6 @@ FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4,
     return FcFalse;
 }
 
-#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
-#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
-#define FC_ABS(a)   ((a) < 0 ? -(a) : (a))
 #define APPROXIMATELY_EQUAL(x,y) (FC_ABS ((x) - (y)) <= FC_MAX (FC_ABS (x), FC_ABS (y)) / 33)
 
 static FcCharSet *
@@ -2803,10 +2812,6 @@ FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks)
 #define TTAG_GPOS  FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
 #define TTAG_GSUB  FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
 #define TTAG_SILF  FT_MAKE_TAG( 'S', 'i', 'l', 'f')
-#define TT_Err_Ok FT_Err_Ok
-#define TT_Err_Invalid_Face_Handle FT_Err_Invalid_Face_Handle
-#define TTO_Err_Empty_Script              0x1005
-#define TTO_Err_Invalid_SubTable          0x1001
 
 #define OTLAYOUT_HEAD      "otlayout:"
 #define OTLAYOUT_HEAD_LEN   9
@@ -2856,29 +2861,30 @@ compareulong (const void *a, const void *b)
 }
 
 
-static FT_Error
-GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *script_count)
+static int
+GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags)
 {
-    FT_ULong         cur_offset, new_offset, base_offset;
+    FT_ULong   cur_offset, new_offset, base_offset;
     FT_Stream  stream = face->stream;
     FT_Error   error;
-    FT_UShort          n, p;
+    FT_UShort  n, p;
     FT_Memory  memory;
+    int        script_count;
 
-    if ( !stream )
-       return TT_Err_Invalid_Face_Handle;
+    if (!stream)
+        return 0;
 
     memory = stream->memory;
 
     if (( error = ftglue_face_goto_table( face, tabletag, stream ) ))
-       return error;
+       return 0;
 
     base_offset = ftglue_stream_pos ( stream );
 
     /* skip version */
 
     if ( ftglue_stream_seek ( stream, base_offset + 4L ) || ftglue_stream_frame_enter( stream, 2L ) )
-       return error;
+       return 0;
 
     new_offset = GET_UShort() + base_offset;
 
@@ -2886,25 +2892,24 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri
 
     cur_offset = ftglue_stream_pos( stream );
 
-    if ( ftglue_stream_seek( stream, new_offset ) != TT_Err_Ok )
-       return error;
+    if ( ftglue_stream_seek( stream, new_offset ) != FT_Err_Ok )
+       return 0;
 
     base_offset = ftglue_stream_pos( stream );
 
     if ( ftglue_stream_frame_enter( stream, 2L ) )
-       return error;
+       return 0;
 
-    *script_count = GET_UShort ();
+    script_count = GET_UShort ();
 
     ftglue_stream_frame_exit( stream );
 
-    *stags = ftglue_alloc(memory, *script_count * sizeof( FT_ULong ), &error);
-
-    if (error)
-       return error;
+    *stags = malloc(script_count * sizeof (FT_ULong));
+    if (!stags)
+       return 0;
 
     p = 0;
-    for ( n = 0; n < *script_count; n++ )
+    for ( n = 0; n < script_count; n++ )
     {
         if ( ftglue_stream_frame_enter( stream, 6L ) )
            goto Fail;
@@ -2918,28 +2923,24 @@ GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags, FT_UShort *scri
 
        error = ftglue_stream_seek( stream, new_offset );
 
-       if ( error == TT_Err_Ok )
+       if ( error == FT_Err_Ok )
            p++;
 
        (void)ftglue_stream_seek( stream, cur_offset );
     }
 
     if (!p)
-    {
-       error = TTO_Err_Invalid_SubTable;
        goto Fail;
-    }
 
     /* sort the tag list before returning it */
-    qsort(*stags, *script_count, sizeof(FT_ULong), compareulong);
+    qsort(*stags, script_count, sizeof(FT_ULong), compareulong);
 
-    return TT_Err_Ok;
+    return script_count;
 
 Fail:
-    *script_count = 0;
-    ftglue_free( memory, *stags );
+    free(*stags);
     *stags = NULL;
-    return error;
+    return 0;
 }
 
 static FcChar8 *
@@ -2958,11 +2959,9 @@ FcFontCapabilities(FT_Face face)
     err = FT_Load_Sfnt_Table(face, TTAG_SILF, 0, 0, &len);
     issilgraphitefont = ( err == FT_Err_Ok);
 
-    if (GetScriptTags(face, TTAG_GPOS, &gpostags, &gpos_count) != FT_Err_Ok)
-       gpos_count = 0;
-    if (GetScriptTags(face, TTAG_GSUB, &gsubtags, &gsub_count) != FT_Err_Ok)
-       gsub_count = 0;
-    
+    gpos_count = GetScriptTags(face, TTAG_GPOS, &gpostags);
+    gsub_count = GetScriptTags(face, TTAG_GSUB, &gsubtags);
+
     if (!issilgraphitefont && !gsub_count && !gpos_count)
        goto bail;
 
@@ -2995,8 +2994,8 @@ FcFontCapabilities(FT_Face face)
     if (FcDebug () & FC_DBG_SCANV)
        printf("complex_ features in this font: %s\n", complex_);
 bail:
-    ftglue_free(memory, gsubtags);
-    ftglue_free(memory, gpostags);
+    free(gsubtags);
+    free(gpostags);
     return complex_;
 }