5 //#include <db2/db_185.h>
\r
12 void generateGlyphByIDS(const GString *in, GString *out, int flag){
\r
13 GString *tmp1, *tmp2, *tmp3, *tmp4;
\r
15 //pass this method if 'in' is not UCS parts
\r
16 if((in->str)[0] != 'u'){
\r
17 generateGlyph(in, out);
\r
20 //pass this method if 'in' is place-variant-flag defined
\r
21 if(in->len < 5 && 7 < in->len){
\r
22 generateGlyph(in, out);
\r
26 tmp1 = g_string_new(in->str);
\r
27 tmp2 = g_string_new(in->str);
\r
28 // tmp3 = g_string_new(in->str);
\r
29 // tmp4 = g_string_new(in->str);
\r
31 //append design flag
\r
32 // if(kDesign == 10) g_string_append(tmp1, "-10");
\r
33 // else if(kDesign == 11) g_string_append(tmp1, "-11");
\r
34 // else if(kDesign == 20) g_string_append(tmp1, "-20");
\r
35 // else if(kDesign == 30) g_string_append(tmp1, "-30");
\r
36 // else if(kDesign == 40) g_string_append(tmp1, "-40");
\r
37 // else g_string_append(tmp1, "-00");
\r
38 // if(kDesign == 10) g_string_append(tmp2, "-10");
\r
39 // else if(kDesign == 11) g_string_append(tmp2, "-11");
\r
40 // else if(kDesign == 20) g_string_append(tmp2, "-20");
\r
41 // else if(kDesign == 30) g_string_append(tmp2, "-30");
\r
42 // else if(kDesign == 40) g_string_append(tmp2, "-40");
\r
43 // else g_string_append(tmp2, "-00");
\r
44 // g_string_append(tmp3, "-00");
\r
45 // g_string_append(tmp4, "-00");
\r
48 if(1 <= flag && flag <= 7){
\r
49 if(tmp1->len != 7) g_string_append(tmp1, "-");
\r
50 if(flag == 1) g_string_append(tmp1, "01");
\r
51 else if(flag == 2) g_string_append(tmp1, "02");
\r
52 else if(flag == 3) g_string_append(tmp1, "03");
\r
53 else if(flag == 4) g_string_append(tmp1, "04");
\r
54 else if(flag == 5) g_string_append(tmp1, "05");
\r
55 else if(flag == 6) g_string_append(tmp1, "06");
\r
58 // g_string_append(tmp2, "00");
\r
59 // if(flag == 1) g_string_append(tmp3, "01");
\r
60 // else if(flag == 2) g_string_append(tmp3, "02");
\r
61 // else if(flag == 3) g_string_append(tmp3, "03");
\r
62 // else if(flag == 4) g_string_append(tmp3, "04");
\r
63 // else if(flag == 5) g_string_append(tmp3, "05");
\r
64 // else if(flag == 6) g_string_append(tmp3, "06");
\r
65 // else g_string_append(tmp3, "00");
\r
66 // g_string_append(tmp4, "00");
\r
68 generateGlyph(tmp1, out);
\r
69 if(out->len != 0) return;
\r
70 generateGlyph(tmp2, out);
\r
71 if(out->len != 0) return;
\r
72 // generateGlyph(tmp3, out);
\r
73 // if(out->len != 0) return;
\r
74 // generateGlyph(tmp4, out);
\r
78 void generateGlyph(const GString *in, GString *out){
\r
80 tmp = g_string_new("");
\r
81 g_string_set_size(out, 0);
\r
83 // in2 = g_string_new(in->str);
\r
86 // if(*(in2->str) == 'u' && (in2->len == 4 || in2->len == 5)){
\r
87 // //append design flag
\r
88 // if(kDesign == 10) g_string_append(in2, "-1000");
\r
89 // else if(kDesign == 11) g_string_append(in2, "-1100");
\r
90 // else if(kDesign == 20) g_string_append(in2, "-2000");
\r
91 // else if(kDesign == 30) g_string_append(in2, "-3000");
\r
92 // else if(kDesign == 40) g_string_append(in2, "-4000");
\r
93 // else g_string_append(in2, "-0000");
\r
95 //search from parts(1st)
\r
96 // searchPartsData(in2, tmp);
\r
97 // if(tmp->len != 0){
\r
98 // g_string_assign(out, tmp->str);
\r
102 //search from alias(1st)
\r
103 // searchAliasData(in2, tmp);
\r
104 // if(tmp->len != 0){
\r
105 // generateGlyph(tmp, out);
\r
106 // if(out->len == 0) return;
\r
107 // //save to cache ... not yet
\r
113 //search from parts(2nd)
\r
114 searchPartsData(in, tmp);
\r
116 g_string_assign(out, tmp->str);
\r
120 //search from alias(2nd)
\r
121 searchAliasData(in, tmp);
\r
123 generateGlyph(tmp, out);
\r
124 if(out->len == 0) return;
\r
125 //save to cache ... not yet
\r
131 doCombine(in, out);
\r
132 if(out->len == 0) return;
\r
133 //save to cache ... not yet
\r
138 void doCombine(const GString *in, GString *out){
\r
139 GString *partIDS1, *partIDS2, *partIDS3;
\r
140 GString *partStroke1, *partStroke2, *partStroke3;
\r
143 partIDS1 = g_string_new("");
\r
144 partIDS2 = g_string_new("");
\r
145 partIDS3 = g_string_new("");
\r
146 partStroke1 = g_string_new("");
\r
147 partStroke2 = g_string_new("");
\r
148 partStroke3 = g_string_new("");
\r
150 g_string_set_size(out, 0);
\r
153 if(strncmp(in->str, "u2ff", 4) != 0) return;
\r
154 //switch by combine types
\r
155 switch((in->str)[4]){
\r
157 divideInto2(in, partIDS1, partIDS3);
\r
158 if(partIDS1->len == 0) return;
\r
160 generateGlyphByIDS(partIDS1, partStroke1, 1);
\r
161 if(partStroke1->len == 0) return;
\r
162 partStroke1 = CalcSizes(partStroke1, 0);
\r
163 generateGlyphByIDS(partIDS3, partStroke3, 2);
\r
164 if(partStroke3->len == 0) return;
\r
165 partStroke3 = CalcSizes(partStroke3, 0);
\r
168 divideInto2(in, partIDS1, partIDS3);
\r
169 if(partIDS1->len == 0) return;
\r
171 generateGlyphByIDS(partIDS1, partStroke1, 3);
\r
172 if(partStroke1->len == 0) return;
\r
173 partStroke1 = CalcSizes(partStroke1, 0);
\r
174 generateGlyphByIDS(partIDS3, partStroke3, 4);
\r
175 if(partStroke3->len == 0) return;
\r
176 partStroke3 = CalcSizes(partStroke3, 0);
\r
186 divideInto2(in, partIDS1, partIDS3);
\r
187 if(partIDS1->len == 0) return;
\r
189 generateGlyphByIDS(partIDS1, partStroke1, 5);
\r
190 if(partStroke1->len == 0) return;
\r
191 partStroke1 = CalcSizes(partStroke1, 0);
\r
192 generateGlyphByIDS(partIDS3, partStroke3, 6);
\r
193 if(partStroke3->len == 0) return;
\r
194 partStroke3 = CalcSizes(partStroke3, 0);
\r
197 divideInto3(in, partIDS1, partIDS2, partIDS3);
\r
198 if(partIDS1->len == 0) return;
\r
200 generateGlyphByIDS(partIDS1, partStroke1, 1);
\r
201 if(partStroke1->len == 0) return;
\r
202 partStroke1 = CalcSizes(partStroke1, 0);
\r
203 generateGlyphByIDS(partIDS2, partStroke2, 1);
\r
204 if(partStroke2->len == 0) return;
\r
205 partStroke2 = CalcSizes(partStroke2, 0);
\r
206 generateGlyphByIDS(partIDS3, partStroke3, 2);
\r
207 if(partStroke3->len == 0) return;
\r
208 partStroke3 = CalcSizes(partStroke3, 0);
\r
211 divideInto3(in, partIDS1, partIDS2, partIDS3);
\r
212 if(partIDS1->len == 0) return;
\r
214 generateGlyphByIDS(partIDS1, partStroke1, 3);
\r
215 if(partStroke1->len == 0) return;
\r
216 partStroke1 = CalcSizes(partStroke1, 0);
\r
217 generateGlyphByIDS(partIDS2, partStroke2, 3);
\r
218 if(partStroke2->len == 0) return;
\r
219 partStroke2 = CalcSizes(partStroke2, 0);
\r
220 generateGlyphByIDS(partIDS3, partStroke3, 4);
\r
221 if(partStroke3->len == 0) return;
\r
222 partStroke3 = CalcSizes(partStroke3, 0);
\r
225 switch((in->str)[4]){
\r
227 combineYoko2(partStroke1, partStroke3, result);
\r
230 combineTate2(partStroke1, partStroke3, result);
\r
233 combineYoko3(partStroke1, partStroke2, partStroke3, result);
\r
236 combineTate3(partStroke1, partStroke2, partStroke3, result);
\r
246 combineHame2(partStroke1, partStroke3, result);
\r
249 switch((in->str)[4]){
\r
260 addStrokeWithTransform(partStroke1, 1, result, out, 1);
\r
261 addStrokeWithTransform(partStroke3, 3, result, out, 1);
\r
265 addStrokeWithTransform(partStroke1, 1, result, out, 1);
\r
266 addStrokeWithTransform(partStroke2, 2, result, out, 1);
\r
267 addStrokeWithTransform(partStroke3, 3, result, out, 1);
\r
272 void drawGlyph(const GString *in, const int mode){
\r
275 buf = convertStroke(in->str, buf, &j);
\r
276 for(i = 0; i < j; i++){
\r
277 if(mode == 0){ //normal
\r
278 dfDrawFont(buf[i * 11 + 0],
\r
290 else if(mode == 1){ //without decoration
\r
291 dfDrawFont(buf[i * 11 + 0],
\r