X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/0c9d5cd332b3a9124f75926de5094c90b353e238..1d6eab5fa03b9b245c50637bae352344f9f53ef5:/charset.plp diff --git a/charset.plp b/charset.plp index 7f19bc1..0dd1537 100644 --- a/charset.plp +++ b/charset.plp @@ -5,7 +5,7 @@ my @tablist = split m{/+}, $Request || 'default'; Html({ title => 'charset cheat sheet', - version => '1.0', + version => '1.1', description => [ "Reference sheet with all glyphs in common character encoding tables,", "and an overview of Unicode ranges and UTF-8 bytes.", @@ -36,18 +36,10 @@ else { say "Charset comparison:"; } -sub optionlink { - my ($title, $href, $selected) = @_; - return sprintf( - $selected ? '%s' : '%s', - EscapeHTML($title), $href - ); -} - print join " •\n", ( map { join " ·\n", pairmap { - optionlink($b || ucfirst $a, '/charset'.($a && "/$a?compare"), $a eq $Request); + showlink($b || ucfirst $a, '/charset'.($a && "/$a?compare"), $a eq $Request); } @{$_} } [ @@ -147,12 +139,14 @@ sub tabinput { eval { $charset->{setup}->(\%row) } or Alert("Incomplete setup of $input", $@); } + $row{endpoint} ||= 0xFF; - if ($row{set}) {} + if (defined $row{table} or defined $row{cell}) { + $row{set} //= $input; + } elsif ($row{set} = Encode::resolve_alias($input)) { $row{offset} = delete $row{startpoint}; - $row{endpoint} ||= 0xFF; - if ($row{set} eq 'MacHebrew' or $row{set} eq 'MacThai') { + if ($charset->{varchar}) { # array of possibly multiple characters per code point $row{table} = [ map { Encode::decode($row{set}, pack 'C*', $_) } $row{offset} .. $row{endpoint} @@ -165,9 +159,7 @@ sub tabinput { } $row{endpoint} -= $row{offset}; - - $visible->{ascii} = # assume common base - $visible->{ $row{set} } = 1; + $visible->{ascii}++; # assume common base } else { Alert("Encoding $input unknown"); @@ -178,6 +170,12 @@ sub tabinput { while (my ($offset, $sub) = each %{$replace}) { $offset -= $row{offset}; + if (ref $row{table} eq 'ARRAY') { + $row{table}->[$offset] = $sub + if $offset >= 0 and $offset <= $row{endpoint}; + next; + } + my $length = length $sub; if ($offset < 0) { @@ -200,6 +198,7 @@ sub tabinput { } push @request, \%row; + $visible->{ $row{set} } = 1 if $row{table}; } tabinput($_) for @tablist; @@ -323,7 +322,7 @@ for my $row (@request) { my $cp = $offset + $row->{offset}; my $glyph = ref $row->{table} eq 'ARRAY' ? $row->{table}->[$offset] : substr $row->{table}, $offset, 1; - my ($cell, $name, $class) = $glyph eq $NOCHAR ? () : + my ($cell, $name, $class) = !defined $glyph || $glyph eq $NOCHAR ? () : $glyphs->glyph_html($glyph); if ($mode) {