X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=makettf%2Fmakettf.pl;h=1b0bfdc578893bef977be2ab8691310d5b3c63c9;hb=HEAD;hp=d8e5f00317e3f24c8a3e876b331d6889c0a7ef17;hpb=aa8f86756305a2231bfe0dcde7ea63ec7f246c94;p=chise%2Fkage.git diff --git a/makettf/makettf.pl b/makettf/makettf.pl old mode 100755 new mode 100644 index d8e5f00..1b0bfdc --- a/makettf/makettf.pl +++ b/makettf/makettf.pl @@ -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]}; - if($buhin{$_[0]} =~ m/(^|\$)99:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:(.+?)(\$|$)/){ - 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 = ; @@ -74,38 +42,43 @@ 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(){ $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); foreach(@temp){ - @temp2 = split(/ |\t/, $_); - $buhin{$temp2[0]} = $temp2[1]; + if($_ =~ m/:/){ + @temp2 = split(/ +|\t/, $_); + $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/^\[([^\]])\]$/){ @@ -121,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 = ""; @@ -138,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 = ; @@ -155,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); + } + } +} + +##############################################################################