charset: always respect colsize in start- and endpoint
[sheet.git] / charset.plp
index 05336c1e68a10086179a21382a017c29c7e3243c..d0dd864f70345259301537ee719ce1469cef1e45 100644 (file)
@@ -275,19 +275,15 @@ sub tabinput {
                $row{cell} = do 'charset-ucplanes.inc.pl'
                        or Alert('Table data could not be read', $@ || $!);
                $row{endpoint} ||= 1023;
-               $row{endpoint}   *= $row{cell}->{colsize};
-               $row{startpoint} *= $row{cell}->{colsize};
        }
        elsif (lc $input eq 'u') {
                $row{cell} = do 'charset-unicode.inc.pl'
                        or Alert('Table data could not be read', $@ || $!);
 
                $row{endpoint} ||= 8191;
-               $row{endpoint}  *= $row{cell}->{colsize};
-               $row{startpoint} *= $row{cell}->{colsize};
                $row{set} = 'Unicode ' . (
-                       $row{startpoint} <  0x10000 && $row{endpoint} < 0x10000 ? 'BMP' :
-                       $row{startpoint} >= 0x10000 && $row{endpoint} < 0x20000 ? 'SMP' :
+                       $row{startpoint} <  0x1000 && $row{endpoint} < 0x1000 ? 'BMP' :
+                       $row{startpoint} >= 0x1000 && $row{endpoint} < 0x2000 ? 'SMP' :
                        'allocations'
                );
        }
@@ -366,7 +362,7 @@ sub range_cell {
        $len /= $colsize;
        $name //= $len <= 2 ? 'res' : 'reserved';
 
-       if (my $part = ($offset - $info->{startpoint})/$colsize % $cols) {
+       if (my $part = ($offset/$colsize - $info->{startpoint}) % $cols) {
                # continued row
                my $rest = $cols - $part;  # remaining
                $rest = $len if $len < $rest; #TODO: optimise
@@ -426,7 +422,7 @@ for my $row (@request) {
        my $coldigits = ceil(log($colsize * $cols) / log(16));  # uniform length of hexadecimal header
        my $rowdiv = 16 ** $coldigits;  # row divide for column digits
        $rowdiv = 1 if $rowdiv != $cols * $colsize;  # divide only if all columns are matched
-       my $offset = $row->{startpoint} || 0;
+       my $offset = $row->{startpoint} * $colsize || 0;
 
        printf '<div class="section"><table class="glyphs%s">', !$row->{cell} && ' charmap';
        my $title = $row->{set};
@@ -440,7 +436,7 @@ for my $row (@request) {
                print "\n";
        }
        print '<tbody>';
-       while ($offset < $row->{endpoint}) {
+       while ($offset < $row->{endpoint} * $colsize) {
                if ($row->{skip}->{$offset}) {
                        $offset += $cols * $colsize;
                        next;