1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* ftsnames.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Simple interface to access SFNT name tables (which are used */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* to hold font names, copyright info, notices, etc.) (body). */ 7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This is _not_ used to retrieve glyph names! */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner/* Copyright 1996-2001, 2002, 2009 by */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SFNT_NAMES_H 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_TRUETYPE_TYPES_H 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_STREAM_H 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_SFNT_NAMES 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 31295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* documentation is in ftsnames.h */ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_UInt ) 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Get_Sfnt_Name_Count( FT_Face face ) 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 36295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner return ( face && FT_IS_SFNT( face ) ) ? ((TT_Face)face)->num_names : 0; 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 40295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner /* documentation is in ftsnames.h */ 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Get_Sfnt_Name( FT_Face face, 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt idx, 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_SfntName *aname ) 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 47727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease FT_Error error = FT_ERR( Invalid_Argument ); 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( aname && face && FT_IS_SFNT( face ) ) 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face ttface = (TT_Face)face; 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( idx < (FT_UInt)ttface->num_names ) 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_NameEntryRec* entry = ttface->name_table.names + idx; 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* load name on demand */ 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( entry->stringLength > 0 && entry->string == NULL ) 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory = face->memory; 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Stream stream = face->stream; 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( FT_NEW_ARRAY ( entry->string, entry->stringLength ) || 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_STREAM_SEEK( entry->stringOffset ) || 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_STREAM_READ( entry->string, entry->stringLength ) ) 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( entry->string ); 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project entry->stringLength = 0; 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aname->platform_id = entry->platformID; 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aname->encoding_id = entry->encodingID; 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aname->language_id = entry->languageID; 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aname->name_id = entry->nameID; 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aname->string = (FT_Byte*)entry->string; 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aname->string_len = entry->stringLength; 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Ok; 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_SFNT_NAMES */ 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 95