use POSIX qw( ceil );
use Shiar_Sheet::FormatChar;
my $glyphs = Shiar_Sheet::FormatChar->new;
-my $cols = 16; # columns
# generate character table(s)
# (~16x faster than decoding in loop;
);
my @request = map {
if (my $input = $_) {
- my %row = (offset => 0);
+ my %row = (offset => 0, cols => 16);
my $endpoint = 255;
if ($input =~ s/^--//) {
$row{offset} = $endpoint > 160 ? 160 : 48;
$row{set} = 'Unicode planes';
$row{cell} = do 'charset-ucplanes.inc.pl'
or Alert('Table data could not be read', $@ || $!);
- $cols *= 2;
+ $row{cols} *= 2;
}
elsif ($row{set} = Encode::resolve_alias($input)) {
if ($row{set} eq 'Internal') {
}
sub range_cell {
- my ($table, $offset) = @_;
+ my ($info, $offset) = @_;
+ my $table = $info->{cell} or return;
my $def = $table->{$offset} or return;
my ($len, $class, $name, $title) = @{$def};
+ my $cols = $info->{cols};
my $colsize = $table->{colsize} || 1;
my $attr = '';
$len /= $colsize;
}
for my $row (@request) {
+ my $cols = $row->{cols};
my $colsize = $row->{cell} && $row->{cell}->{colsize} || 1;
my $coldigits = ceil(log($colsize * $cols) / log(16)); # uniform length of hexadecimal header
my $rowdiv = 16 ** $coldigits; # divider of row headers
for my $lsb (0 .. $cols - 1) {
my $val = ( ($msb * $cols) + $lsb ) * $colsize;
if ($row->{cell}) {
- print range_cell($row->{cell}, $val);
+ print range_cell($row, $val);
next;
}