8 int main(int argc, char *argv[]){
9 KGString *tmp1, *tmp2, *test1, *test2, *filename;
11 char errbuf[errorFileSize];
23 kInput = 0; //ids or direct
24 kResultText = kg_string_new("");
31 tmp1 = kg_string_new((kgchar *)getenv("QUERY_STRING"));
32 if(tmp1->len != 0) type = 2;
34 //argv(detect after GET request)
36 tmp1 = kg_string_new((kgchar *)argv[1]);
37 if(tmp1->len != 0) type = 1;
41 tmp1 = kg_string_new((kgchar *)getenv("REDIRECT_URL"));
42 if(tmp1->len != 0) type = 3;
46 fprintf(stderr, "Request Error.\n");
52 if(type == 1 || type == 2){ //argv or GET request
54 cur = strchr(pos, '&');
55 tmp2 = kg_string_new(pos);
56 if(cur != NULL) kg_string_set_size(tmp2, cur - pos);
58 if(strncmp(tmp2->str, "shotai=mincho", 13) == 0) kShotai = kMincho;
59 else if(strncmp(tmp2->str, "shotai=gothic", 13) == 0) kShotai = kGothic;
60 else if(strncmp(tmp2->str, "shotai=skeleton", 15) == 0) kShotai = kGothic;
61 else if(strncmp(tmp2->str, "type=png", 8) == 0) kType = 0;
62 else if(strncmp(tmp2->str, "type=svg", 8) == 0) kType = 1;
63 else if(strncmp(tmp2->str, "type=eps", 8) == 0) kType = 2;
64 else if(strncmp(tmp2->str, "type=raw", 8) == 0) kType = 3;
65 else if(strncmp(tmp2->str, "input=ids", 9) == 0) kInput = 0;
66 else if(strncmp(tmp2->str, "input=directwithadjust", 22) == 0) kInput = 2;
67 else if(strncmp(tmp2->str, "input=direct", 12) == 0) kInput = 1;
68 else if(strncmp(tmp2->str, "size=24", 7) == 0) kSize = 24;
69 else if(strncmp(tmp2->str, "size=200", 8) == 0) kSize = 200;
70 else test1 = kg_string_new(tmp2->str);
71 if(cur == NULL) break;
75 else{ // redirected request
78 cur = strchr(pos, '/');
79 tmp2 = kg_string_new(pos);
80 if(cur != NULL) kg_string_set_size(tmp2, cur - pos);
82 if(strncmp(tmp2->str, "mincho", 6) == 0) kShotai = kMincho;
83 else if(strncmp(tmp2->str, "gothic", 6) == 0) kShotai = kGothic;
84 else if(strncmp(tmp2->str, "skeleton", 8) == 0) kShotai = kGothic;
85 else if(strncmp(tmp2->str, "v0.4", 4) == 0);
86 else test1 = kg_string_new(tmp2->str);
87 if(cur == NULL) break;
90 if(strncmp(test1->str + test1->len - 4, ".png", 4) == 0) kType = 0;
91 if(strncmp(test1->str + test1->len - 4, ".svg", 4) == 0) kType = 1;
92 if(strncmp(test1->str + test1->len - 4, ".eps", 4) == 0) kType = 2;
93 if(strncmp(test1->str + test1->len - 4, ".raw", 4) == 0) kType = 3;
94 kg_string_set_size(test1, test1->len - 4);
98 test2 = kg_string_new("");
100 kg_string_append(kResultText, "<?xml version=\"1.0\"?>\n");
101 kg_string_append(kResultText, "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.0//EN\" \"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd\">\n");
102 kg_string_append(kResultText, "<svg width=\"1024\" height=\"1024\" viewBox=\"0 0 1024 1024\">");
103 kg_string_append(kResultText, "<g style=\"fill: black; stroke: black\">");
105 else if(kType == 2){ //eps
106 kg_string_append(kResultText, "%!PS-Adobe-3.0 EPSF-3.0\n");
107 kg_string_append(kResultText, "%%BoundingBox: 0 -208 1024 816\n");
108 kg_string_append(kResultText, "%%Pages: 0\n");
109 kg_string_append(kResultText, "%%Title: ");
110 kg_string_append(kResultText, test1->str);
111 kg_string_append(kResultText, "\n");
112 kg_string_append(kResultText, "%%Creator: KAGE System\n");
113 kg_string_append(kResultText, "%%CreationDate: 00:00 1-1-2004\n");
114 kg_string_append(kResultText, "%%EndComments\n");
115 kg_string_append(kResultText, "%%EndProlog\n");
116 kg_string_append(kResultText, "%%Page \"");
117 kg_string_append(kResultText, test1->str);
118 kg_string_append(kResultText, "\" 1\n");
119 kg_string_append(kResultText, "newpath\n");
121 kageCanvas = initPng(canvasWidth, canvasHeight);
122 if(kInput == 0) generateGlyph(test1, test2);
124 convert99(test1, test2);
125 // kg_string_append(test2, test1->str);
128 if(test2->len != 0) test2 = finalAdjustment(test2);
130 if(kType == 0){ //png(image)
132 if(kInput != 1){ //0 and 2
133 test2 = CalcSizes(test2, 1);
136 drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
138 filename = kg_string_new(pngFilePath);
139 if(kShotai == kMincho) kg_string_append(filename, "mincho/");
140 else if(kShotai == kGothic) kg_string_append(filename, "gothic/");//skeleton??
141 kg_string_append(filename, test1->str);
142 kg_string_append(filename, ".png");
144 //skip for adjustment mode
145 //fp = fopen(filename->str, "w");
146 //writePng(pngWidth, pngHeight, kageCanvas, fp);
149 if(type != 1) fprintf(stdout, "Content-type: image/png\n\n");
150 writePng(pngWidth, pngHeight, kageCanvas, stdout);
152 closePng(pngWidth, pngHeight, kageCanvas);
155 err = fopen(errorFileName, "r");
156 fread(errbuf, sizeof(char), errorFileSize, err);
157 //printf("An error occurred.\r\n");
158 if(type != 1) fprintf(stdout, "Content-type: image/png\n\n");
159 fwrite(errbuf, sizeof(char), errorFileSize, stdout);
163 else if(kType == 1){ //svg(vector graphics)
165 test2 = CalcSizes(test2, 1);
167 drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
168 kg_string_append(kResultText, "</g></svg>\n");
169 if(type != 1) fprintf(stdout, "Content-type: image/svg-xml\n\n");
170 fprintf(stdout, "%s", kResultText->str);
173 if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
174 fprintf(stdout, "An error occurred.");
177 else if(kType == 2){ //eps(vector graphics)
179 test2 = CalcSizes(test2, 1);
181 drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
182 kg_string_append(kResultText, "fill\n");
183 kg_string_append(kResultText, "%%EOF\n");
184 if(type != 1) fprintf(stdout, "Content-type: application/postscript\n\n");
185 fprintf(stdout, "%s", kResultText->str);
188 if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
189 fprintf(stdout, "An error occurred.");
195 test2 = CalcSizes(test2, 1);
196 if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
197 fprintf(stdout, "result=%s", test2->str);
200 if(type != 1) fprintf(stdout, "Content-type: text/plain\n\n");
201 fprintf(stdout, "result=nodata");