Merge remote-tracking branch 'origin/master'
[chise/kage.git] / makettf / makettf.cgi
1 #!/usr/bin/perl
2
3 # definition
4 $BASEDIR = "/var/www/makettf";
5 $MAKETTF = "/usr/bin/perl $BASEDIR/makettf.pl";
6 $LICENSE = 'Created by KAGE system. (http://fonts.jp/)';
7 $TEMP="font";
8 $HEADER_FILENAME = "head.txt";
9 $PARTS_FILENAME = "parts.txt";
10 $FOOTER_FILENAME = "foot.txt";
11
12 # initialize
13 use utf8;
14 binmode STDOUT, ":utf8";
15 use CGI;
16 $form = new CGI;
17
18 # prepare working directory
19 $RANDOM = sprintf("%07X", rand(0x10000000));
20 $TEMPDIR = "$BASEDIR/$RANDOM";
21 $TEMPURL = "$RANDOM";
22 mkdir($TEMPDIR);
23
24 # main : divided for parent and child process
25 $| = 1;
26 $pid = fork();
27 unless(defined $pid){
28   &makeerror();
29   exit;
30 }
31 if($pid > 0){
32   &makepage();
33 } else{
34   close(STDIN);
35   close(STDOUT);
36   close(STDERR);
37   &makehead();
38   &makefoot();
39   &makeparts();
40   $dummy = `$MAKETTF $TEMPDIR $TEMP mincho 3`;
41 }
42 exit;
43
44 sub makehead{
45   $fontname_en = $form->param('fontname-en');
46   $fontname_en =~ s/[\;\&\#\"\'\%\\\$\:\!\=\~\^\`]//g;
47   $fontname_ja = $form->param('fontname-ja');
48   $fontname_ja =~ s/[\;\&\#\"\'\%\\\$\:\!\=\~\^\`]//g;
49   utf8::decode($fontname_ja);
50   if($fontname_en eq ""){
51     $fontname_en = "Untitled";
52   }
53   if($fontname_ja eq ""){
54     $fontname_ja = $fontname_en;
55   }
56   open FH, ">:utf8", "$TEMPDIR/$HEADER_FILENAME";
57   print FH <<"EOT";
58 New()
59 Reencode("UnicodeFull")
60 SetTTFName(0x409,0,"$LICENSE")
61 SetTTFName(0x409,1,"$fontname_en")
62 SetTTFName(0x409,4,"$fontname_en")
63 SetTTFName(0x411,1,"$fontname_ja")
64 SetTTFName(0x411,4,"$fontname_ja")
65 EOT
66   close FH;
67 }
68
69 sub makefoot{
70   open FH, ">:utf8", "$TEMPDIR/$FOOTER_FILENAME";
71   close FH;
72 }
73
74 sub makeparts{
75   my $temp = $form->param('partsdata');
76   utf8::decode($temp);
77   open FH, ">:utf8", "$TEMPDIR/$PARTS_FILENAME";
78   print FH $temp;
79   close FH;
80 }
81
82 sub makepage{
83   print <<"EOT";
84 Content-type: text/html;
85
86 <!DOCTYPE html
87     PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
88     "http://www.w3.org/TR/html4/loose.dtd">
89 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
90 <link rel="stylesheet" type="text/css" href="http://fonts.jp/green.css">
91 <html>
92 <head>
93 <title>フォントダウンロード</title>
94 </head>
95 <body>
96 <div class="main">
97 <h1>フォント生成中</h1>
98 <p>以下のリンクをクリックしてください。リンクが切れている場合は生成中ですのでもう少しお待ちください。6000グリフで25分程度かかります。</p>
99 <p><a href="$TEMPURL/$TEMP.ttf">フォントのダウンロード</a></p>
100 <p><a href="$TEMPURL/$TEMP.log">生成ログ</a>(しばらくすると、ここに処理したグリフのUCSコードポイントが記録されます。通常の漢字は0u4E00から0u9FA5の間で、0u4E00から処理されます。0u9XXXまで到達せずに更新が止まった場合はデータにエラーがあり失敗している可能性があります。</p>
101 <p><a href="index.html">戻る</a></p>
102 <hr class="footer">
103 fonts.jp
104 </div>
105 </body>
106 </html>
107 EOT
108 }
109
110 sub makeerror{
111 print <<"EOT";
112 Content-type: text/html;
113
114 <?xml version="1.0" encoding="utf-8"?>
115 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
116 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
117 <link rel="stylesheet" type="text/css" href="http://fonts.jp/green.css">
118 <html>
119 <head>
120 <title>フォント生成失敗</title>
121 </head>
122 <body>
123 <div class="main">
124 <h1>フォント生成失敗</h1>
125 <p>もう一度戻ってやり直してください。</p>
126 <p><a href="index.html">戻る</a></p>
127 <hr class="footer">
128 fonts.jp
129 </div>
130 </body>
131 </html>
132 EOT
133 }