8 void generateGlyphByIDS(const KGString *in, KGString *out, int flag){
\r
9 KGString *tmp1, *tmp2;
\r
11 //pass this method if 'in' is not UCS parts
\r
12 if((in->str)[0] != 'u'){
\r
13 generateGlyph(in, out);
\r
16 //pass this method if 'in' is place-variant-flag defined
\r
17 if(in->len < 5 && 7 < in->len){
\r
18 generateGlyph(in, out);
\r
22 tmp1 = kg_string_new(in->str);
\r
23 tmp2 = kg_string_new(in->str);
\r
26 if(1 <= flag && flag <= 7){
\r
27 if(tmp1->len != 7) kg_string_append(tmp1, "-");
\r
28 if(flag == 1) kg_string_append(tmp1, "01");
\r
29 else if(flag == 2) kg_string_append(tmp1, "02");
\r
30 else if(flag == 3) kg_string_append(tmp1, "03");
\r
31 else if(flag == 4) kg_string_append(tmp1, "04");
\r
32 else if(flag == 5) kg_string_append(tmp1, "05");
\r
33 else if(flag == 6) kg_string_append(tmp1, "06");
\r
36 generateGlyph(tmp1, out);
\r
37 if(out->len != 0) return;
\r
38 generateGlyph(tmp2, out);
\r
39 if(out->len != 0) return;
\r
43 void generateGlyph(const KGString *in, KGString *out){
\r
45 tmp = kg_string_new("");
\r
46 kg_string_set_size(out, 0);
\r
49 searchPartsData(in, tmp);
\r
51 tmp = CalcSizes(tmp, 1);
\r
52 out = kg_string_assign(out, tmp->str);
\r
57 searchAliasData(in, tmp);
\r
59 generateGlyph(tmp, out);
\r
60 if(out->len == 0) return;
\r
61 //save to cache ... not yet
\r
68 if(out->len == 0) return;
\r
69 //save to cache ... not yet
\r
74 void doCombine(const KGString *in, KGString *out){
\r
75 KGString *partIDS1, *partIDS2, *partIDS3;
\r
76 KGString *partStroke1, *partStroke2, *partStroke3;
\r
79 partIDS1 = kg_string_new("");
\r
80 partIDS2 = kg_string_new("");
\r
81 partIDS3 = kg_string_new("");
\r
82 partStroke1 = kg_string_new("");
\r
83 partStroke2 = kg_string_new("");
\r
84 partStroke3 = kg_string_new("");
\r
86 kg_string_set_size(out, 0);
\r
89 if(strncmp(in->str, "u2ff", 4) != 0) return;
\r
90 //switch by combine types
\r
91 switch((in->str)[4]){
\r
93 divideInto2(in, partIDS1, partIDS3);
\r
94 if(partIDS1->len == 0) return;
\r
96 generateGlyphByIDS(partIDS1, partStroke1, 1);
\r
97 if(partStroke1->len == 0) return;
\r
98 partStroke1 = CalcSizes(partStroke1, 0);
\r
99 generateGlyphByIDS(partIDS3, partStroke3, 2);
\r
100 if(partStroke3->len == 0) return;
\r
101 partStroke3 = CalcSizes(partStroke3, 0);
\r
104 divideInto2(in, partIDS1, partIDS3);
\r
105 if(partIDS1->len == 0) return;
\r
107 generateGlyphByIDS(partIDS1, partStroke1, 3);
\r
108 if(partStroke1->len == 0) return;
\r
109 partStroke1 = CalcSizes(partStroke1, 0);
\r
110 generateGlyphByIDS(partIDS3, partStroke3, 4);
\r
111 if(partStroke3->len == 0) return;
\r
112 partStroke3 = CalcSizes(partStroke3, 0);
\r
122 divideInto2(in, partIDS1, partIDS3);
\r
123 if(partIDS1->len == 0) return;
\r
125 generateGlyphByIDS(partIDS1, partStroke1, 5);
\r
126 if(partStroke1->len == 0) return;
\r
127 partStroke1 = CalcSizes(partStroke1, 0);
\r
128 generateGlyphByIDS(partIDS3, partStroke3, 6);
\r
129 if(partStroke3->len == 0) return;
\r
130 partStroke3 = CalcSizes(partStroke3, 0);
\r
133 divideInto3(in, partIDS1, partIDS2, partIDS3);
\r
134 if(partIDS1->len == 0) return;
\r
136 generateGlyphByIDS(partIDS1, partStroke1, 1);
\r
137 if(partStroke1->len == 0) return;
\r
138 partStroke1 = CalcSizes(partStroke1, 0);
\r
139 generateGlyphByIDS(partIDS2, partStroke2, 1);
\r
140 if(partStroke2->len == 0) return;
\r
141 partStroke2 = CalcSizes(partStroke2, 0);
\r
142 generateGlyphByIDS(partIDS3, partStroke3, 2);
\r
143 if(partStroke3->len == 0) return;
\r
144 partStroke3 = CalcSizes(partStroke3, 0);
\r
147 divideInto3(in, partIDS1, partIDS2, partIDS3);
\r
148 if(partIDS1->len == 0) return;
\r
150 generateGlyphByIDS(partIDS1, partStroke1, 3);
\r
151 if(partStroke1->len == 0) return;
\r
152 partStroke1 = CalcSizes(partStroke1, 0);
\r
153 generateGlyphByIDS(partIDS2, partStroke2, 3);
\r
154 if(partStroke2->len == 0) return;
\r
155 partStroke2 = CalcSizes(partStroke2, 0);
\r
156 generateGlyphByIDS(partIDS3, partStroke3, 4);
\r
157 if(partStroke3->len == 0) return;
\r
158 partStroke3 = CalcSizes(partStroke3, 0);
\r
161 switch((in->str)[4]){
\r
163 combineYoko2(partStroke1, partStroke3, result);
\r
166 combineTate2(partStroke1, partStroke3, result);
\r
169 combineYoko3(partStroke1, partStroke2, partStroke3, result);
\r
172 combineTate3(partStroke1, partStroke2, partStroke3, result);
\r
182 combineHame2(partStroke1, partStroke3, result);
\r
185 switch((in->str)[4]){
\r
196 addStrokeWithTransform(partStroke1, 1, result, out, 1);
\r
197 addStrokeWithTransform(partStroke3, 3, result, out, 1);
\r
201 addStrokeWithTransform(partStroke1, 1, result, out, 1);
\r
202 addStrokeWithTransform(partStroke2, 2, result, out, 1);
\r
203 addStrokeWithTransform(partStroke3, 3, result, out, 1);
\r
208 void drawGlyph(const KGString *in, const int mode){
\r
211 buf = convertStroke(in->str, buf, &j);
\r
212 for(i = 0; i < j; i++){
\r
213 if(mode == 0){ //normal
\r
214 dfDrawFont(buf[i * 11 + 0],
\r
226 else if(mode == 1){ //without decoration
\r
227 dfDrawFont(buf[i * 11 + 0],
\r