1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* sfdriver.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* High-level SFNT driver interface (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 79c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod/* Copyright 1996-2007, 2009-2014 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 20295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include FT_INTERNAL_DEBUG_H 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_SFNT_H 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "sfdriver.h" 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttload.h" 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "sfobjs.h" 27295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#include "sfntpic.h" 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "sferrors.h" 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttsbit.h" 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttpost.h" 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_BDF 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttbdf.h" 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_BDF_H 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttcmap.h" 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttkern.h" 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttmtx.h" 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_GLYPH_DICT_H 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_POSTSCRIPT_NAME_H 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_SFNT_H 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SERVICE_TT_CMAP_H 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 53727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 54295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /*************************************************************************/ 55295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* */ 56295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 57295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 58295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* messages during execution. */ 59295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* */ 60295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#undef FT_COMPONENT 61295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_COMPONENT trace_sfdriver 62295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 64727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* 65727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * SFNT TABLE SERVICE 66727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * 67727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */ 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static void* 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project get_sfnt_table( TT_Face face, 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Sfnt_Tag tag ) 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* table; 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project switch ( tag ) 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case ft_sfnt_head: 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = &face->header; 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case ft_sfnt_hhea: 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = &face->horizontal; 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case ft_sfnt_vhea: 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = face->vertical_info ? &face->vertical : 0; 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case ft_sfnt_os2: 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = face->os2.version == 0xFFFFU ? 0 : &face->os2; 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case ft_sfnt_post: 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = &face->postscript; 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case ft_sfnt_maxp: 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = &face->max_profile; 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case ft_sfnt_pclt: 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = face->pclt.Version ? &face->pclt : 0; 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project default: 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project table = 0; 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return table; 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_table_info( TT_Face face, 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt idx, 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong *tag, 118295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_ULong *offset, 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong *length ) 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 121aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner if ( !offset || !length ) 122727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Invalid_Argument ); 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 124aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner if ( !tag ) 125aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner *length = face->num_tables; 126aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner else 127aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner { 128aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner if ( idx >= face->num_tables ) 129727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_THROW( Table_Missing ); 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 131aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner *tag = face->dir_tables[idx].Tag; 132aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner *offset = face->dir_tables[idx].Offset; 133aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner *length = face->dir_tables[idx].Length; 134aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner } 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 136727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return FT_Err_Ok; 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 140727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_SFNT_TABLEREC( 141727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_service_sfnt_table, 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_SFNT_TableLoadFunc)tt_face_load_any, 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_SFNT_TableGetFunc) get_sfnt_table, 144727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_SFNT_TableInfoFunc)sfnt_table_info ) 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 149727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* 150727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * GLYPH DICT SERVICE 151727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * 152727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */ 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_get_glyph_name( TT_Face face, 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt glyph_index, 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pointer buffer, 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt buffer_max ) 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_String* gname; 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_face_get_ps_name( face, glyph_index, &gname ); 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_STRCPYN( buffer, gname, buffer_max ); 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 1720a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project static FT_UInt 1730a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project sfnt_get_name_index( TT_Face face, 1740a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_String* glyph_name ) 1750a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 176727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Face root = &face->root; 177727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 178727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_UInt i, max_gid = FT_UINT_MAX; 179295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner 1800a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 181295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( root->num_glyphs < 0 ) 182295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return 0; 183727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease else if ( (FT_ULong)root->num_glyphs < FT_UINT_MAX ) 184727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease max_gid = (FT_UInt)root->num_glyphs; 185295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner else 186295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_TRACE0(( "Ignore glyph names for invalid GID 0x%08x - 0x%08x\n", 187727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_UINT_MAX, root->num_glyphs )); 1880a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 189295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner for ( i = 0; i < max_gid; i++ ) 1900a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project { 1910a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_String* gname; 1920a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Error error = tt_face_get_ps_name( face, i, &gname ); 1930a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 1940a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 1950a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( error ) 1960a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project continue; 1970a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 1980a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project if ( !ft_strcmp( glyph_name, gname ) ) 199295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return i; 2000a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 2010a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 2020a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project return 0; 2030a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project } 2040a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 2050a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project 206727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_GLYPHDICTREC( 207727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_service_glyph_dict, 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_GlyphDict_GetNameFunc) sfnt_get_glyph_name, 209727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_GlyphDict_NameIndexFunc)sfnt_get_name_index ) 210727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */ 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 215727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* 216727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * POSTSCRIPT NAME SERVICE 217727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease * 218727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease */ 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static const char* 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_get_ps_name( TT_Face face ) 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int n, found_win, found_apple; 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* result = NULL; 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* shouldn't happen, but just in case to avoid memory leaks */ 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( face->postscript_name ) 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return face->postscript_name; 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* scan the name table to see whether we have a Postscript name here, */ 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* either in Macintosh or Windows platform encodings */ 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project found_win = -1; 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project found_apple = -1; 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( n = 0; n < face->num_names; n++ ) 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_NameEntryRec* name = face->name_table.names + n; 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( name->nameID == 6 && name->stringLength > 0 ) 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( name->platformID == 3 && 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->encodingID == 1 && 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->languageID == 0x409 ) 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project found_win = n; 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( name->platformID == 1 && 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->encodingID == 0 && 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->languageID == 0 ) 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project found_apple = n; 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( found_win != -1 ) 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory = face->root.memory; 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_NameEntryRec* name = face->name_table.names + found_win; 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt len = name->stringLength / 2; 260727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UNUSED( error ); 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !FT_ALLOC( result, name->stringLength + 1 ) ) 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Stream stream = face->name_table.stream; 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_String* r = (FT_String*)result; 2699c745321260bb728ab1cd1c8fd5f075854b2ad49Behdad Esfahbod FT_Byte* p; 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_STREAM_SEEK( name->stringOffset ) || 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FRAME_ENTER( name->stringLength ) ) 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( result ); 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->stringLength = 0; 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->stringOffset = 0; 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( name->string ); 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project p = (FT_Byte*)stream->cursor; 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( ; len > 0; len--, p += 2 ) 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( p[0] == 0 && p[1] >= 32 && p[1] < 128 ) 288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *r++ = p[1]; 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *r = '\0'; 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FRAME_EXIT(); 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( found_apple != -1 ) 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory = face->root.memory; 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_NameEntryRec* name = face->name_table.names + found_apple; 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt len = name->stringLength; 302727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_Err_Ok; 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UNUSED( error ); 305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !FT_ALLOC( result, len + 1 ) ) 308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Stream stream = face->name_table.stream; 310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_STREAM_SEEK( name->stringOffset ) || 313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_STREAM_READ( result, len ) ) 314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 315049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->stringOffset = 0; 316049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project name->stringLength = 0; 317049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( name->string ); 318049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( result ); 319049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 320049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 321049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ((char*)result)[len] = '\0'; 322049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 323049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 324049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Exit: 326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project face->postscript_name = result; 327049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return result; 328049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 329049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 330727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 331727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_PSFONTNAMEREC( 332727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_service_ps_name, 333727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_PsName_GetFunc)sfnt_get_ps_name ) 334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * TT CMAP INFO 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 339727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_TTCMAPSREC( 340727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease tt_service_get_cmap_info, 341727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (TT_CMap_Info_GetFunc)tt_get_cmap_info ) 342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_BDF 345049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 346049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 347049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_get_charset_id( TT_Face face, 348049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* *acharset_encoding, 349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* *acharset_registry ) 350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project BDF_PropertyRec encoding, registry; 352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 354049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 355049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* XXX: I don't know whether this is correct, since 356049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * tt_face_find_bdf_prop only returns something correct if we have 357049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * previously selected a size that is listed in the BDF table. 358049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * Should we change the BDF table format to include single offsets 359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * for `CHARSET_REGISTRY' and `CHARSET_ENCODING'? 360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_face_find_bdf_prop( face, "CHARSET_REGISTRY", ®istry ); 362049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_face_find_bdf_prop( face, "CHARSET_ENCODING", &encoding ); 365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error ) 366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( registry.type == BDF_PROPERTY_TYPE_ATOM && 368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project encoding.type == BDF_PROPERTY_TYPE_ATOM ) 369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *acharset_encoding = encoding.u.atom; 371049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *acharset_registry = registry.u.atom; 372049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 373049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 374727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease error = FT_THROW( Invalid_Argument ); 375049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 376049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 377049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 378049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 379049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 380049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 381049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 382727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICE_BDFRec( 383727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_service_bdf, 384727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_BDF_GetCharsetIdFunc)sfnt_get_charset_id, 385727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_BDF_GetPropertyFunc) tt_face_find_bdf_prop ) 386727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 387049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 388049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_BDF */ 389049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 390049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 391049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 392049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * SERVICE LIST 393049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 394049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 395295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#if defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES && defined TT_CONFIG_OPTION_BDF 396727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICEDESCREC5( 397727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_services, 398727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET, 399727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, 400727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET, 401727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET, 402727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET ) 403295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#elif defined TT_CONFIG_OPTION_POSTSCRIPT_NAMES 404727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICEDESCREC4( 405727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_services, 406727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET, 407727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, 408727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_GLYPH_DICT, &SFNT_SERVICE_GLYPH_DICT_GET, 409727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET ) 410295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#elif defined TT_CONFIG_OPTION_BDF 411727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICEDESCREC4( 412727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_services, 413727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET, 414727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, 415727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_BDF, &SFNT_SERVICE_BDF_GET, 416727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET ) 417295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 418727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SERVICEDESCREC3( 419727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_services, 420727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_SFNT_TABLE, &SFNT_SERVICE_SFNT_TABLE_GET, 421727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &SFNT_SERVICE_PS_NAME_GET, 422727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_SERVICE_ID_TT_CMAP, &TT_SERVICE_CMAP_INFO_GET ) 423049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 424049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 425049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 426049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( FT_Module_Interface ) 427049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_get_interface( FT_Module module, 428049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* module_interface ) 429049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 430727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease /* SFNT_SERVICES_GET derefers `library' in PIC mode */ 43141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#ifdef FT_CONFIG_OPTION_PIC 43241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_Library library; 43341371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 434049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 43541371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !module ) 43641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 43741371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier library = module->library; 43841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier if ( !library ) 43941371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier return NULL; 44041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#else 44141371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier FT_UNUSED( module ); 44241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier#endif 443049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 444727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease return ft_service_list_lookup( SFNT_SERVICES_GET, module_interface ); 445049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 446049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 447049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 448295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 449727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define PUT_EMBEDDED_BITMAPS( a ) a 450295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 451727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define PUT_EMBEDDED_BITMAPS( a ) NULL 452295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 453727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease 454295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES 455727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define PUT_PS_NAMES( a ) a 456295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#else 457727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define PUT_PS_NAMES( a ) NULL 458295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#endif 459049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 460727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_SFNT_INTERFACE( 461727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_interface, 462049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_goto_table, 463049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 464049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_init_face, 465049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_load_face, 466049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_done_face, 467049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project sfnt_get_interface, 468049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 469049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_any, 470049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_head, 472049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_hhea, 473049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_cmap, 474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_maxp, 475049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_os2, 476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_post, 477049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 478049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_name, 479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_free_name, 480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_kern, 482049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_gasp, 483049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_pclt, 484049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 485049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* see `ttload.h' */ 486727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease PUT_EMBEDDED_BITMAPS( tt_face_load_bhed ), 487049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 488727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease PUT_EMBEDDED_BITMAPS( tt_face_load_sbit_image ), 489049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 490049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* see `ttpost.h' */ 491727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease PUT_PS_NAMES( tt_face_get_ps_name ), 492727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease PUT_PS_NAMES( tt_face_free_ps_names ), 493049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 494049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* since version 2.1.8 */ 495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_get_kerning, 496049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 497049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* since version 2.2 */ 498049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_font_dir, 499049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_hmtx, 500049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 501049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* see `ttsbit.h' and `sfnt.h' */ 502ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease PUT_EMBEDDED_BITMAPS( tt_face_load_sbit ), 503ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease PUT_EMBEDDED_BITMAPS( tt_face_free_sbit ), 504049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 505727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease PUT_EMBEDDED_BITMAPS( tt_face_set_sbit_strike ), 506727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease PUT_EMBEDDED_BITMAPS( tt_face_load_strike_metrics ), 507049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 508049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_get_metrics 509295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ) 510049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 511049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 512727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_DEFINE_MODULE( 513727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease sfnt_module_class, 51441371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier 515049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0, /* not a font driver or renderer */ 51641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier sizeof ( FT_ModuleRec ), 517049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 518049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project "sfnt", /* driver name */ 519049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x10000L, /* driver version 1.0 */ 520049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 0x20000L, /* driver requires FreeType 2.0 or higher */ 521049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 522727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (const void*)&SFNT_INTERFACE_GET, /* module specific interface */ 523049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 524049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Module_Constructor)0, 525049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (FT_Module_Destructor) 0, 526727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease (FT_Module_Requester) sfnt_get_interface ) 527049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 528049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 529049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 530