ReactOS 0.4.16-dev-2332-g4cba65d
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 (C) 2002-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
20#include "cffcmap.h"
21#include "cffload.h"
22
23#include "cfferrs.h"
24
25
26 /*************************************************************************/
27 /*************************************************************************/
28 /***** *****/
29 /***** CFF STANDARD (AND EXPERT) ENCODING CMAPS *****/
30 /***** *****/
31 /*************************************************************************/
32 /*************************************************************************/
33
37 {
39 CFF_Font cff = (CFF_Font)face->extra.data;
40 CFF_Encoding encoding = &cff->encoding;
41
43
44
45 cmap->gids = encoding->codes;
46
47 return 0;
48 }
49
50
51 FT_CALLBACK_DEF( void )
53 {
54 cmap->gids = NULL;
55 }
56
57
60 FT_UInt32 char_code )
61 {
62 FT_UInt result = 0;
63
64
65 if ( char_code < 256 )
66 result = cmap->gids[char_code];
67
68 return result;
69 }
70
71
72 FT_CALLBACK_DEF( FT_UInt32 )
74 FT_UInt32 *pchar_code )
75 {
76 FT_UInt result = 0;
77 FT_UInt32 char_code = *pchar_code;
78
79
80 *pchar_code = 0;
81
82 if ( char_code < 255 )
83 {
84 FT_UInt code = (FT_UInt)(char_code + 1);
85
86
87 for (;;)
88 {
89 if ( code >= 256 )
90 break;
91
92 result = cmap->gids[code];
93 if ( result != 0 )
94 {
95 *pchar_code = code;
96 break;
97 }
98
99 code++;
100 }
101 }
102 return result;
103 }
104
105
107 cff_cmap_encoding_class_rec,
108
109 sizeof ( CFF_CMapStdRec ),
110
115
116 (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
117 (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
118 (FT_CMap_VariantListFunc) NULL, /* variant_list */
119 (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
120 (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
121 )
122
123
124 /*************************************************************************/
125 /*************************************************************************/
126 /***** *****/
127 /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/
128 /***** *****/
129 /*************************************************************************/
130 /*************************************************************************/
131
132 FT_CALLBACK_DEF( const char* )
133 cff_sid_to_glyph_name( TT_Face face,
135 {
136 CFF_Font cff = (CFF_Font)face->extra.data;
139
140
142 }
143
144
148 {
149 TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
151 CFF_Font cff = (CFF_Font)face->extra.data;
153 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
154
156
157
158 /* can't build Unicode map for CID-keyed font */
159 /* because we don't know glyph names. */
160 if ( !charset->sids )
161 return FT_THROW( No_Unicode_Glyph_Name );
162
163 if ( !psnames->unicodes_init )
164 return FT_THROW( Unimplemented_Feature );
165
166 return psnames->unicodes_init( memory,
167 unicodes,
169 (PS_GetGlyphNameFunc)&cff_sid_to_glyph_name,
171 (FT_Pointer)face );
172 }
173
174
175 FT_CALLBACK_DEF( void )
177 {
178 FT_Face face = FT_CMAP_FACE( unicodes );
180
181
182 FT_FREE( unicodes->maps );
183 unicodes->num_maps = 0;
184 }
185
186
189 FT_UInt32 char_code )
190 {
191 TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
192 CFF_Font cff = (CFF_Font)face->extra.data;
193 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
194
195
196 return psnames->unicodes_char_index( unicodes, char_code );
197 }
198
199
200 FT_CALLBACK_DEF( FT_UInt32 )
202 FT_UInt32 *pchar_code )
203 {
204 TT_Face face = (TT_Face)FT_CMAP_FACE( unicodes );
205 CFF_Font cff = (CFF_Font)face->extra.data;
206 FT_Service_PsCMaps psnames = (FT_Service_PsCMaps)cff->psnames;
207
208
209 return psnames->unicodes_char_next( unicodes, pchar_code );
210 }
211
212
214 cff_cmap_unicode_class_rec,
215
216 sizeof ( PS_UnicodesRec ),
217
222
223 (FT_CMap_CharVarIndexFunc) NULL, /* char_var_index */
224 (FT_CMap_CharVarIsDefaultFunc)NULL, /* char_var_default */
225 (FT_CMap_VariantListFunc) NULL, /* variant_list */
226 (FT_CMap_CharVariantListFunc) NULL, /* charvariant_list */
227 (FT_CMap_VariantCharListFunc) NULL /* variantchar_list */
228 )
229
230
231/* END */
cff_cmap_encoding_init(CFF_CMapStd cmap, FT_Pointer pointer)
Definition: cffcmap.c:35
cff_cmap_encoding_char_index(CFF_CMapStd cmap, FT_UInt32 char_code)
Definition: cffcmap.c:59
cff_cmap_unicode_char_index(PS_Unicodes unicodes, FT_UInt32 char_code)
Definition: cffcmap.c:188
cff_cmap_encoding_done(CFF_CMapStd cmap)
Definition: cffcmap.c:52
FT_UInt sid
Definition: cffcmap.c:138
cff_cmap_unicode_done(PS_Unicodes unicodes)
Definition: cffcmap.c:176
return cff_index_get_sid_string(cff, sid)
cff_cmap_encoding_char_next(CFF_CMapStd cmap, FT_UInt32 *pchar_code)
Definition: cffcmap.c:73
cff_cmap_unicode_char_next(PS_Unicodes unicodes, FT_UInt32 *pchar_code)
Definition: cffcmap.c:201
cff_cmap_unicode_init(PS_Unicodes unicodes, FT_Pointer pointer)
Definition: cffcmap.c:146
FT_UInt idx
Definition: cffcmap.c:135
CFF_Charset charset
Definition: cffcmap.c:137
typedefFT_BEGIN_HEADER struct CFF_CMapStdRec_ * CFF_CMapStd
Definition: cffcmap.h:36
CFF_Font cff
Definition: cffdrivr.c:701
struct CFF_FontRec_ * CFF_Font
Definition: cfftypes.h:156
#define FT_CALLBACK_DEF(x)
#define NULL
Definition: types.h:112
#define FT_THROW(e)
Definition: ftdebug.h:243
#define FT_FREE(ptr)
Definition: ftmemory.h:337
FT_UInt(* FT_CMap_CharNextFunc)(FT_CMap cmap, FT_UInt32 *achar_code)
Definition: ftobjs.h:179
FT_UInt(* FT_CMap_CharVarIndexFunc)(FT_CMap cmap, FT_CMap unicode_cmap, FT_UInt32 char_code, FT_UInt32 variant_selector)
Definition: ftobjs.h:183
FT_UInt32 *(* FT_CMap_CharVariantListFunc)(FT_CMap cmap, FT_Memory mem, FT_UInt32 char_code)
Definition: ftobjs.h:198
FT_Int(* FT_CMap_CharVarIsDefaultFunc)(FT_CMap cmap, FT_UInt32 char_code, FT_UInt32 variant_selector)
Definition: ftobjs.h:189
#define FT_FACE_MEMORY(x)
Definition: ftobjs.h:603
#define FT_DEFINE_CMAP_CLASS( class_, size_, init_, done_, char_index_, char_next_, char_var_index_, char_var_default_, variant_list_, charvariant_list_, variantchar_list_)
Definition: ftobjs.h:232
FT_UInt32 *(* FT_CMap_VariantCharListFunc)(FT_CMap cmap, FT_Memory mem, FT_UInt32 variant_selector)
Definition: ftobjs.h:203
FT_UInt32 *(* FT_CMap_VariantListFunc)(FT_CMap cmap, FT_Memory mem)
Definition: ftobjs.h:194
FT_Error(* FT_CMap_InitFunc)(FT_CMap cmap, FT_Pointer init_data)
Definition: ftobjs.h:168
void(* FT_CMap_DoneFunc)(FT_CMap cmap)
Definition: ftobjs.h:172
FT_UInt(* FT_CMap_CharIndexFunc)(FT_CMap cmap, FT_UInt32 char_code)
Definition: ftobjs.h:175
#define FT_CMAP_FACE(x)
Definition: ftobjs.h:163
typedefFT_BEGIN_HEADER struct FT_MemoryRec_ * FT_Memory
Definition: ftsystem.h:64
int FT_Error
Definition: fttypes.h:299
unsigned int FT_UInt
Definition: fttypes.h:231
GLsizei const GLvoid * pointer
Definition: glext.h:5848
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLuint64EXT * result
Definition: glext.h:11304
static char memory[1024 *256]
Definition: process.c:122
#define FT_UNUSED(arg)
FT_UShort * sids
Definition: cfftypes.h:102
FT_Service_PsCMaps psnames
Definition: cfftypes.h:387
CFF_CharsetRec charset
Definition: cfftypes.h:359
CFF_EncodingRec encoding
Definition: cfftypes.h:358
FT_UInt num_glyphs
Definition: cfftypes.h:344
Definition: inflate.c:139
const char *(* PS_GetGlyphNameFunc)(FT_Pointer data, FT_UInt string_index)
Definition: svpscmap.h:77
void(* PS_FreeGlyphNameFunc)(FT_Pointer data, const char *name)
Definition: svpscmap.h:85
struct TT_FaceRec_ * TT_Face
Definition: tttypes.h:988