summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl')
-rwxr-xr-xMaster/texmf-dist/source/fonts/japanese-otf/script/mkutf32list.pl162
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";
+}