parse_8bit_makeinfo_maps.pl 1.7 KB

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