1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ftsnames.c */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Simple interface to access SFNT name tables (which are used */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* to hold font names, copyright info, notices, etc.) (body). */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This is _not_ used to retrieve glyph names! */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 1996-2001, 2002, 2009 by */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/ft2build.h" 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/ftsnames.h" 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/tttypes.h" 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/ftstream.h" 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_SFNT_NAMES 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* documentation is in ftsnames.h */ 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT_DEF( FT_UInt ) 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Get_Sfnt_Name_Count( FT_Face face ) 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return ( face && FT_IS_SFNT( face ) ) ? ((TT_Face)face)->num_names : 0; 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* documentation is in ftsnames.h */ 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT_DEF( FT_Error ) 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Get_Sfnt_Name( FT_Face face, 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt idx, 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_SfntName *aname ) 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error = FT_ERR( Invalid_Argument ); 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( aname && face && FT_IS_SFNT( face ) ) 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Face ttface = (TT_Face)face; 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( idx < (FT_UInt)ttface->num_names ) 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_NameEntryRec* entry = ttface->name_table.names + idx; 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* load name on demand */ 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( entry->stringLength > 0 && entry->string == NULL ) 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory = face->memory; 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Stream stream = face->stream; 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( FT_NEW_ARRAY ( entry->string, entry->stringLength ) || 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_STREAM_SEEK( entry->stringOffset ) || 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_STREAM_READ( entry->string, entry->stringLength ) ) 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FREE( entry->string ); 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov entry->stringLength = 0; 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aname->platform_id = entry->platformID; 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aname->encoding_id = entry->encodingID; 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aname->language_id = entry->languageID; 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aname->name_id = entry->nameID; 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aname->string = (FT_Byte*)entry->string; 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aname->string_len = entry->stringLength; 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_Err_Ok; 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_SFNT_NAMES */ 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 95