diff options
Diffstat (limited to 'Master/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl')
-rwxr-xr-x | Master/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl b/Master/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl new file mode 100755 index 00000000000..377659d3983 --- /dev/null +++ b/Master/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl @@ -0,0 +1,162 @@ +#!/usr/bin/perl -n -s + +=head1 NAME + +mkutf32list.pl + +=head1 USAGE + +mkutf32list.pl cid2code.txt > sp_jp_text.tex +mkutf32list.pl -style=utf cid2code.txt > sp_jp_utf.tex +mkutf32list.pl -style=kchar cid2code.txt > sp_jp_kchar.tex +mkutf32list.pl -style=list cid2code.txt > sp_list_j.txt +mkutf32list.pl -style=list-wo-collec cid2code.txt > sp_list_ja.txt +mkutf32list.pl -allrange cid2code.txt > sp_jp_text.tex + +=head1 AUTHOR + +Takuji Tanaka + +=head1 NOTE + +This software is a part of otfbeta-uptex (a.k.a. japanese-otf-uptex). + +=cut + +use strict; +binmode(STDOUT, ":utf8"); + +our ($style, $allrange); +our (@count, %reset_ch, $icollec, $cid2code, $line); +our ($col_utf32, @out); +our (@cid_max, $collection_n, $collection, $utfmac, $cmap, $source); + +BEGIN{ + $line = 0; + @count = (); + %reset_ch = (); + $icollec = 0; + @out = (); +} + +if (/cid2code/) { + chomp; + s/^# /# in /; + $cid2code=$_; + $cid2code=~s/^#/%/; +} + +if ($.<8 && /((Adobe-(?:Japan|CNS|GB|Korea).*)-\d)\s/) { + $collection_n=$1; + $collection=$2; + if ($collection =~ /cns/i) { + @cid_max = qw/-1 14098 17407 17600 18845 18964 19087 19155 19178/; + $utfmac="UTFT"; $cmap="UniCNS-UTF32"; + $source="Adobe-CNS1-7/cid2code.txt"; } + elsif ($collection =~ /gb/i) { + @cid_max = qw/-1 7716 9896 22126 22352 29063 30283/; + $utfmac="UTFC"; $cmap="UniGB-UTF32"; + $source="Adobe-GB1-5/cid2code.txt"; } + elsif ($collection =~ /kor/i) { + @cid_max = qw/-1 9332 18154 18351/; + $utfmac="UTFK"; $cmap="UniKS-UTF32"; + $source="Adobe-Korea1-2/cid2code.txt"; } + else { + @cid_max = qw/-1 8283 8358 8719 9353 15443 20316 23057 23059/; + $utfmac="UTF"; $cmap="UniJIS-UTF32"; + $source="Adobe-Japan1-7/cid2code.txt"; } +} + +next if (/^#/); +$line++; +if ($line == 1) { + print <<END; +% +% This file is generated from the data of $cmap +$cid2code +% for $collection_n +% +% Reference: +% https://github.com/adobe-type-tools/cmap-resources/ +% $source +% +% A newer CMap may be required for some code points. +% +END +} +if (/^CID/) { + my @header = split; + my $i=0; + foreach (@header) { + if (/^Uni(JIS|KS|CNS|GB)-UTF32$/) { + $col_utf32 = $i; + last; + } + $i++ + } + next; +} + +my @list = split; +my $cid = $list[0]; +my @utf32 = split ',', $list[$col_utf32]; + +foreach (@utf32) { + s/^0+//; + + next if ($_ eq '*'); + next if ($_ =~ '^[1-7][0-9a-f]$|^.$'); + next if ($_ =~ 'v'); + tr/a-z/A-Z/; + my $ch=hex($_); + next if ($ch < 0x10000 && !$allrange); + + while(!($cid_max[$icollec+1]>=$cid && $cid>$cid_max[$icollec])) { + $icollec++; + if ($icollec>@cid_max) { + die "CID:$cid (Character $_) is out of range!!\n"; + } + } + if ($count[$icollec]==0) { + $reset_ch{$ch}=$icollec; + } + $count[$icollec]++; + push @out, $ch; +} + + +END { + my ($i, $out, $ch); + + if ($style eq "list-wo-collec") { @out = sort(@out); } + + foreach $ch (@out) { + if ($style eq "list-wo-collec") {} + elsif (defined($reset_ch{$ch})) { + $i=0; + print "\n\n"; + print "%" if ($style =~ /list/); + print "$collection-$reset_ch{$ch}"; + print "\\\\" if ($style !~ 'list'); + print "\n"; + } + + $i++; + if ($style =~ /utf/) { $out=sprintf "\\${utfmac}{%X}", $ch; } + elsif ($style =~ /kchar/) { $out=sprintf "\\kchar\"%X", $ch; } + elsif ($style =~ /list/) { $out=sprintf "%X", $ch; } + else { $out=chr($ch); } + my ($newline); + $newline = $allrange ? 25 : 10; + if ($i % $newline != 1) { + print "," if ($style =~ /list/); + } + print $out; + if ($i % $newline == 0) { + print "%" if ($style =~ /utf/); + print "\n" ; + } + } + + print "\n\n% end\n"; +} |