1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ftcid.c */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* FreeType API for accessing CID font information. */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* Copyright 2007-2015 by */ 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann/* Derek Clegg and Michael Toftdal. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include <ft2build.h> 20e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_CID_H 21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_INTERNAL_OBJECTS_H 22e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov#include FT_SERVICE_CID_H 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* documentation is in ftcid.h */ 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT_DEF( FT_Error ) 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Get_CID_Registry_Ordering_Supplement( FT_Face face, 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* *registry, 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* *ordering, 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int *supplement) 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error; 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* r = NULL; 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* o = NULL; 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int s = 0; 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_ERR( Invalid_Argument ); 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( face ) 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Service_CID service; 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FACE_FIND_SERVICE( face, service, CID ); 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( service && service->get_ros ) 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = service->get_ros( face, &r, &o, &s ); 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( registry ) 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *registry = r; 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( ordering ) 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *ordering = o; 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( supplement ) 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *supplement = s; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT_DEF( FT_Error ) 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face, 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool *is_cid ) 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error = FT_ERR( Invalid_Argument ); 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool ic = 0; 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( face ) 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Service_CID service; 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FACE_FIND_SERVICE( face, service, CID ); 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( service && service->get_is_cid ) 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = service->get_is_cid( face, &ic); 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( is_cid ) 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *is_cid = ic; 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT_DEF( FT_Error ) 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Get_CID_From_Glyph_Index( FT_Face face, 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt glyph_index, 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt *cid ) 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error = FT_ERR( Invalid_Argument ); 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt c = 0; 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( face ) 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Service_CID service; 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FACE_FIND_SERVICE( face, service, CID ); 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( service && service->get_cid_from_glyph_index ) 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = service->get_cid_from_glyph_index( face, glyph_index, &c); 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( cid ) 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov *cid = c; 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 119