3 $FONTFORGE = "export LANG=utf-8; /usr/bin/fontforge";
4 $MAKEGLYPH = "/usr/bin/js ./makeglyph.js";
6 $HEADER_FILENAME = "head.txt";
7 $PARTS_FILENAME = "parts.txt";
8 $FOOTER_FILENAME = "foot.txt";
13 binmode STDOUT, ":utf8";
15 if(scalar(@ARGV) != 4){
16 print "Usage: makettf.pl WorkingDirectory WorkingName Shotai Weight\n";
17 print "Shotai: mincho or gothic\n";
18 print "Weight: 1 3 5 7\n";
27 unlink "$WORKDIR/$WORKNAME.log";
28 unlink "$WORKDIR/$WORKNAME.scr";
29 unlink "$WORKDIR/$WORKNAME.ttf";
30 mkdir "$WORKDIR/build";
32 open LOG, ">>:utf8", "$WORKDIR/$WORKNAME.log";
33 select((select(LOG), $| = 1)[0]);
36 if(-e "$WORKDIR/$HEADER_FILENAME"){
37 open FH, "<:utf8", "$WORKDIR/$HEADER_FILENAME";
38 open FH2, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
46 print LOG "Prepare header file ... done.\n";
49 print LOG "No header file.\n";
56 if(-e "$WORKDIR/$PARTS_FILENAME"){
57 open FH, "<:utf8", "$WORKDIR/$PARTS_FILENAME";
65 print LOG "Prepare parts file ... done.\n";
68 print LOG "No parts file.\n";
72 @temp = split(/\r\n|\r|\n/, $temp);
75 @temp2 = split(/ +|\t/, $_);
76 $buhin{$temp2[0]} = $temp2[1];
79 print LOG "Prepare parts data ... done.\n";
81 # parse target code point
83 foreach(sort(keys %buhin)){
84 if($_ =~ m/^\[([^\]])\]$/){
85 $target = sprintf("%X", unpack('U', $1));
86 } elsif(length($_) == 1){
87 $target = sprintf("%X", unpack('U', $_));
88 } elsif($_ =~ m/^[Uu]{0,1}[\+\-]{0,1}([0-9A-Fa-f]{1,8})$/){
93 $target =~ s/^0+//g; # delete zero for the beginning
95 $target{$target} = $name;
97 print LOG "Prepare target code point ... done.\n";
99 # make glyph for each target
100 print LOG "Prepare each glyph.\n";
101 foreach(sort(keys(%target))){
103 print LOG "$code : ";
104 $target = $target{$code};
108 foreach(keys(%subset)){
109 $partsdata .= $_." ".$subset{$_}."\n";
111 utf8::encode($target);
112 $target =~ s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
114 utf8::encode($partsdata);
115 $partsdata =~ s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge;
116 $partsdata =~ s/\s/+/g;
117 $svg = `$MAKEGLYPH $target $partsdata $SHOTAI $WEIGHT`;
118 print LOG "$MAKEGLYPH $target $partsdata $SHOTAI $WEIGHT\n";
119 open FH, ">$WORKDIR/build/$code.svg";
124 print LOG "Prepare each glyph ... done.\n";
127 if(-e "$WORKDIR/$FOOTER_FILENAME"){
128 open FH, "<:utf8", "$WORKDIR/$FOOTER_FILENAME";
129 open FH2, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
137 print LOG "Prepare footer file ... done.\n";
140 print LOG "No footer file.\n";
148 ##############################################################################
155 Import("$WORKDIR/build/$_[0].svg")
165 open FH, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
170 ##############################################################################
173 my $buffer = "Generate(\"$WORKDIR/$WORKNAME.ttf\", \"\", 0)\n";
174 $buffer .= "Quit()\n";
175 open FH, ">>:utf8", "$WORKDIR/$WORKNAME.scr";
179 $buffer = `export LANG=utf-8; $FONTFORGE -script $WORKDIR/$WORKNAME.scr >> $WORKDIR/$WORKNAME.log 2>&1`;
182 ##############################################################################
185 $subset{$_[0]} = $buhin{$_[0]};
186 my $buffer = '$'.$buhin{$_[0]}.'$';
187 while($buffer =~ m/\$99:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:[^:]*:([^\$]*)/gc){
188 if(!exists($subset{$1})){
194 ##############################################################################