Visualization Library 2.0.0-b5

A lightweight C++ OpenGL middleware for 2D/3D graphics

VL     Star     Watch     Fork     Issue

[Download] [Tutorials] [All Classes] [Grouped Classes]
t42drivr.c
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* t42drivr.c */
4 /* */
5 /* High-level Type 42 driver interface (body). */
6 /* */
7 /* Copyright 2002-2004, 2006, 2007, 2009, 2011, 2013 by */
8 /* Roberto Alameda. */
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  /*************************************************************************/
20  /* */
21  /* This driver implements Type42 fonts as described in the */
22  /* Technical Note #5012 from Adobe, with these limitations: */
23  /* */
24  /* 1) CID Fonts are not currently supported. */
25  /* 2) Incremental fonts making use of the GlyphDirectory keyword */
26  /* will be loaded, but the rendering will be using the TrueType */
27  /* tables. */
28  /* 3) As for Type1 fonts, CDevProc is not supported. */
29  /* 4) The Metrics dictionary is not supported. */
30  /* 5) AFM metrics are not supported. */
31  /* */
32  /* In other words, this driver supports Type42 fonts derived from */
33  /* TrueType fonts in a non-CID manner, as done by usual conversion */
34  /* programs. */
35  /* */
36  /*************************************************************************/
37 
38 
39 #include "t42drivr.h"
40 #include "t42objs.h"
41 #include "t42error.h"
42 #include FT_INTERNAL_DEBUG_H
43 
44 #include FT_SERVICE_XFREE86_NAME_H
45 #include FT_SERVICE_GLYPH_DICT_H
46 #include FT_SERVICE_POSTSCRIPT_NAME_H
47 #include FT_SERVICE_POSTSCRIPT_INFO_H
48 
49 #undef FT_COMPONENT
50 #define FT_COMPONENT trace_t42
51 
52 
53  /*
54  *
55  * GLYPH DICT SERVICE
56  *
57  */
58 
59  static FT_Error
60  t42_get_glyph_name( T42_Face face,
61  FT_UInt glyph_index,
63  FT_UInt buffer_max )
64  {
65  FT_STRCPYN( buffer, face->type1.glyph_names[glyph_index], buffer_max );
66 
67  return FT_Err_Ok;
68  }
69 
70 
71  static FT_UInt
72  t42_get_name_index( T42_Face face,
73  FT_String* glyph_name )
74  {
75  FT_Int i;
76  FT_String* gname;
77 
78 
79  for ( i = 0; i < face->type1.num_glyphs; i++ )
80  {
81  gname = face->type1.glyph_names[i];
82 
83  if ( glyph_name[0] == gname[0] && !ft_strcmp( glyph_name, gname ) )
84  return (FT_UInt)ft_atol( (const char *)face->type1.charstrings[i] );
85  }
86 
87  return 0;
88  }
89 
90 
91  static const FT_Service_GlyphDictRec t42_service_glyph_dict =
92  {
93  (FT_GlyphDict_GetNameFunc) t42_get_glyph_name,
94  (FT_GlyphDict_NameIndexFunc)t42_get_name_index
95  };
96 
97 
98  /*
99  *
100  * POSTSCRIPT NAME SERVICE
101  *
102  */
103 
104  static const char*
105  t42_get_ps_font_name( T42_Face face )
106  {
107  return (const char*)face->type1.font_name;
108  }
109 
110 
111  static const FT_Service_PsFontNameRec t42_service_ps_font_name =
112  {
113  (FT_PsName_GetFunc)t42_get_ps_font_name
114  };
115 
116 
117  /*
118  *
119  * POSTSCRIPT INFO SERVICE
120  *
121  */
122 
123  static FT_Error
124  t42_ps_get_font_info( FT_Face face,
125  PS_FontInfoRec* afont_info )
126  {
127  *afont_info = ((T42_Face)face)->type1.font_info;
128 
129  return FT_Err_Ok;
130  }
131 
132 
133  static FT_Error
134  t42_ps_get_font_extra( FT_Face face,
135  PS_FontExtraRec* afont_extra )
136  {
137  *afont_extra = ((T42_Face)face)->type1.font_extra;
138 
139  return FT_Err_Ok;
140  }
141 
142 
143  static FT_Int
144  t42_ps_has_glyph_names( FT_Face face )
145  {
146  FT_UNUSED( face );
147 
148  return 1;
149  }
150 
151 
152  static FT_Error
153  t42_ps_get_font_private( FT_Face face,
154  PS_PrivateRec* afont_private )
155  {
156  *afont_private = ((T42_Face)face)->type1.private_dict;
157 
158  return FT_Err_Ok;
159  }
160 
161 
162  static const FT_Service_PsInfoRec t42_service_ps_info =
163  {
164  (PS_GetFontInfoFunc) t42_ps_get_font_info,
165  (PS_GetFontExtraFunc) t42_ps_get_font_extra,
166  (PS_HasGlyphNamesFunc) t42_ps_has_glyph_names,
167  (PS_GetFontPrivateFunc)t42_ps_get_font_private,
168  (PS_GetFontValueFunc) NULL /* not implemented */
169  };
170 
171 
172  /*
173  *
174  * SERVICE LIST
175  *
176  */
177 
178  static const FT_ServiceDescRec t42_services[] =
179  {
180  { FT_SERVICE_ID_GLYPH_DICT, &t42_service_glyph_dict },
181  { FT_SERVICE_ID_POSTSCRIPT_FONT_NAME, &t42_service_ps_font_name },
182  { FT_SERVICE_ID_POSTSCRIPT_INFO, &t42_service_ps_info },
184  { NULL, NULL }
185  };
186 
187 
190  const FT_String* t42_interface )
191  {
192  FT_UNUSED( module );
193 
194  return ft_service_list_lookup( t42_services, t42_interface );
195  }
196 
197 
199  {
200  {
203 #ifdef TT_USE_BYTECODE_INTERPRETER
205 #else
206  0,
207 #endif
208 
209  sizeof ( T42_DriverRec ),
210 
211  "type42",
212  0x10000L,
213  0x20000L,
214 
215  0, /* format interface */
216 
220  },
221 
222  sizeof ( T42_FaceRec ),
223  sizeof ( T42_SizeRec ),
224  sizeof ( T42_GlyphSlotRec ),
225 
232 
233 #ifdef FT_CONFIG_OPTION_OLD_INTERNALS
234  ft_stub_set_char_sizes,
235  ft_stub_set_pixel_sizes,
236 #endif
238 
239  0, /* FT_Face_GetKerningFunc */
240  0, /* FT_Face_AttachFunc */
241 
242  0, /* FT_Face_GetAdvancesFunc */
245  };
246 
247 
248 /* END */
T42_GlyphSlot_Done(FT_GlyphSlot t42slot)
Definition: t42objs.c:603
const FT_Driver_ClassRec t42_driver_class
Definition: t42drivr.c:198
ft_service_list_lookup(FT_ServiceDesc service_descriptors, const char *service_id)
Definition: ftobjs.c:58
int FT_Error
Definition: fttypes.h:296
T42_Driver_Init(FT_Module module)
Definition: t42objs.c:475
T42_Size_Init(FT_Size size)
Definition: t42objs.c:502
FT_SERVICE_ID_POSTSCRIPT_INFO
Definition: cffdrivr.c:671
#define NULL
Definition: ftobjs.h:61
signed int FT_Int
Definition: fttypes.h:216
FT_SERVICE_ID_GLYPH_DICT
Definition: cffdrivr.c:671
#define FT_UNUSED(arg)
Definition: ftconfig.h:76
#define FT_MODULE_DRIVER_SCALABLE
Definition: ftmodapi.h:87
return FT_Err_Ok
Definition: ftbbox.c:645
T42_GlyphSlot_Load(FT_GlyphSlot glyph, FT_Size size, FT_UInt glyph_index, FT_Int32 load_flags)
Definition: t42objs.c:638
T42_Face_Init(FT_Stream stream, FT_Face t42face, FT_Int face_index, FT_Int num_params, FT_Parameter *params)
Definition: t42objs.c:156
png_uint_32 i
Definition: png.h:2640
FT_BEGIN_HEADER struct T42_FaceRec_ * T42_Face
FT_BEGIN_HEADER struct T42_SizeRec_ T42_SizeRec
GLenum GLuint GLint GLenum face
#define const
Definition: zconf.h:91
T42_Size_Done(FT_Size t42size)
Definition: t42objs.c:560
T42_GlyphSlot_Init(FT_GlyphSlot t42slot)
Definition: t42objs.c:578
FT_BEGIN_HEADER struct T42_FaceRec_ T42_FaceRec
#define FT_MODULE_DRIVER_HAS_HINTER
Definition: ftmodapi.h:91
T42_Size_Select(FT_Size t42size, FT_ULong strike_index)
Definition: t42objs.c:540
#define FT_XF86_FORMAT_TYPE_42
Definition: svxf86nm.h:40
FT_Long(* PS_GetFontValueFunc)(FT_Face face, PS_Dict_Keys key, FT_UInt idx, void *value, FT_Long value_len)
Definition: svpsinfo.h:48
T42_Get_Interface(FT_Module module, const FT_String *t42_interface)
Definition: t42drivr.c:189
FT_UInt(* FT_GlyphDict_NameIndexFunc)(FT_Face face, FT_String *glyph_name)
Definition: svgldict.h:44
#define FT_SERVICE_ID_XF86_NAME
Definition: svxf86nm.h:34
char FT_String
Definition: fttypes.h:183
void * FT_Pointer
Definition: fttypes.h:307
T42_Size_Request(FT_Size t42size, FT_Size_Request req)
Definition: t42objs.c:521
FT_Pointer FT_Module_Interface
Definition: ftmodapi.h:106
GLuint buffer
#define FT_CALLBACK_DEF(x)
Definition: ftconfig.h:323
#define ft_atol
Definition: ftstdlib.h:144
struct T42_DriverRec_ T42_DriverRec
#define FT_MODULE_FONT_DRIVER
Definition: ftmodapi.h:82
FT_SERVICE_ID_POSTSCRIPT_FONT_NAME
Definition: cffdrivr.c:671
FT_Error(* PS_GetFontExtraFunc)(FT_Face face, PS_FontExtraRec *afont_extra)
Definition: svpsinfo.h:37
const char *(* FT_PsName_GetFunc)(FT_Face face)
Definition: svpostnm.h:41
unsigned int FT_UInt
Definition: fttypes.h:227
T42_Face_Done(FT_Face t42face)
Definition: t42objs.c:405
FT_BEGIN_HEADER struct PS_FontInfoRec_ PS_FontInfoRec
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
#define FT_STRCPYN(dst, src, size)
Definition: ftmemory.h:369
FT_Error(* FT_GlyphDict_GetNameFunc)(FT_Face face, FT_UInt glyph_index, FT_Pointer buffer, FT_UInt buffer_max)
Definition: svgldict.h:38
T42_Driver_Done(FT_Module module)
Definition: t42objs.c:495
FT_Error(* PS_GetFontInfoFunc)(FT_Face face, PS_FontInfoRec *afont_info)
Definition: svpsinfo.h:33
#define ft_strcmp
Definition: ftstdlib.h:85