| OLD | NEW |
| (Empty) |
| 1 /***************************************************************************/ | |
| 2 /* */ | |
| 3 /* cidriver.c */ | |
| 4 /* */ | |
| 5 /* CID driver interface (body). */ | |
| 6 /* */ | |
| 7 /* Copyright 1996-2004, 2006, 2008, 2009, 2011, 2013 by */ | |
| 8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */ | |
| 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 "../../include/ft2build.h" | |
| 20 #include "cidriver.h" | |
| 21 #include "cidgload.h" | |
| 22 #include "../../include/freetype/internal/ftdebug.h" | |
| 23 | |
| 24 #include "ciderrs.h" | |
| 25 | |
| 26 #include "../../include/freetype/internal/services/svpostnm.h" | |
| 27 #include "../../include/freetype/internal/services/svxf86nm.h" | |
| 28 #include "../../include/freetype/internal/services/svpsinfo.h" | |
| 29 #include "../../include/freetype/internal/services/svcid.h" | |
| 30 | |
| 31 | |
| 32 /*************************************************************************/ | |
| 33 /* */ | |
| 34 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ | |
| 35 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ | |
| 36 /* messages during execution. */ | |
| 37 /* */ | |
| 38 #undef FT_COMPONENT | |
| 39 #define FT_COMPONENT trace_ciddriver | |
| 40 | |
| 41 | |
| 42 /* | |
| 43 * POSTSCRIPT NAME SERVICE | |
| 44 * | |
| 45 */ | |
| 46 | |
| 47 static const char* | |
| 48 cid_get_postscript_name( CID_Face face ) | |
| 49 { | |
| 50 const char* result = face->cid.cid_font_name; | |
| 51 | |
| 52 | |
| 53 if ( result && result[0] == '/' ) | |
| 54 result++; | |
| 55 | |
| 56 return result; | |
| 57 } | |
| 58 | |
| 59 | |
| 60 static const FT_Service_PsFontNameRec cid_service_ps_name = | |
| 61 { | |
| 62 (FT_PsName_GetFunc) cid_get_postscript_name | |
| 63 }; | |
| 64 | |
| 65 | |
| 66 /* | |
| 67 * POSTSCRIPT INFO SERVICE | |
| 68 * | |
| 69 */ | |
| 70 | |
| 71 static FT_Error | |
| 72 cid_ps_get_font_info( FT_Face face, | |
| 73 PS_FontInfoRec* afont_info ) | |
| 74 { | |
| 75 *afont_info = ((CID_Face)face)->cid.font_info; | |
| 76 | |
| 77 return FT_Err_Ok; | |
| 78 } | |
| 79 | |
| 80 static FT_Error | |
| 81 cid_ps_get_font_extra( FT_Face face, | |
| 82 PS_FontExtraRec* afont_extra ) | |
| 83 { | |
| 84 *afont_extra = ((CID_Face)face)->font_extra; | |
| 85 | |
| 86 return FT_Err_Ok; | |
| 87 } | |
| 88 | |
| 89 static const FT_Service_PsInfoRec cid_service_ps_info = | |
| 90 { | |
| 91 (PS_GetFontInfoFunc) cid_ps_get_font_info, | |
| 92 (PS_GetFontExtraFunc) cid_ps_get_font_extra, | |
| 93 (PS_HasGlyphNamesFunc) NULL, /* unsupported with CID fonts */ | |
| 94 (PS_GetFontPrivateFunc)NULL, /* unsupported */ | |
| 95 (PS_GetFontValueFunc) NULL /* not implemented */ | |
| 96 }; | |
| 97 | |
| 98 | |
| 99 /* | |
| 100 * CID INFO SERVICE | |
| 101 * | |
| 102 */ | |
| 103 static FT_Error | |
| 104 cid_get_ros( CID_Face face, | |
| 105 const char* *registry, | |
| 106 const char* *ordering, | |
| 107 FT_Int *supplement ) | |
| 108 { | |
| 109 CID_FaceInfo cid = &face->cid; | |
| 110 | |
| 111 | |
| 112 if ( registry ) | |
| 113 *registry = cid->registry; | |
| 114 | |
| 115 if ( ordering ) | |
| 116 *ordering = cid->ordering; | |
| 117 | |
| 118 if ( supplement ) | |
| 119 *supplement = cid->supplement; | |
| 120 | |
| 121 return FT_Err_Ok; | |
| 122 } | |
| 123 | |
| 124 | |
| 125 static FT_Error | |
| 126 cid_get_is_cid( CID_Face face, | |
| 127 FT_Bool *is_cid ) | |
| 128 { | |
| 129 FT_Error error = FT_Err_Ok; | |
| 130 FT_UNUSED( face ); | |
| 131 | |
| 132 | |
| 133 if ( is_cid ) | |
| 134 *is_cid = 1; /* cid driver is only used for CID keyed fonts */ | |
| 135 | |
| 136 return error; | |
| 137 } | |
| 138 | |
| 139 | |
| 140 static FT_Error | |
| 141 cid_get_cid_from_glyph_index( CID_Face face, | |
| 142 FT_UInt glyph_index, | |
| 143 FT_UInt *cid ) | |
| 144 { | |
| 145 FT_Error error = FT_Err_Ok; | |
| 146 FT_UNUSED( face ); | |
| 147 | |
| 148 | |
| 149 if ( cid ) | |
| 150 *cid = glyph_index; /* identity mapping */ | |
| 151 | |
| 152 return error; | |
| 153 } | |
| 154 | |
| 155 | |
| 156 static const FT_Service_CIDRec cid_service_cid_info = | |
| 157 { | |
| 158 (FT_CID_GetRegistryOrderingSupplementFunc)cid_get_ros, | |
| 159 (FT_CID_GetIsInternallyCIDKeyedFunc) cid_get_is_cid, | |
| 160 (FT_CID_GetCIDFromGlyphIndexFunc) cid_get_cid_from_glyph_index | |
| 161 }; | |
| 162 | |
| 163 | |
| 164 /* | |
| 165 * SERVICE LIST | |
| 166 * | |
| 167 */ | |
| 168 | |
| 169 static const FT_ServiceDescRec cid_services[] = | |
| 170 { | |
| 171 { FT_SERVICE_ID_XF86_NAME, FT_XF86_FORMAT_CID }, | |
| 172 { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &cid_service_ps_name }, | |
| 173 { FT_SERVICE_ID_POSTSCRIPT_INFO, &cid_service_ps_info }, | |
| 174 { FT_SERVICE_ID_CID, &cid_service_cid_info }, | |
| 175 { NULL, NULL } | |
| 176 }; | |
| 177 | |
| 178 | |
| 179 FT_CALLBACK_DEF( FT_Module_Interface ) | |
| 180 cid_get_interface( FT_Module module, | |
| 181 const char* cid_interface ) | |
| 182 { | |
| 183 FT_UNUSED( module ); | |
| 184 | |
| 185 return ft_service_list_lookup( cid_services, cid_interface ); | |
| 186 } | |
| 187 | |
| 188 | |
| 189 | |
| 190 FT_CALLBACK_TABLE_DEF | |
| 191 const FT_Driver_ClassRec t1cid_driver_class = | |
| 192 { | |
| 193 /* first of all, the FT_Module_Class fields */ | |
| 194 { | |
| 195 FT_MODULE_FONT_DRIVER | | |
| 196 FT_MODULE_DRIVER_SCALABLE | | |
| 197 FT_MODULE_DRIVER_HAS_HINTER, | |
| 198 | |
| 199 sizeof ( FT_DriverRec ), | |
| 200 "t1cid", /* module name */ | |
| 201 0x10000L, /* version 1.0 of driver */ | |
| 202 0x20000L, /* requires FreeType 2.0 */ | |
| 203 | |
| 204 0, | |
| 205 | |
| 206 cid_driver_init, | |
| 207 cid_driver_done, | |
| 208 cid_get_interface | |
| 209 }, | |
| 210 | |
| 211 /* then the other font drivers fields */ | |
| 212 sizeof ( CID_FaceRec ), | |
| 213 sizeof ( CID_SizeRec ), | |
| 214 sizeof ( CID_GlyphSlotRec ), | |
| 215 | |
| 216 cid_face_init, | |
| 217 cid_face_done, | |
| 218 | |
| 219 cid_size_init, | |
| 220 cid_size_done, | |
| 221 cid_slot_init, | |
| 222 cid_slot_done, | |
| 223 | |
| 224 cid_slot_load_glyph, | |
| 225 | |
| 226 0, /* FT_Face_GetKerningFunc */ | |
| 227 0, /* FT_Face_AttachFunc */ | |
| 228 | |
| 229 0, /* FT_Face_GetAdvancesFunc */ | |
| 230 | |
| 231 cid_size_request, | |
| 232 0 /* FT_Size_SelectFunc */ | |
| 233 }; | |
| 234 | |
| 235 | |
| 236 /* END */ | |
| OLD | NEW |