ReactOS  0.4.13-dev-100-gc8611ae
cffcmap.c
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* cffcmap.c */
4 /* */
5 /* CFF character mapping table (cmap) support (body). */
6 /* */
7 /* Copyright 2002-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_INTERNAL_DEBUG_H
21 #include "cffcmap.h"
22 #include "cffload.h"
23 
24 #include "cfferrs.h"
25 
26 
27  /*************************************************************************/
28  /*************************************************************************/
29  /***** *****/
30  /***** CFF STANDARD (AND EXPERT) ENCODING CMAPS *****/
31  /***** *****/
32  /*************************************************************************/
33  /*************************************************************************/
34 
38  {
39  TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
40  CFF_Font cff = (CFF_Font)face->extra.data;
42 
43  FT_UNUSED( pointer );
44 
45 
46  cmap->gids = encoding->codes;
47 
48  return 0;
49  }
50 
51 
52  FT_CALLBACK_DEF( void )
54  {
55  cmap->gids = NULL;
56  }
57 
58 
61  FT_UInt32 char_code )
62  {
63  FT_UInt result = 0;
64 
65 
66  if ( char_code < 256 )
67  result = cmap->gids[char_code];
68 
69  return result;
70  }
71 
72 
73  FT_CALLBACK_DEF( FT_UInt32 )
75  FT_UInt32 *pchar_code )
76  {
77  FT_UInt result = 0;
78  FT_UInt32 char_code = *pchar_code;
79 
80 
81  *pchar_code = 0;
82 
83  if ( char_code < 255 )
84  {
85  FT_UInt code = (FT_UInt)(char_code + 1);
86 
87 
88  for (;;)
89  {
90  if ( code >= 256 )
91  break;
92 
93  result = cmap->gids[code];
94  if ( result != 0 )
95  {
96  *pchar_code = code;
97  break;
98  }
99 
100  code++;
101  }
102  }
103  return result;
104  }
105 
106 
108  cff_cmap_encoding_class_rec,
109 
110  sizeof ( CFF_CMapStdRec ),
111 
116 
117  (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
118  (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
119  (FT_CMap_VariantListFunc) NULL, /* variant_list */
120  (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
121  (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
122  )
123 
124 
125  /*************************************************************************/
126  /*************************************************************************/
127  /***** *****/
128  /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/
129  /***** *****/
130  /*************************************************************************/
131  /*************************************************************************/
132 
133  FT_CALLBACK_DEF( const char* )
134  cff_sid_to_glyph_name( TT_Face face,
135  FT_UInt idx )
136  {
137  CFF_Font cff = (CFF_Font)face->extra.data;
140 
141 
142  return cff_index_get_sid_string( cff, sid );
143  }
144 
145 
149  {
150  TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
152  CFF_Font cff = (CFF_Font)face->extra.data;
154  FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
155 
156  FT_UNUSED( pointer );
157 
158 
159  /* can't build Unicode map for CID-keyed font */
160  /* because we don't know glyph names. */
161  if ( !charset->sids )
162  return FT_THROW( No_Unicode_Glyph_Name );
163 
164  return psnames->unicodes_init( memory,
165  unicodes,
166  cff->num_glyphs,
167  (PS_GetGlyphNameFunc)&cff_sid_to_glyph_name,
169  (FT_Pointer)face );
170  }
171 
172 
173  FT_CALLBACK_DEF( void )
175  {
176  FT_Face face = FT_CMAP_FACE( unicodes );
178 
179 
180  FT_FREE( unicodes->maps );
181  unicodes->num_maps = 0;
182  }
183 
184 
187  FT_UInt32 char_code )
188  {
189  TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
190  CFF_Font cff = (CFF_Font)face->extra.data;
191  FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
192 
193 
194  return psnames->unicodes_char_index( unicodes, char_code );
195  }
196 
197 
198  FT_CALLBACK_DEF( FT_UInt32 )
200  FT_UInt32 *pchar_code )
201  {
202  TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
203  CFF_Font cff = (CFF_Font)face->extra.data;
204  FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
205 
206 
207  return psnames->unicodes_char_next( unicodes, pchar_code );
208  }
209 
210 
212  cff_cmap_unicode_class_rec,
213 
214  sizeof ( PS_UnicodesRec ),
215 
220 
221  (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
222  (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
223  (FT_CMap_VariantListFunc) NULL, /* variant_list */
224  (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
225  (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
226  )
227 
228 
229 /* END */
int FT_Error
Definition: fttypes.h:300
cff_cmap_unicode_init(PS_Unicodes unicodes, FT_Pointer pointer)
Definition: cffcmap.c:147
CFF_Charset charset
Definition: cffcmap.c:138
#define FT_CMAP_FACE(x)
Definition: ftobjs.h:165
FT_UInt(* FT_CMap_CharIndexFunc)(FT_CMap cmap, FT_UInt32 char_code)
Definition: ftobjs.h:177
cff_cmap_encoding_done(CFF_CMapStd cmap)
Definition: cffcmap.c:53
GLsizei const GLvoid * pointer
Definition: glext.h:5848
cff_cmap_unicode_done(PS_Unicodes unicodes)
Definition: cffcmap.c:174
cff_cmap_encoding_init(CFF_CMapStd cmap, FT_Pointer pointer)
Definition: cffcmap.c:36
cff_cmap_unicode_char_next(PS_Unicodes unicodes, FT_UInt32 *pchar_code)
Definition: cffcmap.c:199
FT_UInt32 *(* FT_CMap_VariantCharListFunc)(FT_CMap cmap, FT_Memory mem, FT_UInt32 variant_selector)
Definition: ftobjs.h:205
void(* FT_CMap_DoneFunc)(FT_CMap cmap)
Definition: ftobjs.h:174
FT_UInt sid
Definition: cffcmap.c:139
FT_DEFINE_CMAP_CLASS(cff_cmap_encoding_class_rec, sizeof(CFF_CMapStdRec),(FT_CMap_InitFunc) cff_cmap_encoding_init,(FT_CMap_DoneFunc) cff_cmap_encoding_done,(FT_CMap_CharIndexFunc) cff_cmap_encoding_char_index,(FT_CMap_CharNextFunc) cff_cmap_encoding_char_next,(FT_CMap_CharVarIndexFunc) NULL,(FT_CMap_CharVarIsDefaultFunc) NULL,(FT_CMap_VariantListFunc) NULL,(FT_CMap_CharVariantListFunc) NULL,(FT_CMap_VariantCharListFunc) NULL) cff_sid_to_glyph_name(TT_Face face
static char memory[1024 *256]
Definition: process.c:116
typedefFT_BEGIN_HEADER struct CFF_CMapStdRec_ * CFF_CMapStd
Definition: cffcmap.h:36
cff_cmap_unicode_char_index(PS_Unicodes unicodes, FT_UInt32 char_code)
Definition: cffcmap.c:186
return cff_index_get_sid_string(cff, sid)
FT_Service_PsCMaps psnames
Definition: cfftypes.h:383
#define FT_THROW(e)
Definition: ftdebug.h:213
smooth NULL
Definition: ftsmooth.c:416
FT_UInt32 *(* FT_CMap_VariantListFunc)(FT_CMap cmap, FT_Memory mem)
Definition: ftobjs.h:196
CFF_Font cff
Definition: cffdrivr.c:695
#define FT_FREE(ptr)
Definition: ftmemory.h:329
struct TT_FaceRec_ * TT_Face
Definition: tttypes.h:973
FT_UInt idx
Definition: cffcmap.c:136
const char *(* PS_GetGlyphNameFunc)(FT_Pointer data, FT_UInt string_index)
Definition: svpscmap.h:78
void(* PS_FreeGlyphNameFunc)(FT_Pointer data, const char *name)
Definition: svpscmap.h:86
#define FT_CALLBACK_DEF(x)
Definition: ftconfig.h:533
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:66
FT_UShort * sids
Definition: cfftypes.h:98
int code
Definition: i386-dis.c:3591
ed encoding
Definition: write.c:2847
#define FT_FACE_MEMORY(x)
Definition: ftobjs.h:636
struct CFF_FontRec_ * CFF_Font
Definition: cfftypes.h:152
FT_UInt num_glyphs
Definition: cfftypes.h:340
unsigned int FT_UInt
Definition: fttypes.h:231
CFF_EncodingRec encoding
Definition: cfftypes.h:354
cff_cmap_encoding_char_next(CFF_CMapStd cmap, FT_UInt32 *pchar_code)
Definition: cffcmap.c:74
FT_UInt(* FT_CMap_CharNextFunc)(FT_CMap cmap, FT_UInt32 *achar_code)
Definition: ftobjs.h:181
FT_Error(* FT_CMap_InitFunc)(FT_CMap cmap, FT_Pointer init_data)
Definition: ftobjs.h:170
GLuint64EXT * result
Definition: glext.h:11304
#define FT_UNUSED(arg)
Definition: ftconfig.h:101
FT_UInt32 *(* FT_CMap_CharVariantListFunc)(FT_CMap cmap, FT_Memory mem, FT_UInt32 char_code)
Definition: ftobjs.h:200
CFF_CharsetRec charset
Definition: cfftypes.h:355
FT_UInt(* FT_CMap_CharVarIndexFunc)(FT_CMap cmap, FT_CMap unicode_cmap, FT_UInt32 char_code, FT_UInt32 variant_selector)
Definition: ftobjs.h:185
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
FT_Bool(* FT_CMap_CharVarIsDefaultFunc)(FT_CMap cmap, FT_UInt32 char_code, FT_UInt32 variant_selector)
Definition: ftobjs.h:191
cff_cmap_encoding_char_index(CFF_CMapStd cmap, FT_UInt32 char_code)
Definition: cffcmap.c:60