Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 1 | /***************************************************************************/ |
| 2 | /* */ |
| 3 | /* cidobjs.c */ |
| 4 | /* */ |
| 5 | /* CID objects manager (body). */ |
| 6 | /* */ |
| 7 | /* Copyright 1996-2000 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 | |
Werner Lemberg | cc069be | 2000-12-08 16:17:16 +0000 | [diff] [blame] | 18 | |
| 19 | #include <ft2build.h> |
| 20 | #include FT_INTERNAL_DEBUG_H |
| 21 | #include FT_INTERNAL_STREAM_H |
David Turner | 8d3a401 | 2001-03-20 11:14:24 +0000 | [diff] [blame] | 22 | #include "cidgload.h" |
| 23 | #include "cidload.h" |
Werner Lemberg | cc069be | 2000-12-08 16:17:16 +0000 | [diff] [blame] | 24 | #include FT_INTERNAL_POSTSCRIPT_NAMES_H |
| 25 | #include FT_INTERNAL_POSTSCRIPT_AUX_H |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 26 | |
Werner Lemberg | 1f7f0e8 | 2001-06-06 17:30:41 +0000 | [diff] [blame] | 27 | #include "ciderrs.h" |
| 28 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 29 | |
| 30 | /*************************************************************************/ |
| 31 | /* */ |
| 32 | /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ |
| 33 | /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ |
| 34 | /* messages during execution. */ |
| 35 | /* */ |
Werner Lemberg | 63408a1 | 2000-12-13 23:44:37 +0000 | [diff] [blame] | 36 | #undef FT_COMPONENT |
| 37 | #define FT_COMPONENT trace_cidobjs |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 38 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 39 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 40 | /*************************************************************************/ |
| 41 | /* */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 42 | /* FACE FUNCTIONS */ |
| 43 | /* */ |
| 44 | /*************************************************************************/ |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 45 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 46 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 47 | /*************************************************************************/ |
| 48 | /* */ |
| 49 | /* <Function> */ |
| 50 | /* CID_Done_Face */ |
| 51 | /* */ |
| 52 | /* <Description> */ |
| 53 | /* Finalizes a given face object. */ |
| 54 | /* */ |
| 55 | /* <Input> */ |
| 56 | /* face :: A pointer to the face object to destroy. */ |
| 57 | /* */ |
David Turner | 76a5f62 | 2000-11-04 01:55:49 +0000 | [diff] [blame] | 58 | FT_LOCAL_DEF |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 59 | void CID_Done_Face( CID_Face face ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 60 | { |
| 61 | FT_Memory memory; |
| 62 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 63 | |
| 64 | if ( face ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 65 | { |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 66 | CID_Info* cid = &face->cid; |
| 67 | T1_FontInfo* info = &cid->font_info; |
| 68 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 69 | |
| 70 | memory = face->root.memory; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 71 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 72 | /* release FontInfo strings */ |
| 73 | FREE( info->version ); |
| 74 | FREE( info->notice ); |
| 75 | FREE( info->full_name ); |
| 76 | FREE( info->family_name ); |
| 77 | FREE( info->weight ); |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 78 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 79 | /* release font dictionaries */ |
| 80 | FREE( cid->font_dicts ); |
| 81 | cid->num_dicts = 0; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 82 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 83 | /* release other strings */ |
| 84 | FREE( cid->cid_font_name ); |
| 85 | FREE( cid->registry ); |
| 86 | FREE( cid->ordering ); |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 87 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 88 | face->root.family_name = 0; |
| 89 | face->root.style_name = 0; |
| 90 | } |
| 91 | } |
| 92 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 93 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 94 | /*************************************************************************/ |
| 95 | /* */ |
| 96 | /* <Function> */ |
| 97 | /* CID_Init_Face */ |
| 98 | /* */ |
| 99 | /* <Description> */ |
| 100 | /* Initializes a given CID face object. */ |
| 101 | /* */ |
| 102 | /* <Input> */ |
| 103 | /* stream :: The source font stream. */ |
| 104 | /* */ |
| 105 | /* face_index :: The index of the font face in the resource. */ |
| 106 | /* */ |
| 107 | /* num_params :: Number of additional generic parameters. Ignored. */ |
| 108 | /* */ |
| 109 | /* params :: Additional generic parameters. Ignored. */ |
| 110 | /* */ |
| 111 | /* <InOut> */ |
| 112 | /* face :: The newly built face object. */ |
| 113 | /* */ |
| 114 | /* <Return> */ |
Werner Lemberg | a929ba9 | 2000-06-25 06:47:11 +0000 | [diff] [blame] | 115 | /* FreeType error code. 0 means success. */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 116 | /* */ |
David Turner | 76a5f62 | 2000-11-04 01:55:49 +0000 | [diff] [blame] | 117 | FT_LOCAL_DEF |
David Turner | f9b8dec | 2000-06-16 19:34:52 +0000 | [diff] [blame] | 118 | FT_Error CID_Init_Face( FT_Stream stream, |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 119 | CID_Face face, |
David Turner | f9b8dec | 2000-06-16 19:34:52 +0000 | [diff] [blame] | 120 | FT_Int face_index, |
| 121 | FT_Int num_params, |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 122 | FT_Parameter* params ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 123 | { |
David Turner | f9b8dec | 2000-06-16 19:34:52 +0000 | [diff] [blame] | 124 | FT_Error error; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 125 | PSNames_Interface* psnames; |
David Turner | 34f1c2f | 2000-08-23 22:47:44 +0000 | [diff] [blame] | 126 | PSAux_Interface* psaux; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 127 | |
David Turner | c6a9220 | 2000-07-04 18:12:13 +0000 | [diff] [blame] | 128 | FT_UNUSED( num_params ); |
| 129 | FT_UNUSED( params ); |
| 130 | FT_UNUSED( face_index ); |
| 131 | FT_UNUSED( stream ); |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 132 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 133 | |
| 134 | face->root.num_faces = 1; |
| 135 | |
| 136 | psnames = (PSNames_Interface*)face->psnames; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 137 | if ( !psnames ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 138 | { |
Werner Lemberg | a929ba9 | 2000-06-25 06:47:11 +0000 | [diff] [blame] | 139 | psnames = (PSNames_Interface*)FT_Get_Module_Interface( |
| 140 | FT_FACE_LIBRARY( face ), "psnames" ); |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 141 | |
David Turner | c312861 | 2000-06-23 05:02:13 +0000 | [diff] [blame] | 142 | face->psnames = psnames; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 143 | } |
| 144 | |
David Turner | 34f1c2f | 2000-08-23 22:47:44 +0000 | [diff] [blame] | 145 | psaux = (PSAux_Interface*)face->psaux; |
| 146 | if ( !psaux ) |
| 147 | { |
| 148 | psaux = (PSAux_Interface*)FT_Get_Module_Interface( |
| 149 | FT_FACE_LIBRARY( face ), "psaux" ); |
Werner Lemberg | e4b32a5 | 2000-10-31 20:42:18 +0000 | [diff] [blame] | 150 | |
David Turner | 34f1c2f | 2000-08-23 22:47:44 +0000 | [diff] [blame] | 151 | face->psaux = psaux; |
| 152 | } |
| 153 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 154 | /* open the tokenizer; this will also check the font format */ |
| 155 | if ( FILE_Seek( 0 ) ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 156 | goto Exit; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 157 | |
Werner Lemberg | e35cac6 | 2000-06-11 03:46:57 +0000 | [diff] [blame] | 158 | error = CID_Open_Face( face ); |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 159 | if ( error ) |
| 160 | goto Exit; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 161 | |
| 162 | /* if we just wanted to check the format, leave successfully now */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 163 | if ( face_index < 0 ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 164 | goto Exit; |
| 165 | |
| 166 | /* check the face index */ |
| 167 | if ( face_index != 0 ) |
| 168 | { |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 169 | FT_ERROR(( "CID_Init_Face: invalid face index\n" )); |
Werner Lemberg | 1f7f0e8 | 2001-06-06 17:30:41 +0000 | [diff] [blame] | 170 | error = CID_Err_Invalid_Argument; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 171 | goto Exit; |
| 172 | } |
| 173 | |
| 174 | /* Now, load the font program into the face object */ |
| 175 | { |
| 176 | /* Init the face object fields */ |
| 177 | /* Now set up root face fields */ |
| 178 | { |
| 179 | FT_Face root = (FT_Face)&face->root; |
| 180 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 181 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 182 | root->num_glyphs = face->cid.cid_count; |
| 183 | root->num_charmaps = 0; |
| 184 | |
| 185 | root->face_index = face_index; |
| 186 | root->face_flags = FT_FACE_FLAG_SCALABLE; |
| 187 | |
| 188 | root->face_flags |= FT_FACE_FLAG_HORIZONTAL; |
| 189 | |
| 190 | if ( face->cid.font_info.is_fixed_pitch ) |
| 191 | root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; |
| 192 | |
Werner Lemberg | ac39ecd | 2000-06-30 22:24:36 +0000 | [diff] [blame] | 193 | /* XXX: TODO: add kerning with .afm support */ |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 194 | |
Werner Lemberg | ac39ecd | 2000-06-30 22:24:36 +0000 | [diff] [blame] | 195 | /* get style name -- be careful, some broken fonts only */ |
| 196 | /* have a /FontName dictionary entry! */ |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 197 | root->family_name = face->cid.font_info.family_name; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 198 | if ( root->family_name ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 199 | { |
| 200 | char* full = face->cid.font_info.full_name; |
| 201 | char* family = root->family_name; |
| 202 | |
| 203 | while ( *family && *full == *family ) |
| 204 | { |
| 205 | family++; |
| 206 | full++; |
| 207 | } |
| 208 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 209 | root->style_name = ( *full == ' ' ) ? full + 1 |
Werner Lemberg | bd5ae40 | 2000-07-05 04:32:02 +0000 | [diff] [blame] | 210 | : (char *)"Regular"; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 211 | } |
| 212 | else |
| 213 | { |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 214 | /* do we have a `/FontName'? */ |
| 215 | if ( face->cid.cid_font_name ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 216 | { |
| 217 | root->family_name = face->cid.cid_font_name; |
Werner Lemberg | e72c9fe | 2000-07-31 18:59:02 +0000 | [diff] [blame] | 218 | root->style_name = (char *)"Regular"; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 219 | } |
| 220 | } |
| 221 | |
| 222 | /* no embedded bitmap support */ |
| 223 | root->num_fixed_sizes = 0; |
| 224 | root->available_sizes = 0; |
| 225 | |
Werner Lemberg | 8eb0353 | 2001-06-19 23:03:41 +0000 | [diff] [blame^] | 226 | root->bbox = face->cid.font_bbox; |
Tom Kacvinsky | 00169a3 | 2001-03-10 19:06:54 +0000 | [diff] [blame] | 227 | if ( !root->units_per_EM ) |
| 228 | root->units_per_EM = 1000; |
| 229 | |
Werner Lemberg | 8eb0353 | 2001-06-19 23:03:41 +0000 | [diff] [blame^] | 230 | root->ascender = (FT_Short)( face->cid.font_bbox.yMax >> 16 ); |
| 231 | root->descender = (FT_Short)( face->cid.font_bbox.yMin >> 16 ); |
| 232 | root->height = (FT_Short)( |
| 233 | ( ( root->ascender + root->descender ) * 12 ) / 10 ); |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 234 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 235 | |
| 236 | #if 0 |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 237 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 238 | /* now compute the maximum advance width */ |
| 239 | |
| 240 | root->max_advance_width = face->type1.private_dict.standard_width[0]; |
| 241 | |
| 242 | /* compute max advance width for proportional fonts */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 243 | if ( !face->type1.font_info.is_fixed_pitch ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 244 | { |
David Turner | f9b8dec | 2000-06-16 19:34:52 +0000 | [diff] [blame] | 245 | FT_Int max_advance; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 246 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 247 | |
David Turner | a1be2dc | 2000-06-27 23:20:35 +0000 | [diff] [blame] | 248 | error = CID_Compute_Max_Advance( face, &max_advance ); |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 249 | |
| 250 | /* in case of error, keep the standard width */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 251 | if ( !error ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 252 | root->max_advance_width = max_advance; |
| 253 | else |
| 254 | error = 0; /* clear error */ |
| 255 | } |
| 256 | |
| 257 | root->max_advance_height = root->height; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 258 | |
| 259 | #endif /* 0 */ |
| 260 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 261 | root->underline_position = face->cid.font_info.underline_position; |
| 262 | root->underline_thickness = face->cid.font_info.underline_thickness; |
| 263 | |
David Turner | 54e7574 | 2000-11-04 02:52:02 +0000 | [diff] [blame] | 264 | root->internal->max_points = 0; |
| 265 | root->internal->max_contours = 0; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 266 | } |
| 267 | } |
| 268 | |
| 269 | #if 0 |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 270 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 271 | /* charmap support - synthetize unicode charmap when possible */ |
| 272 | { |
| 273 | FT_Face root = &face->root; |
| 274 | FT_CharMap charmap = face->charmaprecs; |
| 275 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 276 | |
Werner Lemberg | ac39ecd | 2000-06-30 22:24:36 +0000 | [diff] [blame] | 277 | /* synthesize a Unicode charmap if there is support in the `psnames' */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 278 | /* module */ |
| 279 | if ( face->psnames ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 280 | { |
| 281 | PSNames_Interface* psnames = (PSNames_Interface*)face->psnames; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 282 | |
| 283 | |
| 284 | if ( psnames->unicode_value ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 285 | { |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 286 | error = psnames->build_unicodes( |
| 287 | root->memory, |
| 288 | face->type1.num_glyphs, |
| 289 | (const char**)face->type1.glyph_names, |
| 290 | &face->unicode_map ); |
| 291 | if ( !error ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 292 | { |
| 293 | root->charmap = charmap; |
| 294 | charmap->face = (FT_Face)face; |
| 295 | charmap->encoding = ft_encoding_unicode; |
| 296 | charmap->platform_id = 3; |
| 297 | charmap->encoding_id = 1; |
| 298 | charmap++; |
| 299 | } |
| 300 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 301 | /* simply clear the error in case of failure (which really */ |
| 302 | /* means that out of memory or no unicode glyph names) */ |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 303 | error = 0; |
| 304 | } |
| 305 | } |
| 306 | |
| 307 | /* now, support either the standard, expert, or custom encodings */ |
| 308 | charmap->face = (FT_Face)face; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 309 | charmap->platform_id = 7; /* a new platform id for Adobe fonts? */ |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 310 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 311 | switch ( face->type1.encoding_type ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 312 | { |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 313 | case t1_encoding_standard: |
| 314 | charmap->encoding = ft_encoding_adobe_standard; |
| 315 | charmap->encoding_id = 0; |
| 316 | break; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 317 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 318 | case t1_encoding_expert: |
| 319 | charmap->encoding = ft_encoding_adobe_expert; |
| 320 | charmap->encoding_id = 1; |
| 321 | break; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 322 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 323 | default: |
| 324 | charmap->encoding = ft_encoding_adobe_custom; |
| 325 | charmap->encoding_id = 2; |
| 326 | break; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 327 | } |
| 328 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 329 | root->charmaps = face->charmaps; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 330 | root->num_charmaps = charmap - face->charmaprecs + 1; |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 331 | face->charmaps[0] = &face->charmaprecs[0]; |
| 332 | face->charmaps[1] = &face->charmaprecs[1]; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 333 | } |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 334 | |
| 335 | #endif /* 0 */ |
| 336 | |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 337 | Exit: |
| 338 | return error; |
| 339 | } |
| 340 | |
| 341 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 342 | /*************************************************************************/ |
| 343 | /* */ |
| 344 | /* <Function> */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 345 | /* CID_Init_Driver */ |
| 346 | /* */ |
| 347 | /* <Description> */ |
| 348 | /* Initializes a given CID driver object. */ |
| 349 | /* */ |
| 350 | /* <Input> */ |
| 351 | /* driver :: A handle to the target driver object. */ |
| 352 | /* */ |
| 353 | /* <Return> */ |
Werner Lemberg | a929ba9 | 2000-06-25 06:47:11 +0000 | [diff] [blame] | 354 | /* FreeType error code. 0 means success. */ |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 355 | /* */ |
David Turner | 76a5f62 | 2000-11-04 01:55:49 +0000 | [diff] [blame] | 356 | FT_LOCAL_DEF |
David Turner | a1be2dc | 2000-06-27 23:20:35 +0000 | [diff] [blame] | 357 | FT_Error CID_Init_Driver( CID_Driver driver ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 358 | { |
David Turner | c6a9220 | 2000-07-04 18:12:13 +0000 | [diff] [blame] | 359 | FT_UNUSED( driver ); |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 360 | |
Werner Lemberg | 1f7f0e8 | 2001-06-06 17:30:41 +0000 | [diff] [blame] | 361 | return CID_Err_Ok; |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 362 | } |
| 363 | |
| 364 | |
Werner Lemberg | e3c11d7 | 2000-06-16 06:49:56 +0000 | [diff] [blame] | 365 | /*************************************************************************/ |
| 366 | /* */ |
| 367 | /* <Function> */ |
| 368 | /* CID_Done_Driver */ |
| 369 | /* */ |
| 370 | /* <Description> */ |
| 371 | /* Finalizes a given CID driver. */ |
| 372 | /* */ |
| 373 | /* <Input> */ |
| 374 | /* driver :: A handle to the target CID driver. */ |
| 375 | /* */ |
Werner Lemberg | 1429db6 | 2001-04-02 23:54:01 +0000 | [diff] [blame] | 376 | FT_LOCAL_DEF |
David Turner | a1be2dc | 2000-06-27 23:20:35 +0000 | [diff] [blame] | 377 | void CID_Done_Driver( CID_Driver driver ) |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 378 | { |
David Turner | c6a9220 | 2000-07-04 18:12:13 +0000 | [diff] [blame] | 379 | FT_UNUSED( driver ); |
David Turner | 04aa800 | 2000-06-01 03:27:48 +0000 | [diff] [blame] | 380 | } |
| 381 | |
| 382 | |
| 383 | /* END */ |