charset: do not divide plane index by column size
authorMischa POSLAWSKY <perl@shiar.org>
Fri, 13 Mar 2015 10:04:57 +0000 (11:04 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 9 Jun 2015 03:43:44 +0000 (05:43 +0200)
Instead of counting by column number, use straight-forward unicode offsets
and calculate selection at runtime.

charset-ucplanes.inc.pl
charset.plp

index 9378dab152aa688cd53c083c9cf9996e7279dd44..607f8be114a7ef9e4228430c718b05ae4dafd1d3 100644 (file)
@@ -1,80 +1,80 @@
 use utf8;
 my %uniblock = (
 use utf8;
 my %uniblock = (
-       0x000, '<td colspan="1" class="X Po">ascii',
-       0x001, '<td colspan="4" class="X L Latin">latin',
-#      0x005, '<td colspan="5" class="X Sk">spacing modifier',
-       0x005, '<td colspan="2" class="X Mn">comb',
-       0x007, '<td colspan="1" class="X L Greek">grk',
-       0x008, '<td colspan="2" class="X L Cyrillic">cyr',
-       0x00A, '<td colspan="1" class="X L Armenian">arm',
-       0x00B, '<td colspan="1" class="X L Aramaic">heb',
-       0x00C, '<td colspan="2" class="X L Arabic">arabic',
-       0x00E, '<td colspan="3" class="X L Aramaic">aram',
-       0x010, '<td colspan="2" class="X L Aramaic">aramaic',
-       0x012, '<td colspan="14" class="X L Brahmic">brahmic',
-       0x020, '<td colspan="1" class="X L Brahmic">mm',
-       0x021, '<td colspan="1" class="X L Aramaic">geor',
-       0x022, '<td colspan="2" class="X L Hangul">jamo',
-       0x024, '<td colspan="3" class="X L African">ethiopic',
-       0x027, '<td colspan="6" class="X L Syllabic">aboriginal',
-       0x02D, '<td colspan="1" class="X L Alpha">ger',
-       0x02E, '<td colspan="2" class="X L Brahmic">brahm',
-       0x030, '<td colspan="1" class="X L Aramaic">mon',
-       0x031, '<td colspan="1" class="X L Syllabic">can',
-       0x032, '<td colspan="8" class="X L Brahmic">brahmic',
-       0x03A, '<td colspan="4" class="X L Latin">extensions',
-       0x03E, '<td colspan="2" class="X L Greek">greek',
-       0x040, '<td colspan="1" class="X Po">·…',
-       0x041, '<td colspan="3" class="X So">symbols',
-       0x044, '<td colspan="2" class="X Sm">maths',
-       0x046, '<td colspan="3" class="X So">technical',
-       0x049, '<td colspan="1" class="X Latin">()',
-       0x04A, '<td colspan="2" class="X So">draw',
-       0x04C, '<td colspan="4" class="X So">symbols',
-       0x050, '<td colspan="2" class="X L Alpha">braille',
-       0x052, '<td colspan="1" class="X So">arr',
-       0x053, '<td colspan="3" class="X Sm">maths',
-       0x056, '<td colspan="2" class="X So">misc',
-       0x058, '<td colspan="2" class="X L Greek">ancient',
-       0x05A, '<td colspan="2" class="X L Alpha">ext',
-       0x05C, '<td colspan="1" class="X Po">·+',
-       0x05D, '<td colspan="3" class="X L Han">radicals',
-       0x060, '<td colspan="2" class="X L Katakana">japanese',
-       0x062, '<td colspan="4" class="X L Han">cjk+',
-       0x066, '<td colspan="2" class="X Xd L Han">compat',
-       0x068, '<td colspan="8" class="X L Han" style="border-bottom:none">',
-       0x070, '<td colspan="16" rowspan="2" class="X L Han" style="border-top:none">cjk ideographs A', #+2
-       0x09C, '<td colspan="16" rowspan="11" class="X L Han">cjk unified ideographs',
-       0x140, '<td colspan="9" class="X L Syllabic">yi',
-       0x149, '<td colspan="1" class="X L Latin">lisu',
-       0x14A, '<td colspan="2" class="X L Syllabic">vai',
-       0x14C, '<td colspan="1" class="X L Cyrillic">cyr',
-       0x14D, '<td colspan="1" class="X L Syllabic">bam',
-       0x14E, '<td colspan="2" class="X L Latin">lat-D',
-       0x150, '<td colspan="6" class="X L Brahmic">brahmic',
-       0x156, '<td colspan="2" class="X L Alpha">ext',
-       0x158, '<td colspan="8" class="X L Hangul" style="border-bottom:none">',
-       0x160, '<td colspan="16" rowspan="5" class="X L Hangul" style="border-top:none">hangeul syllables',
-       0x1B0, '<td colspan="16" class="X Cs">surrogates',
-       0x1C0, '<td colspan="16" rowspan="3" class="X Co" style="border-bottom:none">private use',
-       0x1F0, '<td colspan="2" class="X Co" style="border-top:none">',
-       0x1F2, '<td colspan="4" class="X L Han">cjk compat',
-       0x1F6, '<td colspan="8" class="X L Arabic">presentation',
-       0x1FE, '<td colspan="2" class="X L Latin">width',
-       0xFB0, '<td colspan="5" class="X Xd L">presentation',
-       0xFB5, '<td colspan="11" class="X Xd L Arabic" style="border-bottom:none">',
-       0xFC0, '<td colspan="16" class="X Xd L Arabic" style="border-top:none; border-bottom:none">arabic presentation forms A',
-       0xFD0, '<td colspan="13" class="X Xd L Arabic" style="border-top:none">',
-       0xFDD, '<td colspan="2" class="Xi">?',
-       0xFDF, '<td colspan="1" class="X Xd L Arabic" style="border-top:none">',
-       0xFE0, '<td colspan="1" class="X Cc">var',
-       0xFE1, '<td colspan="1" class="X L Pd">ver',
-       0xFE2, '<td colspan="1" class="X L Mn">½',
-       0xFE3, '<td colspan="2" class="X Xd Pd Han">comp',
-       0xFE5, '<td colspan="2" class="X Xd L Latin">small',
-       0xFE7, '<td colspan="9" class="X Xd L Arabic">arabic presentation B',
-       0xFF0, '<td colspan="15" class="X L Latin">halfwidth &amp; fullwidth forms',
-       0xFFF, '<td colspan="1" class="X Cc">sp',
+       0x0000, '<td colspan="1" class="X Po">ascii',
+       0x0008, '<td colspan="4" class="X L Latin">latin',
+#      0x0028, '<td colspan="5" class="X Sk">spacing modifier',
+       0x0028, '<td colspan="2" class="X Mn">comb',
+       0x0038, '<td colspan="1" class="X L Greek">grk',
+       0x0040, '<td colspan="2" class="X L Cyrillic">cyr',
+       0x0050, '<td colspan="1" class="X L Armenian">arm',
+       0x0058, '<td colspan="1" class="X L Aramaic">heb',
+       0x0060, '<td colspan="2" class="X L Arabic">arabic',
+       0x0070, '<td colspan="3" class="X L Aramaic">aram',
+       0x0080, '<td colspan="2" class="X L Aramaic">aramaic',
+       0x0090, '<td colspan="14" class="X L Brahmic">brahmic',
+       0x0100, '<td colspan="1" class="X L Brahmic">mm',
+       0x0108, '<td colspan="1" class="X L Aramaic">geor',
+       0x0110, '<td colspan="2" class="X L Hangul">jamo',
+       0x0120, '<td colspan="3" class="X L African">ethiopic',
+       0x0138, '<td colspan="6" class="X L Syllabic">aboriginal',
+       0x0168, '<td colspan="1" class="X L Alpha">ger',
+       0x0170, '<td colspan="2" class="X L Brahmic">brahm',
+       0x0180, '<td colspan="1" class="X L Aramaic">mon',
+       0x0188, '<td colspan="1" class="X L Syllabic">can',
+       0x0190, '<td colspan="8" class="X L Brahmic">brahmic',
+       0x01D0, '<td colspan="4" class="X L Latin">extensions',
+       0x01F0, '<td colspan="2" class="X L Greek">greek',
+       0x0200, '<td colspan="1" class="X Po">·…',
+       0x0208, '<td colspan="3" class="X So">symbols',
+       0x0220, '<td colspan="2" class="X Sm">maths',
+       0x0230, '<td colspan="3" class="X So">technical',
+       0x0248, '<td colspan="1" class="X Latin">()',
+       0x0250, '<td colspan="2" class="X So">draw',
+       0x0260, '<td colspan="4" class="X So">symbols',
+       0x0280, '<td colspan="2" class="X L Alpha">braille',
+       0x0290, '<td colspan="1" class="X So">arr',
+       0x0298, '<td colspan="3" class="X Sm">maths',
+       0x02B0, '<td colspan="2" class="X So">misc',
+       0x02C0, '<td colspan="2" class="X L Greek">ancient',
+       0x02D0, '<td colspan="2" class="X L Alpha">ext',
+       0x02E0, '<td colspan="1" class="X Po">·+',
+       0x02E8, '<td colspan="3" class="X L Han">radicals',
+       0x0300, '<td colspan="2" class="X L Katakana">japanese',
+       0x0310, '<td colspan="4" class="X L Han">cjk+',
+       0x0330, '<td colspan="2" class="X Xd L Han">compat',
+       0x0340, '<td colspan="8" class="X L Han" style="border-bottom:none">',
+       0x0380, '<td colspan="16" rowspan="2" class="X L Han" style="border-top:none">cjk ideographs A', #+2
+       0x04E0, '<td colspan="16" rowspan="11" class="X L Han">cjk unified ideographs',
+       0x0A00, '<td colspan="9" class="X L Syllabic">yi',
+       0x0A48, '<td colspan="1" class="X L Latin">lisu',
+       0x0A50, '<td colspan="2" class="X L Syllabic">vai',
+       0x0A60, '<td colspan="1" class="X L Cyrillic">cyr',
+       0x0A68, '<td colspan="1" class="X L Syllabic">bam',
+       0x0A70, '<td colspan="2" class="X L Latin">lat-D',
+       0x0A80, '<td colspan="6" class="X L Brahmic">brahmic',
+       0x0AB0, '<td colspan="2" class="X L Alpha">ext',
+       0x0AC0, '<td colspan="8" class="X L Hangul" style="border-bottom:none">',
+       0x0B00, '<td colspan="16" rowspan="5" class="X L Hangul" style="border-top:none">hangeul syllables',
+       0x0D80, '<td colspan="16" class="X Cs">surrogates',
+       0x0E00, '<td colspan="16" rowspan="3" class="X Co" style="border-bottom:none">private use',
+       0x0F80, '<td colspan="2" class="X Co" style="border-top:none">',
+       0x0F90, '<td colspan="4" class="X L Han">cjk compat',
+       0x0FB0, '<td colspan="8" class="X L Arabic">presentation',
+       0x0FF0, '<td colspan="2" class="X L Latin">width',
+       0x7D80, '<td colspan="5" class="X Xd L">presentation',
+       0x7DA8, '<td colspan="11" class="X Xd L Arabic" style="border-bottom:none">',
+       0x7E00, '<td colspan="16" class="X Xd L Arabic" style="border-top:none; border-bottom:none">arabic presentation forms A',
+       0x7E80, '<td colspan="13" class="X Xd L Arabic" style="border-top:none">',
+       0x7EE8, '<td colspan="2" class="Xi">?',
+       0x7EF8, '<td colspan="1" class="X Xd L Arabic" style="border-top:none">',
+       0x7F00, '<td colspan="1" class="X Cc">var',
+       0x7F08, '<td colspan="1" class="X L Pd">ver',
+       0x7F10, '<td colspan="1" class="X L Mn">½',
+       0x7F18, '<td colspan="2" class="X Xd Pd Han">comp',
+       0x7F28, '<td colspan="2" class="X Xd L Latin">small',
+       0x7F38, '<td colspan="9" class="X Xd L Arabic">arabic presentation B',
+       0x7F80, '<td colspan="15" class="X L Latin">halfwidth &amp; fullwidth forms',
+       0x7FF8, '<td colspan="1" class="X Cc">sp',
 );
 
 sub {
 );
 
 sub {
index 98a7345b28d072bf254a9ac37f82af7d85812c7a..6577f4c4521f7b3b7a7cb337e5975f60dbb5c234 100644 (file)
@@ -21,6 +21,8 @@ Html({
 <:
 use Shiar_Sheet::FormatChar;
 my $glyphs = Shiar_Sheet::FormatChar->new;
 <:
 use Shiar_Sheet::FormatChar;
 my $glyphs = Shiar_Sheet::FormatChar->new;
+my @nibble = (0..9, 'A'..'F');
+my $nibsize = 1;
 
 use Encode qw(decode resolve_alias);
 # generate character table(s)
 
 use Encode qw(decode resolve_alias);
 # generate character table(s)
@@ -61,6 +63,8 @@ my @request = map {
                        $row{table} = ' ' x 512;
                        $row{set} = 'Unicode planes';
                        $row{cell} = do 'charset-ucplanes.inc.pl';
                        $row{table} = ' ' x 512;
                        $row{set} = 'Unicode planes';
                        $row{cell} = do 'charset-ucplanes.inc.pl';
+                       @nibble = (map { $_.0, $_.8 } 0 .. 7);
+                       $nibsize = 8;
                }
                elsif ($row{set} = resolve_alias($input)) {
                        if ($row{set} eq 'Internal') {
                }
                elsif ($row{set} = resolve_alias($input)) {
                        if ($row{set} eq 'Internal') {
@@ -97,7 +101,6 @@ for my $cp437 (grep {$request[$_]->{set} eq 'cp437'} 0 .. $#request) {
        );
 }
 
        );
 }
 
-my @nibble = (0..9, 'A'..'F');
 for my $row (@request) {
        printf '<div class="section"><table class="glyphs%s">', !$row->{cell} && ' charmap';
        printf '<caption>%s</caption>', $row->{set};
 for my $row (@request) {
        printf '<div class="section"><table class="glyphs%s">', !$row->{cell} && ' charmap';
        printf '<caption>%s</caption>', $row->{set};
@@ -111,12 +114,13 @@ for my $row (@request) {
        for my $msb (0 .. (length($row->{table}) || 256) - 1 >> 4) {
                printf '<tr><th>%X', $msb + ($row->{offset} >> 4);
                for my $lsb (0 .. $#nibble) {
        for my $msb (0 .. (length($row->{table}) || 256) - 1 >> 4) {
                printf '<tr><th>%X', $msb + ($row->{offset} >> 4);
                for my $lsb (0 .. $#nibble) {
+                       my $val = ( ($msb<<4) + $lsb ) * $nibsize;
                        if ($row->{cell}) {
                        if ($row->{cell}) {
-                               print $row->{cell}->(($msb<<4) + $lsb);
+                               print $row->{cell}->($val);
                                next;
                        }
 
                                next;
                        }
 
-                       my $glyph = substr $row->{table}, ($msb<<4) + $lsb, 1;
+                       my $glyph = substr $row->{table}, $val, 1;
                        if ($glyph eq $NOCHAR) {
                                print '<td>';
                                next;
                        if ($glyph eq $NOCHAR) {
                                print '<td>';
                                next;