Added final adjustment function.
authorKoichi KAMICHI <kamichi@fonts.jp>
Fri, 25 Feb 2005 03:57:04 +0000 (03:57 +0000)
committerKoichi KAMICHI <kamichi@fonts.jp>
Fri, 25 Feb 2005 03:57:04 +0000 (03:57 +0000)
kagecgi/kage.h
kagecgi/kagecgi.c
kagecgi/kagecgi.h
kagecgi/kageeg.c
kagecgi/kagetool.c

index 1be95f9..9809dad 100755 (executable)
@@ -41,6 +41,9 @@ int kShotai;
 #define FLAG_SURROUND_TOP 4
 #define FLAG_SURROUND_BOTTOM 8
 
+#define DRAW_GLYPH_MODE_NORMAL 0
+#define DRAW_GLYPH_MODE_WITHOUT_DECORATION 1
+
 typedef struct _kPoint{
        double X;
        double Y;
index bfd494a..d14e1d5 100755 (executable)
@@ -125,13 +125,15 @@ int main(int argc, char *argv[]){
     //   kg_string_append(test2, test1->str);
   }
   
+  if(test2->len != 0) test2 = finalAdjustment(test2);
+  
   if(kType == 0){ //png(image)
     if(test2->len != 0){
       if(kInput != 1){ //0 and 2
        test2 = CalcSizes(test2, 1);
       }
       DrawBox();
-      drawGlyph(test2, 0);
+      drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
       //output to file
       filename = kg_string_new(pngFilePath);
       if(kShotai == kMincho) kg_string_append(filename, "mincho/");
@@ -162,7 +164,7 @@ int main(int argc, char *argv[]){
     if(test2->len != 0){
       test2 = CalcSizes(test2, 1);
       kMode = 1;
-      drawGlyph(test2, 0);
+      drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
       kg_string_append(kResultText, "</g></svg>\n");
       if(type != 1) fprintf(stdout, "Content-type: image/svg-xml\n\n");
       fprintf(stdout, "%s", kResultText->str);
@@ -176,7 +178,7 @@ int main(int argc, char *argv[]){
     if(test2->len != 0){
       test2 = CalcSizes(test2, 1);
       kMode = 2;
-      drawGlyph(test2, 0);
+      drawGlyph(test2, DRAW_GLYPH_MODE_NORMAL);
       kg_string_append(kResultText, "fill\n");
       kg_string_append(kResultText, "%%EOF\n");
       if(type != 1) fprintf(stdout, "Content-type: application/postscript\n\n");
index 041b9bf..ed1e55a 100755 (executable)
@@ -45,6 +45,7 @@ void searchAliasData(const KGString *in, KGString *out);
 void searchCacheData(const KGString *in, KGString *out);
 void doCombine(const KGString *in, KGString *out);
 void drawGlyph(const KGString *in, const int mode);
+KGString* finalAdjustment(const KGString *in);
 
 int isIDS(const KGString *in);
 void divideInto2(const KGString *in, KGString *partIDS1, KGString *partIDS3);
index 52944a0..a6e447c 100755 (executable)
@@ -242,7 +242,7 @@ void drawGlyph(const KGString *in, const int mode){
   int *buf;
   buf = convertStroke(in->str, buf, &j);
   for(i = 0; i < j; i++){
-    if(mode == 0){ //normal
+    if(mode == DRAW_GLYPH_MODE_NORMAL){ //normal
       dfDrawFont(buf[i * 11 + 0],
                  buf[i * 11 + 1],
                  buf[i * 11 + 2],
@@ -255,7 +255,7 @@ void drawGlyph(const KGString *in, const int mode){
                  buf[i * 11 + 9],
                  buf[i * 11 + 10]);
     }
-    else if(mode == 1){ //without decoration
+    else if(mode == DRAW_GLYPH_MODE_WITHOUT_DECORATION){ //without decoration
       dfDrawFont(buf[i * 11 + 0],
                  0,
                  0,
@@ -272,3 +272,33 @@ void drawGlyph(const KGString *in, const int mode){
   free(buf);
 }
 
+KGString* finalAdjustment(const KGString *in){
+  int i, j, k, l, m, n;
+  int *buf;
+  KGString *temp;
+  
+  n = kShotai;
+  kShotai = kGothic;
+  temp = kg_string_new("");
+  
+  DrawBox();
+  drawGlyph(in, DRAW_GLYPH_MODE_WITHOUT_DECORATION);
+  
+  buf = convertStroke(in->str, buf, &j);
+  for(i = 0; i < j; i++){
+    m = 0;
+    if(buf[i * 11 + 2] == 13){
+      for(k = buf[i * 11 + 5] - kMinWidthT; k < buf[i * 11 + 5] + kMinWidthT; k++){
+        for(l = buf[i * 11 + 6] + kWidth * kKakato * 0.5; l < buf[i * 11 + 6] + kWidth * kKakato + pngHeight * 0.1; l++){
+          if(0 <= l && l < canvasHeight && 0 <= k && k < canvasHeight && kageCanvas[l][k] != kWhite) m++;
+        }
+      }
+      if(m != 0) buf[i * 11 + 2] = 23;
+    }
+  }
+  convertArray(buf, temp, j, 0);
+  free(buf);
+  kShotai = n;
+  return kg_string_new(temp->str);
+}
+
index 046781e..b687bd0 100755 (executable)
@@ -58,7 +58,7 @@ void PartsWidth(const KGString *in, int *lx, int *rx){
   DrawBox();
   tempShotai = kShotai;
   kShotai = kGothic;
-  drawGlyph(in, 1);
+  drawGlyph(in, DRAW_GLYPH_MODE_WITHOUT_DECORATION);
   kShotai = tempShotai;
   DotsWidth(lx, rx);
   /*
@@ -122,7 +122,7 @@ void PartsHeight(const KGString *in, int *ly, int *ry){
   DrawBox();
   tempShotai = kShotai;
   kShotai = kGothic;
-  drawGlyph(in, 1);
+  drawGlyph(in, DRAW_GLYPH_MODE_WITHOUT_DECORATION);
   kShotai = tempShotai;
   DotsHeight(ly, ry);
        /*
@@ -463,7 +463,7 @@ void CalcOptions(const KGString *in, int *mitsudo, int *flag, double *yoko, doub
   DrawBox();
   tempShotai = kShotai;
   kShotai = kGothic;
-  drawGlyph(in, 1);
+  drawGlyph(in, DRAW_GLYPH_MODE_WITHOUT_DECORATION);
   kShotai = tempShotai;
   DotsWidth(&dlx1, &drx1);
   DotsHeight(&dly1, &dry1);