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