From: Mischa POSLAWSKY Date: Thu, 6 Apr 2017 19:08:37 +0000 (+0200) Subject: charset: track table offset in loop X-Git-Tag: v1.10~232 X-Git-Url: http://git.shiar.nl/sheet.git/commitdiff_plain/b37bf3bbd6062843787fe47987eb19bdc546e9e2 charset: track table offset in loop --- diff --git a/charset.plp b/charset.plp index 8dfa91e..db178d9 100644 --- a/charset.plp +++ b/charset.plp @@ -162,6 +162,8 @@ for my $row (@request) { 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 + my $offset = 0; + my $endpoint = $offset + (length($row->{table}) || 256) * $colsize; printf '
', !$row->{cell} && ' charmap'; my $title = $row->{set}; @@ -174,27 +176,25 @@ for my $row (@request) { print "\n"; } print ''; - for my $msb (0 .. ((length($row->{table}) || 256) - 1) / $cols) { + while ($offset < $endpoint - 1) { print '
'; { - my $rowlabel = ($msb + int($row->{offset} / $cols)) * $cols * $colsize; - if (my $rowmod = $rowlabel % $rowdiv) { + if (my $rowmod = $offset % $rowdiv) { # offset in column units printf '+%X', $rowmod; } else { # divided row offset - printf '%X', $rowlabel / $rowdiv; + printf '%X', ($offset + $row->{offset}) / $rowdiv; } } - for my $lsb (0 .. $cols - 1) { - my $val = ( ($msb * $cols) + $lsb ) * $colsize; + for (1 .. $cols) { if ($row->{cell}) { - print range_cell($row, $val); + print range_cell($row, $offset); next; } - my $glyph = substr $row->{table}, $val, 1; + my $glyph = substr $row->{table}, $offset, 1; if ($glyph eq $NOCHAR) { print ''; next; @@ -202,6 +202,9 @@ for my $row (@request) { print "\n".$glyphs->glyph_cell($glyph); } + continue { + $offset += $colsize; + } print "\n"; } say '
';