X-Git-Url: http://git.chise.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=makettf%2Fmakettf.cgi;h=d259910474dab302ae05ff676534c6bc0fe91922;hb=26a842dd448327643b89f2b681ac5b3c600722da;hp=a8fef42548f367598a8f2f3ef5742c5d2036bf1f;hpb=aa8f86756305a2231bfe0dcde7ea63ec7f246c94;p=chise%2Fkage.git diff --git a/makettf/makettf.cgi b/makettf/makettf.cgi index a8fef42..d259910 100755 --- a/makettf/makettf.cgi +++ b/makettf/makettf.cgi @@ -1,40 +1,60 @@ #!/usr/bin/perl + +# definition +$BASEDIR = "/var/www/makettf"; +$MAKETTF = "/usr/bin/perl $BASEDIR/makettf.pl"; +$LICENSE = 'Created by KAGE system. (http://fonts.jp/)'; +$TEMP="font"; +$HEADER_FILENAME = "head.txt"; +$PARTS_FILENAME = "parts.txt"; +$FOOTER_FILENAME = "foot.txt"; + +# initialize use utf8; binmode STDOUT, ":utf8"; - use CGI; $form = new CGI; -$FONTFORGE = "/usr/local/bin/fontforge"; -$PERL = "/usr/bin/perl"; -$RM = "/bin/rm"; -$LICENSE = 'Created by KAGE system. (http://fonts.jp/)'; -$TEMP="temp"; - -$RANDOM = sprintf("%05X", rand() * 0x100000); -$TEMPDIR = "/tmp/makettf_$RANDOM"; +# prepare working directory +$RANDOM = sprintf("%07X", rand(0x10000000)); +$TEMPDIR = "$BASEDIR/$RANDOM"; +$TEMPURL = "$RANDOM"; mkdir($TEMPDIR); -&makehead(); -&makefoot(); -&makeparts(); -$dummy = `$PERL makettf.pl $TEMPDIR $TEMP mincho 3`; -&sendfont(); +# main : divided for parent and child process +$| = 1; +$pid = fork(); +unless(defined $pid){ + &makeerror(); + exit; +} +if($pid > 0){ + &makepage(); +} else{ + close(STDIN); + close(STDOUT); + close(STDERR); + &makehead(); + &makefoot(); + &makeparts(); + $dummy = `$MAKETTF $TEMPDIR $TEMP mincho 3`; +} +exit; sub makehead{ - $fontname_en = $form->param('fontname-en'); - $fontname_en =~ s/[\;\&\#\"\'\%\\\$\:\!\=\~\^\`]//g; - $fontname_ja = $form->param('fontname-ja'); - $fontname_ja =~ s/[\;\&\#\"\'\%\\\$\:\!\=\~\^\`]//g; - utf8::decode($fontname_ja); - if($fontname_en eq ""){ - $fontname_en = "Untitled"; - } - if($fontname_ja eq ""){ - $fontname_ja = $fontname_en; - } - open FH, ">:utf8", "$TEMPDIR/head.txt"; - print FH <<"EOT"; + $fontname_en = $form->param('fontname-en'); + $fontname_en =~ s/[\;\&\#\"\'\%\\\$\:\!\=\~\^\`]//g; + $fontname_ja = $form->param('fontname-ja'); + $fontname_ja =~ s/[\;\&\#\"\'\%\\\$\:\!\=\~\^\`]//g; + utf8::decode($fontname_ja); + if($fontname_en eq ""){ + $fontname_en = "Untitled"; + } + if($fontname_ja eq ""){ + $fontname_ja = $fontname_en; + } + open FH, ">:utf8", "$TEMPDIR/$HEADER_FILENAME"; + print FH <<"EOT"; New() Reencode("UnicodeFull") SetTTFName(0x409,0,"$LICENSE") @@ -43,40 +63,71 @@ SetTTFName(0x409,4,"$fontname_en") SetTTFName(0x411,1,"$fontname_ja") SetTTFName(0x411,4,"$fontname_ja") EOT - close FH; + close FH; } sub makefoot{ - open FH, ">:utf8", "$TEMPDIR/foot.txt"; - close FH; + open FH, ">:utf8", "$TEMPDIR/$FOOTER_FILENAME"; + close FH; } sub makeparts{ - my $temp = $form->param('partsdata'); - utf8::decode($temp); - open FH, ">:utf8", "$TEMPDIR/parts.txt"; - print FH $temp; - close FH; + my $temp = $form->param('partsdata'); + utf8::decode($temp); + open FH, ">:utf8", "$TEMPDIR/$PARTS_FILENAME"; + print FH $temp; + close FH; +} + +sub makepage{ + print <<"EOT"; +Content-type: text/html; + + + + + + +フォントダウンロード + + +
+

フォント生成中

+

以下のリンクをクリックしてください。リンクが切れている場合は生成中ですのでもう少しお待ちください。6000グリフで25分程度かかります。

+

フォントのダウンロード

+

生成ログ(しばらくすると、ここに処理したグリフのUCSコードポイントが記録されます。通常の漢字は0u4E00から0u9FA5の間で、0u4E00から処理されます。0u9XXXまで到達せずに更新が止まった場合はデータにエラーがあり失敗している可能性があります。

+

戻る

+ +fonts.jp +
+ + +EOT } -sub sendfont{ - my $fdata = ""; - my $fsize = 0; - my @bdata; - print <<"EOT"; -Content-type: application/octet-stream -Content-Disposition: attachment; filename = $fontname_en.ttf +sub makeerror{ +print <<"EOT"; +Content-type: text/html; + + + + + + +フォント生成失敗 + + +
+

フォント生成失敗

+

もう一度戻ってやり直してください。

+

戻る

+ +fonts.jp +
+ + EOT - open FH, "<:utf8", "$TEMPDIR/$TEMP.ttf"; - while(1){ - $readed = read FH, $fdata, 1024; - utf8::decode($fdata); - print $fdata; - if($readed <= 0){ - last; - } - } - close FH; - $dummy = `$RM -r $TEMPDIR`; }