X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/2a42e0f710c6b78c8e469bd3fd3d6b99e2007a16..4a6c818d4db51cb135196d442a8c5c7b25544744:/charset.plp diff --git a/charset.plp b/charset.plp index 3be6a96..e8382f5 100644 --- a/charset.plp +++ b/charset.plp @@ -48,6 +48,7 @@ print join " •\n", ( } [ iso => 'ISO', + win => 'Windows', dos => 'DOS', mac => 'Apple', ebcdic => 'EBCDIC', @@ -104,7 +105,7 @@ sub tabinput { hebrew => [qw( iso-8859-8 cp1255 MacHebrew cp862 U59-5F )], thai => [qw( iso-8859-11 cp874 MacThai )], vietnamese => [qw( viscii cp1258 MacVietnamese )], - symbol => [qw( symbol dingbats MacDingbats AdobeZdingbat AdobeSymbol )], + symbols => [qw( symbol dingbats MacDingbats )], # iso-code shorthand 1 => 'westeur', @@ -124,7 +125,7 @@ sub tabinput { return; } - state $visible = {}; # all present tables + state $visible = {'' => 1}; # all present tables my %row = (offset => 0, cols => 16); my $params = $input =~ s/[+](.*)\z// ? $1 : undef; @@ -132,6 +133,11 @@ sub tabinput { state $INHERIT = { 'cp437' => ['cp850' => 0, 'ascii' => '0-31+128'], # ascii range overridden later 'gsm0338' => ['ascii' => '0-127'], + 'dingbats' => ['' => '32-127+160'], + 'MacDingbats' => ['dingbats' => '128-159'], + 'AdobeZdingbat'=> ['MacDingbats' => '128-159'], # should be identical but maps to private use + 'symbol' => ['' => '32-127+160'], + 'AdobeSymbol' => ['symbol' => '32-127+160', '' => '32-127+160'], # minor differences, irrelevant except for different '€' 'iso-8859-2' => ['iso-8859-1' => '160'], 'iso-8859-3' => ['iso-8859-1' => '160'], #TODO: also apply to iso-8859-9 @@ -312,6 +318,21 @@ sub tabinput { ); } } + elsif ($row{set} eq 'symbol') { + if ($row{offset} <= 0x60 and $row{endpoint} >= 0x60 - $row{offset}) { + # replace radical extender by closest unicode equivalent + substr($row{table}, 0x60 - $row{offset}, 1) = '│'; + } + if ($row{offset} <= 0xBD and $row{endpoint} >= 0xFF - $row{offset}) { + substr($row{table}, 0xBD - $row{offset}, 2) = '⏐⎯'; # arrow extenders + substr($row{table}, 0xD2 - $row{offset}, 3) = '®©™'; # serif variants + substr($row{table}, 0xE0 - $row{offset}, 1) = '◊'; # replace lookalike, should match AdobeSymbol + substr($row{table}, 0xE2 - $row{offset}, 3) = '®©™'; # sans-serif variants + substr($row{table}, 0xE6 - $row{offset}, 10) = '⎛⎜⎝⎡⎢⎣⎧⎨⎩⎪'; + substr($row{table}, 0xF0 - $row{offset}, 1) = '€'; + substr($row{table}, 0xF4 - $row{offset}, 11) = '⎮⌡⎞⎟⎠⎤⎥⎦⎫⎬⎭'; + } + } $visible->{ascii} = # assume common base $visible->{ $row{set} } = 1; @@ -345,15 +366,16 @@ sub range_cell { if ($len -= $rest) { # continued on new row my @next = ($len * $colsize, "$class joinu"); + my $separate = $cols - $len > $rest; # columns not on next row if ($len > $rest) { # minority remains push @next, $name, $title; $title ||= $name; - $name = ''; + $name = $separate && '…'; } else { # minority on next row - push @next, '"', $title || $name; + push @next, $separate && '"', $title || $name; } $table->{$offset + $colsize*$rest} //= \@next; $class .= ' joind';