ReactOS  0.4.13-dev-563-g0561610
cffdrivr.c
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* cffdrivr.c */
4 /* */
5 /* OpenType font driver implementation (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 FT_FREETYPE_H
21 #include FT_INTERNAL_DEBUG_H
22 #include FT_INTERNAL_STREAM_H
23 #include FT_INTERNAL_SFNT_H
24 #include FT_INTERNAL_POSTSCRIPT_AUX_H
25 #include FT_INTERNAL_POSTSCRIPT_PROPS_H
26 #include FT_SERVICE_CID_H
27 #include FT_SERVICE_POSTSCRIPT_INFO_H
28 #include FT_SERVICE_POSTSCRIPT_NAME_H
29 #include FT_SERVICE_TT_CMAP_H
30 #include FT_SERVICE_CFF_TABLE_LOAD_H
31 
32 #include "cffdrivr.h"
33 #include "cffgload.h"
34 #include "cffload.h"
35 #include "cffcmap.h"
36 #include "cffparse.h"
37 #include "cffobjs.h"
38 
39 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
40 #include FT_SERVICE_MULTIPLE_MASTERS_H
41 #include FT_SERVICE_METRICS_VARIATIONS_H
42 #endif
43 
44 #include "cfferrs.h"
45 #include "cffpic.h"
46 
47 #include FT_SERVICE_FONT_FORMAT_H
48 #include FT_SERVICE_GLYPH_DICT_H
49 #include FT_SERVICE_PROPERTIES_H
50 #include FT_DRIVER_H
51 
52 
53  /*************************************************************************/
54  /* */
55  /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
56  /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
57  /* messages during execution. */
58  /* */
59 #undef FT_COMPONENT
60 #define FT_COMPONENT trace_cffdriver
61 
62 
63  /*************************************************************************/
64  /*************************************************************************/
65  /*************************************************************************/
66  /**** ****/
67  /**** ****/
68  /**** F A C E S ****/
69  /**** ****/
70  /**** ****/
71  /*************************************************************************/
72  /*************************************************************************/
73  /*************************************************************************/
74 
75 
76  /*************************************************************************/
77  /* */
78  /* <Function> */
79  /* cff_get_kerning */
80  /* */
81  /* <Description> */
82  /* A driver method used to return the kerning vector between two */
83  /* glyphs of the same face. */
84  /* */
85  /* <Input> */
86  /* face :: A handle to the source face object. */
87  /* */
88  /* left_glyph :: The index of the left glyph in the kern pair. */
89  /* */
90  /* right_glyph :: The index of the right glyph in the kern pair. */
91  /* */
92  /* <Output> */
93  /* kerning :: The kerning vector. This is in font units for */
94  /* scalable formats, and in pixels for fixed-sizes */
95  /* formats. */
96  /* */
97  /* <Return> */
98  /* FreeType error code. 0 means success. */
99  /* */
100  /* <Note> */
101  /* Only horizontal layouts (left-to-right & right-to-left) are */
102  /* supported by this function. Other layouts, or more sophisticated */
103  /* kernings, are out of scope of this method (the basic driver */
104  /* interface is meant to be simple). */
105  /* */
106  /* They can be implemented by format-specific interfaces. */
107  /* */
109  cff_get_kerning( FT_Face ttface, /* TT_Face */
112  FT_Vector* kerning )
113  {
114  TT_Face face = (TT_Face)ttface;
116 
117 
118  kerning->x = 0;
119  kerning->y = 0;
120 
121  if ( sfnt )
123 
124  return FT_Err_Ok;
125  }
126 
127 
128  /*************************************************************************/
129  /* */
130  /* <Function> */
131  /* cff_glyph_load */
132  /* */
133  /* <Description> */
134  /* A driver method used to load a glyph within a given glyph slot. */
135  /* */
136  /* <Input> */
137  /* slot :: A handle to the target slot object where the glyph */
138  /* will be loaded. */
139  /* */
140  /* size :: A handle to the source face size at which the glyph */
141  /* must be scaled, loaded, etc. */
142  /* */
143  /* glyph_index :: The index of the glyph in the font file. */
144  /* */
145  /* load_flags :: A flag indicating what to load for this glyph. The */
146  /* FT_LOAD_??? constants can be used to control the */
147  /* glyph loading process (e.g., whether the outline */
148  /* should be scaled, whether to load bitmaps or not, */
149  /* whether to hint the outline, etc). */
150  /* */
151  /* <Return> */
152  /* FreeType error code. 0 means success. */
153  /* */
155  cff_glyph_load( FT_GlyphSlot cffslot, /* CFF_GlyphSlot */
156  FT_Size cffsize, /* CFF_Size */
157  FT_UInt glyph_index,
158  FT_Int32 load_flags )
159  {
160  FT_Error error;
161  CFF_GlyphSlot slot = (CFF_GlyphSlot)cffslot;
162  CFF_Size size = (CFF_Size)cffsize;
163 
164 
165  if ( !slot )
166  return FT_THROW( Invalid_Slot_Handle );
167 
168  FT_TRACE1(( "cff_glyph_load: glyph index %d\n", glyph_index ));
169 
170  /* check whether we want a scaled outline or bitmap */
171  if ( !size )
172  load_flags |= FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
173 
174  /* reset the size object if necessary */
175  if ( load_flags & FT_LOAD_NO_SCALE )
176  size = NULL;
177 
178  if ( size )
179  {
180  /* these two objects must have the same parent */
181  if ( cffsize->face != cffslot->face )
182  return FT_THROW( Invalid_Face_Handle );
183  }
184 
185  /* now load the glyph outline if necessary */
186  error = cff_slot_load( slot, size, glyph_index, load_flags );
187 
188  /* force drop-out mode to 2 - irrelevant now */
189  /* slot->outline.dropout_mode = 2; */
190 
191  return error;
192  }
193 
194 
197  FT_UInt start,
198  FT_UInt count,
199  FT_Int32 flags,
200  FT_Fixed* advances )
201  {
202  FT_UInt nn;
204  FT_GlyphSlot slot = face->glyph;
205 
206 
207  if ( FT_IS_SFNT( face ) )
208  {
209  /* OpenType 1.7 mandates that the data from `hmtx' table be used; */
210  /* it is no longer necessary that those values are identical to */
211  /* the values in the `CFF' table */
212 
213  TT_Face ttface = (TT_Face)face;
214  FT_Short dummy;
215 
216 
218  {
219 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
220  /* no fast retrieval for blended MM fonts without VVAR table */
221  if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) &&
222  !( ttface->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
223  return FT_THROW( Unimplemented_Feature );
224 #endif
225 
226  /* check whether we have data from the `vmtx' table at all; */
227  /* otherwise we extract the info from the CFF glyphstrings */
228  /* (instead of synthesizing a global value using the `OS/2' */
229  /* table) */
230  if ( !ttface->vertical_info )
231  goto Missing_Table;
232 
233  for ( nn = 0; nn < count; nn++ )
234  {
235  FT_UShort ah;
236 
237 
238  ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
239  1,
240  start + nn,
241  &dummy,
242  &ah );
243 
244  FT_TRACE5(( " idx %d: advance height %d font unit%s\n",
245  start + nn,
246  ah,
247  ah == 1 ? "" : "s" ));
248  advances[nn] = ah;
249  }
250  }
251  else
252  {
253 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
254  /* no fast retrieval for blended MM fonts without HVAR table */
255  if ( ( FT_IS_NAMED_INSTANCE( face ) || FT_IS_VARIATION( face ) ) &&
256  !( ttface->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
257  return FT_THROW( Unimplemented_Feature );
258 #endif
259 
260  /* check whether we have data from the `hmtx' table at all */
261  if ( !ttface->horizontal.number_Of_HMetrics )
262  goto Missing_Table;
263 
264  for ( nn = 0; nn < count; nn++ )
265  {
266  FT_UShort aw;
267 
268 
269  ( (SFNT_Service)ttface->sfnt )->get_metrics( ttface,
270  0,
271  start + nn,
272  &dummy,
273  &aw );
274 
275  FT_TRACE5(( " idx %d: advance width %d font unit%s\n",
276  start + nn,
277  aw,
278  aw == 1 ? "" : "s" ));
279  advances[nn] = aw;
280  }
281  }
282 
283  return error;
284  }
285 
286  Missing_Table:
287  flags |= (FT_UInt32)FT_LOAD_ADVANCE_ONLY;
288 
289  for ( nn = 0; nn < count; nn++ )
290  {
291  error = cff_glyph_load( slot, face->size, start + nn, flags );
292  if ( error )
293  break;
294 
295  advances[nn] = ( flags & FT_LOAD_VERTICAL_LAYOUT )
296  ? slot->linearVertAdvance
297  : slot->linearHoriAdvance;
298  }
299 
300  return error;
301  }
302 
303 
304  /*
305  * GLYPH DICT SERVICE
306  *
307  */
308 
309  static FT_Error
311  FT_UInt glyph_index,
313  FT_UInt buffer_max )
314  {
315  CFF_Font font = (CFF_Font)face->extra.data;
316  FT_String* gname;
317  FT_UShort sid;
318  FT_Error error;
319 
320 
321  /* CFF2 table does not have glyph names; */
322  /* we need to use `post' table method */
323  if ( font->version_major == 2 )
324  {
326  FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
327  FT_Service_GlyphDict service =
328  (FT_Service_GlyphDict)ft_module_get_service(
329  sfnt_module,
331  0 );
332 
333 
334  if ( service && service->get_name )
335  return service->get_name( FT_FACE( face ),
336  glyph_index,
337  buffer,
338  buffer_max );
339  else
340  {
341  FT_ERROR(( "cff_get_glyph_name:"
342  " cannot get glyph name from a CFF2 font\n"
343  " "
344  " without the `PSNames' module\n" ));
345  error = FT_THROW( Missing_Module );
346  goto Exit;
347  }
348  }
349 
350  if ( !font->psnames )
351  {
352  FT_ERROR(( "cff_get_glyph_name:"
353  " cannot get glyph name from CFF & CEF fonts\n"
354  " "
355  " without the `PSNames' module\n" ));
356  error = FT_THROW( Missing_Module );
357  goto Exit;
358  }
359 
360  /* first, locate the sid in the charset table */
361  sid = font->charset.sids[glyph_index];
362 
363  /* now, lookup the name itself */
364  gname = cff_index_get_sid_string( font, sid );
365 
366  if ( gname )
367  FT_STRCPYN( buffer, gname, buffer_max );
368 
369  error = FT_Err_Ok;
370 
371  Exit:
372  return error;
373  }
374 
375 
376  static FT_UInt
378  FT_String* glyph_name )
379  {
380  CFF_Font cff;
382  FT_Service_PsCMaps psnames;
383  FT_String* name;
384  FT_UShort sid;
385  FT_UInt i;
386 
387 
388  cff = (CFF_FontRec *)face->extra.data;
389  charset = &cff->charset;
390 
391  /* CFF2 table does not have glyph names; */
392  /* we need to use `post' table method */
393  if ( cff->version_major == 2 )
394  {
396  FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
397  FT_Service_GlyphDict service =
398  (FT_Service_GlyphDict)ft_module_get_service(
399  sfnt_module,
401  0 );
402 
403 
404  if ( service && service->name_index )
405  return service->name_index( FT_FACE( face ), glyph_name );
406  else
407  {
408  FT_ERROR(( "cff_get_name_index:"
409  " cannot get glyph index from a CFF2 font\n"
410  " "
411  " without the `PSNames' module\n" ));
412  return 0;
413  }
414  }
415 
416  FT_FACE_FIND_GLOBAL_SERVICE( face, psnames, POSTSCRIPT_CMAPS );
417  if ( !psnames )
418  return 0;
419 
420  for ( i = 0; i < cff->num_glyphs; i++ )
421  {
422  sid = charset->sids[i];
423 
424  if ( sid > 390 )
425  name = cff_index_get_string( cff, sid - 391 );
426  else
427  name = (FT_String *)psnames->adobe_std_strings( sid );
428 
429  if ( !name )
430  continue;
431 
432  if ( !ft_strcmp( glyph_name, name ) )
433  return i;
434  }
435 
436  return 0;
437  }
438 
439 
441  cff_service_glyph_dict,
442 
445  )
446 
447 
448  /*
449  * POSTSCRIPT INFO SERVICE
450  *
451  */
452 
453  static FT_Int
454  cff_ps_has_glyph_names( FT_Face face )
455  {
456  return ( face->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) > 0;
457  }
458 
459 
460  static FT_Error
462  PS_FontInfoRec* afont_info )
463  {
464  CFF_Font cff = (CFF_Font)face->extra.data;
466 
467 
468  if ( cff && !cff->font_info )
469  {
471  PS_FontInfoRec *font_info = NULL;
472  FT_Memory memory = face->root.memory;
473 
474 
475  if ( FT_ALLOC( font_info, sizeof ( *font_info ) ) )
476  goto Fail;
477 
478  font_info->version = cff_index_get_sid_string( cff,
479  dict->version );
480  font_info->notice = cff_index_get_sid_string( cff,
481  dict->notice );
482  font_info->full_name = cff_index_get_sid_string( cff,
483  dict->full_name );
484  font_info->family_name = cff_index_get_sid_string( cff,
485  dict->family_name );
486  font_info->weight = cff_index_get_sid_string( cff,
487  dict->weight );
488  font_info->italic_angle = dict->italic_angle;
489  font_info->is_fixed_pitch = dict->is_fixed_pitch;
490  font_info->underline_position = (FT_Short)dict->underline_position;
491  font_info->underline_thickness = (FT_UShort)dict->underline_thickness;
492 
493  cff->font_info = font_info;
494  }
495 
496  if ( cff )
497  *afont_info = *cff->font_info;
498 
499  Fail:
500  return error;
501  }
502 
503 
504  static FT_Error
506  PS_FontExtraRec* afont_extra )
507  {
508  CFF_Font cff = (CFF_Font)face->extra.data;
510 
511 
512  if ( cff && cff->font_extra == NULL )
513  {
515  PS_FontExtraRec* font_extra = NULL;
516  FT_Memory memory = face->root.memory;
517  FT_String* embedded_postscript;
518 
519 
520  if ( FT_ALLOC( font_extra, sizeof ( *font_extra ) ) )
521  goto Fail;
522 
523  font_extra->fs_type = 0U;
524 
525  embedded_postscript = cff_index_get_sid_string(
526  cff,
527  dict->embedded_postscript );
528  if ( embedded_postscript )
529  {
530  FT_String* start_fstype;
531  FT_String* start_def;
532 
533 
534  /* Identify the XYZ integer in `/FSType XYZ def' substring. */
535  if ( ( start_fstype = ft_strstr( embedded_postscript,
536  "/FSType" ) ) != NULL &&
537  ( start_def = ft_strstr( start_fstype +
538  sizeof ( "/FSType" ) - 1,
539  "def" ) ) != NULL )
540  {
541  FT_String* s;
542 
543 
544  for ( s = start_fstype + sizeof ( "/FSType" ) - 1;
545  s != start_def;
546  s++ )
547  {
548  if ( *s >= '0' && *s <= '9' )
549  {
550  if ( font_extra->fs_type >= ( FT_USHORT_MAX - 9 ) / 10 )
551  {
552  /* Overflow - ignore the FSType value. */
553  font_extra->fs_type = 0U;
554  break;
555  }
556 
557  font_extra->fs_type *= 10;
558  font_extra->fs_type += (FT_UShort)( *s - '0' );
559  }
560  else if ( *s != ' ' && *s != '\n' && *s != '\r' )
561  {
562  /* Non-whitespace character between `/FSType' and next `def' */
563  /* - ignore the FSType value. */
564  font_extra->fs_type = 0U;
565  break;
566  }
567  }
568  }
569  }
570 
571  cff->font_extra = font_extra;
572  }
573 
574  if ( cff )
575  *afont_extra = *cff->font_extra;
576 
577  Fail:
578  return error;
579  }
580 
581 
583  cff_service_ps_info,
584 
585  (PS_GetFontInfoFunc) cff_ps_get_font_info, /* ps_get_font_info */
586  (PS_GetFontExtraFunc) cff_ps_get_font_extra, /* ps_get_font_extra */
587  (PS_HasGlyphNamesFunc) cff_ps_has_glyph_names, /* ps_has_glyph_names */
588  /* unsupported with CFF fonts */
589  (PS_GetFontPrivateFunc)NULL, /* ps_get_font_private */
590  /* not implemented */
591  (PS_GetFontValueFunc) NULL /* ps_get_font_value */
592  )
593 
594 
595  /*
596  * POSTSCRIPT NAME SERVICE
597  *
598  */
599 
600  static const char*
601  cff_get_ps_name( CFF_Face face )
602  {
603  CFF_Font cff = (CFF_Font)face->extra.data;
605 
606 
607  /* following the OpenType specification 1.7, we return the name stored */
608  /* in the `name' table for a CFF wrapped into an SFNT container */
609 
610  if ( FT_IS_SFNT( FT_FACE( face ) ) && sfnt )
611  {
613  FT_Module sfnt_module = FT_Get_Module( library, "sfnt" );
614  FT_Service_PsFontName service =
615  (FT_Service_PsFontName)ft_module_get_service(
616  sfnt_module,
618  0 );
619 
620 
621  if ( service && service->get_ps_font_name )
622  return service->get_ps_font_name( FT_FACE( face ) );
623  }
624 
625  return (const char*)cff->font_name;
626  }
627 
628 
630  cff_service_ps_name,
631 
632  (FT_PsName_GetFunc)cff_get_ps_name /* get_ps_font_name */
633  )
634 
635 
636  /*
637  * TT CMAP INFO
638  *
639  * If the charmap is a synthetic Unicode encoding cmap or
640  * a Type 1 standard (or expert) encoding cmap, hide TT CMAP INFO
641  * service defined in SFNT module.
642  *
643  * Otherwise call the service function in the sfnt module.
644  *
645  */
646  static FT_Error
647  cff_get_cmap_info( FT_CharMap charmap,
649  {
650  FT_CMap cmap = FT_CMAP( charmap );
652 
655 
656 
659  {
660  FT_Module sfnt = FT_Get_Module( library, "sfnt" );
661  FT_Service_TTCMaps service =
662  (FT_Service_TTCMaps)ft_module_get_service( sfnt,
664  0 );
665 
666 
667  if ( service && service->get_cmap_info )
668  error = service->get_cmap_info( charmap, cmap_info );
669  }
670  else
671  error = FT_THROW( Invalid_CharMap_Format );
672 
673  return error;
674  }
675 
676 
678  cff_service_get_cmap_info,
679 
680  (TT_CMap_Info_GetFunc)cff_get_cmap_info /* get_cmap_info */
681  )
682 
683 
684  /*
685  * CID INFO SERVICE
686  *
687  */
688  static FT_Error
689  cff_get_ros( CFF_Face face,
690  const char* *registry,
691  const char* *ordering,
692  FT_Int *supplement )
693  {
695  CFF_Font cff = (CFF_Font)face->extra.data;
696 
697 
698  if ( cff )
699  {
701 
702 
703  if ( dict->cid_registry == 0xFFFFU )
704  {
705  error = FT_THROW( Invalid_Argument );
706  goto Fail;
707  }
708 
709  if ( registry )
710  {
711  if ( !cff->registry )
713  dict->cid_registry );
714  *registry = cff->registry;
715  }
716 
717  if ( ordering )
718  {
719  if ( !cff->ordering )
721  dict->cid_ordering );
722  *ordering = cff->ordering;
723  }
724 
725  /*
726  * XXX: According to Adobe TechNote #5176, the supplement in CFF
727  * can be a real number. We truncate it to fit public API
728  * since freetype-2.3.6.
729  */
730  if ( supplement )
731  {
732  if ( dict->cid_supplement < FT_INT_MIN ||
733  dict->cid_supplement > FT_INT_MAX )
734  FT_TRACE1(( "cff_get_ros: too large supplement %d is truncated\n",
735  dict->cid_supplement ));
736  *supplement = (FT_Int)dict->cid_supplement;
737  }
738  }
739 
740  Fail:
741  return error;
742  }
743 
744 
745  static FT_Error
747  FT_Bool *is_cid )
748  {
750  CFF_Font cff = (CFF_Font)face->extra.data;
751 
752 
753  *is_cid = 0;
754 
755  if ( cff )
756  {
758 
759 
760  if ( dict->cid_registry != 0xFFFFU )
761  *is_cid = 1;
762  }
763 
764  return error;
765  }
766 
767 
768  static FT_Error
770  FT_UInt glyph_index,
771  FT_UInt *cid )
772  {
774  CFF_Font cff;
775 
776 
777  cff = (CFF_Font)face->extra.data;
778 
779  if ( cff )
780  {
781  FT_UInt c;
783 
784 
785  if ( dict->cid_registry == 0xFFFFU )
786  {
787  error = FT_THROW( Invalid_Argument );
788  goto Fail;
789  }
790 
791  if ( glyph_index > cff->num_glyphs )
792  {
793  error = FT_THROW( Invalid_Argument );
794  goto Fail;
795  }
796 
797  c = cff->charset.sids[glyph_index];
798 
799  if ( cid )
800  *cid = c;
801  }
802 
803  Fail:
804  return error;
805  }
806 
807 
809  cff_service_cid_info,
810 
812  cff_get_ros, /* get_ros */
814  cff_get_is_cid, /* get_is_cid */
816  cff_get_cid_from_glyph_index /* get_cid_from_glyph_index */
817  )
818 
819 
820  /*
821  * PROPERTY SERVICE
822  *
823  */
824 
826  cff_service_properties,
827 
829  (FT_Properties_GetFunc)ps_property_get ) /* get_property */
830 
831 
832 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
833 
834  /*
835  * MULTIPLE MASTER SERVICE
836  *
837  */
838 
839  static FT_Error
840  cff_set_mm_blend( CFF_Face face,
841  FT_UInt num_coords,
842  FT_Fixed* coords )
843  {
844  FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
845 
846 
847  return mm->set_mm_blend( FT_FACE( face ), num_coords, coords );
848  }
849 
850 
851  static FT_Error
852  cff_get_mm_blend( CFF_Face face,
853  FT_UInt num_coords,
854  FT_Fixed* coords )
855  {
856  FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
857 
858 
859  return mm->get_mm_blend( FT_FACE( face ), num_coords, coords );
860  }
861 
862 
863  static FT_Error
864  cff_get_mm_var( CFF_Face face,
865  FT_MM_Var* *master )
866  {
867  FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
868 
869 
870  return mm->get_mm_var( FT_FACE( face ), master );
871  }
872 
873 
874  static FT_Error
875  cff_set_var_design( CFF_Face face,
876  FT_UInt num_coords,
877  FT_Fixed* coords )
878  {
879  FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
880 
881 
882  return mm->set_var_design( FT_FACE( face ), num_coords, coords );
883  }
884 
885 
886  static FT_Error
887  cff_get_var_design( CFF_Face face,
888  FT_UInt num_coords,
889  FT_Fixed* coords )
890  {
891  FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
892 
893 
894  return mm->get_var_design( FT_FACE( face ), num_coords, coords );
895  }
896 
897 
898  static FT_Error
899  cff_set_instance( CFF_Face face,
900  FT_UInt instance_index )
901  {
902  FT_Service_MultiMasters mm = (FT_Service_MultiMasters)face->mm;
903 
904 
905  return mm->set_instance( FT_FACE( face ), instance_index );
906  }
907 
908 
910  cff_service_multi_masters,
911 
912  (FT_Get_MM_Func) NULL, /* get_mm */
913  (FT_Set_MM_Design_Func) NULL, /* set_mm_design */
914  (FT_Set_MM_Blend_Func) cff_set_mm_blend, /* set_mm_blend */
915  (FT_Get_MM_Blend_Func) cff_get_mm_blend, /* get_mm_blend */
916  (FT_Get_MM_Var_Func) cff_get_mm_var, /* get_mm_var */
917  (FT_Set_Var_Design_Func)cff_set_var_design, /* set_var_design */
918  (FT_Get_Var_Design_Func)cff_get_var_design, /* get_var_design */
919  (FT_Set_Instance_Func) cff_set_instance, /* set_instance */
920 
921  (FT_Get_Var_Blend_Func) cff_get_var_blend, /* get_var_blend */
922  (FT_Done_Blend_Func) cff_done_blend /* done_blend */
923  )
924 
925 
926  /*
927  * METRICS VARIATIONS SERVICE
928  *
929  */
930 
931  static FT_Error
932  cff_hadvance_adjust( CFF_Face face,
933  FT_UInt gindex,
934  FT_Int *avalue )
935  {
936  FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
937 
938 
939  return var->hadvance_adjust( FT_FACE( face ), gindex, avalue );
940  }
941 
942 
943  static void
944  cff_metrics_adjust( CFF_Face face )
945  {
946  FT_Service_MetricsVariations var = (FT_Service_MetricsVariations)face->var;
947 
948 
949  var->metrics_adjust( FT_FACE( face ) );
950  }
951 
952 
954  cff_service_metrics_variations,
955 
956  (FT_HAdvance_Adjust_Func)cff_hadvance_adjust, /* hadvance_adjust */
957  (FT_LSB_Adjust_Func) NULL, /* lsb_adjust */
958  (FT_RSB_Adjust_Func) NULL, /* rsb_adjust */
959 
960  (FT_VAdvance_Adjust_Func)NULL, /* vadvance_adjust */
961  (FT_TSB_Adjust_Func) NULL, /* tsb_adjust */
962  (FT_BSB_Adjust_Func) NULL, /* bsb_adjust */
963  (FT_VOrg_Adjust_Func) NULL, /* vorg_adjust */
964 
965  (FT_Metrics_Adjust_Func) cff_metrics_adjust /* metrics_adjust */
966  )
967 #endif
968 
969 
970  /*
971  * CFFLOAD SERVICE
972  *
973  */
974 
976  cff_service_cff_load,
977 
983  )
984 
985 
986  /*************************************************************************/
987  /*************************************************************************/
988  /*************************************************************************/
989  /**** ****/
990  /**** ****/
991  /**** D R I V E R I N T E R F A C E ****/
992  /**** ****/
993  /**** ****/
994  /*************************************************************************/
995  /*************************************************************************/
996  /*************************************************************************/
997 
998 #if !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES && \
999  defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
1001  cff_services,
1002 
1013  )
1014 #elif !defined FT_CONFIG_OPTION_NO_GLYPH_NAMES
1016  cff_services,
1017 
1026  )
1027 #elif defined TT_CONFIG_OPTION_GX_VAR_SUPPORT
1029  cff_services,
1030 
1040  )
1041 #else
1043  cff_services,
1044 
1052  )
1053 #endif
1054 
1055 
1058  const char* module_interface )
1059  {
1061  FT_Module sfnt;
1063 
1064 
1065  /* CFF_SERVICES_GET dereferences `library' in PIC mode */
1066 #ifdef FT_CONFIG_OPTION_PIC
1067  if ( !driver )
1068  return NULL;
1069  library = driver->library;
1070  if ( !library )
1071  return NULL;
1072 #endif
1073 
1075  if ( result )
1076  return result;
1077 
1078  /* `driver' is not yet evaluated in non-PIC mode */
1079 #ifndef FT_CONFIG_OPTION_PIC
1080  if ( !driver )
1081  return NULL;
1082  library = driver->library;
1083  if ( !library )
1084  return NULL;
1085 #endif
1086 
1087  /* we pass our request to the `sfnt' module */
1088  sfnt = FT_Get_Module( library, "sfnt" );
1089 
1090  return sfnt ? sfnt->clazz->get_interface( sfnt, module_interface ) : 0;
1091  }
1092 
1093 
1094  /* The FT_DriverInterface structure is defined in ftdriver.h. */
1095 
1096 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
1097 #define CFF_SIZE_SELECT cff_size_select
1098 #else
1099 #define CFF_SIZE_SELECT 0
1100 #endif
1101 
1103  cff_driver_class,
1104 
1109 
1110  sizeof ( PS_DriverRec ),
1111  "cff",
1112  0x10000L,
1113  0x20000L,
1114 
1115  NULL, /* module-specific interface */
1116 
1117  cff_driver_init, /* FT_Module_Constructor module_init */
1118  cff_driver_done, /* FT_Module_Destructor module_done */
1119  cff_get_interface, /* FT_Module_Requester get_interface */
1120 
1121  sizeof ( TT_FaceRec ),
1122  sizeof ( CFF_SizeRec ),
1123  sizeof ( CFF_GlyphSlotRec ),
1124 
1125  cff_face_init, /* FT_Face_InitFunc init_face */
1126  cff_face_done, /* FT_Face_DoneFunc done_face */
1127  cff_size_init, /* FT_Size_InitFunc init_size */
1128  cff_size_done, /* FT_Size_DoneFunc done_size */
1129  cff_slot_init, /* FT_Slot_InitFunc init_slot */
1130  cff_slot_done, /* FT_Slot_DoneFunc done_slot */
1131 
1132  cff_glyph_load, /* FT_Slot_LoadFunc load_glyph */
1133 
1134  cff_get_kerning, /* FT_Face_GetKerningFunc get_kerning */
1135  NULL, /* FT_Face_AttachFunc attach_file */
1136  cff_get_advances, /* FT_Face_GetAdvancesFunc get_advances */
1137 
1138  cff_size_request, /* FT_Size_RequestFunc request_size */
1139  CFF_SIZE_SELECT /* FT_Size_SelectFunc select_size */
1140  )
1141 
1142 
1143 /* END */
#define FT_ALLOC(ptr, size)
Definition: ftmemory.h:303
#define FT_SERVICE_ID_MULTI_MASTERS
Definition: svmm.h:35
static FT_Error cff_get_cid_from_glyph_index(CFF_Face face, FT_UInt glyph_index, FT_UInt *cid)
Definition: cffdrivr.c:769
cff_face_init(FT_Stream stream, FT_Face cffface, FT_Int face_index, FT_Int num_params, FT_Parameter *params)
Definition: cffobjs.c:490
ft_service_list_lookup(FT_ServiceDesc service_descriptors, const char *service_id)
Definition: ftobjs.c:98
int FT_Error
Definition: fttypes.h:300
cff_get_standard_encoding(FT_UInt charcode)
Definition: cffload.c:192
#define FT_LOAD_VERTICAL_LAYOUT
Definition: freetype.h:3013
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_PROPERTIES
Definition: cffdrivr.c:1018
FT_Bool vertical_info
Definition: tttypes.h:1406
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get & CFF_SERVICE_CID_INFO_GET
Definition: cffdrivr.c:1018
#define TT_FACE_FLAG_VAR_HADVANCE
Definition: tttypes.h:1113
FT_Pos y
Definition: ftimage.h:77
SFNT_Interface * SFNT_Service
Definition: sfnt.h:628
#define CFF_CMAP_UNICODE_CLASS_REC_GET
Definition: cffpic.h:38
FT_Error(* FT_CID_GetIsInternallyCIDKeyedFunc)(FT_Face face, FT_Bool *is_cid)
Definition: svcid.h:36
FT_DEFINE_SERVICE_CIDREC(cff_service_cid_info,(FT_CID_GetRegistryOrderingSupplementFunc) cff_get_ros,(FT_CID_GetIsInternallyCIDKeyedFunc) cff_get_is_cid,(FT_CID_GetCIDFromGlyphIndexFunc) cff_get_cid_from_glyph_index) FT_DEFINE_SERVICE_PROPERTIESREC(cff_service_properties
CFF_Charset charset
Definition: cffcmap.c:138
FT_UInt FT_UInt right_glyph
Definition: ttdriver.c:201
#define ft_strstr
Definition: ftstdlib.h:92
FT_Error(* FT_TSB_Adjust_Func)(FT_Face face, FT_UInt gindex, FT_Int *avalue)
Definition: svmetric.h:61
#define FT_CMAP_FACE(x)
Definition: ftobjs.h:165
#define CFF_SERVICE_CFF_LOAD_GET
Definition: cffpic.h:36
CFF_FontRecDictRec font_dict
Definition: cfftypes.h:300
FT_BEGIN_HEADER typedef TT_Face CFF_Face
Definition: cffotypes.h:33
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get & CFF_SERVICE_GET_CMAP_INFO_GET
Definition: cffdrivr.c:1018
FT_Properties_SetFunc ps_property_set
Definition: cffdrivr.c:828
FT_Error(* FT_RSB_Adjust_Func)(FT_Face face, FT_UInt gindex, FT_Int *avalue)
Definition: svmetric.h:49
#define CFF_SERVICE_MULTI_MASTERS_GET
Definition: cffpic.h:34
FT_UInt cid_registry
Definition: cfftypes.h:210
Definition: mk_font.cpp:20
FT_Pos x
Definition: ftimage.h:76
signed int FT_Int
Definition: fttypes.h:220
SFNT_Service sfnt
Definition: ttdriver.c:206
GLuint GLuint GLsizei count
Definition: gl.h:1545
FT_Error(* FT_Set_MM_Design_Func)(FT_Face face, FT_UInt num_coords, FT_Long *coords)
Definition: svmm.h:47
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_FONT_FORMAT
Definition: cffdrivr.c:1018
#define U(x)
Definition: wordpad.c:44
#define FT_SERVICE_ID_METRICS_VARIATIONS
Definition: svmetric.h:33
static FT_Error cff_get_is_cid(CFF_Face face, FT_Bool *is_cid)
Definition: cffdrivr.c:746
FT_Bool is_fixed_pitch
Definition: cfftypes.h:188
cff_size_init(FT_Size cffsize)
Definition: cffobjs.c:165
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_POSTSCRIPT_FONT_NAME
Definition: cffdrivr.c:1018
#define FT_LOAD_NO_HINTING
Definition: freetype.h:3010
cff_index_get_string(CFF_Font font, FT_UInt element)
Definition: cffload.c:646
static FT_Error cff_ps_get_font_extra(CFF_Face face, PS_FontExtraRec *afont_extra)
Definition: cffdrivr.c:505
#define FT_DEFINE_SERVICE_METRICSVARIATIONSREC(class_, hadvance_adjust_, lsb_adjust_, rsb_adjust_, vadvance_adjust_, tsb_adjust_, bsb_adjust_, vorg_adjust_, metrics_adjust_)
Definition: svmetric.h:98
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_DEFINE_SERVICE_CFFLOADREC(cff_service_cff_load,(FT_Get_Standard_Encoding_Func) cff_get_standard_encoding,(FT_Load_Private_Dict_Func) cff_load_private_dict,(FT_FD_Select_Get_Func) cff_fd_select_get,(FT_Blend_Check_Vector_Func) cff_blend_check_vector,(FT_Blend_Build_Vector_Func) cff_blend_build_vector) FT_DEFINE_SERVICEDESCREC8(cff_services
FT_UInt sid
Definition: cffcmap.c:139
GLuint buffer
Definition: glext.h:5915
FT_Byte(* FT_FD_Select_Get_Func)(CFF_FDSelect fdselect, FT_UInt glyph_index)
Definition: svcfftl.h:42
cff_blend_build_vector(CFF_Blend blend, FT_UInt vsindex, FT_UInt lenNDV, FT_Fixed *NDV)
Definition: cffload.c:1387
PS_FontExtraRec * font_extra
Definition: cfftypes.h:402
GLuint coords
Definition: glext.h:7368
#define FT_FACE_FIND_GLOBAL_SERVICE(face, ptr, id)
Definition: ftserv.h:125
FT_Library library
Definition: cffdrivr.c:654
#define FT_MODULE_DRIVER_SCALABLE
Definition: ftmodapi.h:115
cff_get_advances(FT_Face face, FT_UInt start, FT_UInt count, FT_Int32 flags, FT_Fixed *advances)
Definition: cffdrivr.c:196
return FT_Err_Ok
Definition: ftbbox.c:511
#define FT_LOAD_ADVANCE_ONLY
Definition: freetype.h:3031
static char memory[1024 *256]
Definition: process.c:116
FT_UInt embedded_postscript
Definition: cfftypes.h:207
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get & CFF_SERVICE_PS_INFO_GET
Definition: cffdrivr.c:1018
FT_UShort fs_type
Definition: t1types.h:89
FT_DEFINE_SERVICE_PSINFOREC(cff_service_ps_info,(PS_GetFontInfoFunc) cff_ps_get_font_info,(PS_GetFontExtraFunc) cff_ps_get_font_extra,(PS_HasGlyphNamesFunc) cff_ps_has_glyph_names,(PS_GetFontPrivateFunc) NULL,(PS_GetFontValueFunc) NULL) static const char *cff_get_ps_name(CFF_Face face)
Definition: cffdrivr.c:582
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get & CFF_SERVICE_PROPERTIES_GET
Definition: cffdrivr.c:1018
FT_Fixed underline_position
Definition: cfftypes.h:190
struct @1603::@1604 driver
return cff_index_get_sid_string(cff, sid)
PS_FontInfoRec * font_info
Definition: cfftypes.h:389
#define FT_CMAP(x)
Definition: ftobjs.h:159
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
#define FT_LOAD_NO_SCALE
Definition: freetype.h:3009
FT_Error(* FT_BSB_Adjust_Func)(FT_Face face, FT_UInt gindex, FT_Int *avalue)
Definition: svmetric.h:66
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_DEFINE_SERVICE_MULTIMASTERSREC(class_, get_mm_, set_mm_design_, set_mm_blend_, get_mm_blend_, get_mm_var_, set_var_design_, get_var_design_, set_instance_, get_var_blend_, done_blend_)
Definition: svmm.h:109
FT_Error(* FT_VAdvance_Adjust_Func)(FT_Face face, FT_UInt gindex, FT_Int *avalue)
Definition: svmetric.h:56
void(* FT_Done_Blend_Func)(FT_Face)
Definition: svmm.h:87
FT_DEFINE_SERVICE_GLYPHDICTREC(cff_service_glyph_dict,(FT_GlyphDict_GetNameFunc) cff_get_glyph_name,(FT_GlyphDict_NameIndexFunc) cff_get_name_index) static FT_Int cff_ps_has_glyph_names(FT_Face face)
Definition: cffdrivr.c:440
#define FT_TRACE1(varformat)
Definition: ftdebug.h:158
ft_module_get_service(FT_Module module, const char *service_id, FT_Bool global)
Definition: ftobjs.c:4880
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
static TfClientId cid
TT_CMapInfo * cmap_info
Definition: cffdrivr.c:649
#define FT_ERROR(varformat)
Definition: ftdebug.h:181
cff_driver_done(FT_Module module)
Definition: cffobjs.c:1200
FT_Fixed underline_thickness
Definition: cfftypes.h:191
cff_fd_select_get(CFF_FDSelect fdselect, FT_UInt glyph_index)
Definition: cffload.c:750
#define FT_THROW(e)
Definition: ftdebug.h:213
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
#define FT_USHORT_MAX
Definition: ftstdlib.h:62
#define TT_FACE_FLAG_VAR_VADVANCE
Definition: tttypes.h:1118
#define FT_DEFINE_DRIVER( class_, flags_, size_, name_, version_, requires_, interface_, init_, done_, get_interface_, face_object_size_, size_object_size_, slot_object_size_, init_face_, done_face_, init_size_, done_size_, init_slot_, done_slot_, load_glyph_, get_kerning_, attach_file_, get_advances_, request_size_, select_size_)
Definition: ftdrv.h:230
smooth NULL
Definition: ftsmooth.c:416
FT_Error(* FT_Load_Private_Dict_Func)(CFF_Font font, CFF_SubFont subfont, FT_UInt lenNDV, FT_Fixed *NDV)
Definition: svcfftl.h:36
FT_UInt family_name
Definition: cfftypes.h:186
FT_Fixed italic_angle
Definition: cfftypes.h:189
#define FT_MODULE_DRIVER_HAS_HINTER
Definition: ftmodapi.h:119
CFF_Font cff
Definition: cffdrivr.c:695
const char ** registry
Definition: cffdrivr.c:690
FT_Error(* FT_Set_Instance_Func)(FT_Face face, FT_UInt instance_index)
Definition: svmm.h:71
static FT_Error cff_ps_get_font_info(CFF_Face face, PS_FontInfoRec *afont_info)
Definition: cffdrivr.c:461
cff_driver_init(FT_Module module)
Definition: cffobjs.c:1158
TT_CMap_Info_GetFunc tt_get_cmap_info const char * module_interface
Definition: sfdriver.c:1176
struct TT_FaceRec_ * TT_Face
Definition: tttypes.h:973
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_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_CFF_LOAD
Definition: cffdrivr.c:1018
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_TT_CMAP
Definition: cffdrivr.c:1018
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_FONT_FORMAT_CFF
Definition: cffdrivr.c:1018
void(* FT_Metrics_Adjust_Func)(FT_Face face)
Definition: svmetric.h:78
cff_glyph_load(FT_GlyphSlot cffslot, FT_Size cffsize, FT_UInt glyph_index, FT_Int32 load_flags)
Definition: cffdrivr.c:155
FT_Error(* FT_CID_GetRegistryOrderingSupplementFunc)(FT_Face face, const char **registry, const char **ordering, FT_Int *supplement)
Definition: svcid.h:31
cff_blend_check_vector(CFF_Blend blend, FT_UInt vsindex, FT_UInt lenNDV, FT_Fixed *NDV)
Definition: cffload.c:1554
#define FT_IS_NAMED_INSTANCE(face)
Definition: freetype.h:1424
FT_Error error
Definition: cffdrivr.c:651
FT_UInt(* FT_GlyphDict_NameIndexFunc)(FT_Face face, FT_String *glyph_name)
Definition: svgldict.h:44
char FT_String
Definition: fttypes.h:187
GLsizeiptr size
Definition: glext.h:5919
#define FT_INT_MIN
Definition: ftstdlib.h:64
FT_DEFINE_SERVICE_PSFONTNAMEREC(cff_service_ps_name,(FT_PsName_GetFunc) cff_get_ps_name) static FT_Error cff_get_cmap_info(FT_CharMap charmap
static void Exit(void)
Definition: sock.c:1331
#define FT_IS_VARIATION(face)
Definition: freetype.h:1442
const GLubyte * c
Definition: glext.h:8905
FT_UShort number_Of_HMetrics
Definition: tttables.h:218
FT_Error(* FT_Set_Var_Design_Func)(FT_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: svmm.h:54
#define CFF_SERVICE_METRICS_VAR_GET
Definition: cffpic.h:35
FT_BEGIN_HEADER struct PS_DriverRec_ PS_DriverRec
cff_slot_init(FT_GlyphSlot slot)
Definition: cffobjs.c:358
#define FT_IS_SFNT(face)
Definition: freetype.h:1331
FT_Error(* FT_Blend_Build_Vector_Func)(CFF_Blend blend, FT_UInt vsindex, FT_UInt lenNDV, FT_Fixed *NDV)
Definition: svcfftl.h:52
GLbitfield flags
Definition: glext.h:7161
FT_Error(* FT_Set_MM_Blend_Func)(FT_Face face, FT_UInt num_coords, FT_Long *coords)
Definition: svmm.h:61
#define CFF_SERVICES_GET
Definition: cffpic.h:33
#define FT_CALLBACK_DEF(x)
Definition: ftconfig.h:533
#define FT_MODULE_FONT_DRIVER
Definition: ftmodapi.h:110
cff_slot_load(CFF_GlyphSlot glyph, CFF_Size size, FT_UInt glyph_index, FT_Int32 load_flags)
Definition: cffgload.c:195
FT_String * font_name
Definition: cfftypes.h:362
cff_get_kerning(FT_Face ttface, FT_UInt left_glyph, FT_UInt right_glyph, FT_Vector *kerning)
Definition: cffdrivr.c:109
void * sfnt
Definition: tttypes.h:1428
FT_Error(* PS_GetFontExtraFunc)(FT_Face face, PS_FontExtraRec *afont_extra)
Definition: svpsinfo.h:37
signed short FT_Short
Definition: fttypes.h:198
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
GLdouble s
Definition: gl.h:2039
#define FT_DEFINE_SERVICE_PROPERTIESREC(class_, set_property_, get_property_)
Definition: svprop.h:50
#define FT_DEFINE_SERVICEDESCREC10(class_, serv_id_1, serv_data_1, serv_id_2, serv_data_2, serv_id_3, serv_data_3, serv_id_4, serv_data_4, serv_id_5, serv_data_5, serv_id_6, serv_data_6, serv_id_7, serv_data_7, serv_id_8, serv_data_8, serv_id_9, serv_data_9, serv_id_10, serv_data_10)
Definition: ftserv.h:333
struct CFF_GlyphSlotRec_ * CFF_GlyphSlot
TT_HoriHeader horizontal
Definition: tttypes.h:1402
FT_UInt left_glyph
Definition: ttdriver.c:201
FT_UShort * sids
Definition: cfftypes.h:98
FT_Error(* TT_CMap_Info_GetFunc)(FT_CharMap charmap, TT_CMapInfo *cmap_info)
Definition: svttcmap.h:67
Definition: vfat.h:184
const char *(* FT_PsName_GetFunc)(FT_Face face)
Definition: svpostnm.h:41
struct CFF_FontRec_ * CFF_Font
Definition: cfftypes.h:152
Definition: hiveinit.c:368
FT_UInt num_glyphs
Definition: cfftypes.h:340
#define CFF_CMAP_ENCODING_CLASS_REC_GET
Definition: cffpic.h:37
TT_Face_GetKerningFunc get_kerning
Definition: sfnt.h:604
signed long FT_Fixed
Definition: fttypes.h:288
static FT_UInt cff_get_name_index(CFF_Face face, FT_String *glyph_name)
Definition: cffdrivr.c:377
#define FT_FACE(x)
Definition: ftobjs.h:630
FT_Long cid_supplement
Definition: cfftypes.h:212
unsigned int FT_UInt
Definition: fttypes.h:231
GLuint start
Definition: gl.h:1545
cff_slot_done(FT_GlyphSlot slot)
Definition: cffobjs.c:351
unsigned char dummy
Definition: maze.c:118
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get &CFF_SERVICE_CFF_LOAD_GET cff_get_interface(FT_Module driver, const char *module_interface)
Definition: cffdrivr.c:1057
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_CID
Definition: cffdrivr.c:1018
FT_Error(* FT_Get_MM_Func)(FT_Face face, FT_Multi_Master *master)
Definition: svmm.h:39
#define FT_TRACE5(varformat)
Definition: ftdebug.h:162
FT_DEFINE_SERVICE_TTCMAPSREC(cff_service_get_cmap_info,(TT_CMap_Info_GetFunc) cff_get_cmap_info) static FT_Error cff_get_ros(CFF_Face face
FT_UShort(* FT_Get_Standard_Encoding_Func)(FT_UInt charcode)
Definition: svcfftl.h:33
#define CFF_SIZE_SELECT
Definition: cffdrivr.c:1099
#define FT_DEFINE_SERVICEDESCREC9(class_, serv_id_1, serv_data_1, serv_id_2, serv_data_2, serv_id_3, serv_data_3, serv_id_4, serv_data_4, serv_id_5, serv_data_5, serv_id_6, serv_data_6, serv_id_7, serv_data_7, serv_id_8, serv_data_8, serv_id_9, serv_data_9)
Definition: ftserv.h:309
FT_Get_Module(FT_Library library, const char *module_name)
Definition: ftobjs.c:4837
cff_size_done(FT_Size cffsize)
Definition: cffobjs.c:83
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_GLYPH_DICT
Definition: cffdrivr.c:1018
Definition: name.c:36
FT_Byte version_major
Definition: cfftypes.h:342
FT_BEGIN_HEADER struct PS_FontInfoRec_ PS_FontInfoRec
#define FT_INT_MAX
Definition: ftstdlib.h:63
#define c
Definition: ke_i.h:80
#define FT_DEFINE_SERVICEDESCREC7(class_, serv_id_1, serv_data_1, serv_id_2, serv_data_2, serv_id_3, serv_data_3, serv_id_4, serv_data_4, serv_id_5, serv_data_5, serv_id_6, serv_data_6, serv_id_7, serv_data_7)
Definition: ftserv.h:267
cff_size_request(FT_Size size, FT_Size_Request req)
Definition: cffobjs.c:275
#define const
Definition: zconf.h:230
FT_Error(* FT_Properties_GetFunc)(FT_Module module, const char *property_name, void *value)
Definition: svprop.h:36
FT_Int(* PS_HasGlyphNamesFunc)(FT_Face face)
Definition: svpsinfo.h:41
FT_Error(* PS_GetFontPrivateFunc)(FT_Face face, PS_PrivateRec *afont_private)
Definition: svpsinfo.h:44
FT_Error(* FT_HAdvance_Adjust_Func)(FT_Face face, FT_UInt gindex, FT_Int *avalue)
Definition: svmetric.h:39
#define FT_STRCPYN(dst, src, size)
Definition: ftmemory.h:382
if(cmap->clazz !=&CFF_CMAP_ENCODING_CLASS_REC_GET &&cmap->clazz !=&CFF_CMAP_UNICODE_CLASS_REC_GET)
Definition: cffdrivr.c:657
#define FT_FACE_LIBRARY(x)
Definition: ftobjs.h:635
unsigned short FT_UShort
Definition: fttypes.h:209
FT_Error(* FT_VOrg_Adjust_Func)(FT_Face face, FT_UInt gindex, FT_Int *avalue)
Definition: svmetric.h:71
FT_Module_Requester get_interface
Definition: sfnt.h:569
#define FT_MODULE_DRIVER_HINTS_LIGHTLY
Definition: ftmodapi.h:121
FT_Bool(* FT_Blend_Check_Vector_Func)(CFF_Blend blend, FT_UInt vsindex, FT_UInt lenNDV, FT_Fixed *NDV)
Definition: svcfftl.h:46
cff_face_done(FT_Face cffface)
Definition: cffobjs.c:1123
static FT_Error cff_get_glyph_name(CFF_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max)
Definition: cffdrivr.c:310
const char const char FT_Int * supplement
Definition: cffdrivr.c:693
FT_Error(* FT_LSB_Adjust_Func)(FT_Face face, FT_UInt gindex, FT_Int *avalue)
Definition: svmetric.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
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get & CFF_SERVICE_GLYPH_DICT_GET
Definition: cffdrivr.c:1018
struct CFF_SizeRec_ * CFF_Size
#define FT_DEFINE_SERVICEDESCREC8(class_, serv_id_1, serv_data_1, serv_id_2, serv_data_2, serv_id_3, serv_data_3, serv_id_4, serv_data_4, serv_id_5, serv_data_5, serv_id_6, serv_data_6, serv_id_7, serv_data_7, serv_id_8, serv_data_8)
Definition: ftserv.h:287
#define FT_FACE_FLAG_GLYPH_NAMES
Definition: freetype.h:1247
GLuint64EXT * result
Definition: glext.h:11304
FT_Error(* FT_Get_MM_Var_Func)(FT_Face face, FT_MM_Var **master)
Definition: svmm.h:43
FT_Error(* PS_GetFontInfoFunc)(FT_Face face, PS_FontInfoRec *afont_info)
Definition: svpsinfo.h:33
FT_String * ordering
Definition: cfftypes.h:393
CFF_CharsetRec charset
Definition: cfftypes.h:355
FT_UInt FT_UInt FT_Vector * kerning
Definition: ttdriver.c:204
cff_load_private_dict(CFF_Font font, CFF_SubFont subfont, FT_UInt lenNDV, FT_Fixed *NDV)
Definition: cffload.c:1865
FT_Error(* FT_CID_GetCIDFromGlyphIndexFunc)(FT_Face face, FT_UInt glyph_index, FT_UInt *cid)
Definition: svcid.h:39
FT_String * registry
Definition: cfftypes.h:392
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get FT_SERVICE_ID_POSTSCRIPT_INFO
Definition: cffdrivr.c:1018
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
const char const char ** ordering
Definition: cffdrivr.c:690
ps_property_get(FT_Module module, const char *property_name, void *value)
Definition: ftpsprop.c:231
CFF_SubFontRec top_font
Definition: cfftypes.h:373
#define ft_strcmp
Definition: ftstdlib.h:86
FT_CMap_Class clazz
Definition: ftobjs.h:154
FT_Properties_SetFunc FT_Properties_GetFunc ps_property_get & CFF_SERVICE_PS_NAME_GET
Definition: cffdrivr.c:1018
FT_Error(* FT_Get_MM_Blend_Func)(FT_Face face, FT_UInt num_coords, FT_Long *coords)
Definition: svmm.h:75
FT_UInt cid_ordering
Definition: cfftypes.h:211
GLuint const GLchar * name
Definition: glext.h:6031
FT_Error(* FT_Get_Var_Design_Func)(FT_Face face, FT_UInt num_coords, FT_Fixed *coords)
Definition: svmm.h:66