X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/d26b60713dda612610cea4344acb625a68bfeb4a..fc86468387a30434587a1ec138256813bf5cf7b1:/charset.plp diff --git a/charset.plp b/charset.plp index aa81d0b..5955c39 100644 --- a/charset.plp +++ b/charset.plp @@ -48,6 +48,7 @@ print join " •\n", ( } [ iso => 'ISO', + win => 'Windows', dos => 'DOS', mac => 'Apple', ebcdic => 'EBCDIC', @@ -62,7 +63,6 @@ print join " •\n", ( cyrillic => 0, hebrew => 0, ], - [ uc => 'Unicode' ], ); :>.

@@ -78,8 +78,8 @@ sub tabinput { my $input = shift or return; state $ALIAS = { - default => [qw( unicode+0-639 utf-8+realsize iso-8859-1 iso-8859-15 cp1252 cp437 cp850 )], - uc => [qw( U+cols=32 unicode+0-4095 unicode+4096-6319 unicode+6320-8191 )], + default => [qw( u+0-639 utf-8+realsize iso-8859-1 iso-8859-15 cp1252 cp437 cp850 )], + unicode => [qw( uu+cols=32+realsize u+0-4095 u+4096-6319 u+6320-8191 )], us => [qw( cp437 cp863 gsm0338 AdobeStandardEncoding )], ebcdic => [qw( cp37 cp500 cp1047 posix-bc cp1026 cp875 )], iso => [map {"iso-8859-$_"} 1 .. 11, 13 .. 16], @@ -247,7 +247,7 @@ sub tabinput { } } - if ($input =~ /^U([0-9a-fA-F]+)(?:-([0-9a-fA-F]+))?/) { + if ($input =~ m{ \A u ([0-9a-f]+) (?:-([0-9a-f]+))? \z }ix) { my $start = hex($1) << ($2 ? 4 : 8); my $end = $2 ? (hex($2) << 4) + $row{cols} - 1 : $start + 255; $row{table} = join '', map { chr } $start .. $end; @@ -256,13 +256,13 @@ sub tabinput { $row{set} = sprintf 'Unicode block U+%02Xxx', $start >> 8; $row{offset} = $start % 256; } - elsif ($input eq 'U') { + elsif (lc $input eq 'uu') { $row{set} = 'Unicode planes'; $row{cell} = do 'charset-ucplanes.inc.pl' or Alert('Table data could not be read', $@ || $!); $row{endpoint} = 1023 * $row{cell}->{colsize}; } - elsif ($input eq 'unicode') { + elsif (lc $input eq 'u') { $row{cell} = do 'charset-unicode.inc.pl' or Alert('Table data could not be read', $@ || $!); @@ -346,15 +346,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'; @@ -389,7 +390,7 @@ sub range_cell { $attr .= $1 if $class and $class =~ s/( \w+="[^"]*")//; $attr .= sprintf ' class="%s"', $class if $class; $attr .= sprintf ' title="%s"', EscapeHTML($title) if $title; - return "$name"; + return "$name\n"; } for my $row (@request) { @@ -432,39 +433,39 @@ for my $row (@request) { printf '%X', ($offset + $row->{offset}) / $rowdiv; } } + say ''; + for (1 .. $cols) { if ($row->{cell}) { print range_cell($row, $offset); next; } + my $cp = $offset + $row->{offset}; my $glyph = ref $row->{table} eq 'ARRAY' ? $row->{table}->[$offset] : substr $row->{table}, $offset, 1; - if ($glyph eq $NOCHAR) { - print ''; - next; - } + my ($cell, $name, $class) = $glyph eq $NOCHAR ? () : + $glyphs->glyph_html($glyph); if (exists $get{compare}) { state $visible = {}; - my $cp = $offset + $row->{offset}; - printf '%2$s', + $class = ( $cp == ord $glyph ? 'l4' : $row->{parent} && $glyph eq Encode::decode($row->{parent}, pack 'C', $cp) ? 'l3' : + !$class ? undef : $visible->{$glyph} ? 'l2' : - 'l1', - $glyphs->glyph_html($glyph); + 'l1' + ); $visible->{$glyph}++; - next; } - print "\n".$glyphs->glyph_cell($glyph); + say sprintf $class ? '%s' : '', + $name, $class, $cell; } continue { $offset += $colsize; } - print "\n"; } say ''; }