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