#!/usr/bin/perl

if ($#ARGV < 1) 
  {die "Usage: $0 <unicode data file> <textual reference table(s)>\n"}

open IN, $ARGV[0] or die "Can't open \"$ARGV[0]\": $!\n";

while (<IN>) {
  chop;
  ($char, @data) = split /\t/;
  $unidata{$char} = [@data];
}

shift;

$" = "\t";
 
foreach $file (@ARGV) {
  ($base) = $file =~ /^(.+)\.txt/;

  open IN,  $file        or die "Can't open \"$ARGV[0]\": $!\n";
  open OUT,">$base\.dat" or die "Can't create \"$ARGV[0]\": $!\n";

  foreach $i (0..255) {
    $char = sprintf("%02X",$i);
    $unichar = "00".$char;
    $char_uni{$char} = $unichar;
    $uni_char{$unichar} = $char;
  }    
  
  $i = 1;
  while (<IN>) {
    /\=([A-F0-9]{2})\s+U\+([A-F0-9]{4})/ or $_ or die "Parse Error, $file, line $i\n";
    $char_uni{$1} = $2;
    $uni_char{$2} = $1;
    $i++;
  }
  
  foreach $char (keys %char_uni) {
    $unichar = $char_uni{$char};
    $info = $unidata{$unichar};
    $chardata[hex $char] = 
      [hex $unichar,
       $info->[0], 
       hex($uni_char{$info->[1]} || $char),
       hex($uni_char{$info->[2]} || $char),
       hex($uni_char{$info->[3]} || $char),
       hex($uni_char{$info->[4]} || $char),
       hex($uni_char{$info->[5]} || $char),
       hex($uni_char{$info->[6]} || $char)];
  }

  print OUT "# Aspell Character Data File.  Do Not Edit!\n";
  print OUT "$base\n";
  foreach $i (0..255) {
    print OUT "@{$chardata[$i]}\n";
  }
}

