1#!/usr/bin/perl 2# Make diff of 3 files 3# GNU (C) Gaspar Sinai <gsinai@yudit.org> 4# Tokyo 2002-04-10 5 6$PLANE1="JISX0213-1.TXT"; 7$VERSION="Version 1.1"; 8$date = `date '+%Y-%m-%d'`; 9 10$BASE=0x80000040; 11$START=$BASE; 12# 13# Make a Yudit Ligature Map 14# 15$arg=$ARGV[0]; 16 17if ($arg ne "cluster" && $arg ne "cpp" && $arg ne "jis" && $arg ne "sjis") 18{ 19 die "usage: $0 {cluster|cpp|mys}" 20} 21 22# 23# SJIS is KEY 24# 25%JISMAP=(); 26%KUTENMAP=(); 27%UMAP=(); 28 29%ALLJ=(); 30%ALLU=(); 31 32&makeMap ($PLANE1); 33if ($arg eq "cpp") 34{ 35 print "// END OF $0\n"; 36} 37else 38{ 39 print "# END OF $0\n"; 40} 41 42sub makeMap 43{ 44 open (P1, "<$_[0]") || die "Can not open $_[0]"; 45 while (<P1>) 46 { 47 chomp; 48 next if (/UNASSIGNED .* JIS /); 49 50 if (/^0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+(.*)/) 51 { 52 $SJ=hex($1); 53 $JISMAP{($SJ)}=sprintf ("%04X", hex($2)); 54 $UMAP{($SJ)}=sprintf ("%08X+%08X+%08X", hex($3), hex($4), hex($5)); 55 &printmap ($SJ, hex($2), hex($3), hex($4), hex($5)); 56 $KT=$6; 57 $KT=$1 if ($KT=~/(\d+-\d+-\d+)/); 58 $KUTENMAP{$SJ}=$KT; 59 } 60 elsif (/^0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+(.*)/) 61 { 62 $SJ=hex($1); 63 $JISMAP{($SJ)}=sprintf ("%04X", hex($2)); 64 $UMAP{($SJ)}=sprintf ("%08X+%08X", hex($3), hex($4)); 65 &printmap ($SJ, hex($2), hex($3), hex($4)); 66 $KT=$5; 67 $KT=$1 if ($KT=~/(\d+-\d+-\d+)/); 68 $KUTENMAP{$SJ}=$KT; 69 } 70 elsif (/^0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+(.*)/) 71 { 72 $SJ=hex($1); 73 $JISMAP{($SJ)}=sprintf ("%04X", hex($2)); 74 $UMAP{($SJ)}=sprintf ("%08X", hex($3)); 75 $KT=$4; 76 $KT=$1 if ($KT=~/(\d+-\d+-\d+)/); 77 $KUTENMAP{$SJ}=$KT; 78 } 79 elsif (/^0x([0-9A-F]+)[ \t]+0x([0-9A-F]+)[ \t]+(.*)/) 80 { 81 $SJ=hex($1); 82 $JISMAP{($SJ)}=sprintf ("%04X", hex($2)); 83 $UMAP{($SJ)}=""; 84 $KT=$3; 85 $KT=$1 if ($KT=~/(\d+-\d+-\d+)/); 86 $KUTENMAP{$SJ}=$KT; 87 } 88 } 89 close (P1); 90} 91 92sub 93printmap 94{ 95 ($s, $j, @p) = @_; 96 # Done - tone marks 97 return if ($p[$#p] == 0x200C); 98 die "too many combinations" if ($#p != 1); 99 if ($arg eq "cluster") 100 { 101 if ($START == $BASE) 102 { 103 print "# Generated by $0 at $date\n"; 104 print "# Add this to bin/cluster/cluster.template\n"; 105 } 106 printf ("%04X %04X -> %08X %08X %08X\n", 107 $p[0], $p[1], $p[0], $p[1], $BASE++); 108 } 109 elsif ($arg eq "cpp") 110 { 111 if ($START == $BASE) 112 { 113 print "// Generated by $0 at $date\n"; 114 print "// Add this to stoolkit/SCluster.cpp expandYuditLigatures\n"; 115 } 116 $c = sprintf ("0x%08X", $BASE++); 117 $jp = sprintf ("0x%04X", $j); 118 $f = sprintf ("0x%04X", $p[0]); 119 $s = sprintf ("0x%04X", $p[1]); 120print <<EOD; 121 case $c: /* JIS X 0213: $jp */ 122 decd->append ($f); 123 decd->append ($s); 124 break; 125EOD 126 } 127 elsif ($arg eq "jis") 128 { 129 if ($START == $BASE) 130 { 131 print "# Generated by $0 at $date\n"; 132 print "# Add this to mytool/mys/jis-0213-1.mys\n"; 133 } 134 printf ("%04X -> %08X\n", $j, $BASE++); 135 } 136 elsif ($arg eq "sjis") 137 { 138 if ($START == $BASE) 139 { 140 print "# Generated by $0 at $date\n"; 141 print "# Add this to mytool/mys/shift-jis-3.mys\n"; 142 } 143 printf ("%04X -> %08X\n", $s, $BASE++); 144 } 145} 146