| OLD | NEW | 
|---|
| 1 /***************************************************************************/ | 1 /***************************************************************************/ | 
| 2 /*                                                                         */ | 2 /*                                                                         */ | 
| 3 /*  sfdriver.c                                                             */ | 3 /*  sfdriver.c                                                             */ | 
| 4 /*                                                                         */ | 4 /*                                                                         */ | 
| 5 /*    High-level SFNT driver interface (body).                             */ | 5 /*    High-level SFNT driver interface (body).                             */ | 
| 6 /*                                                                         */ | 6 /*                                                                         */ | 
| 7 /*  Copyright 1996-2007, 2009-2011 by                                      */ | 7 /*  Copyright 1996-2007, 2009-2013 by                                      */ | 
| 8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */ | 8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */ | 
| 9 /*                                                                         */ | 9 /*                                                                         */ | 
| 10 /*  This file is part of the FreeType project, and may only be used,       */ | 10 /*  This file is part of the FreeType project, and may only be used,       */ | 
| 11 /*  modified, and distributed under the terms of the FreeType project      */ | 11 /*  modified, and distributed under the terms of the FreeType project      */ | 
| 12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */ | 12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */ | 
| 13 /*  this file you indicate that you have read the license and              */ | 13 /*  this file you indicate that you have read the license and              */ | 
| 14 /*  understand and accept it fully.                                        */ | 14 /*  understand and accept it fully.                                        */ | 
| 15 /*                                                                         */ | 15 /*                                                                         */ | 
| 16 /***************************************************************************/ | 16 /***************************************************************************/ | 
| 17 | 17 | 
| (...skipping 25 matching lines...) Expand all  Loading... | 
| 43 | 43 | 
| 44 #include "ttcmap.h" | 44 #include "ttcmap.h" | 
| 45 #include "ttkern.h" | 45 #include "ttkern.h" | 
| 46 #include "ttmtx.h" | 46 #include "ttmtx.h" | 
| 47 | 47 | 
| 48 #include FT_SERVICE_GLYPH_DICT_H | 48 #include FT_SERVICE_GLYPH_DICT_H | 
| 49 #include FT_SERVICE_POSTSCRIPT_NAME_H | 49 #include FT_SERVICE_POSTSCRIPT_NAME_H | 
| 50 #include FT_SERVICE_SFNT_H | 50 #include FT_SERVICE_SFNT_H | 
| 51 #include FT_SERVICE_TT_CMAP_H | 51 #include FT_SERVICE_TT_CMAP_H | 
| 52 | 52 | 
|  | 53 | 
| 53   /*************************************************************************/ | 54   /*************************************************************************/ | 
| 54   /*                                                                       */ | 55   /*                                                                       */ | 
| 55   /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */ | 56   /* The macro FT_COMPONENT is used in trace mode.  It is an implicit      */ | 
| 56   /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */ | 57   /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log  */ | 
| 57   /* messages during execution.                                            */ | 58   /* messages during execution.                                            */ | 
| 58   /*                                                                       */ | 59   /*                                                                       */ | 
| 59 #undef  FT_COMPONENT | 60 #undef  FT_COMPONENT | 
| 60 #define FT_COMPONENT  trace_sfdriver | 61 #define FT_COMPONENT  trace_sfdriver | 
| 61 | 62 | 
| 62 | 63 | 
| 63  /* | 64   /* | 
| 64   *  SFNT TABLE SERVICE | 65    *  SFNT TABLE SERVICE | 
| 65   * | 66    * | 
| 66   */ | 67    */ | 
| 67 | 68 | 
| 68   static void* | 69   static void* | 
| 69   get_sfnt_table( TT_Face      face, | 70   get_sfnt_table( TT_Face      face, | 
| 70                   FT_Sfnt_Tag  tag ) | 71                   FT_Sfnt_Tag  tag ) | 
| 71   { | 72   { | 
| 72     void*  table; | 73     void*  table; | 
| 73 | 74 | 
| 74 | 75 | 
| 75     switch ( tag ) | 76     switch ( tag ) | 
| 76     { | 77     { | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 111 | 112 | 
| 112 | 113 | 
| 113   static FT_Error | 114   static FT_Error | 
| 114   sfnt_table_info( TT_Face    face, | 115   sfnt_table_info( TT_Face    face, | 
| 115                    FT_UInt    idx, | 116                    FT_UInt    idx, | 
| 116                    FT_ULong  *tag, | 117                    FT_ULong  *tag, | 
| 117                    FT_ULong  *offset, | 118                    FT_ULong  *offset, | 
| 118                    FT_ULong  *length ) | 119                    FT_ULong  *length ) | 
| 119   { | 120   { | 
| 120     if ( !offset || !length ) | 121     if ( !offset || !length ) | 
| 121       return SFNT_Err_Invalid_Argument; | 122       return FT_THROW( Invalid_Argument ); | 
| 122 | 123 | 
| 123     if ( !tag ) | 124     if ( !tag ) | 
| 124       *length = face->num_tables; | 125       *length = face->num_tables; | 
| 125     else | 126     else | 
| 126     { | 127     { | 
| 127       if ( idx >= face->num_tables ) | 128       if ( idx >= face->num_tables ) | 
| 128         return SFNT_Err_Table_Missing; | 129         return FT_THROW( Table_Missing ); | 
| 129 | 130 | 
| 130       *tag    = face->dir_tables[idx].Tag; | 131       *tag    = face->dir_tables[idx].Tag; | 
| 131       *offset = face->dir_tables[idx].Offset; | 132       *offset = face->dir_tables[idx].Offset; | 
| 132       *length = face->dir_tables[idx].Length; | 133       *length = face->dir_tables[idx].Length; | 
| 133     } | 134     } | 
| 134 | 135 | 
| 135     return SFNT_Err_Ok; | 136     return FT_Err_Ok; | 
| 136   } | 137   } | 
| 137 | 138 | 
| 138 | 139 | 
| 139   FT_DEFINE_SERVICE_SFNT_TABLEREC(sfnt_service_sfnt_table, | 140   FT_DEFINE_SERVICE_SFNT_TABLEREC( | 
|  | 141     sfnt_service_sfnt_table, | 
| 140     (FT_SFNT_TableLoadFunc)tt_face_load_any, | 142     (FT_SFNT_TableLoadFunc)tt_face_load_any, | 
| 141     (FT_SFNT_TableGetFunc) get_sfnt_table, | 143     (FT_SFNT_TableGetFunc) get_sfnt_table, | 
| 142     (FT_SFNT_TableInfoFunc)sfnt_table_info | 144     (FT_SFNT_TableInfoFunc)sfnt_table_info ) | 
| 143   ) |  | 
| 144 | 145 | 
| 145 | 146 | 
| 146 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES | 147 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES | 
| 147 | 148 | 
| 148  /* | 149   /* | 
| 149   *  GLYPH DICT SERVICE | 150    *  GLYPH DICT SERVICE | 
| 150   * | 151    * | 
| 151   */ | 152    */ | 
| 152 | 153 | 
| 153   static FT_Error | 154   static FT_Error | 
| 154   sfnt_get_glyph_name( TT_Face     face, | 155   sfnt_get_glyph_name( TT_Face     face, | 
| 155                        FT_UInt     glyph_index, | 156                        FT_UInt     glyph_index, | 
| 156                        FT_Pointer  buffer, | 157                        FT_Pointer  buffer, | 
| 157                        FT_UInt     buffer_max ) | 158                        FT_UInt     buffer_max ) | 
| 158   { | 159   { | 
| 159     FT_String*  gname; | 160     FT_String*  gname; | 
| 160     FT_Error    error; | 161     FT_Error    error; | 
| 161 | 162 | 
| 162 | 163 | 
| 163     error = tt_face_get_ps_name( face, glyph_index, &gname ); | 164     error = tt_face_get_ps_name( face, glyph_index, &gname ); | 
| 164     if ( !error ) | 165     if ( !error ) | 
| 165       FT_STRCPYN( buffer, gname, buffer_max ); | 166       FT_STRCPYN( buffer, gname, buffer_max ); | 
| 166 | 167 | 
| 167     return error; | 168     return error; | 
| 168   } | 169   } | 
| 169 | 170 | 
| 170 | 171 | 
| 171   static FT_UInt | 172   static FT_UInt | 
| 172   sfnt_get_name_index( TT_Face     face, | 173   sfnt_get_name_index( TT_Face     face, | 
| 173                        FT_String*  glyph_name ) | 174                        FT_String*  glyph_name ) | 
| 174   { | 175   { | 
| 175     FT_Face   root = &face->root; | 176     FT_Face  root = &face->root; | 
| 176     FT_UInt   i, max_gid = FT_UINT_MAX; | 177 | 
|  | 178     FT_UInt  i, max_gid = FT_UINT_MAX; | 
| 177 | 179 | 
| 178 | 180 | 
| 179     if ( root->num_glyphs < 0 ) | 181     if ( root->num_glyphs < 0 ) | 
| 180       return 0; | 182       return 0; | 
| 181     else if ( ( FT_ULong ) root->num_glyphs < FT_UINT_MAX ) | 183     else if ( (FT_ULong)root->num_glyphs < FT_UINT_MAX ) | 
| 182       max_gid = ( FT_UInt ) root->num_glyphs; | 184       max_gid = (FT_UInt)root->num_glyphs; | 
| 183     else | 185     else | 
| 184       FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n", | 186       FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n", | 
| 185          FT_UINT_MAX, root->num_glyphs )); | 187                   FT_UINT_MAX, root->num_glyphs )); | 
| 186 | 188 | 
| 187     for ( i = 0; i < max_gid; i++ ) | 189     for ( i = 0; i < max_gid; i++ ) | 
| 188     { | 190     { | 
| 189       FT_String*  gname; | 191       FT_String*  gname; | 
| 190       FT_Error    error = tt_face_get_ps_name( face, i, &gname ); | 192       FT_Error    error = tt_face_get_ps_name( face, i, &gname ); | 
| 191 | 193 | 
| 192 | 194 | 
| 193       if ( error ) | 195       if ( error ) | 
| 194         continue; | 196         continue; | 
| 195 | 197 | 
| 196       if ( !ft_strcmp( glyph_name, gname ) ) | 198       if ( !ft_strcmp( glyph_name, gname ) ) | 
| 197         return i; | 199         return i; | 
| 198     } | 200     } | 
| 199 | 201 | 
| 200     return 0; | 202     return 0; | 
| 201   } | 203   } | 
| 202 | 204 | 
| 203 | 205 | 
| 204   FT_DEFINE_SERVICE_GLYPHDICTREC(sfnt_service_glyph_dict, | 206   FT_DEFINE_SERVICE_GLYPHDICTREC( | 
|  | 207     sfnt_service_glyph_dict, | 
| 205     (FT_GlyphDict_GetNameFunc)  sfnt_get_glyph_name, | 208     (FT_GlyphDict_GetNameFunc)  sfnt_get_glyph_name, | 
| 206     (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index | 209     (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index ) | 
| 207   ) | 210 | 
| 208 | 211 | 
| 209 #endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */ | 212 #endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */ | 
| 210 | 213 | 
| 211 | 214 | 
| 212  /* | 215   /* | 
| 213   *  POSTSCRIPT NAME SERVICE | 216    *  POSTSCRIPT NAME SERVICE | 
| 214   * | 217    * | 
| 215   */ | 218    */ | 
| 216 | 219 | 
| 217   static const char* | 220   static const char* | 
| 218   sfnt_get_ps_name( TT_Face  face ) | 221   sfnt_get_ps_name( TT_Face  face ) | 
| 219   { | 222   { | 
| 220     FT_Int       n, found_win, found_apple; | 223     FT_Int       n, found_win, found_apple; | 
| 221     const char*  result = NULL; | 224     const char*  result = NULL; | 
| 222 | 225 | 
| 223 | 226 | 
| 224     /* shouldn't happen, but just in case to avoid memory leaks */ | 227     /* shouldn't happen, but just in case to avoid memory leaks */ | 
| 225     if ( face->postscript_name ) | 228     if ( face->postscript_name ) | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 247              name->languageID == 0 ) | 250              name->languageID == 0 ) | 
| 248           found_apple = n; | 251           found_apple = n; | 
| 249       } | 252       } | 
| 250     } | 253     } | 
| 251 | 254 | 
| 252     if ( found_win != -1 ) | 255     if ( found_win != -1 ) | 
| 253     { | 256     { | 
| 254       FT_Memory         memory = face->root.memory; | 257       FT_Memory         memory = face->root.memory; | 
| 255       TT_NameEntryRec*  name   = face->name_table.names + found_win; | 258       TT_NameEntryRec*  name   = face->name_table.names + found_win; | 
| 256       FT_UInt           len    = name->stringLength / 2; | 259       FT_UInt           len    = name->stringLength / 2; | 
| 257       FT_Error          error  = SFNT_Err_Ok; | 260       FT_Error          error  = FT_Err_Ok; | 
| 258 | 261 | 
| 259       FT_UNUSED( error ); | 262       FT_UNUSED( error ); | 
| 260 | 263 | 
| 261 | 264 | 
| 262       if ( !FT_ALLOC( result, name->stringLength + 1 ) ) | 265       if ( !FT_ALLOC( result, name->stringLength + 1 ) ) | 
| 263       { | 266       { | 
| 264         FT_Stream   stream = face->name_table.stream; | 267         FT_Stream   stream = face->name_table.stream; | 
| 265         FT_String*  r      = (FT_String*)result; | 268         FT_String*  r      = (FT_String*)result; | 
| 266         FT_Byte*    p      = (FT_Byte*)name->string; | 269         FT_Byte*    p      = (FT_Byte*)name->string; | 
| 267 | 270 | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 289         FT_FRAME_EXIT(); | 292         FT_FRAME_EXIT(); | 
| 290       } | 293       } | 
| 291       goto Exit; | 294       goto Exit; | 
| 292     } | 295     } | 
| 293 | 296 | 
| 294     if ( found_apple != -1 ) | 297     if ( found_apple != -1 ) | 
| 295     { | 298     { | 
| 296       FT_Memory         memory = face->root.memory; | 299       FT_Memory         memory = face->root.memory; | 
| 297       TT_NameEntryRec*  name   = face->name_table.names + found_apple; | 300       TT_NameEntryRec*  name   = face->name_table.names + found_apple; | 
| 298       FT_UInt           len    = name->stringLength; | 301       FT_UInt           len    = name->stringLength; | 
| 299       FT_Error          error  = SFNT_Err_Ok; | 302       FT_Error          error  = FT_Err_Ok; | 
| 300 | 303 | 
| 301       FT_UNUSED( error ); | 304       FT_UNUSED( error ); | 
| 302 | 305 | 
| 303 | 306 | 
| 304       if ( !FT_ALLOC( result, len + 1 ) ) | 307       if ( !FT_ALLOC( result, len + 1 ) ) | 
| 305       { | 308       { | 
| 306         FT_Stream  stream = face->name_table.stream; | 309         FT_Stream  stream = face->name_table.stream; | 
| 307 | 310 | 
| 308 | 311 | 
| 309         if ( FT_STREAM_SEEK( name->stringOffset ) || | 312         if ( FT_STREAM_SEEK( name->stringOffset ) || | 
| 310              FT_STREAM_READ( result, len )        ) | 313              FT_STREAM_READ( result, len )        ) | 
| 311         { | 314         { | 
| 312           name->stringOffset = 0; | 315           name->stringOffset = 0; | 
| 313           name->stringLength = 0; | 316           name->stringLength = 0; | 
| 314           FT_FREE( name->string ); | 317           FT_FREE( name->string ); | 
| 315           FT_FREE( result ); | 318           FT_FREE( result ); | 
| 316           goto Exit; | 319           goto Exit; | 
| 317         } | 320         } | 
| 318         ((char*)result)[len] = '\0'; | 321         ((char*)result)[len] = '\0'; | 
| 319       } | 322       } | 
| 320     } | 323     } | 
| 321 | 324 | 
| 322   Exit: | 325   Exit: | 
| 323     face->postscript_name = result; | 326     face->postscript_name = result; | 
| 324     return result; | 327     return result; | 
| 325   } | 328   } | 
| 326 | 329 | 
| 327   FT_DEFINE_SERVICE_PSFONTNAMEREC(sfnt_service_ps_name, | 330 | 
| 328     (FT_PsName_GetFunc)sfnt_get_ps_name | 331   FT_DEFINE_SERVICE_PSFONTNAMEREC( | 
| 329   ) | 332     sfnt_service_ps_name, | 
|  | 333     (FT_PsName_GetFunc)sfnt_get_ps_name ) | 
| 330 | 334 | 
| 331 | 335 | 
| 332   /* | 336   /* | 
| 333    *  TT CMAP INFO | 337    *  TT CMAP INFO | 
| 334    */ | 338    */ | 
| 335   FT_DEFINE_SERVICE_TTCMAPSREC(tt_service_get_cmap_info, | 339   FT_DEFINE_SERVICE_TTCMAPSREC( | 
| 336     (TT_CMap_Info_GetFunc)tt_get_cmap_info | 340     tt_service_get_cmap_info, | 
| 337   ) | 341     (TT_CMap_Info_GetFunc)tt_get_cmap_info ) | 
| 338 | 342 | 
| 339 | 343 | 
| 340 #ifdef TT_CONFIG_OPTION_BDF | 344 #ifdef TT_CONFIG_OPTION_BDF | 
| 341 | 345 | 
| 342   static FT_Error | 346   static FT_Error | 
| 343   sfnt_get_charset_id( TT_Face       face, | 347   sfnt_get_charset_id( TT_Face       face, | 
| 344                        const char*  *acharset_encoding, | 348                        const char*  *acharset_encoding, | 
| 345                        const char*  *acharset_registry ) | 349                        const char*  *acharset_registry ) | 
| 346   { | 350   { | 
| 347     BDF_PropertyRec  encoding, registry; | 351     BDF_PropertyRec  encoding, registry; | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 360       error = tt_face_find_bdf_prop( face, "CHARSET_ENCODING", &encoding ); | 364       error = tt_face_find_bdf_prop( face, "CHARSET_ENCODING", &encoding ); | 
| 361       if ( !error ) | 365       if ( !error ) | 
| 362       { | 366       { | 
| 363         if ( registry.type == BDF_PROPERTY_TYPE_ATOM && | 367         if ( registry.type == BDF_PROPERTY_TYPE_ATOM && | 
| 364              encoding.type == BDF_PROPERTY_TYPE_ATOM ) | 368              encoding.type == BDF_PROPERTY_TYPE_ATOM ) | 
| 365         { | 369         { | 
| 366           *acharset_encoding = encoding.u.atom; | 370           *acharset_encoding = encoding.u.atom; | 
| 367           *acharset_registry = registry.u.atom; | 371           *acharset_registry = registry.u.atom; | 
| 368         } | 372         } | 
| 369         else | 373         else | 
| 370           error = SFNT_Err_Invalid_Argument; | 374           error = FT_THROW( Invalid_Argument ); | 
| 371       } | 375       } | 
| 372     } | 376     } | 
| 373 | 377 | 
| 374     return error; | 378     return error; | 
| 375   } | 379   } | 
| 376 | 380 | 
| 377 | 381 | 
| 378   FT_DEFINE_SERVICE_BDFRec(sfnt_service_bdf, | 382   FT_DEFINE_SERVICE_BDFRec( | 
| 379     (FT_BDF_GetCharsetIdFunc) sfnt_get_charset_id, | 383     sfnt_service_bdf, | 
| 380     (FT_BDF_GetPropertyFunc)  tt_face_find_bdf_prop | 384     (FT_BDF_GetCharsetIdFunc)sfnt_get_charset_id, | 
| 381   ) | 385     (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop ) | 
|  | 386 | 
| 382 | 387 | 
| 383 #endif /* TT_CONFIG_OPTION_BDF */ | 388 #endif /* TT_CONFIG_OPTION_BDF */ | 
| 384 | 389 | 
| 385 | 390 | 
| 386   /* | 391   /* | 
| 387    *  SERVICE LIST | 392    *  SERVICE LIST | 
| 388    */ | 393    */ | 
| 389 | 394 | 
| 390 #if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF | 395 #if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF | 
| 391   FT_DEFINE_SERVICEDESCREC5(sfnt_services, | 396   FT_DEFINE_SERVICEDESCREC5( | 
| 392     FT_SERVICE_ID_SFNT_TABLE,           &FT_SFNT_SERVICE_SFNT_TABLE_GET, | 397     sfnt_services, | 
| 393     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, | 398     FT_SERVICE_ID_SFNT_TABLE,           &SFNT_SERVICE_SFNT_TABLE_GET, | 
| 394     FT_SERVICE_ID_GLYPH_DICT,           &FT_SFNT_SERVICE_GLYPH_DICT_GET, | 399     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, | 
| 395     FT_SERVICE_ID_BDF,                  &FT_SFNT_SERVICE_BDF_GET, | 400     FT_SERVICE_ID_GLYPH_DICT,           &SFNT_SERVICE_GLYPH_DICT_GET, | 
| 396     FT_SERVICE_ID_TT_CMAP,              &FT_TT_SERVICE_GET_CMAP_INFO_GET | 401     FT_SERVICE_ID_BDF,                  &SFNT_SERVICE_BDF_GET, | 
| 397   ) | 402     FT_SERVICE_ID_TT_CMAP,              &TT_SERVICE_CMAP_INFO_GET ) | 
| 398 #elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES | 403 #elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES | 
| 399   FT_DEFINE_SERVICEDESCREC4(sfnt_services, | 404   FT_DEFINE_SERVICEDESCREC4( | 
| 400     FT_SERVICE_ID_SFNT_TABLE,           &FT_SFNT_SERVICE_SFNT_TABLE_GET, | 405     sfnt_services, | 
| 401     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, | 406     FT_SERVICE_ID_SFNT_TABLE,           &SFNT_SERVICE_SFNT_TABLE_GET, | 
| 402     FT_SERVICE_ID_GLYPH_DICT,           &FT_SFNT_SERVICE_GLYPH_DICT_GET, | 407     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, | 
| 403     FT_SERVICE_ID_TT_CMAP,              &FT_TT_SERVICE_GET_CMAP_INFO_GET | 408     FT_SERVICE_ID_GLYPH_DICT,           &SFNT_SERVICE_GLYPH_DICT_GET, | 
| 404   ) | 409     FT_SERVICE_ID_TT_CMAP,              &TT_SERVICE_CMAP_INFO_GET ) | 
| 405 #elif defined TT_CONFIG_OPTION_BDF | 410 #elif defined TT_CONFIG_OPTION_BDF | 
| 406   FT_DEFINE_SERVICEDESCREC4(sfnt_services, | 411   FT_DEFINE_SERVICEDESCREC4( | 
| 407     FT_SERVICE_ID_SFNT_TABLE,           &FT_SFNT_SERVICE_SFNT_TABLE_GET, | 412     sfnt_services, | 
| 408     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, | 413     FT_SERVICE_ID_SFNT_TABLE,           &SFNT_SERVICE_SFNT_TABLE_GET, | 
| 409     FT_SERVICE_ID_BDF,                  &FT_SFNT_SERVICE_BDF_GET, | 414     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, | 
| 410     FT_SERVICE_ID_TT_CMAP,              &FT_TT_SERVICE_GET_CMAP_INFO_GET | 415     FT_SERVICE_ID_BDF,                  &SFNT_SERVICE_BDF_GET, | 
| 411   ) | 416     FT_SERVICE_ID_TT_CMAP,              &TT_SERVICE_CMAP_INFO_GET ) | 
| 412 #else | 417 #else | 
| 413   FT_DEFINE_SERVICEDESCREC3(sfnt_services, | 418   FT_DEFINE_SERVICEDESCREC3( | 
| 414     FT_SERVICE_ID_SFNT_TABLE,           &FT_SFNT_SERVICE_SFNT_TABLE_GET, | 419     sfnt_services, | 
| 415     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &FT_SFNT_SERVICE_PS_NAME_GET, | 420     FT_SERVICE_ID_SFNT_TABLE,           &SFNT_SERVICE_SFNT_TABLE_GET, | 
| 416     FT_SERVICE_ID_TT_CMAP,              &FT_TT_SERVICE_GET_CMAP_INFO_GET | 421     FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, | 
| 417   ) | 422     FT_SERVICE_ID_TT_CMAP,              &TT_SERVICE_CMAP_INFO_GET ) | 
| 418 #endif | 423 #endif | 
| 419 | 424 | 
| 420 | 425 | 
| 421   FT_CALLBACK_DEF( FT_Module_Interface ) | 426   FT_CALLBACK_DEF( FT_Module_Interface ) | 
| 422   sfnt_get_interface( FT_Module    module, | 427   sfnt_get_interface( FT_Module    module, | 
| 423                       const char*  module_interface ) | 428                       const char*  module_interface ) | 
| 424   { | 429   { | 
| 425     /* FT_SFNT_SERVICES_GET derefers `library' in PIC mode */ | 430     /* SFNT_SERVICES_GET derefers `library' in PIC mode */ | 
| 426 #ifdef FT_CONFIG_OPTION_PIC | 431 #ifdef FT_CONFIG_OPTION_PIC | 
| 427     FT_Library  library; | 432     FT_Library  library; | 
| 428 | 433 | 
| 429 | 434 | 
| 430     if ( !module ) | 435     if ( !module ) | 
| 431       return NULL; | 436       return NULL; | 
| 432     library = module->library; | 437     library = module->library; | 
| 433     if ( !library ) | 438     if ( !library ) | 
| 434       return NULL; | 439       return NULL; | 
| 435 #else | 440 #else | 
| 436     FT_UNUSED( module ); | 441     FT_UNUSED( module ); | 
| 437 #endif | 442 #endif | 
| 438     return ft_service_list_lookup( FT_SFNT_SERVICES_GET, module_interface ); | 443 | 
|  | 444     return ft_service_list_lookup( SFNT_SERVICES_GET, module_interface ); | 
| 439   } | 445   } | 
| 440 | 446 | 
| 441 | 447 | 
| 442 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS |  | 
| 443 |  | 
| 444   FT_CALLBACK_DEF( FT_Error ) |  | 
| 445   tt_face_load_sfnt_header_stub( TT_Face      face, |  | 
| 446                                  FT_Stream    stream, |  | 
| 447                                  FT_Long      face_index, |  | 
| 448                                  SFNT_Header  header ) |  | 
| 449   { |  | 
| 450     FT_UNUSED( face ); |  | 
| 451     FT_UNUSED( stream ); |  | 
| 452     FT_UNUSED( face_index ); |  | 
| 453     FT_UNUSED( header ); |  | 
| 454 |  | 
| 455     return SFNT_Err_Unimplemented_Feature; |  | 
| 456   } |  | 
| 457 |  | 
| 458 |  | 
| 459   FT_CALLBACK_DEF( FT_Error ) |  | 
| 460   tt_face_load_directory_stub( TT_Face      face, |  | 
| 461                                FT_Stream    stream, |  | 
| 462                                SFNT_Header  header ) |  | 
| 463   { |  | 
| 464     FT_UNUSED( face ); |  | 
| 465     FT_UNUSED( stream ); |  | 
| 466     FT_UNUSED( header ); |  | 
| 467 |  | 
| 468     return SFNT_Err_Unimplemented_Feature; |  | 
| 469   } |  | 
| 470 |  | 
| 471 |  | 
| 472   FT_CALLBACK_DEF( FT_Error ) |  | 
| 473   tt_face_load_hdmx_stub( TT_Face    face, |  | 
| 474                           FT_Stream  stream ) |  | 
| 475   { |  | 
| 476     FT_UNUSED( face ); |  | 
| 477     FT_UNUSED( stream ); |  | 
| 478 |  | 
| 479     return SFNT_Err_Unimplemented_Feature; |  | 
| 480   } |  | 
| 481 |  | 
| 482 |  | 
| 483   FT_CALLBACK_DEF( void ) |  | 
| 484   tt_face_free_hdmx_stub( TT_Face  face ) |  | 
| 485   { |  | 
| 486     FT_UNUSED( face ); |  | 
| 487   } |  | 
| 488 |  | 
| 489 |  | 
| 490   FT_CALLBACK_DEF( FT_Error ) |  | 
| 491   tt_face_set_sbit_strike_stub( TT_Face    face, |  | 
| 492                                 FT_UInt    x_ppem, |  | 
| 493                                 FT_UInt    y_ppem, |  | 
| 494                                 FT_ULong*  astrike_index ) |  | 
| 495   { |  | 
| 496     /* |  | 
| 497      * We simply forge a FT_Size_Request and call the real function |  | 
| 498      * that does all the work. |  | 
| 499      * |  | 
| 500      * This stub might be called by libXfont in the X.Org Xserver, |  | 
| 501      * compiled against version 2.1.8 or newer. |  | 
| 502      */ |  | 
| 503 |  | 
| 504     FT_Size_RequestRec  req; |  | 
| 505 |  | 
| 506 |  | 
| 507     req.type           = FT_SIZE_REQUEST_TYPE_NOMINAL; |  | 
| 508     req.width          = (FT_F26Dot6)x_ppem; |  | 
| 509     req.height         = (FT_F26Dot6)y_ppem; |  | 
| 510     req.horiResolution = 0; |  | 
| 511     req.vertResolution = 0; |  | 
| 512 |  | 
| 513     *astrike_index = 0x7FFFFFFFUL; |  | 
| 514 |  | 
| 515     return tt_face_set_sbit_strike( face, &req, astrike_index ); |  | 
| 516   } |  | 
| 517 |  | 
| 518 |  | 
| 519   FT_CALLBACK_DEF( FT_Error ) |  | 
| 520   tt_face_load_sbit_stub( TT_Face    face, |  | 
| 521                           FT_Stream  stream ) |  | 
| 522   { |  | 
| 523     FT_UNUSED( face ); |  | 
| 524     FT_UNUSED( stream ); |  | 
| 525 |  | 
| 526     /* |  | 
| 527      *  This function was originally implemented to load the sbit table. |  | 
| 528      *  However, it has been replaced by `tt_face_load_eblc', and this stub |  | 
| 529      *  is only there for some rogue clients which would want to call it |  | 
| 530      *  directly (which doesn't make much sense). |  | 
| 531      */ |  | 
| 532     return SFNT_Err_Unimplemented_Feature; |  | 
| 533   } |  | 
| 534 |  | 
| 535 |  | 
| 536   FT_CALLBACK_DEF( void ) |  | 
| 537   tt_face_free_sbit_stub( TT_Face  face ) |  | 
| 538   { |  | 
| 539     /* nothing to do in this stub */ |  | 
| 540     FT_UNUSED( face ); |  | 
| 541   } |  | 
| 542 |  | 
| 543 |  | 
| 544   FT_CALLBACK_DEF( FT_Error ) |  | 
| 545   tt_face_load_charmap_stub( TT_Face    face, |  | 
| 546                              void*      cmap, |  | 
| 547                              FT_Stream  input ) |  | 
| 548   { |  | 
| 549     FT_UNUSED( face ); |  | 
| 550     FT_UNUSED( cmap ); |  | 
| 551     FT_UNUSED( input ); |  | 
| 552 |  | 
| 553     return SFNT_Err_Unimplemented_Feature; |  | 
| 554   } |  | 
| 555 |  | 
| 556 |  | 
| 557   FT_CALLBACK_DEF( FT_Error ) |  | 
| 558   tt_face_free_charmap_stub( TT_Face  face, |  | 
| 559                              void*    cmap ) |  | 
| 560   { |  | 
| 561     FT_UNUSED( face ); |  | 
| 562     FT_UNUSED( cmap ); |  | 
| 563 |  | 
| 564     return SFNT_Err_Ok; |  | 
| 565   } |  | 
| 566 |  | 
| 567 #endif /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 568 |  | 
| 569 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS | 448 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS | 
| 570 #define PUT_EMBEDDED_BITMAPS(a) a | 449 #define PUT_EMBEDDED_BITMAPS( a )  a | 
| 571 #else | 450 #else | 
| 572 #define PUT_EMBEDDED_BITMAPS(a) 0 | 451 #define PUT_EMBEDDED_BITMAPS( a )  NULL | 
| 573 #endif |  | 
| 574 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES |  | 
| 575 #define PUT_PS_NAMES(a) a |  | 
| 576 #else |  | 
| 577 #define PUT_PS_NAMES(a) 0 |  | 
| 578 #endif | 452 #endif | 
| 579 | 453 | 
| 580   FT_DEFINE_SFNT_INTERFACE(sfnt_interface, | 454 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES | 
|  | 455 #define PUT_PS_NAMES( a )  a | 
|  | 456 #else | 
|  | 457 #define PUT_PS_NAMES( a )  NULL | 
|  | 458 #endif | 
|  | 459 | 
|  | 460   FT_DEFINE_SFNT_INTERFACE( | 
|  | 461     sfnt_interface, | 
| 581     tt_face_goto_table, | 462     tt_face_goto_table, | 
| 582 | 463 | 
| 583     sfnt_init_face, | 464     sfnt_init_face, | 
| 584     sfnt_load_face, | 465     sfnt_load_face, | 
| 585     sfnt_done_face, | 466     sfnt_done_face, | 
| 586     sfnt_get_interface, | 467     sfnt_get_interface, | 
| 587 | 468 | 
| 588     tt_face_load_any, | 469     tt_face_load_any, | 
| 589 | 470 | 
| 590     tt_face_load_sfnt_header_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 591     tt_face_load_directory_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 592 |  | 
| 593     tt_face_load_head, | 471     tt_face_load_head, | 
| 594     tt_face_load_hhea, | 472     tt_face_load_hhea, | 
| 595     tt_face_load_cmap, | 473     tt_face_load_cmap, | 
| 596     tt_face_load_maxp, | 474     tt_face_load_maxp, | 
| 597     tt_face_load_os2, | 475     tt_face_load_os2, | 
| 598     tt_face_load_post, | 476     tt_face_load_post, | 
| 599 | 477 | 
| 600     tt_face_load_name, | 478     tt_face_load_name, | 
| 601     tt_face_free_name, | 479     tt_face_free_name, | 
| 602 | 480 | 
| 603     tt_face_load_hdmx_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 604     tt_face_free_hdmx_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 605 |  | 
| 606     tt_face_load_kern, | 481     tt_face_load_kern, | 
| 607     tt_face_load_gasp, | 482     tt_face_load_gasp, | 
| 608     tt_face_load_pclt, | 483     tt_face_load_pclt, | 
| 609 | 484 | 
| 610     /* see `ttload.h' */ | 485     /* see `ttload.h' */ | 
| 611     PUT_EMBEDDED_BITMAPS(tt_face_load_bhed), | 486     PUT_EMBEDDED_BITMAPS( tt_face_load_bhed ), | 
| 612 | 487 | 
| 613     tt_face_set_sbit_strike_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ | 488     PUT_EMBEDDED_BITMAPS( tt_face_load_sbit_image ), | 
| 614     tt_face_load_sbit_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 615 |  | 
| 616     tt_find_sbit_image, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 617     tt_load_sbit_metrics, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 618 |  | 
| 619     PUT_EMBEDDED_BITMAPS(tt_face_load_sbit_image), |  | 
| 620 |  | 
| 621     tt_face_free_sbit_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 622 | 489 | 
| 623     /* see `ttpost.h' */ | 490     /* see `ttpost.h' */ | 
| 624     PUT_PS_NAMES(tt_face_get_ps_name), | 491     PUT_PS_NAMES( tt_face_get_ps_name   ), | 
| 625     PUT_PS_NAMES(tt_face_free_ps_names), | 492     PUT_PS_NAMES( tt_face_free_ps_names ), | 
| 626 |  | 
| 627     tt_face_load_charmap_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 628     tt_face_free_charmap_stub, /* FT_CONFIG_OPTION_OLD_INTERNALS */ |  | 
| 629 | 493 | 
| 630     /* since version 2.1.8 */ | 494     /* since version 2.1.8 */ | 
| 631 |  | 
| 632     tt_face_get_kerning, | 495     tt_face_get_kerning, | 
| 633 | 496 | 
| 634     /* since version 2.2 */ | 497     /* since version 2.2 */ | 
| 635 |  | 
| 636     tt_face_load_font_dir, | 498     tt_face_load_font_dir, | 
| 637     tt_face_load_hmtx, | 499     tt_face_load_hmtx, | 
| 638 | 500 | 
| 639     /* see `ttsbit.h' and `sfnt.h' */ | 501     /* see `ttsbit.h' and `sfnt.h' */ | 
| 640     PUT_EMBEDDED_BITMAPS(tt_face_load_eblc), | 502     PUT_EMBEDDED_BITMAPS( tt_face_load_eblc ), | 
| 641     PUT_EMBEDDED_BITMAPS(tt_face_free_eblc), | 503     PUT_EMBEDDED_BITMAPS( tt_face_free_eblc ), | 
| 642 | 504 | 
| 643     PUT_EMBEDDED_BITMAPS(tt_face_set_sbit_strike), | 505     PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike     ), | 
| 644     PUT_EMBEDDED_BITMAPS(tt_face_load_strike_metrics), | 506     PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ), | 
| 645 | 507 | 
| 646     tt_face_get_metrics | 508     tt_face_get_metrics | 
| 647   ) | 509   ) | 
| 648 | 510 | 
| 649 | 511 | 
| 650   FT_DEFINE_MODULE(sfnt_module_class, | 512   FT_DEFINE_MODULE( | 
|  | 513     sfnt_module_class, | 
| 651 | 514 | 
| 652     0,  /* not a font driver or renderer */ | 515     0,  /* not a font driver or renderer */ | 
| 653     sizeof ( FT_ModuleRec ), | 516     sizeof ( FT_ModuleRec ), | 
| 654 | 517 | 
| 655     "sfnt",     /* driver name                            */ | 518     "sfnt",     /* driver name                            */ | 
| 656     0x10000L,   /* driver version 1.0                     */ | 519     0x10000L,   /* driver version 1.0                     */ | 
| 657     0x20000L,   /* driver requires FreeType 2.0 or higher */ | 520     0x20000L,   /* driver requires FreeType 2.0 or higher */ | 
| 658 | 521 | 
| 659     (const void*)&FT_SFNT_INTERFACE_GET,  /* module specific interface */ | 522     (const void*)&SFNT_INTERFACE_GET,  /* module specific interface */ | 
| 660 | 523 | 
| 661     (FT_Module_Constructor)0, | 524     (FT_Module_Constructor)0, | 
| 662     (FT_Module_Destructor) 0, | 525     (FT_Module_Destructor) 0, | 
| 663     (FT_Module_Requester)  sfnt_get_interface | 526     (FT_Module_Requester)  sfnt_get_interface ) | 
| 664   ) |  | 
| 665 | 527 | 
| 666 | 528 | 
| 667 /* END */ | 529 /* END */ | 
| OLD | NEW | 
|---|