ReactOS 0.4.15-dev-7961-gdcf9eb0
t1driver.c
Go to the documentation of this file.
1/***************************************************************************/
2/* */
3/* t1driver.c */
4/* */
5/* Type 1 driver interface (body). */
6/* */
7/* Copyright 1996-2018 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 <ft2build.h>
20#include "t1driver.h"
21#include "t1gload.h"
22#include "t1load.h"
23
24#include "t1errors.h"
25
26#ifndef T1_CONFIG_OPTION_NO_AFM
27#include "t1afm.h"
28#endif
29
30#include FT_INTERNAL_DEBUG_H
31#include FT_INTERNAL_STREAM_H
32#include FT_INTERNAL_HASH_H
33#include FT_INTERNAL_POSTSCRIPT_PROPS_H
34#include FT_DRIVER_H
35
36#include FT_SERVICE_MULTIPLE_MASTERS_H
37#include FT_SERVICE_GLYPH_DICT_H
38#include FT_SERVICE_FONT_FORMAT_H
39#include FT_SERVICE_POSTSCRIPT_NAME_H
40#include FT_SERVICE_POSTSCRIPT_CMAPS_H
41#include FT_SERVICE_POSTSCRIPT_INFO_H
42#include FT_SERVICE_PROPERTIES_H
43#include FT_SERVICE_KERNING_H
44
45
46 /*************************************************************************/
47 /* */
48 /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
49 /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
50 /* messages during execution. */
51 /* */
52#undef FT_COMPONENT
53#define FT_COMPONENT trace_t1driver
54
55 /*
56 * GLYPH DICT SERVICE
57 *
58 */
59
60 static FT_Error
62 FT_UInt glyph_index,
64 FT_UInt buffer_max )
65 {
66 FT_STRCPYN( buffer, face->type1.glyph_names[glyph_index], buffer_max );
67
68 return FT_Err_Ok;
69 }
70
71
72 static FT_UInt
74 FT_String* glyph_name )
75 {
76 FT_Int i;
77
78
79 for ( i = 0; i < face->type1.num_glyphs; i++ )
80 {
81 FT_String* gname = face->type1.glyph_names[i];
82
83
84 if ( !ft_strcmp( glyph_name, gname ) )
85 return (FT_UInt)i;
86 }
87
88 return 0;
89 }
90
91
92 static const FT_Service_GlyphDictRec t1_service_glyph_dict =
93 {
96 };
97
98
99 /*
100 * POSTSCRIPT NAME SERVICE
101 *
102 */
103
104 static const char*
106 {
107 return (const char*) face->type1.font_name;
108 }
109
110
111 static const FT_Service_PsFontNameRec t1_service_ps_name =
112 {
113 (FT_PsName_GetFunc)t1_get_ps_name /* get_ps_font_name */
114 };
115
116
117 /*
118 * MULTIPLE MASTERS SERVICE
119 *
120 */
121
122#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
123 static const FT_Service_MultiMastersRec t1_service_multi_masters =
124 {
125 (FT_Get_MM_Func) T1_Get_Multi_Master, /* get_mm */
126 (FT_Set_MM_Design_Func) T1_Set_MM_Design, /* set_mm_design */
127 (FT_Set_MM_Blend_Func) T1_Set_MM_Blend, /* set_mm_blend */
128 (FT_Get_MM_Blend_Func) T1_Get_MM_Blend, /* get_mm_blend */
129 (FT_Get_MM_Var_Func) T1_Get_MM_Var, /* get_mm_var */
130 (FT_Set_Var_Design_Func)T1_Set_Var_Design, /* set_var_design */
131 (FT_Get_Var_Design_Func)T1_Get_Var_Design, /* get_var_design */
132 (FT_Set_Instance_Func) T1_Reset_MM_Blend, /* set_instance */
133
134 (FT_Get_Var_Blend_Func) NULL, /* get_var_blend */
135 (FT_Done_Blend_Func) T1_Done_Blend /* done_blend */
136 };
137#endif
138
139
140 /*
141 * POSTSCRIPT INFO SERVICE
142 *
143 */
144
145 static FT_Error
147 PS_FontInfoRec* afont_info )
148 {
149 *afont_info = ((T1_Face)face)->type1.font_info;
150
151 return FT_Err_Ok;
152 }
153
154
155 static FT_Error
157 PS_FontExtraRec* afont_extra )
158 {
159 *afont_extra = ((T1_Face)face)->type1.font_extra;
160
161 return FT_Err_Ok;
162 }
163
164
165 static FT_Int
167 {
168 FT_UNUSED( face );
169
170 return 1;
171 }
172
173
174 static FT_Error
176 PS_PrivateRec* afont_private )
177 {
178 *afont_private = ((T1_Face)face)->type1.private_dict;
179
180 return FT_Err_Ok;
181 }
182
183
184 static FT_Long
187 FT_UInt idx,
188 void *value,
189 FT_Long value_len_ )
190 {
191 FT_ULong retval = 0; /* always >= 1 if valid */
192 FT_ULong value_len = value_len_ < 0 ? 0 : (FT_ULong)value_len_;
193
194 T1_Face t1face = (T1_Face)face;
195 T1_Font type1 = &t1face->type1;
196
197
198 switch ( key )
199 {
201 retval = sizeof ( type1->font_type );
202 if ( value && value_len >= retval )
203 *((FT_Byte *)value) = type1->font_type;
204 break;
205
207 if ( idx < sizeof ( type1->font_matrix ) /
208 sizeof ( type1->font_matrix.xx ) )
209 {
210 FT_Fixed val = 0;
211
212
213 retval = sizeof ( val );
214 if ( value && value_len >= retval )
215 {
216 switch ( idx )
217 {
218 case 0:
219 val = type1->font_matrix.xx;
220 break;
221 case 1:
222 val = type1->font_matrix.xy;
223 break;
224 case 2:
225 val = type1->font_matrix.yx;
226 break;
227 case 3:
228 val = type1->font_matrix.yy;
229 break;
230 }
231 *((FT_Fixed *)value) = val;
232 }
233 }
234 break;
235
237 if ( idx < sizeof ( type1->font_bbox ) /
238 sizeof ( type1->font_bbox.xMin ) )
239 {
240 FT_Fixed val = 0;
241
242
243 retval = sizeof ( val );
244 if ( value && value_len >= retval )
245 {
246 switch ( idx )
247 {
248 case 0:
249 val = type1->font_bbox.xMin;
250 break;
251 case 1:
252 val = type1->font_bbox.yMin;
253 break;
254 case 2:
255 val = type1->font_bbox.xMax;
256 break;
257 case 3:
258 val = type1->font_bbox.yMax;
259 break;
260 }
261 *((FT_Fixed *)value) = val;
262 }
263 }
264 break;
265
267 retval = sizeof ( type1->paint_type );
268 if ( value && value_len >= retval )
269 *((FT_Byte *)value) = type1->paint_type;
270 break;
271
273 retval = ft_strlen( type1->font_name ) + 1;
274 if ( value && value_len >= retval )
275 ft_memcpy( value, (void *)( type1->font_name ), retval );
276 break;
277
279 retval = sizeof ( type1->private_dict.unique_id );
280 if ( value && value_len >= retval )
281 *((FT_Int *)value) = type1->private_dict.unique_id;
282 break;
283
285 retval = sizeof ( type1->num_glyphs );
286 if ( value && value_len >= retval )
287 *((FT_Int *)value) = type1->num_glyphs;
288 break;
289
291 if ( idx < (FT_UInt)type1->num_glyphs )
292 {
293 retval = ft_strlen( type1->glyph_names[idx] ) + 1;
294 if ( value && value_len >= retval )
295 {
296 ft_memcpy( value, (void *)( type1->glyph_names[idx] ), retval );
297 ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
298 }
299 }
300 break;
301
303 if ( idx < (FT_UInt)type1->num_glyphs )
304 {
305 retval = type1->charstrings_len[idx] + 1;
306 if ( value && value_len >= retval )
307 {
308 ft_memcpy( value, (void *)( type1->charstrings[idx] ),
309 retval - 1 );
310 ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
311 }
312 }
313 break;
314
316 retval = sizeof ( type1->encoding_type );
317 if ( value && value_len >= retval )
318 *((T1_EncodingType *)value) = type1->encoding_type;
319 break;
320
322 if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY &&
323 idx < (FT_UInt)type1->encoding.num_chars )
324 {
325 retval = ft_strlen( type1->encoding.char_name[idx] ) + 1;
326 if ( value && value_len >= retval )
327 {
328 ft_memcpy( value, (void *)( type1->encoding.char_name[idx] ),
329 retval - 1 );
330 ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
331 }
332 }
333 break;
334
336 retval = sizeof ( type1->num_subrs );
337 if ( value && value_len >= retval )
338 *((FT_Int *)value) = type1->num_subrs;
339 break;
340
341 case PS_DICT_SUBR:
342 {
343 FT_Bool ok = 0;
344
345
346 if ( type1->subrs_hash )
347 {
348 /* convert subr index to array index */
349 size_t* val = ft_hash_num_lookup( (FT_Int)idx,
350 type1->subrs_hash );
351
352
353 if ( val )
354 {
355 idx = *val;
356 ok = 1;
357 }
358 }
359 else
360 {
361 if ( idx < (FT_UInt)type1->num_subrs )
362 ok = 1;
363 }
364
365 if ( ok )
366 {
367 retval = type1->subrs_len[idx] + 1;
368 if ( value && value_len >= retval )
369 {
370 ft_memcpy( value, (void *)( type1->subrs[idx] ), retval - 1 );
371 ((FT_Char *)value)[retval - 1] = (FT_Char)'\0';
372 }
373 }
374 }
375 break;
376
377 case PS_DICT_STD_HW:
378 retval = sizeof ( type1->private_dict.standard_width[0] );
379 if ( value && value_len >= retval )
380 *((FT_UShort *)value) = type1->private_dict.standard_width[0];
381 break;
382
383 case PS_DICT_STD_VW:
384 retval = sizeof ( type1->private_dict.standard_height[0] );
385 if ( value && value_len >= retval )
387 break;
388
390 retval = sizeof ( type1->private_dict.num_blue_values );
391 if ( value && value_len >= retval )
393 break;
394
396 if ( idx < type1->private_dict.num_blue_values )
397 {
398 retval = sizeof ( type1->private_dict.blue_values[idx] );
399 if ( value && value_len >= retval )
400 *((FT_Short *)value) = type1->private_dict.blue_values[idx];
401 }
402 break;
403
405 retval = sizeof ( type1->private_dict.blue_scale );
406 if ( value && value_len >= retval )
407 *((FT_Fixed *)value) = type1->private_dict.blue_scale;
408 break;
409
411 retval = sizeof ( type1->private_dict.blue_fuzz );
412 if ( value && value_len >= retval )
413 *((FT_Int *)value) = type1->private_dict.blue_fuzz;
414 break;
415
417 retval = sizeof ( type1->private_dict.blue_shift );
418 if ( value && value_len >= retval )
419 *((FT_Int *)value) = type1->private_dict.blue_shift;
420 break;
421
423 retval = sizeof ( type1->private_dict.num_other_blues );
424 if ( value && value_len >= retval )
426 break;
427
429 if ( idx < type1->private_dict.num_other_blues )
430 {
431 retval = sizeof ( type1->private_dict.other_blues[idx] );
432 if ( value && value_len >= retval )
433 *((FT_Short *)value) = type1->private_dict.other_blues[idx];
434 }
435 break;
436
438 retval = sizeof ( type1->private_dict.num_family_blues );
439 if ( value && value_len >= retval )
441 break;
442
444 if ( idx < type1->private_dict.num_family_blues )
445 {
446 retval = sizeof ( type1->private_dict.family_blues[idx] );
447 if ( value && value_len >= retval )
449 }
450 break;
451
453 retval = sizeof ( type1->private_dict.num_family_other_blues );
454 if ( value && value_len >= retval )
456 break;
457
459 if ( idx < type1->private_dict.num_family_other_blues )
460 {
461 retval = sizeof ( type1->private_dict.family_other_blues[idx] );
462 if ( value && value_len >= retval )
464 }
465 break;
466
468 retval = sizeof ( type1->private_dict.num_snap_widths );
469 if ( value && value_len >= retval )
471 break;
472
474 if ( idx < type1->private_dict.num_snap_widths )
475 {
476 retval = sizeof ( type1->private_dict.snap_widths[idx] );
477 if ( value && value_len >= retval )
478 *((FT_Short *)value) = type1->private_dict.snap_widths[idx];
479 }
480 break;
481
483 retval = sizeof ( type1->private_dict.num_snap_heights );
484 if ( value && value_len >= retval )
486 break;
487
489 if ( idx < type1->private_dict.num_snap_heights )
490 {
491 retval = sizeof ( type1->private_dict.snap_heights[idx] );
492 if ( value && value_len >= retval )
494 }
495 break;
496
498 retval = sizeof ( type1->private_dict.round_stem_up );
499 if ( value && value_len >= retval )
501 break;
502
504 retval = sizeof ( type1->private_dict.force_bold );
505 if ( value && value_len >= retval )
506 *((FT_Bool *)value) = type1->private_dict.force_bold;
507 break;
508
510 if ( idx < sizeof ( type1->private_dict.min_feature ) /
511 sizeof ( type1->private_dict.min_feature[0] ) )
512 {
513 retval = sizeof ( type1->private_dict.min_feature[idx] );
514 if ( value && value_len >= retval )
515 *((FT_Short *)value) = type1->private_dict.min_feature[idx];
516 }
517 break;
518
519 case PS_DICT_LEN_IV:
520 retval = sizeof ( type1->private_dict.lenIV );
521 if ( value && value_len >= retval )
522 *((FT_Int *)value) = type1->private_dict.lenIV;
523 break;
524
525 case PS_DICT_PASSWORD:
526 retval = sizeof ( type1->private_dict.password );
527 if ( value && value_len >= retval )
528 *((FT_Long *)value) = type1->private_dict.password;
529 break;
530
532 retval = sizeof ( type1->private_dict.language_group );
533 if ( value && value_len >= retval )
535 break;
536
538 retval = sizeof ( type1->font_info.is_fixed_pitch );
539 if ( value && value_len >= retval )
540 *((FT_Bool *)value) = type1->font_info.is_fixed_pitch;
541 break;
542
544 retval = sizeof ( type1->font_info.underline_position );
545 if ( value && value_len >= retval )
546 *((FT_Short *)value) = type1->font_info.underline_position;
547 break;
548
550 retval = sizeof ( type1->font_info.underline_thickness );
551 if ( value && value_len >= retval )
552 *((FT_UShort *)value) = type1->font_info.underline_thickness;
553 break;
554
555 case PS_DICT_FS_TYPE:
556 retval = sizeof ( type1->font_extra.fs_type );
557 if ( value && value_len >= retval )
558 *((FT_UShort *)value) = type1->font_extra.fs_type;
559 break;
560
561 case PS_DICT_VERSION:
562 retval = ft_strlen( type1->font_info.version ) + 1;
563 if ( value && value_len >= retval )
564 ft_memcpy( value, (void *)( type1->font_info.version ), retval );
565 break;
566
567 case PS_DICT_NOTICE:
568 retval = ft_strlen( type1->font_info.notice ) + 1;
569 if ( value && value_len >= retval )
570 ft_memcpy( value, (void *)( type1->font_info.notice ), retval );
571 break;
572
574 retval = ft_strlen( type1->font_info.full_name ) + 1;
575 if ( value && value_len >= retval )
576 ft_memcpy( value, (void *)( type1->font_info.full_name ), retval );
577 break;
578
580 retval = ft_strlen( type1->font_info.family_name ) + 1;
581 if ( value && value_len >= retval )
582 ft_memcpy( value, (void *)( type1->font_info.family_name ), retval );
583 break;
584
585 case PS_DICT_WEIGHT:
586 retval = ft_strlen( type1->font_info.weight ) + 1;
587 if ( value && value_len >= retval )
588 ft_memcpy( value, (void *)( type1->font_info.weight ), retval );
589 break;
590
592 retval = sizeof ( type1->font_info.italic_angle );
593 if ( value && value_len >= retval )
594 *((FT_Long *)value) = type1->font_info.italic_angle;
595 break;
596 }
597
598 return retval == 0 ? -1 : (FT_Long)retval;
599 }
600
601
602 static const FT_Service_PsInfoRec t1_service_ps_info =
603 {
604 (PS_GetFontInfoFunc) t1_ps_get_font_info, /* ps_get_font_info */
605 (PS_GetFontExtraFunc) t1_ps_get_font_extra, /* ps_get_font_extra */
606 (PS_HasGlyphNamesFunc) t1_ps_has_glyph_names, /* ps_has_glyph_names */
607 (PS_GetFontPrivateFunc)t1_ps_get_font_private, /* ps_get_font_private */
608 (PS_GetFontValueFunc) t1_ps_get_font_value, /* ps_get_font_value */
609 };
610
611
612#ifndef T1_CONFIG_OPTION_NO_AFM
613 static const FT_Service_KerningRec t1_service_kerning =
614 {
615 T1_Get_Track_Kerning, /* get_track */
616 };
617#endif
618
619
620 /*
621 * PROPERTY SERVICE
622 *
623 */
624
626 t1_service_properties,
627
628 (FT_Properties_SetFunc)ps_property_set, /* set_property */
629 (FT_Properties_GetFunc)ps_property_get ) /* get_property */
630
631
632 /*
633 * SERVICE LIST
634 *
635 */
636
637 static const FT_ServiceDescRec t1_services[] =
638 {
643 { FT_SERVICE_ID_PROPERTIES, &t1_service_properties },
644
645#ifndef T1_CONFIG_OPTION_NO_AFM
647#endif
648
649#ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
651#endif
652 { NULL, NULL }
653 };
654
655
658 const FT_String* t1_interface )
659 {
660 FT_UNUSED( module );
661
662 return ft_service_list_lookup( t1_services, t1_interface );
663 }
664
665
666#ifndef T1_CONFIG_OPTION_NO_AFM
667
668 /*************************************************************************/
669 /* */
670 /* <Function> */
671 /* Get_Kerning */
672 /* */
673 /* <Description> */
674 /* A driver method used to return the kerning vector between two */
675 /* glyphs of the same face. */
676 /* */
677 /* <Input> */
678 /* face :: A handle to the source face object. */
679 /* */
680 /* left_glyph :: The index of the left glyph in the kern pair. */
681 /* */
682 /* right_glyph :: The index of the right glyph in the kern pair. */
683 /* */
684 /* <Output> */
685 /* kerning :: The kerning vector. This is in font units for */
686 /* scalable formats, and in pixels for fixed-sizes */
687 /* formats. */
688 /* */
689 /* <Return> */
690 /* FreeType error code. 0 means success. */
691 /* */
692 /* <Note> */
693 /* Only horizontal layouts (left-to-right & right-to-left) are */
694 /* supported by this function. Other layouts, or more sophisticated */
695 /* kernings are out of scope of this method (the basic driver */
696 /* interface is meant to be simple). */
697 /* */
698 /* They can be implemented by format-specific interfaces. */
699 /* */
700 static FT_Error
701 Get_Kerning( FT_Face t1face, /* T1_Face */
705 {
706 T1_Face face = (T1_Face)t1face;
707
708
709 kerning->x = 0;
710 kerning->y = 0;
711
712 if ( face->afm_data )
713 T1_Get_Kerning( (AFM_FontInfo)face->afm_data,
716 kerning );
717
718 return FT_Err_Ok;
719 }
720
721
722#endif /* T1_CONFIG_OPTION_NO_AFM */
723
724
727 {
728 {
732
733 sizeof ( PS_DriverRec ),
734
735 "type1",
736 0x10000L,
737 0x20000L,
738
739 NULL, /* module-specific interface */
740
741 T1_Driver_Init, /* FT_Module_Constructor module_init */
742 T1_Driver_Done, /* FT_Module_Destructor module_done */
743 Get_Interface, /* FT_Module_Requester get_interface */
744 },
745
746 sizeof ( T1_FaceRec ),
747 sizeof ( T1_SizeRec ),
748 sizeof ( T1_GlyphSlotRec ),
749
750 T1_Face_Init, /* FT_Face_InitFunc init_face */
751 T1_Face_Done, /* FT_Face_DoneFunc done_face */
752 T1_Size_Init, /* FT_Size_InitFunc init_size */
753 T1_Size_Done, /* FT_Size_DoneFunc done_size */
754 T1_GlyphSlot_Init, /* FT_Slot_InitFunc init_slot */
755 T1_GlyphSlot_Done, /* FT_Slot_DoneFunc done_slot */
756
757 T1_Load_Glyph, /* FT_Slot_LoadFunc load_glyph */
758
759#ifdef T1_CONFIG_OPTION_NO_AFM
760 NULL, /* FT_Face_GetKerningFunc get_kerning */
761 NULL, /* FT_Face_AttachFunc attach_file */
762#else
763 Get_Kerning, /* FT_Face_GetKerningFunc get_kerning */
764 T1_Read_Metrics, /* FT_Face_AttachFunc attach_file */
765#endif
766 T1_Get_Advances, /* FT_Face_GetAdvancesFunc get_advances */
767
768 T1_Size_Request, /* FT_Size_RequestFunc request_size */
769 NULL /* FT_Size_SelectFunc select_size */
770 };
771
772
773/* END */
#define ok(value,...)
Definition: atltest.h:57
FT_Properties_SetFunc ps_property_set
Definition: cffdrivr.c:828
#define NULL
Definition: types.h:112
unsigned int idx
Definition: utils.c:41
return FT_Err_Ok
Definition: ftbbox.c:511
#define FT_CALLBACK_DEF(x)
Definition: ftconfig.h:533
#define FT_CALLBACK_TABLE_DEF
Definition: ftconfig.h:553
#define FT_UNUSED(arg)
Definition: ftconfig.h:101
size_t * ft_hash_num_lookup(FT_Int num, FT_Hash hash)
Definition: fthash.c:327
#define FT_STRCPYN(dst, src, size)
Definition: ftmemory.h:382
#define FT_MODULE_FONT_DRIVER
Definition: ftmodapi.h:110
#define FT_MODULE_DRIVER_HAS_HINTER
Definition: ftmodapi.h:119
#define FT_MODULE_DRIVER_SCALABLE
Definition: ftmodapi.h:115
ps_property_get(FT_Module module, const char *property_name, void *value)
Definition: ftpsprop.c:231
ft_service_list_lookup(FT_ServiceDesc service_descriptors, const char *service_id)
Definition: ftobjs.c:98
#define ft_memcpy
Definition: ftstdlib.h:82
#define ft_strcmp
Definition: ftstdlib.h:86
#define ft_strlen
Definition: ftstdlib.h:88
signed char FT_Char
Definition: fttypes.h:143
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
unsigned long FT_ULong
Definition: fttypes.h:253
unsigned char FT_Byte
Definition: fttypes.h:154
signed long FT_Fixed
Definition: fttypes.h:288
int FT_Error
Definition: fttypes.h:300
signed long FT_Long
Definition: fttypes.h:242
unsigned short FT_UShort
Definition: fttypes.h:209
char FT_String
Definition: fttypes.h:187
signed short FT_Short
Definition: fttypes.h:198
unsigned int FT_UInt
Definition: fttypes.h:231
signed int FT_Int
Definition: fttypes.h:220
GLuint buffer
Definition: glext.h:5915
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLuint GLfloat * val
Definition: glext.h:7180
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
FT_BEGIN_HEADER struct PS_DriverRec_ PS_DriverRec
FT_Pos xMin
Definition: ftimage.h:117
FT_Pos yMax
Definition: ftimage.h:118
FT_Pos yMin
Definition: ftimage.h:117
FT_Pos xMax
Definition: ftimage.h:118
FT_Fixed xx
Definition: fttypes.h:387
FT_Fixed yx
Definition: fttypes.h:388
FT_Fixed yy
Definition: fttypes.h:388
FT_Fixed xy
Definition: fttypes.h:387
FT_Pos x
Definition: ftimage.h:76
FT_Pos y
Definition: ftimage.h:77
FT_UShort fs_type
Definition: t1types.h:89
FT_Byte num_snap_widths
Definition: t1tables.h:161
FT_Byte num_other_blues
Definition: t1tables.h:144
FT_UShort standard_width[1]
Definition: t1tables.h:158
FT_Byte num_family_blues
Definition: t1tables.h:145
FT_Int blue_fuzz
Definition: t1tables.h:156
FT_Long password
Definition: t1tables.h:172
FT_Short snap_heights[13]
Definition: t1tables.h:167
FT_Short snap_widths[13]
Definition: t1tables.h:166
FT_Bool force_bold
Definition: t1tables.h:163
FT_Byte num_snap_heights
Definition: t1tables.h:162
FT_Short other_blues[10]
Definition: t1tables.h:149
FT_Byte num_family_other_blues
Definition: t1tables.h:146
FT_Int lenIV
Definition: t1tables.h:141
FT_UShort standard_height[1]
Definition: t1tables.h:159
FT_Bool round_stem_up
Definition: t1tables.h:164
FT_Short family_blues[14]
Definition: t1tables.h:151
FT_Int blue_shift
Definition: t1tables.h:155
FT_Short family_other_blues[10]
Definition: t1tables.h:152
FT_Short blue_values[14]
Definition: t1tables.h:148
FT_Byte num_blue_values
Definition: t1tables.h:143
FT_Int unique_id
Definition: t1tables.h:140
FT_Fixed blue_scale
Definition: t1tables.h:154
FT_Short min_feature[2]
Definition: t1tables.h:174
FT_Long language_group
Definition: t1tables.h:171
T1_FontRec type1
Definition: t1types.h:203
PS_PrivateRec private_dict
Definition: t1types.h:98
T1_EncodingType encoding_type
Definition: t1types.h:101
PS_FontInfoRec font_info
Definition: t1types.h:96
FT_Byte ** subrs
Definition: t1types.h:109
FT_Int num_glyphs
Definition: t1types.h:113
FT_UInt * charstrings_len
Definition: t1types.h:116
FT_String ** glyph_names
Definition: t1types.h:114
T1_EncodingRec encoding
Definition: t1types.h:102
FT_Byte paint_type
Definition: t1types.h:118
FT_BBox font_bbox
Definition: t1types.h:122
FT_String * font_name
Definition: t1types.h:99
FT_Matrix font_matrix
Definition: t1types.h:120
FT_Int num_subrs
Definition: t1types.h:108
PS_FontExtraRec font_extra
Definition: t1types.h:97
FT_Hash subrs_hash
Definition: t1types.h:111
FT_Byte font_type
Definition: t1types.h:119
FT_Byte ** charstrings
Definition: t1types.h:115
FT_UInt * subrs_len
Definition: t1types.h:110
Definition: copy.c:22
#define FT_SERVICE_ID_FONT_FORMAT
Definition: svfntfmt.h:34
#define FT_FONT_FORMAT_TYPE_1
Definition: svfntfmt.h:37
#define FT_SERVICE_ID_GLYPH_DICT
Definition: svgldict.h:34
FT_UInt(* FT_GlyphDict_NameIndexFunc)(FT_Face face, FT_String *glyph_name)
Definition: svgldict.h:44
FT_Error(* FT_GlyphDict_GetNameFunc)(FT_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max)
Definition: svgldict.h:38
#define FT_SERVICE_ID_KERNING
Definition: svkern.h:28
FT_Error(* FT_Set_Instance_Func)(FT_Face face, FT_UInt instance_index)
Definition: svmm.h:71
FT_Error(* FT_Set_MM_Blend_Func)(FT_Face face, FT_UInt num_coords, FT_Long *coords)
Definition: svmm.h:61
FT_Error(* FT_Get_MM_Func)(FT_Face face, FT_Multi_Master *master)
Definition: svmm.h:39
FT_Error(* FT_Set_MM_Design_Func)(FT_Face face, FT_UInt num_coords, FT_Long *coords)
Definition: svmm.h:47
FT_Error(* FT_Get_MM_Var_Func)(FT_Face face, FT_MM_Var **master)
Definition: svmm.h:43
FT_Error(* FT_Get_MM_Blend_Func)(FT_Face face, FT_UInt num_coords, FT_Long *coords)
Definition: svmm.h:75
#define FT_SERVICE_ID_MULTI_MASTERS
Definition: svmm.h:35
void(* FT_Done_Blend_Func)(FT_Face)
Definition: svmm.h:87
FT_Error(* FT_Get_Var_Blend_Func)(FT_Face face, FT_UInt *num_coords, FT_Fixed **coords, FT_Fixed **normalizedcoords, FT_MM_Var **mm_var)
Definition: svmm.h:80
FT_Error(* FT_Get_Var_Design_Func)(FT_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: svmm.h:66
FT_Error(* FT_Set_Var_Design_Func)(FT_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: svmm.h:54
#define FT_SERVICE_ID_POSTSCRIPT_FONT_NAME
Definition: svpostnm.h:37
const char *(* FT_PsName_GetFunc)(FT_Face face)
Definition: svpostnm.h:41
#define FT_DEFINE_SERVICE_PROPERTIESREC(class_, set_property_, get_property_)
Definition: svprop.h:50
FT_Error(* FT_Properties_GetFunc)(FT_Module module, const char *property_name, void *value)
Definition: svprop.h:36
FT_Error(* FT_Properties_SetFunc)(FT_Module module, const char *property_name, const void *value, FT_Bool value_is_string)
Definition: svprop.h:30
#define FT_SERVICE_ID_PROPERTIES
Definition: svprop.h:26
FT_Long(* PS_GetFontValueFunc)(FT_Face face, PS_Dict_Keys key, FT_UInt idx, void *value, FT_Long value_len)
Definition: svpsinfo.h:48
FT_Error(* PS_GetFontInfoFunc)(FT_Face face, PS_FontInfoRec *afont_info)
Definition: svpsinfo.h:33
FT_Int(* PS_HasGlyphNamesFunc)(FT_Face face)
Definition: svpsinfo.h:41
FT_Error(* PS_GetFontExtraFunc)(FT_Face face, PS_FontExtraRec *afont_extra)
Definition: svpsinfo.h:37
FT_Error(* PS_GetFontPrivateFunc)(FT_Face face, PS_PrivateRec *afont_private)
Definition: svpsinfo.h:44
#define FT_SERVICE_ID_POSTSCRIPT_INFO
Definition: svpsinfo.h:29
T1_Get_Kerning(AFM_FontInfo fi, FT_UInt glyph1, FT_UInt glyph2, FT_Vector *kerning)
Definition: t1afm.c:330
T1_Read_Metrics(FT_Face t1_face, FT_Stream stream)
Definition: t1afm.c:236
T1_Get_Track_Kerning(FT_Face face, FT_Fixed ptsize, FT_Int degree, FT_Fixed *kerning)
Definition: t1afm.c:371
static const char * t1_get_ps_name(T1_Face face)
Definition: t1driver.c:105
FT_CALLBACK_TABLE_DEF const FT_Driver_ClassRec t1_driver_class
Definition: t1driver.c:726
static FT_Error t1_ps_get_font_private(FT_Face face, PS_PrivateRec *afont_private)
Definition: t1driver.c:175
static FT_Error t1_get_glyph_name(T1_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max)
Definition: t1driver.c:61
static const FT_Service_PsFontNameRec t1_service_ps_name
Definition: t1driver.c:111
static const FT_Service_GlyphDictRec t1_service_glyph_dict
Definition: t1driver.c:92
static FT_Int t1_ps_has_glyph_names(FT_Face face)
Definition: t1driver.c:166
static const FT_Service_PsInfoRec t1_service_ps_info
Definition: t1driver.c:602
static FT_Error t1_ps_get_font_extra(FT_Face face, PS_FontExtraRec *afont_extra)
Definition: t1driver.c:156
static FT_Error Get_Kerning(FT_Face t1face, FT_UInt left_glyph, FT_UInt right_glyph, FT_Vector *kerning)
Definition: t1driver.c:701
static FT_Long t1_ps_get_font_value(FT_Face face, PS_Dict_Keys key, FT_UInt idx, void *value, FT_Long value_len_)
Definition: t1driver.c:185
static FT_Error t1_ps_get_font_info(FT_Face face, PS_FontInfoRec *afont_info)
Definition: t1driver.c:146
static const FT_Service_MultiMastersRec t1_service_multi_masters
Definition: t1driver.c:123
static FT_UInt t1_get_name_index(T1_Face face, FT_String *glyph_name)
Definition: t1driver.c:73
Get_Interface(FT_Module module, const FT_String *t1_interface)
Definition: t1driver.c:657
static const FT_Service_KerningRec t1_service_kerning
Definition: t1driver.c:613
T1_Get_Advances(FT_Face t1face, FT_UInt first, FT_UInt count, FT_Int32 load_flags, FT_Fixed *advances)
Definition: t1gload.c:292
T1_Load_Glyph(FT_GlyphSlot t1glyph, FT_Size t1size, FT_UInt glyph_index, FT_Int32 load_flags)
Definition: t1gload.c:375
T1_Reset_MM_Blend(T1_Face face, FT_UInt instance_index)
Definition: t1load.c:567
T1_Get_Var_Design(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: t1load.c:601
T1_Get_MM_Blend(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: t1load.c:445
T1_Set_Var_Design(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: t1load.c:582
T1_Set_MM_Blend(T1_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: t1load.c:424
T1_Done_Blend(T1_Face face)
Definition: t1load.c:637
T1_Set_MM_Design(T1_Face face, FT_UInt num_coords, FT_Long *coords)
Definition: t1load.c:480
T1_Get_MM_Var(T1_Face face, FT_MM_Var **master)
Definition: t1load.c:302
T1_Get_Multi_Master(T1_Face face, FT_Multi_Master *master)
Definition: t1load.c:192
T1_Face_Init(FT_Stream stream, FT_Face t1face, FT_Int face_index, FT_Int num_params, FT_Parameter *params)
Definition: t1objs.c:301
T1_Driver_Init(FT_Module module)
Definition: t1objs.c:582
T1_GlyphSlot_Done(FT_GlyphSlot slot)
Definition: t1objs.c:143
T1_Size_Done(FT_Size t1size)
Definition: t1objs.c:73
T1_Driver_Done(FT_Module driver)
Definition: t1objs.c:635
T1_Size_Request(FT_Size t1size, FT_Size_Request req)
Definition: t1objs.c:117
T1_Size_Init(FT_Size t1size)
Definition: t1objs.c:93
T1_Face_Done(FT_Face t1face)
Definition: t1objs.c:199
T1_GlyphSlot_Init(FT_GlyphSlot slot)
Definition: t1objs.c:150
struct T1_GlyphSlotRec_ T1_GlyphSlotRec
@ T1_ENCODING_TYPE_ARRAY
Definition: t1tables.h:563
@ PS_DICT_ITALIC_ANGLE
Definition: t1tables.h:683
@ PS_DICT_FONT_BBOX
Definition: t1tables.h:636
@ PS_DICT_NUM_BLUE_VALUES
Definition: t1tables.h:651
@ PS_DICT_WEIGHT
Definition: t1tables.h:678
@ PS_DICT_BLUE_SHIFT
Definition: t1tables.h:661
@ PS_DICT_FONT_NAME
Definition: t1tables.h:638
@ PS_DICT_NUM_STEM_SNAP_V
Definition: t1tables.h:664
@ PS_DICT_SUBR
Definition: t1tables.h:648
@ PS_DICT_PASSWORD
Definition: t1tables.h:670
@ PS_DICT_NUM_CHAR_STRINGS
Definition: t1tables.h:640
@ PS_DICT_STEM_SNAP_H
Definition: t1tables.h:663
@ PS_DICT_NUM_STEM_SNAP_H
Definition: t1tables.h:662
@ PS_DICT_BLUE_SCALE
Definition: t1tables.h:660
@ PS_DICT_ENCODING_ENTRY
Definition: t1tables.h:644
@ PS_DICT_FS_TYPE
Definition: t1tables.h:682
@ PS_DICT_FONT_MATRIX
Definition: t1tables.h:635
@ PS_DICT_NUM_FAMILY_OTHER_BLUES
Definition: t1tables.h:658
@ PS_DICT_IS_FIXED_PITCH
Definition: t1tables.h:679
@ PS_DICT_FAMILY_OTHER_BLUE
Definition: t1tables.h:659
@ PS_DICT_LANGUAGE_GROUP
Definition: t1tables.h:671
@ PS_DICT_NUM_SUBRS
Definition: t1tables.h:647
@ PS_DICT_FAMILY_NAME
Definition: t1tables.h:677
@ PS_DICT_LEN_IV
Definition: t1tables.h:669
@ PS_DICT_FONT_TYPE
Definition: t1tables.h:634
@ PS_DICT_FULL_NAME
Definition: t1tables.h:676
@ PS_DICT_STD_HW
Definition: t1tables.h:649
@ PS_DICT_NUM_FAMILY_BLUES
Definition: t1tables.h:656
@ PS_DICT_BLUE_VALUE
Definition: t1tables.h:652
@ PS_DICT_MIN_FEATURE
Definition: t1tables.h:668
@ PS_DICT_NOTICE
Definition: t1tables.h:675
@ PS_DICT_STEM_SNAP_V
Definition: t1tables.h:665
@ PS_DICT_NUM_OTHER_BLUES
Definition: t1tables.h:654
@ PS_DICT_STD_VW
Definition: t1tables.h:650
@ PS_DICT_ENCODING_TYPE
Definition: t1tables.h:643
@ PS_DICT_FORCE_BOLD
Definition: t1tables.h:666
@ PS_DICT_BLUE_FUZZ
Definition: t1tables.h:653
@ PS_DICT_CHAR_STRING_KEY
Definition: t1tables.h:641
@ PS_DICT_UNDERLINE_POSITION
Definition: t1tables.h:680
@ PS_DICT_UNDERLINE_THICKNESS
Definition: t1tables.h:681
@ PS_DICT_VERSION
Definition: t1tables.h:674
@ PS_DICT_RND_STEM_UP
Definition: t1tables.h:667
@ PS_DICT_CHAR_STRING
Definition: t1tables.h:642
@ PS_DICT_OTHER_BLUE
Definition: t1tables.h:655
@ PS_DICT_UNIQUE_ID
Definition: t1tables.h:639
@ PS_DICT_PAINT_TYPE
Definition: t1tables.h:637
@ PS_DICT_FAMILY_BLUE
Definition: t1tables.h:657
enum PS_Dict_Keys_ PS_Dict_Keys
FT_BEGIN_HEADER struct PS_FontInfoRec_ PS_FontInfoRec
enum T1_EncodingType_ T1_EncodingType
struct T1_FaceRec_ T1_FaceRec
struct T1_FaceRec_ * T1_Face
Definition: t1types.h:196
FT_UInt FT_UInt FT_Vector * kerning
Definition: ttdriver.c:204
FT_UInt left_glyph
Definition: ttdriver.c:201
FT_UInt FT_UInt right_glyph
Definition: ttdriver.c:202
Definition: pdh_main.c:94
#define const
Definition: zconf.h:233