1 | /**************************************************************************** |
2 | * |
3 | * t1tables.h |
4 | * |
5 | * Basic Type 1/Type 2 tables definitions and interface (specification |
6 | * only). |
7 | * |
8 | * Copyright (C) 1996-2021 by |
9 | * David Turner, Robert Wilhelm, and Werner Lemberg. |
10 | * |
11 | * This file is part of the FreeType project, and may only be used, |
12 | * modified, and distributed under the terms of the FreeType project |
13 | * license, LICENSE.TXT. By continuing to use, modify, or distribute |
14 | * this file you indicate that you have read the license and |
15 | * understand and accept it fully. |
16 | * |
17 | */ |
18 | |
19 | |
20 | #ifndef T1TABLES_H_ |
21 | #define T1TABLES_H_ |
22 | |
23 | |
24 | #include <freetype/freetype.h> |
25 | |
26 | #ifdef FREETYPE_H |
27 | #error "freetype.h of FreeType 1 has been loaded!" |
28 | #error "Please fix the directory search order for header files" |
29 | #error "so that freetype.h of FreeType 2 is found first." |
30 | #endif |
31 | |
32 | |
33 | FT_BEGIN_HEADER |
34 | |
35 | |
36 | /************************************************************************** |
37 | * |
38 | * @section: |
39 | * type1_tables |
40 | * |
41 | * @title: |
42 | * Type 1 Tables |
43 | * |
44 | * @abstract: |
45 | * Type~1-specific font tables. |
46 | * |
47 | * @description: |
48 | * This section contains the definition of Type~1-specific tables, |
49 | * including structures related to other PostScript font formats. |
50 | * |
51 | * @order: |
52 | * PS_FontInfoRec |
53 | * PS_FontInfo |
54 | * PS_PrivateRec |
55 | * PS_Private |
56 | * |
57 | * CID_FaceDictRec |
58 | * CID_FaceDict |
59 | * CID_FaceInfoRec |
60 | * CID_FaceInfo |
61 | * |
62 | * FT_Has_PS_Glyph_Names |
63 | * FT_Get_PS_Font_Info |
64 | * FT_Get_PS_Font_Private |
65 | * FT_Get_PS_Font_Value |
66 | * |
67 | * T1_Blend_Flags |
68 | * T1_EncodingType |
69 | * PS_Dict_Keys |
70 | * |
71 | */ |
72 | |
73 | |
74 | /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */ |
75 | /* structures in order to support Multiple Master fonts. */ |
76 | |
77 | |
78 | /************************************************************************** |
79 | * |
80 | * @struct: |
81 | * PS_FontInfoRec |
82 | * |
83 | * @description: |
84 | * A structure used to model a Type~1 or Type~2 FontInfo dictionary. |
85 | * Note that for Multiple Master fonts, each instance has its own |
86 | * FontInfo dictionary. |
87 | */ |
88 | typedef struct PS_FontInfoRec_ |
89 | { |
90 | FT_String* version; |
91 | FT_String* notice; |
92 | FT_String* full_name; |
93 | FT_String* family_name; |
94 | FT_String* weight; |
95 | FT_Long italic_angle; |
96 | FT_Bool is_fixed_pitch; |
97 | FT_Short underline_position; |
98 | FT_UShort underline_thickness; |
99 | |
100 | } PS_FontInfoRec; |
101 | |
102 | |
103 | /************************************************************************** |
104 | * |
105 | * @struct: |
106 | * PS_FontInfo |
107 | * |
108 | * @description: |
109 | * A handle to a @PS_FontInfoRec structure. |
110 | */ |
111 | typedef struct PS_FontInfoRec_* PS_FontInfo; |
112 | |
113 | |
114 | /************************************************************************** |
115 | * |
116 | * @struct: |
117 | * T1_FontInfo |
118 | * |
119 | * @description: |
120 | * This type is equivalent to @PS_FontInfoRec. It is deprecated but kept |
121 | * to maintain source compatibility between various versions of FreeType. |
122 | */ |
123 | typedef PS_FontInfoRec T1_FontInfo; |
124 | |
125 | |
126 | /************************************************************************** |
127 | * |
128 | * @struct: |
129 | * PS_PrivateRec |
130 | * |
131 | * @description: |
132 | * A structure used to model a Type~1 or Type~2 private dictionary. Note |
133 | * that for Multiple Master fonts, each instance has its own Private |
134 | * dictionary. |
135 | */ |
136 | typedef struct PS_PrivateRec_ |
137 | { |
138 | FT_Int unique_id; |
139 | FT_Int lenIV; |
140 | |
141 | FT_Byte num_blue_values; |
142 | FT_Byte num_other_blues; |
143 | FT_Byte num_family_blues; |
144 | FT_Byte num_family_other_blues; |
145 | |
146 | FT_Short blue_values[14]; |
147 | FT_Short other_blues[10]; |
148 | |
149 | FT_Short family_blues [14]; |
150 | FT_Short family_other_blues[10]; |
151 | |
152 | FT_Fixed blue_scale; |
153 | FT_Int blue_shift; |
154 | FT_Int blue_fuzz; |
155 | |
156 | FT_UShort standard_width[1]; |
157 | FT_UShort standard_height[1]; |
158 | |
159 | FT_Byte num_snap_widths; |
160 | FT_Byte num_snap_heights; |
161 | FT_Bool force_bold; |
162 | FT_Bool round_stem_up; |
163 | |
164 | FT_Short snap_widths [13]; /* including std width */ |
165 | FT_Short snap_heights[13]; /* including std height */ |
166 | |
167 | FT_Fixed expansion_factor; |
168 | |
169 | FT_Long language_group; |
170 | FT_Long password; |
171 | |
172 | FT_Short min_feature[2]; |
173 | |
174 | } PS_PrivateRec; |
175 | |
176 | |
177 | /************************************************************************** |
178 | * |
179 | * @struct: |
180 | * PS_Private |
181 | * |
182 | * @description: |
183 | * A handle to a @PS_PrivateRec structure. |
184 | */ |
185 | typedef struct PS_PrivateRec_* PS_Private; |
186 | |
187 | |
188 | /************************************************************************** |
189 | * |
190 | * @struct: |
191 | * T1_Private |
192 | * |
193 | * @description: |
194 | * This type is equivalent to @PS_PrivateRec. It is deprecated but kept |
195 | * to maintain source compatibility between various versions of FreeType. |
196 | */ |
197 | typedef PS_PrivateRec T1_Private; |
198 | |
199 | |
200 | /************************************************************************** |
201 | * |
202 | * @enum: |
203 | * T1_Blend_Flags |
204 | * |
205 | * @description: |
206 | * A set of flags used to indicate which fields are present in a given |
207 | * blend dictionary (font info or private). Used to support Multiple |
208 | * Masters fonts. |
209 | * |
210 | * @values: |
211 | * T1_BLEND_UNDERLINE_POSITION :: |
212 | * T1_BLEND_UNDERLINE_THICKNESS :: |
213 | * T1_BLEND_ITALIC_ANGLE :: |
214 | * T1_BLEND_BLUE_VALUES :: |
215 | * T1_BLEND_OTHER_BLUES :: |
216 | * T1_BLEND_STANDARD_WIDTH :: |
217 | * T1_BLEND_STANDARD_HEIGHT :: |
218 | * T1_BLEND_STEM_SNAP_WIDTHS :: |
219 | * T1_BLEND_STEM_SNAP_HEIGHTS :: |
220 | * T1_BLEND_BLUE_SCALE :: |
221 | * T1_BLEND_BLUE_SHIFT :: |
222 | * T1_BLEND_FAMILY_BLUES :: |
223 | * T1_BLEND_FAMILY_OTHER_BLUES :: |
224 | * T1_BLEND_FORCE_BOLD :: |
225 | */ |
226 | typedef enum T1_Blend_Flags_ |
227 | { |
228 | /* required fields in a FontInfo blend dictionary */ |
229 | T1_BLEND_UNDERLINE_POSITION = 0, |
230 | T1_BLEND_UNDERLINE_THICKNESS, |
231 | T1_BLEND_ITALIC_ANGLE, |
232 | |
233 | /* required fields in a Private blend dictionary */ |
234 | T1_BLEND_BLUE_VALUES, |
235 | T1_BLEND_OTHER_BLUES, |
236 | T1_BLEND_STANDARD_WIDTH, |
237 | T1_BLEND_STANDARD_HEIGHT, |
238 | T1_BLEND_STEM_SNAP_WIDTHS, |
239 | T1_BLEND_STEM_SNAP_HEIGHTS, |
240 | T1_BLEND_BLUE_SCALE, |
241 | T1_BLEND_BLUE_SHIFT, |
242 | T1_BLEND_FAMILY_BLUES, |
243 | T1_BLEND_FAMILY_OTHER_BLUES, |
244 | T1_BLEND_FORCE_BOLD, |
245 | |
246 | T1_BLEND_MAX /* do not remove */ |
247 | |
248 | } T1_Blend_Flags; |
249 | |
250 | |
251 | /* these constants are deprecated; use the corresponding */ |
252 | /* `T1_Blend_Flags` values instead */ |
253 | #define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION |
254 | #define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS |
255 | #define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE |
256 | #define t1_blend_blue_values T1_BLEND_BLUE_VALUES |
257 | #define t1_blend_other_blues T1_BLEND_OTHER_BLUES |
258 | #define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH |
259 | #define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT |
260 | #define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS |
261 | #define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS |
262 | #define t1_blend_blue_scale T1_BLEND_BLUE_SCALE |
263 | #define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT |
264 | #define t1_blend_family_blues T1_BLEND_FAMILY_BLUES |
265 | #define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES |
266 | #define t1_blend_force_bold T1_BLEND_FORCE_BOLD |
267 | #define t1_blend_max T1_BLEND_MAX |
268 | |
269 | /* */ |
270 | |
271 | |
272 | /* maximum number of Multiple Masters designs, as defined in the spec */ |
273 | #define T1_MAX_MM_DESIGNS 16 |
274 | |
275 | /* maximum number of Multiple Masters axes, as defined in the spec */ |
276 | #define T1_MAX_MM_AXIS 4 |
277 | |
278 | /* maximum number of elements in a design map */ |
279 | #define T1_MAX_MM_MAP_POINTS 20 |
280 | |
281 | |
282 | /* this structure is used to store the BlendDesignMap entry for an axis */ |
283 | typedef struct PS_DesignMap_ |
284 | { |
285 | FT_Byte num_points; |
286 | FT_Long* design_points; |
287 | FT_Fixed* blend_points; |
288 | |
289 | } PS_DesignMapRec, *PS_DesignMap; |
290 | |
291 | /* backward compatible definition */ |
292 | typedef PS_DesignMapRec T1_DesignMap; |
293 | |
294 | |
295 | typedef struct PS_BlendRec_ |
296 | { |
297 | FT_UInt num_designs; |
298 | FT_UInt num_axis; |
299 | |
300 | FT_String* axis_names[T1_MAX_MM_AXIS]; |
301 | FT_Fixed* design_pos[T1_MAX_MM_DESIGNS]; |
302 | PS_DesignMapRec design_map[T1_MAX_MM_AXIS]; |
303 | |
304 | FT_Fixed* weight_vector; |
305 | FT_Fixed* default_weight_vector; |
306 | |
307 | PS_FontInfo font_infos[T1_MAX_MM_DESIGNS + 1]; |
308 | PS_Private privates [T1_MAX_MM_DESIGNS + 1]; |
309 | |
310 | FT_ULong blend_bitflags; |
311 | |
312 | FT_BBox* bboxes [T1_MAX_MM_DESIGNS + 1]; |
313 | |
314 | /* since 2.3.0 */ |
315 | |
316 | /* undocumented, optional: the default design instance; */ |
317 | /* corresponds to default_weight_vector -- */ |
318 | /* num_default_design_vector == 0 means it is not present */ |
319 | /* in the font and associated metrics files */ |
320 | FT_UInt default_design_vector[T1_MAX_MM_DESIGNS]; |
321 | FT_UInt num_default_design_vector; |
322 | |
323 | } PS_BlendRec, *PS_Blend; |
324 | |
325 | |
326 | /* backward compatible definition */ |
327 | typedef PS_BlendRec T1_Blend; |
328 | |
329 | |
330 | /************************************************************************** |
331 | * |
332 | * @struct: |
333 | * CID_FaceDictRec |
334 | * |
335 | * @description: |
336 | * A structure used to represent data in a CID top-level dictionary. In |
337 | * most cases, they are part of the font's '/FDArray' array. Within a |
338 | * CID font file, such (internal) subfont dictionaries are enclosed by |
339 | * '%ADOBeginFontDict' and '%ADOEndFontDict' comments. |
340 | * |
341 | * Note that `CID_FaceDictRec` misses a field for the '/FontName' |
342 | * keyword, specifying the subfont's name (the top-level font name is |
343 | * given by the '/CIDFontName' keyword). This is an oversight, but it |
344 | * doesn't limit the 'cid' font module's functionality because FreeType |
345 | * neither needs this entry nor gives access to CID subfonts. |
346 | */ |
347 | typedef struct CID_FaceDictRec_ |
348 | { |
349 | PS_PrivateRec private_dict; |
350 | |
351 | FT_UInt len_buildchar; |
352 | FT_Fixed forcebold_threshold; |
353 | FT_Pos stroke_width; |
354 | FT_Fixed expansion_factor; /* this is a duplicate of */ |
355 | /* `private_dict->expansion_factor' */ |
356 | FT_Byte paint_type; |
357 | FT_Byte font_type; |
358 | FT_Matrix font_matrix; |
359 | FT_Vector font_offset; |
360 | |
361 | FT_UInt num_subrs; |
362 | FT_ULong subrmap_offset; |
363 | FT_UInt sd_bytes; |
364 | |
365 | } CID_FaceDictRec; |
366 | |
367 | |
368 | /************************************************************************** |
369 | * |
370 | * @struct: |
371 | * CID_FaceDict |
372 | * |
373 | * @description: |
374 | * A handle to a @CID_FaceDictRec structure. |
375 | */ |
376 | typedef struct CID_FaceDictRec_* CID_FaceDict; |
377 | |
378 | |
379 | /************************************************************************** |
380 | * |
381 | * @struct: |
382 | * CID_FontDict |
383 | * |
384 | * @description: |
385 | * This type is equivalent to @CID_FaceDictRec. It is deprecated but |
386 | * kept to maintain source compatibility between various versions of |
387 | * FreeType. |
388 | */ |
389 | typedef CID_FaceDictRec CID_FontDict; |
390 | |
391 | |
392 | /************************************************************************** |
393 | * |
394 | * @struct: |
395 | * CID_FaceInfoRec |
396 | * |
397 | * @description: |
398 | * A structure used to represent CID Face information. |
399 | */ |
400 | typedef struct CID_FaceInfoRec_ |
401 | { |
402 | FT_String* cid_font_name; |
403 | FT_Fixed cid_version; |
404 | FT_Int cid_font_type; |
405 | |
406 | FT_String* registry; |
407 | FT_String* ordering; |
408 | FT_Int supplement; |
409 | |
410 | PS_FontInfoRec font_info; |
411 | FT_BBox font_bbox; |
412 | FT_ULong uid_base; |
413 | |
414 | FT_Int num_xuid; |
415 | FT_ULong xuid[16]; |
416 | |
417 | FT_ULong cidmap_offset; |
418 | FT_UInt fd_bytes; |
419 | FT_UInt gd_bytes; |
420 | FT_ULong cid_count; |
421 | |
422 | FT_UInt num_dicts; |
423 | CID_FaceDict font_dicts; |
424 | |
425 | FT_ULong data_offset; |
426 | |
427 | } CID_FaceInfoRec; |
428 | |
429 | |
430 | /************************************************************************** |
431 | * |
432 | * @struct: |
433 | * CID_FaceInfo |
434 | * |
435 | * @description: |
436 | * A handle to a @CID_FaceInfoRec structure. |
437 | */ |
438 | typedef struct CID_FaceInfoRec_* CID_FaceInfo; |
439 | |
440 | |
441 | /************************************************************************** |
442 | * |
443 | * @struct: |
444 | * CID_Info |
445 | * |
446 | * @description: |
447 | * This type is equivalent to @CID_FaceInfoRec. It is deprecated but kept |
448 | * to maintain source compatibility between various versions of FreeType. |
449 | */ |
450 | typedef CID_FaceInfoRec CID_Info; |
451 | |
452 | |
453 | /************************************************************************** |
454 | * |
455 | * @function: |
456 | * FT_Has_PS_Glyph_Names |
457 | * |
458 | * @description: |
459 | * Return true if a given face provides reliable PostScript glyph names. |
460 | * This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that |
461 | * certain fonts (mostly TrueType) contain incorrect glyph name tables. |
462 | * |
463 | * When this function returns true, the caller is sure that the glyph |
464 | * names returned by @FT_Get_Glyph_Name are reliable. |
465 | * |
466 | * @input: |
467 | * face :: |
468 | * face handle |
469 | * |
470 | * @return: |
471 | * Boolean. True if glyph names are reliable. |
472 | * |
473 | */ |
474 | FT_EXPORT( FT_Int ) |
475 | FT_Has_PS_Glyph_Names( FT_Face face ); |
476 | |
477 | |
478 | /************************************************************************** |
479 | * |
480 | * @function: |
481 | * FT_Get_PS_Font_Info |
482 | * |
483 | * @description: |
484 | * Retrieve the @PS_FontInfoRec structure corresponding to a given |
485 | * PostScript font. |
486 | * |
487 | * @input: |
488 | * face :: |
489 | * PostScript face handle. |
490 | * |
491 | * @output: |
492 | * afont_info :: |
493 | * Output font info structure pointer. |
494 | * |
495 | * @return: |
496 | * FreeType error code. 0~means success. |
497 | * |
498 | * @note: |
499 | * String pointers within the @PS_FontInfoRec structure are owned by the |
500 | * face and don't need to be freed by the caller. Missing entries in |
501 | * the font's FontInfo dictionary are represented by `NULL` pointers. |
502 | * |
503 | * If the font's format is not PostScript-based, this function will |
504 | * return the `FT_Err_Invalid_Argument` error code. |
505 | * |
506 | */ |
507 | FT_EXPORT( FT_Error ) |
508 | FT_Get_PS_Font_Info( FT_Face face, |
509 | PS_FontInfo afont_info ); |
510 | |
511 | |
512 | /************************************************************************** |
513 | * |
514 | * @function: |
515 | * FT_Get_PS_Font_Private |
516 | * |
517 | * @description: |
518 | * Retrieve the @PS_PrivateRec structure corresponding to a given |
519 | * PostScript font. |
520 | * |
521 | * @input: |
522 | * face :: |
523 | * PostScript face handle. |
524 | * |
525 | * @output: |
526 | * afont_private :: |
527 | * Output private dictionary structure pointer. |
528 | * |
529 | * @return: |
530 | * FreeType error code. 0~means success. |
531 | * |
532 | * @note: |
533 | * The string pointers within the @PS_PrivateRec structure are owned by |
534 | * the face and don't need to be freed by the caller. |
535 | * |
536 | * If the font's format is not PostScript-based, this function returns |
537 | * the `FT_Err_Invalid_Argument` error code. |
538 | * |
539 | */ |
540 | FT_EXPORT( FT_Error ) |
541 | FT_Get_PS_Font_Private( FT_Face face, |
542 | PS_Private afont_private ); |
543 | |
544 | |
545 | /************************************************************************** |
546 | * |
547 | * @enum: |
548 | * T1_EncodingType |
549 | * |
550 | * @description: |
551 | * An enumeration describing the 'Encoding' entry in a Type 1 dictionary. |
552 | * |
553 | * @values: |
554 | * T1_ENCODING_TYPE_NONE :: |
555 | * T1_ENCODING_TYPE_ARRAY :: |
556 | * T1_ENCODING_TYPE_STANDARD :: |
557 | * T1_ENCODING_TYPE_ISOLATIN1 :: |
558 | * T1_ENCODING_TYPE_EXPERT :: |
559 | * |
560 | * @since: |
561 | * 2.4.8 |
562 | */ |
563 | typedef enum T1_EncodingType_ |
564 | { |
565 | T1_ENCODING_TYPE_NONE = 0, |
566 | T1_ENCODING_TYPE_ARRAY, |
567 | T1_ENCODING_TYPE_STANDARD, |
568 | T1_ENCODING_TYPE_ISOLATIN1, |
569 | T1_ENCODING_TYPE_EXPERT |
570 | |
571 | } T1_EncodingType; |
572 | |
573 | |
574 | /************************************************************************** |
575 | * |
576 | * @enum: |
577 | * PS_Dict_Keys |
578 | * |
579 | * @description: |
580 | * An enumeration used in calls to @FT_Get_PS_Font_Value to identify the |
581 | * Type~1 dictionary entry to retrieve. |
582 | * |
583 | * @values: |
584 | * PS_DICT_FONT_TYPE :: |
585 | * PS_DICT_FONT_MATRIX :: |
586 | * PS_DICT_FONT_BBOX :: |
587 | * PS_DICT_PAINT_TYPE :: |
588 | * PS_DICT_FONT_NAME :: |
589 | * PS_DICT_UNIQUE_ID :: |
590 | * PS_DICT_NUM_CHAR_STRINGS :: |
591 | * PS_DICT_CHAR_STRING_KEY :: |
592 | * PS_DICT_CHAR_STRING :: |
593 | * PS_DICT_ENCODING_TYPE :: |
594 | * PS_DICT_ENCODING_ENTRY :: |
595 | * PS_DICT_NUM_SUBRS :: |
596 | * PS_DICT_SUBR :: |
597 | * PS_DICT_STD_HW :: |
598 | * PS_DICT_STD_VW :: |
599 | * PS_DICT_NUM_BLUE_VALUES :: |
600 | * PS_DICT_BLUE_VALUE :: |
601 | * PS_DICT_BLUE_FUZZ :: |
602 | * PS_DICT_NUM_OTHER_BLUES :: |
603 | * PS_DICT_OTHER_BLUE :: |
604 | * PS_DICT_NUM_FAMILY_BLUES :: |
605 | * PS_DICT_FAMILY_BLUE :: |
606 | * PS_DICT_NUM_FAMILY_OTHER_BLUES :: |
607 | * PS_DICT_FAMILY_OTHER_BLUE :: |
608 | * PS_DICT_BLUE_SCALE :: |
609 | * PS_DICT_BLUE_SHIFT :: |
610 | * PS_DICT_NUM_STEM_SNAP_H :: |
611 | * PS_DICT_STEM_SNAP_H :: |
612 | * PS_DICT_NUM_STEM_SNAP_V :: |
613 | * PS_DICT_STEM_SNAP_V :: |
614 | * PS_DICT_FORCE_BOLD :: |
615 | * PS_DICT_RND_STEM_UP :: |
616 | * PS_DICT_MIN_FEATURE :: |
617 | * PS_DICT_LEN_IV :: |
618 | * PS_DICT_PASSWORD :: |
619 | * PS_DICT_LANGUAGE_GROUP :: |
620 | * PS_DICT_VERSION :: |
621 | * PS_DICT_NOTICE :: |
622 | * PS_DICT_FULL_NAME :: |
623 | * PS_DICT_FAMILY_NAME :: |
624 | * PS_DICT_WEIGHT :: |
625 | * PS_DICT_IS_FIXED_PITCH :: |
626 | * PS_DICT_UNDERLINE_POSITION :: |
627 | * PS_DICT_UNDERLINE_THICKNESS :: |
628 | * PS_DICT_FS_TYPE :: |
629 | * PS_DICT_ITALIC_ANGLE :: |
630 | * |
631 | * @since: |
632 | * 2.4.8 |
633 | */ |
634 | typedef enum PS_Dict_Keys_ |
635 | { |
636 | /* conventionally in the font dictionary */ |
637 | PS_DICT_FONT_TYPE, /* FT_Byte */ |
638 | PS_DICT_FONT_MATRIX, /* FT_Fixed */ |
639 | PS_DICT_FONT_BBOX, /* FT_Fixed */ |
640 | PS_DICT_PAINT_TYPE, /* FT_Byte */ |
641 | PS_DICT_FONT_NAME, /* FT_String* */ |
642 | PS_DICT_UNIQUE_ID, /* FT_Int */ |
643 | PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */ |
644 | PS_DICT_CHAR_STRING_KEY, /* FT_String* */ |
645 | PS_DICT_CHAR_STRING, /* FT_String* */ |
646 | PS_DICT_ENCODING_TYPE, /* T1_EncodingType */ |
647 | PS_DICT_ENCODING_ENTRY, /* FT_String* */ |
648 | |
649 | /* conventionally in the font Private dictionary */ |
650 | PS_DICT_NUM_SUBRS, /* FT_Int */ |
651 | PS_DICT_SUBR, /* FT_String* */ |
652 | PS_DICT_STD_HW, /* FT_UShort */ |
653 | PS_DICT_STD_VW, /* FT_UShort */ |
654 | PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */ |
655 | PS_DICT_BLUE_VALUE, /* FT_Short */ |
656 | PS_DICT_BLUE_FUZZ, /* FT_Int */ |
657 | PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */ |
658 | PS_DICT_OTHER_BLUE, /* FT_Short */ |
659 | PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */ |
660 | PS_DICT_FAMILY_BLUE, /* FT_Short */ |
661 | PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */ |
662 | PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */ |
663 | PS_DICT_BLUE_SCALE, /* FT_Fixed */ |
664 | PS_DICT_BLUE_SHIFT, /* FT_Int */ |
665 | PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */ |
666 | PS_DICT_STEM_SNAP_H, /* FT_Short */ |
667 | PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */ |
668 | PS_DICT_STEM_SNAP_V, /* FT_Short */ |
669 | PS_DICT_FORCE_BOLD, /* FT_Bool */ |
670 | PS_DICT_RND_STEM_UP, /* FT_Bool */ |
671 | PS_DICT_MIN_FEATURE, /* FT_Short */ |
672 | PS_DICT_LEN_IV, /* FT_Int */ |
673 | PS_DICT_PASSWORD, /* FT_Long */ |
674 | PS_DICT_LANGUAGE_GROUP, /* FT_Long */ |
675 | |
676 | /* conventionally in the font FontInfo dictionary */ |
677 | PS_DICT_VERSION, /* FT_String* */ |
678 | PS_DICT_NOTICE, /* FT_String* */ |
679 | PS_DICT_FULL_NAME, /* FT_String* */ |
680 | PS_DICT_FAMILY_NAME, /* FT_String* */ |
681 | PS_DICT_WEIGHT, /* FT_String* */ |
682 | PS_DICT_IS_FIXED_PITCH, /* FT_Bool */ |
683 | PS_DICT_UNDERLINE_POSITION, /* FT_Short */ |
684 | PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */ |
685 | PS_DICT_FS_TYPE, /* FT_UShort */ |
686 | PS_DICT_ITALIC_ANGLE, /* FT_Long */ |
687 | |
688 | PS_DICT_MAX = PS_DICT_ITALIC_ANGLE |
689 | |
690 | } PS_Dict_Keys; |
691 | |
692 | |
693 | /************************************************************************** |
694 | * |
695 | * @function: |
696 | * FT_Get_PS_Font_Value |
697 | * |
698 | * @description: |
699 | * Retrieve the value for the supplied key from a PostScript font. |
700 | * |
701 | * @input: |
702 | * face :: |
703 | * PostScript face handle. |
704 | * |
705 | * key :: |
706 | * An enumeration value representing the dictionary key to retrieve. |
707 | * |
708 | * idx :: |
709 | * For array values, this specifies the index to be returned. |
710 | * |
711 | * value :: |
712 | * A pointer to memory into which to write the value. |
713 | * |
714 | * valen_len :: |
715 | * The size, in bytes, of the memory supplied for the value. |
716 | * |
717 | * @output: |
718 | * value :: |
719 | * The value matching the above key, if it exists. |
720 | * |
721 | * @return: |
722 | * The amount of memory (in bytes) required to hold the requested value |
723 | * (if it exists, -1 otherwise). |
724 | * |
725 | * @note: |
726 | * The values returned are not pointers into the internal structures of |
727 | * the face, but are 'fresh' copies, so that the memory containing them |
728 | * belongs to the calling application. This also enforces the |
729 | * 'read-only' nature of these values, i.e., this function cannot be |
730 | * used to manipulate the face. |
731 | * |
732 | * `value` is a void pointer because the values returned can be of |
733 | * various types. |
734 | * |
735 | * If either `value` is `NULL` or `value_len` is too small, just the |
736 | * required memory size for the requested entry is returned. |
737 | * |
738 | * The `idx` parameter is used, not only to retrieve elements of, for |
739 | * example, the FontMatrix or FontBBox, but also to retrieve name keys |
740 | * from the CharStrings dictionary, and the charstrings themselves. It |
741 | * is ignored for atomic values. |
742 | * |
743 | * `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000. To |
744 | * get the value as in the font stream, you need to divide by 65536000.0 |
745 | * (to remove the FT_Fixed scale, and the x1000 scale). |
746 | * |
747 | * IMPORTANT: Only key/value pairs read by the FreeType interpreter can |
748 | * be retrieved. So, for example, PostScript procedures such as NP, ND, |
749 | * and RD are not available. Arbitrary keys are, obviously, not be |
750 | * available either. |
751 | * |
752 | * If the font's format is not PostScript-based, this function returns |
753 | * the `FT_Err_Invalid_Argument` error code. |
754 | * |
755 | * @since: |
756 | * 2.4.8 |
757 | * |
758 | */ |
759 | FT_EXPORT( FT_Long ) |
760 | FT_Get_PS_Font_Value( FT_Face face, |
761 | PS_Dict_Keys key, |
762 | FT_UInt idx, |
763 | void *value, |
764 | FT_Long value_len ); |
765 | |
766 | /* */ |
767 | |
768 | FT_END_HEADER |
769 | |
770 | #endif /* T1TABLES_H_ */ |
771 | |
772 | |
773 | /* END */ |
774 | |