remove engine and glyphwiki from repogitry.
[chise/kage.git] / makettf / makettf.pl
old mode 100755 (executable)
new mode 100644 (file)
index 7eb22bc..1b0bfdc
@@ -1,4 +1,13 @@
 #!/usr/bin/perl
+
+$FONTFORGE = "export LANG=utf-8; /usr/bin/fontforge";
+$MAKEGLYPH = "/usr/bin/js ./makeglyph.js";
+$MV = "/bin/mv";
+$HEADER_FILENAME = "head.txt";
+$PARTS_FILENAME = "parts.txt";
+$FOOTER_FILENAME = "foot.txt";
+$TEMPNAME = "temp";
+
 use utf8;
 use CGI;
 binmode STDOUT, ":utf8";
@@ -10,8 +19,6 @@ if(scalar(@ARGV) != 4){
   exit;
 }
 
-$FONTFORGE = "/usr/local/bin/fontforge";
-$PERL = "/usr/bin/perl";
 $WORKDIR=$ARGV[0];
 $WORKNAME=$ARGV[1];
 $SHOTAI=$ARGV[2];
@@ -22,51 +29,12 @@ unlink "$WORKDIR/$WORKNAME.scr";
 unlink "$WORKDIR/$WORKNAME.ttf";
 mkdir "$WORKDIR/build";
 
-sub addglyph{
-    my $buffer =<<"EOT";
-Print(0u$_[0])
-Select(0u$_[0])
-Clear()
-Import("$WORKDIR/build/$_[0].svg")
-Scale(500)
-Move(400, -400)
-RemoveOverlap()
-Simplify()
-SetWidth(1000)
-Move(0, 50)
-RoundToInt()
-AutoHint()
-EOT
-    open FH, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
-    print FH $buffer;
-    close FH;
-}
-
-sub makefont{
-    my $buffer = "Generate(\"$WORKDIR/$WORKNAME.ttf\", \"\", 0)\n";
-    $buffer .= "Quit()\n";
-    open FH, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
-    print FH $buffer;
-    close FH;
-    
-    $buffer = `export LANG=utf-8; $FONTFORGE -script $WORKDIR/$WORKNAME.scr > $WORKDIR/$WORKNAME.log 2>&1`;
-    #open FH, ">>:utf8", "$WORKDIR/$WORKNAME.log";
-    #print FH $buffer;
-    #close FH;
-}
-
-sub addsubset{
-    $subset{$_[0]} = $buhin{$_[0]};
-    while($buhin{$_[0]} =~ m/(^|\$)99:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:(.+?)(\$|$)/gc){
-       if(!exists($subset{$2})){
-           &addsubset($2);
-       }
-    }
-}
+open LOG, ">>:utf8", "$WORKDIR/$WORKNAME.log";
+select((select(LOG), $| = 1)[0]);
 
 # initialize
-if(-e "$WORKDIR/head.txt"){
-  open FH, "<:utf8", "$WORKDIR/head.txt";
+if(-e "$WORKDIR/$HEADER_FILENAME"){
+  open FH, "<:utf8", "$WORKDIR/$HEADER_FILENAME";
   open FH2, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
   while(!eof FH){
     my $buffer = <FH>;
@@ -74,29 +42,31 @@ if(-e "$WORKDIR/head.txt"){
   }
   close FH;
   close FH2;
+  
+  print LOG "Prepare header file ... done.\n";
 }
 else{
-  open FH, ">>:utf8", "$WORKDIR/$WORKNAME.log";
-  print FH "No header file.\n";
-  close FH;
+  print LOG "No header file.\n";
+  close LOG;
   exit;
 }
 
 # parse buhin
 %buhin = ();
-if(-e "$WORKDIR/parts.txt"){
-  open FH, "<:utf8", "$WORKDIR/parts.txt";
+if(-e "$WORKDIR/$PARTS_FILENAME"){
+  open FH, "<:utf8", "$WORKDIR/$PARTS_FILENAME";
   my $buffer = "";
   while(<FH>){
     $buffer .= $_;
   }
   close FH;
   $temp = $buffer;
+  
+  print LOG "Prepare parts file ... done.\n";
 }
 else{
-  open FH, ">>:utf8", "$WORKDIR/$WORKNAME.log";
-  print FH "No parts file.\n";
-  close FH;
+  print LOG "No parts file.\n";
+  close LOG;
   exit;
 }
 @temp = split(/\r\n|\r|\n/, $temp);
@@ -106,8 +76,9 @@ foreach(@temp){
     $buhin{$temp2[0]} = $temp2[1];
   }
 }
+print LOG "Prepare parts data ... done.\n";
 
-# parse target codepoint
+# parse target code point
 %target = ();
 foreach(sort(keys %buhin)){
   if($_ =~ m/^\[([^\]])\]$/){
@@ -123,11 +94,14 @@ foreach(sort(keys %buhin)){
   $name = $_;
   $target{$target} = $name;
 }
+print LOG "Prepare target code point ... done.\n";
 
 # make glyph for each target
+print LOG "Prepare each glyph.\n";
 foreach(sort(keys(%target))){
   $code = $_;
-  $target = $target{$_};
+  print LOG "$code : ";
+  $target = $target{$code};
   %subset = ();
   &addsubset($target);
   $partsdata = "";
@@ -140,16 +114,18 @@ foreach(sort(keys(%target))){
   utf8::encode($partsdata);
   $partsdata =~ s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
   $partsdata =~ s/\s/+/g;
-  $svg =  `/usr/bin/js makeglyph.js $target $partsdata $SHOTAI $WEIGHT`;
+  $svg =  `$MAKEGLYPH $target $partsdata $SHOTAI $WEIGHT`;
+  print LOG "$MAKEGLYPH $target $partsdata $SHOTAI $WEIGHT\n";
   open FH, ">$WORKDIR/build/$code.svg";
   print FH $svg;
   close FH;
   &addglyph($code);
 }
+print LOG "Prepare each glyph ... done.\n";
 
 # scripts footer
-if(-e "$WORKDIR/foot.txt"){
-  open FH, "<:utf8", "$WORKDIR/foot.txt";
+if(-e "$WORKDIR/$FOOTER_FILENAME"){
+  open FH, "<:utf8", "$WORKDIR/$FOOTER_FILENAME";
   open FH2, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
   while(!eof FH){
     my $buffer = <FH>;
@@ -157,12 +133,62 @@ if(-e "$WORKDIR/foot.txt"){
   }
   close FH;
   close FH2;
+  
+  print LOG "Prepare footer file ... done.\n";
 }
 else{
-  open FH, ">>:utf8", "$WORKDIR/$WORKNAME.log";
-  print FH "No footer file.\n";
-  close FH;
+  print LOG "No footer file.\n";
+  close LOG;
   exit;
 }
 
+close LOG;
 &makefont;
+
+##############################################################################
+
+sub addglyph{
+  my $buffer =<<"EOT";
+Print(0u$_[0])
+Select(0u$_[0])
+Clear()
+Import("$WORKDIR/build/$_[0].svg")
+Scale(500)
+Move(400, -400)
+RemoveOverlap()
+Simplify()
+SetWidth(1000)
+Move(0, 50)
+RoundToInt()
+AutoHint()
+EOT
+  open FH, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
+  print FH $buffer;
+  close FH;
+}
+
+##############################################################################
+
+sub makefont{
+  my $buffer = "Generate(\"$WORKDIR/$WORKNAME.ttf\", \"\", 0)\n";
+  $buffer .= "Quit()\n";
+  open FH, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
+  print FH $buffer;
+  close FH;
+  
+  $buffer = `export LANG=utf-8; $FONTFORGE -script $WORKDIR/$WORKNAME.scr >> $WORKDIR/$WORKNAME.log 2>&1`;
+}
+
+##############################################################################
+
+sub addsubset{
+  $subset{$_[0]} = $buhin{$_[0]};
+  my $buffer = '$'.$buhin{$_[0]}.'$';
+  while($buffer =~ m/\$99:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^\$]*)/gc){
+    if(!exists($subset{$1})){
+      &addsubset($1);
+    }
+  }
+}
+
+##############################################################################