:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / subsys / win32k / freetype / src / sfnt / sfdriver.c
1 /***************************************************************************/
2 /*                                                                         */
3 /*  sfdriver.c                                                             */
4 /*                                                                         */
5 /*    High-level SFNT driver interface (body).                             */
6 /*                                                                         */
7 /*  Copyright 1996-2000 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 <freetype/internal/sfnt.h>
20 #include <freetype/internal/ftobjs.h>
21
22
23 #ifdef FT_FLAT_COMPILE
24
25 #include "sfdriver.h"
26 #include "ttload.h"
27 #include "ttsbit.h"
28 #include "ttpost.h"
29 #include "ttcmap.h"
30 #include "sfobjs.h"
31
32 #else
33
34 #include <freetype/src/sfnt/sfdriver.h>
35 #include <freetype/src/sfnt/ttload.h>
36 #include <freetype/src/sfnt/ttsbit.h>
37 #include <freetype/src/sfnt/ttpost.h>
38 #include <freetype/src/sfnt/ttcmap.h>
39 #include <freetype/src/sfnt/sfobjs.h>
40
41 #endif
42
43
44 #include <string.h>     /* for strcmp() */
45
46
47   static
48   void*  get_sfnt_table( TT_Face      face,
49                          FT_Sfnt_Tag  tag )
50   {
51     void*  table;
52
53
54     switch ( tag )
55     {
56     case ft_sfnt_head:
57       table = &face->header;
58       break;
59
60     case ft_sfnt_hhea:
61       table = &face->horizontal;
62       break;
63
64     case ft_sfnt_vhea:
65       table = face->vertical_info ? &face->vertical : 0;
66       break;
67
68     case ft_sfnt_os2:
69       table = face->os2.version == 0xFFFF ? 0 : &face->os2;
70       break;
71
72     case ft_sfnt_post:
73       table = &face->postscript;
74       break;
75
76     case ft_sfnt_maxp:
77       table = &face->max_profile;
78       break;
79
80     case ft_sfnt_pclt:
81       table = face->pclt.Version ? &face->pclt : 0;
82       break;
83
84     default:
85       table = 0;
86     }
87
88     return table;
89   }
90
91
92 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
93
94
95   static
96   FT_Error  get_sfnt_glyph_name( TT_Face     face,
97                                  FT_UInt     glyph_index,
98                                  FT_Pointer  buffer,
99                                  FT_UInt     buffer_max )
100   {
101     FT_String*  gname;
102     FT_Error    error;
103     
104
105     error = TT_Get_PS_Name( face, glyph_index, &gname );
106     if ( !error && buffer_max > 0 )
107     {
108       FT_UInt  len = strlen( gname );
109       
110
111       if ( len >= buffer_max )
112         len = buffer_max - 1;
113         
114       MEM_Copy( buffer, gname, len );
115       ((FT_Byte*)buffer)[len] = 0;
116     }
117     
118     return error;
119   }                                  
120
121
122 #endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
123
124
125   static
126   FT_Module_Interface  SFNT_Get_Interface( FT_Module    module,
127                                            const char*  interface )
128   {
129     FT_UNUSED( module );
130
131     if ( strcmp( interface, "get_sfnt" ) == 0 )
132       return (FT_Module_Interface)get_sfnt_table;
133
134 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
135     if ( strcmp( interface, "glyph_name" ) == 0 )
136       return (FT_Module_Interface)get_sfnt_glyph_name;
137 #endif
138     return 0;
139   }
140
141
142   static
143   const SFNT_Interface  sfnt_interface =
144   {
145     TT_Goto_Table,
146
147     SFNT_Init_Face,
148     SFNT_Load_Face,
149     SFNT_Done_Face,
150     SFNT_Get_Interface,
151
152     TT_Load_Any,
153     TT_Load_SFNT_Header,
154     TT_Load_Directory,
155
156     TT_Load_Header,
157     TT_Load_Metrics_Header,
158     TT_Load_CMap,
159     TT_Load_MaxProfile,
160     TT_Load_OS2,
161     TT_Load_PostScript,
162
163     TT_Load_Names,
164     TT_Free_Names,
165
166     TT_Load_Hdmx,
167     TT_Free_Hdmx,
168
169     TT_Load_Kern,
170     TT_Load_Gasp,
171     TT_Load_PCLT,
172
173 #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
174
175     /* see `ttsbit.h' */
176     TT_Load_SBit_Strikes,
177     TT_Load_SBit_Image,
178     TT_Free_SBit_Strikes,
179
180 #else /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
181
182     0,
183     0,
184     0,
185
186 #endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
187
188 #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
189
190     /* see `ttpost.h' */
191     TT_Get_PS_Name,
192     TT_Free_Post_Names,
193
194 #else /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
195
196     0,
197     0,
198
199 #endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
200
201     /* see `ttcmap.h' */
202     TT_CharMap_Load,
203     TT_CharMap_Free,
204   };
205
206
207   const
208   FT_Module_Class  sfnt_module_class =
209   {
210     0,  /* not a font driver or renderer */
211     sizeof( FT_ModuleRec ),
212
213     "sfnt",     /* driver name                            */
214     0x10000L,   /* driver version 1.0                     */
215     0x20000L,   /* driver requires FreeType 2.0 or higher */
216
217     (const void*)&sfnt_interface,  /* module specific interface */
218
219     (FT_Module_Constructor)0,
220     (FT_Module_Destructor) 0,
221     (FT_Module_Requester)  SFNT_Get_Interface
222   };
223
224
225 /* END */