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