zenilib: zenilib/jni/external/freetype2/src/pfr/pfrcmap.c Source File

zenilib 0.5.3.0

- Main Page
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
pfrcmap.c
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* pfrcmap.c */
4 /* */
5 /* FreeType PFR cmap handling (body). */
6 /* */
7 /* Copyright 2002, 2007, 2009 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 "pfrcmap.h"
20 #include "pfrobjs.h"
21
22 #include "pfrerror.h"
23
24
25 FT_CALLBACK_DEF( FT_Error )
26 pfr_cmap_init( PFR_CMap cmap )
27 {
28 FT_Error error = PFR_Err_Ok;
29 PFR_Face face = (PFR_Face)FT_CMAP_FACE( cmap );
30
31
32 cmap->num_chars = face->phy_font.num_chars;
33 cmap->chars = face->phy_font.chars;
34
35 /* just for safety, check that the character entries are correctly */
36 /* sorted in increasing character code order */
37 {
38 FT_UInt n;
39
40
41 for ( n = 1; n < cmap->num_chars; n++ )
42 {
43 if ( cmap->chars[n - 1].char_code >= cmap->chars[n].char_code )
44 {
45 error = PFR_Err_Invalid_Table;
46 goto Exit;
47 }
48 }
49 }
50
51 Exit:
52 return error;
53 }
54
55
56 FT_CALLBACK_DEF( void )
57 pfr_cmap_done( PFR_CMap cmap )
58 {
59 cmap->chars = NULL;
60 cmap->num_chars = 0;
61 }
62
63
64 FT_CALLBACK_DEF( FT_UInt )
65 pfr_cmap_char_index( PFR_CMap cmap,
66 FT_UInt32 char_code )
67 {
68 FT_UInt min = 0;
69 FT_UInt max = cmap->num_chars;
70 FT_UInt mid;
71 PFR_Char gchar;
72
73
74 while ( min < max )
75 {
76 mid = min + ( max - min ) / 2;
77 gchar = cmap->chars + mid;
78
79 if ( gchar->char_code == char_code )
80 return mid + 1;
81
82 if ( gchar->char_code < char_code )
83 min = mid + 1;
84 else
85 max = mid;
86 }
87 return 0;
88 }
89
90
91 FT_CALLBACK_DEF( FT_UInt32 )
92 pfr_cmap_char_next( PFR_CMap cmap,
93 FT_UInt32 *pchar_code )
94 {
95 FT_UInt result = 0;
96 FT_UInt32 char_code = *pchar_code + 1;
97
98
99 Restart:
100 {
101 FT_UInt min = 0;
102 FT_UInt max = cmap->num_chars;
103 FT_UInt mid;
104 PFR_Char gchar;
105
106
107 while ( min < max )
108 {
109 mid = min + ( ( max - min ) >> 1 );
110 gchar = cmap->chars + mid;
111
112 if ( gchar->char_code == char_code )
113 {
114 result = mid;
115 if ( result != 0 )
116 {
117 result++;
118 goto Exit;
119 }
120
121 char_code++;
122 goto Restart;
123 }
124
125 if ( gchar->char_code < char_code )
126 min = mid+1;
127 else
128 max = mid;
129 }
130
131 /* we didn't find it, but we have a pair just above it */
132 char_code = 0;
133
134 if ( min < cmap->num_chars )
135 {
136 gchar = cmap->chars + min;
137 result = min;
138 if ( result != 0 )
139 {
140 result++;
141 char_code = gchar->char_code;
142 }
143 }
144 }
145
146 Exit:
147 *pchar_code = char_code;
148 return result;
149 }
150
151
152 FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
153 pfr_cmap_class_rec =
154 {
155 sizeof ( PFR_CMapRec ),
156
157 (FT_CMap_InitFunc) pfr_cmap_init,
158 (FT_CMap_DoneFunc) pfr_cmap_done,
159 (FT_CMap_CharIndexFunc)pfr_cmap_char_index,
160 (FT_CMap_CharNextFunc) pfr_cmap_char_next,
161
162 NULL, NULL, NULL, NULL, NULL
163 };
164
165
166 /* END */
FT_Error
int FT_Error
Definition: fttypes.h:296
FT_CMAP_FACE
#define FT_CMAP_FACE(x)
Definition: ftobjs.h:145
NULL
#define NULL
Definition: ftobjs.h:61
FT_CMap_CharIndexFunc
FT_UInt(* FT_CMap_CharIndexFunc)(FT_CMap cmap, FT_UInt32 char_code)
Definition: ftobjs.h:157
n
GLclampd n
Definition: glew.h:7287
FT_CMap_CharNextFunc
FT_UInt(* FT_CMap_CharNextFunc)(FT_CMap cmap, FT_UInt32 *achar_code)
Definition: ftobjs.h:161
pfrcmap.h
pfrerror.h
PFR_CharRec_::char_code
FT_UInt char_code
Definition: pfrtypes.h:174
pfr_cmap_char_index
pfr_cmap_char_index(PFR_CMap cmap, FT_UInt32 char_code)
Definition: pfrcmap.c:65
pfrobjs.h
FT_CMap_DoneFunc
void(* FT_CMap_DoneFunc)(FT_CMap cmap)
Definition: ftobjs.h:154
pfr_cmap_char_next
pfr_cmap_char_next(PFR_CMap cmap, FT_UInt32 *pchar_code)
Definition: pfrcmap.c:92
result
GLuint64EXT * result
Definition: glew.h:12708
error
FT_Error error
Definition: cffdrivr.c:407
cmap
Colormap cmap
Definition: glewinfo_tail.c:225
pfr_cmap_done
pfr_cmap_done(PFR_CMap cmap)
Definition: pfrcmap.c:57
face
GLenum face
Definition: gl2ext.h:1490
pfr_cmap_class_rec
FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec pfr_cmap_class_rec
Definition: pfrcmap.c:153
FT_CALLBACK_DEF
#define FT_CALLBACK_DEF(x)
Definition: ftconfig.h:554
PFR_CMapRec
FT_BEGIN_HEADER struct PFR_CMapRec_ PFR_CMapRec
FT_UInt
unsigned int FT_UInt
Definition: fttypes.h:227
FT_CMap_InitFunc
FT_Error(* FT_CMap_InitFunc)(FT_CMap cmap, FT_Pointer init_data)
Definition: ftobjs.h:150
PFR_Face
typedefFT_BEGIN_HEADER struct PFR_FaceRec_ * PFR_Face
Definition: pfrobjs.h:27
min
#define min(x, y)
Definition: os.h:75
PFR_CMap
FT_BEGIN_HEADER struct PFR_CMapRec_ * PFR_CMap
FT_CMap_ClassRec_
Definition: ftobjs.h:190
max
#define max(x, y)
Definition: os.h:79
pfr_cmap_init
pfr_cmap_init(PFR_CMap cmap)
Definition: pfrcmap.c:26
PFR_CharRec_
Definition: pfrtypes.h:172
FT_CALLBACK_TABLE_DEF
#define FT_CALLBACK_TABLE_DEF
Definition: ftconfig.h:564