X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/92240b0d1e4434e0981b3326ca4d7ad8673dbf71..bd4970d57dbf38e4c2b32d91c1395b87925b200c:/charset.plp diff --git a/charset.plp b/charset.plp index d3ddea7..e9c4fcc 100644 --- a/charset.plp +++ b/charset.plp @@ -26,13 +26,34 @@ my $diinfo = do 'digraphs.inc.pl'; my %di = map { $diinfo->{$_}->[0] => $_ } grep { ref $diinfo->{$_} } keys %$diinfo; -use Encode qw(decode); +use Encode qw(decode resolve_alias); # generate character table(s) # (~16x faster than decoding in loop; # substr strings is twice as fast as splitting to an array) -my @tables = map { decode($_, pack 'C*', 0..255) } 'iso-8859-1'; +my %ALIAS = ( + default => [qw(utf-8 iso-8859-1 cp437)], + 0 => [qw(cp437 cp863)], + 1 => [qw(iso-8859-1 cp1252 MacRoman cp850)], + 2 => [qw(iso-8859-2 cp1250 cp852 MacCentralEurRoman MacCroatian MacRumanian)], + 5 => [qw(koi8-f iso-8859-5 cp1251 MacCyrillic cp855 cp866)], + 7 => [qw(iso-8859-7 cp1253 MacGreek cp737 cp869)], + 8 => [qw(iso-8859-8 cp1255 MacHebrew cp862)], +); +my @request = grep { defined } map { + $_ ? (resolve_alias($_) or print("Encoding $_ unknown") && ()) : (); +} map { defined $ALIAS{$_} ? @{ $ALIAS{$_} } : $_ } + $ENV{PATH_INFO} =~ /\w/ ? split(m{[/+\s]}, $ENV{PATH_INFO}) : 'default'; +my @tables = map { $_ eq 'utf-8-strict' ? undef : decode($_, pack 'C*', 0..255) } @request; my $NOCHAR = chr 0xFFFD; +for my $cp437 (grep {$request[$_] eq 'cp437'} 0 .. $#request) { + substr($tables[$cp437], 237, 1) = pack 'U*', 0x3D5; # phi sign + substr($tables[$cp437], 0, 32) = pack 'U*', map {hex} qw( + 2007 263A 263B 2665 2666 2663 2660 2022 25D8 25CB 25D9 2642 2640 266A 266B 263C + 25BA 25C4 2195 203C 00B6 00A7 25AC 21A8 2191 2193 2192 2190 221F 2194 25B2 25BC + ); +} + sub quote { local $_ = shift; s/"/"/g; @@ -41,19 +62,87 @@ sub quote { return $_; } +sub printcell_utf8 { + my ($value) = @_; + if ($value <= 0x7F) { + print '
â³";
+for my $tablenum (0 .. $#tables) {
+ print '
+ + + + |
---|