X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/67ae97362cec317f2cfc3ae97f9d3810f70d615c..bd6167bb1439ceeb7e7511086e29a9992ac25dd2:/tools/mkdigraphs-rfc diff --git a/tools/mkdigraphs-rfc b/tools/mkdigraphs-rfc index ab03a42..8db192c 100755 --- a/tools/mkdigraphs-rfc +++ b/tools/mkdigraphs-rfc @@ -1,11 +1,54 @@ #!/usr/bin/env perl - +use 5.010; use strict; use warnings; use utf8; use open OUT => ':utf8', ':std'; +use Data::Dump 'pp'; -our $VERSION = '1.00'; +our $VERSION = '1.01'; + +# translation table for deprecated code points +my %replace = ( + 0xE001 => 0, # join lines: not accepted + 0xE004 => 0, # umlaut is no different from diaeresis 0x0308 + 0xE005 => "\x{0344}", # discouraged + 0xE006 => "\x{0300}", + 0xE007 => "\x{0301}", + 0xE008 => "\x{0302}", + 0xE009 => "\x{0303}", + 0xE00A => "\x{0304}", + 0xE00B => "\x{0306}", + 0xE00C => "\x{0307}", + 0xE00D => "\x{0308}", + 0xE00E => "\x{030A}", + 0xE00F => "\x{030B}", + 0xE010 => "\x{030C}", + 0xE011 => "\x{0327}", + 0xE012 => "\x{0328}", + 0xE013 => "\x{0332}", + 0xE014 => "\x{0333}", + 0xE015 => "\x{0338}", + 0xE016 => "\x{0345}", + 0xE017 => "\x{0314}", + 0xE018 => "\x{0313}", + 0xE019 => "\x{1FFE}", + 0xE01A => "\x{1FBF}", + 0xE01B => "\x{03D0}", # middle beta = curled beta? + 0xE01C => "\x{25CB}", + 0xE01D => "\x{0192}", + 0xE01E => "\x{0292}", + 0xE01F => "\x{33C2}", # am, compatibility char + 0xE020 => "\x{33D8}", # pm, compatibility char + 0xE021 => "\x{2121}", + 0xE022 => "\x{FE8E}", + 0xE023 => 0, # dutch guilder 0192 is already encoded, and not very useful anyway + 0xE024 => "\x{0393}", + 0xE025 => "\x{20D7}", # also 20D1; non-spacing + 0xE026 => "\x{1FEF}", + 0xE027 => "\x{1FC0}", + 0xE028 => "J̌", # uppercase U+01F0, no single character +); # expect input data source at command line @ARGV or die "Specify input source file or - for STDIN\n"; @@ -14,9 +57,10 @@ our $VERSION = '1.00'; do { $_ = readline; defined or die "Premature input end"; -} until /^\s\S/; +} until s/^\s(?=\S)//; -my @t = $_; # add first line (already read, assume it's ok) +chomp; +my @line = $_; # add first line (already read, assume it's ok) # read the rest of the character table while ($_ = readline) { @@ -27,78 +71,31 @@ while ($_ = readline) { next unless s/^ //; chomp; - # add the line to @t + # append line contents if (s/^ {15}/ /) { # continuation line (add to last entry) - $t[-1] .= $_; + $line[-1] .= $_; } else { # add a new entry - push @t, $_; + push @line, $_; } } -# create a hash of desired input -my %di; -for (@t) { - my ($mnem, $char, $name) = split / +/, $_, 3; - next if length $mnem != 2; - $di{$mnem} = hex $char; -} - -# XXX -my %trans = ( - 0xE001 => 0, # join lines: not accepted - 0xE004 => 0, # umlaut is no different from diaeresis 0x0308 - 0xE005 => 0x0344, # discouraged - 0xE006 => 0x0300, - 0xE007 => 0x0301, - 0xE008 => 0x0302, - 0xE009 => 0x0303, - 0xE00A => 0x0304, - 0xE00B => 0x0306, - 0xE00C => 0x0307, - 0xE00D => 0x0308, - 0xE00E => 0x030A, - 0xE00F => 0x030B, - 0xE010 => 0x030C, - 0xE011 => 0x0327, - 0xE012 => 0x0328, - 0xE013 => 0x0332, - 0xE014 => 0x0333, - 0xE015 => 0x0338, - 0xE016 => 0x0345, - 0xE017 => 0x0314, - 0xE018 => 0x0313, - 0xE019 => 0x1FFE, - 0xE01A => 0x1FBF, - 0xE01B => 0x03D0, # middle beta = curled beta? - 0xE01C => 0x25CB, - 0xE01D => 0x0192, - 0xE01E => 0x0292, - 0xE01F => 0x33C2, # am, compatibility char - 0xE020 => 0x33D8, # pm, compatibility char - 0xE021 => 0x2121, - 0xE022 => 0xFE8E, - 0xE023 => 0, # dutch guilder 0192 is already encoded, and not very useful anyway - 0xE024 => 0x0393, - 0xE025 => 0x20D7, # also 20D1; non-spacing - 0xE026 => 0x1FEF, - 0xE027 => 0x1FC0, - 0xE028 => 0x01F0, #but uppercase -); -for (values %di) { - $_ >= 0xE000 or next; - $_ = $trans{$_} if defined $trans{$_}; -} - # output perl code of hash # (assume no backslashes or curlies, so we can just q{} w/o escaping) -print "# automatically generated by $0\n"; -print "use utf8;\n"; -print "+{\n"; -printf "q{%s}=>%s,\n", $_, $di{$_} for sort keys %di; -print "}\n"; +say "# automatically generated by $0"; +say 'use utf8;'; +say '+{'; +for (@line) { + my ($mnem, $chrhex, $name) = split / +/, $_, 3; + next if length $mnem != 2; + my $chrnum = hex $chrhex; + my $chr = $replace{$chrnum} // chr $chrnum or next; + my $chrstr = pp $chr; + say "q{$mnem} => $chrstr, # $name"; +} +say '}'; __END__