1#!/usr/local/bin/perl -w
2
3# Patrice Dumas pertusus at free.fr, 2008:
4# this file is in the public domain
5
6# the resulting code may be under the texinfo/makeinfo/lang.c license.
7
8# ./parse_8bit_makeinfo_maps.pl > eigth_bit_makeinfo_maps.pl
9
10use strict;
11
12my $lang_file = '../texinfo/makeinfo/lang.c';
13
14open (LANGF, "$lang_file") or die "Cannot open $lang_file: $!\n";
15
16my $in_map=0;
17my %unicode_translit = ();
18
19print "%makeinfo_eight_bit_map = (\n";
20
21while (<LANGF>)
22{
23  if ($in_map)
24  {
25    if  (/^\s*\{\s*NULL\s*,\s*0\s*,\s*0\s*\}/)
26    {
27       $in_map=0;
28       print "   },\n";
29       next;
30    }
31    elsif (/^\s*\{\s*\"(\w*)\"\s*,\s*0x([0-9abcdef]{2})\s*,\s*0x([0-9abcdef]{4})\s*(,\s*\"(\w*)\"\s*)?\}/i)
32    {
33       my $entity = $1;
34       my $eight_bit = uc($2);
35       my $unicode = uc($3);
36       my $transliteration_str = 'UNDEF';
37       my $transliteration;
38       if (defined($5))
39       {
40          $transliteration_str = $transliteration = $5;
41
42          if (exists($unicode_translit{$unicode}) and $unicode_translit{$unicode} ne $transliteration)
43          {
44             print STDERR "$in_map,$eight_bit,$unicode: $unicode_translit{$unicode} ne $transliteration\n";
45          }
46          $unicode_translit{$unicode} = $transliteration;
47       }
48       print "      '$unicode' => '$eight_bit',\n";
49#print STDERR "$entity $eight_bit $unicode $transliteration_str\n";
50    }
51  }
52  elsif (/^\s*static\s+iso_map_type\s+(\w+?)_map/)
53  {
54    next if /\s*\{\s*NULL\s*,\s*0\s*,\s*0\s*\}/;
55    $in_map = $1;
56    #print STDERR "$in_map\n";
57    print "   '$in_map' => {\n";
58  }
59}
60
61print ");\n\n";
62
63print "%makeinfo_transliterate_map = (\n";
64foreach my $unicode (keys(%unicode_translit))
65{
66  print "  '$unicode' => '$unicode_translit{$unicode}',\n";
67}
68print ");\n\n";
69