w32tex
About: TeX Live provides a comprehensive TeX system including all the major TeX-related programs, macro packages, and fonts that are free software. Windows sources.
  Fossies Dox: w32tex-src.tar.xz  ("unofficial" and yet experimental doxygen-generated source code documentation)  

ftinit.c
Go to the documentation of this file.
1 /****************************************************************************
2  *
3  * ftinit.c
4  *
5  * FreeType initialization layer (body).
6  *
7  * Copyright (C) 1996-2020 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  *
20  * The purpose of this file is to implement the following two
21  * functions:
22  *
23  * FT_Add_Default_Modules():
24  * This function is used to add the set of default modules to a
25  * fresh new library object. The set is taken from the header file
26  * `freetype/config/ftmodule.h'. See the document `FreeType 2.0
27  * Build System' for more information.
28  *
29  * FT_Init_FreeType():
30  * This function creates a system object for the current platform,
31  * builds a library out of it, then calls FT_Default_Drivers().
32  *
33  * Note that even if FT_Init_FreeType() uses the implementation of the
34  * system object defined at build time, client applications are still
35  * able to provide their own `ftsystem.c'.
36  *
37  */
38 
39 
40 #include <ft2build.h>
41 #include FT_CONFIG_CONFIG_H
42 #include <freetype/internal/ftobjs.h>
43 #include <freetype/internal/ftdebug.h>
44 #include <freetype/ftmodapi.h>
45 
46 
47  /**************************************************************************
48  *
49  * The macro FT_COMPONENT is used in trace mode. It is an implicit
50  * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
51  * messages during execution.
52  */
53 #undef FT_COMPONENT
54 #define FT_COMPONENT init
55 
56 
57 #undef FT_USE_MODULE
58 #ifdef __cplusplus
59 #define FT_USE_MODULE( type, x ) extern "C" const type x;
60 #else
61 #define FT_USE_MODULE( type, x ) extern const type x;
62 #endif
63 
64 #include FT_CONFIG_MODULES_H
65 
66 #undef FT_USE_MODULE
67 #define FT_USE_MODULE( type, x ) (const FT_Module_Class*)&(x),
68 
69  static
71  {
72 #include FT_CONFIG_MODULES_H
73  0
74  };
75 
76 
77  /* documentation is in ftmodapi.h */
78 
79  FT_EXPORT_DEF( void )
81  {
83  const FT_Module_Class* const* cur;
84 
85 
86  /* GCC 4.6 warns the type difference:
87  * FT_Module_Class** != const FT_Module_Class* const*
88  */
89  cur = (const FT_Module_Class* const*)ft_default_modules;
90 
91  /* test for valid `library' delayed to FT_Add_Module() */
92  while ( *cur )
93  {
95  /* notify errors, but don't stop */
96  if ( error )
97  FT_TRACE0(( "FT_Add_Default_Module:"
98  " Cannot install `%s', error = 0x%x\n",
99  (*cur)->module_name, error ));
100  cur++;
101  }
102  }
103 
104 
105 #ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
106 
107 #define MAX_LENGTH 128
108 
109  /* documentation is in ftmodapi.h */
110 
111  FT_EXPORT_DEF( void )
113  {
114  const char* env;
115  const char* p;
116  const char* q;
117 
118  char module_name[MAX_LENGTH + 1];
119  char property_name[MAX_LENGTH + 1];
120  char property_value[MAX_LENGTH + 1];
121 
122  int i;
123 
124 
125  env = ft_getenv( "FREETYPE_PROPERTIES" );
126  if ( !env )
127  return;
128 
129  for ( p = env; *p; p++ )
130  {
131  /* skip leading whitespace and separators */
132  if ( *p == ' ' || *p == '\t' )
133  continue;
134 
135  /* read module name, followed by `:' */
136  q = p;
137  for ( i = 0; i < MAX_LENGTH; i++ )
138  {
139  if ( !*p || *p == ':' )
140  break;
141  module_name[i] = *p++;
142  }
143  module_name[i] = '\0';
144 
145  if ( !*p || *p != ':' || p == q )
146  break;
147 
148  /* read property name, followed by `=' */
149  q = ++p;
150  for ( i = 0; i < MAX_LENGTH; i++ )
151  {
152  if ( !*p || *p == '=' )
153  break;
154  property_name[i] = *p++;
155  }
156  property_name[i] = '\0';
157 
158  if ( !*p || *p != '=' || p == q )
159  break;
160 
161  /* read property value, followed by whitespace (if any) */
162  q = ++p;
163  for ( i = 0; i < MAX_LENGTH; i++ )
164  {
165  if ( !*p || *p == ' ' || *p == '\t' )
166  break;
167  property_value[i] = *p++;
168  }
169  property_value[i] = '\0';
170 
171  if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
172  break;
173 
174  /* we completely ignore errors */
175  ft_property_string_set( library,
176  module_name,
177  property_name,
178  property_value );
179 
180  if ( !*p )
181  break;
182  }
183  }
184 
185 #else
186 
187  FT_EXPORT_DEF( void )
189  {
190  FT_UNUSED( library );
191  }
192 
193 #endif
194 
195 
196  /* documentation is in freetype.h */
197 
200  {
201  FT_Error error;
202  FT_Memory memory;
203 
204 
205  /* check of `alibrary' delayed to `FT_New_Library' */
206 
207  /* First of all, allocate a new system object -- this function is part */
208  /* of the system-specific component, i.e. `ftsystem.c'. */
209 
210  memory = FT_New_Memory();
211  if ( !memory )
212  {
213  FT_ERROR(( "FT_Init_FreeType: cannot find memory manager\n" ));
214  return FT_THROW( Unimplemented_Feature );
215  }
216 
217  /* build a library out of it, then fill it with the set of */
218  /* default drivers. */
219 
220  error = FT_New_Library( memory, alibrary );
221  if ( error )
222  FT_Done_Memory( memory );
223  else
224  FT_Add_Default_Modules( *alibrary );
225 
226  FT_Set_Default_Properties( *alibrary );
227 
228  return error;
229  }
230 
231 
232  /* documentation is in freetype.h */
233 
236  {
237  FT_Memory memory;
238 
239 
240  if ( !library )
241  return FT_THROW( Invalid_Library_Handle );
242 
243  memory = library->memory;
244 
245  /* Discard the library object */
247 
248  /* discard memory manager */
249  FT_Done_Memory( memory );
250 
251  return FT_Err_Ok;
252  }
253 
254 
255 /* END */
q
Definition: afm2pl.c:2287
static point_t cur
Definition: backend_eps.c:108
#define error(a)
Definition: dviinfo.c:48
#define FT_EXPORT_DEF(x)
Definition: ftconfig.h:32
FT_New_Memory(void)
Definition: ftsystem.c:475
FT_Done_Memory(FT_Memory memory)
Definition: ftsystem.c:515
#define ft_getenv
Definition: ftstdlib.h:156
#define FT_UNUSED(arg)
FT_Add_Module(FT_Library library, const FT_Module_Class *clazz)
Definition: ftobjs.c:4871
FT_Done_Library(FT_Library library)
Definition: ftobjs.c:5353
FT_New_Library(FT_Memory memory, FT_Library *alibrary)
Definition: ftobjs.c:5285
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:64
int FT_Error
Definition: fttypes.h:299
#define FT_TRACE0(varformat)
Definition: ftdebug.h:187
#define FT_ERROR(varformat)
Definition: ftdebug.h:211
#define FT_THROW(e)
Definition: ftdebug.h:243
small capitals from c petite p
Definition: afcover.h:72
small capitals from c petite p scientific i
Definition: afcover.h:80
return FT_Err_Ok
Definition: ftbbox.c:526
FT_Set_Default_Properties(FT_Library library)
Definition: ftinit.c:188
static const FT_Module_Class *const ft_default_modules[]
Definition: ftinit.c:70
FT_Add_Default_Modules(FT_Library library)
Definition: ftinit.c:80
FT_Done_FreeType(FT_Library library)
Definition: ftinit.c:235
FT_Init_FreeType(FT_Library *alibrary)
Definition: ftinit.c:199
FT_Library library
Definition: cffdrivr.c:660
FT_Memory memory
Definition: ftobjs.h:895
Definition: sh.h:1689
constexpr int32_t MAX_LENGTH
Definition: uniset.cpp:58