From 130c94fc7747fd586b677f48fbabd2ecf10297c5 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Fri, 13 Mar 2015 11:04:57 +0100 Subject: [PATCH 1/1] charset: do not divide plane index by column size Instead of counting by column number, use straight-forward unicode offsets and calculate selection at runtime. --- charset-ucplanes.inc.pl | 150 ++++++++++++++++++++-------------------- charset.plp | 10 ++- 2 files changed, 82 insertions(+), 78 deletions(-) diff --git a/charset-ucplanes.inc.pl b/charset-ucplanes.inc.pl index 9378dab..607f8be 100644 --- a/charset-ucplanes.inc.pl +++ b/charset-ucplanes.inc.pl @@ -1,80 +1,80 @@ use utf8; my %uniblock = ( - 0x000, 'ascii', - 0x001, 'latin', -# 0x005, 'spacing modifier', - 0x005, 'comb', - 0x007, 'grk', - 0x008, 'cyr', - 0x00A, 'arm', - 0x00B, 'heb', - 0x00C, 'arabic', - 0x00E, 'aram', - 0x010, 'aramaic', - 0x012, 'brahmic', - 0x020, 'mm', - 0x021, 'geor', - 0x022, 'jamo', - 0x024, 'ethiopic', - 0x027, 'aboriginal', - 0x02D, 'ger', - 0x02E, 'brahm', - 0x030, 'mon', - 0x031, 'can', - 0x032, 'brahmic', - 0x03A, 'extensions', - 0x03E, 'greek', - 0x040, '·…', - 0x041, 'symbols', - 0x044, 'maths', - 0x046, 'technical', - 0x049, '()', - 0x04A, 'draw', - 0x04C, 'symbols', - 0x050, 'braille', - 0x052, 'arr', - 0x053, 'maths', - 0x056, 'misc', - 0x058, 'ancient', - 0x05A, 'ext', - 0x05C, '·+', - 0x05D, 'radicals', - 0x060, 'japanese', - 0x062, 'cjk+', - 0x066, 'compat', - 0x068, '', - 0x070, 'cjk ideographs A', #+2 - 0x09C, 'cjk unified ideographs', - 0x140, 'yi', - 0x149, 'lisu', - 0x14A, 'vai', - 0x14C, 'cyr', - 0x14D, 'bam', - 0x14E, 'lat-D', - 0x150, 'brahmic', - 0x156, 'ext', - 0x158, '', - 0x160, 'hangeul syllables', - 0x1B0, 'surrogates', - 0x1C0, 'private use', - 0x1F0, '', - 0x1F2, 'cjk compat', - 0x1F6, 'presentation', - 0x1FE, 'width', - 0xFB0, 'presentation', - 0xFB5, '', - 0xFC0, 'arabic presentation forms A', - 0xFD0, '', - 0xFDD, '?', - 0xFDF, '', - 0xFE0, 'var', - 0xFE1, 'ver', - 0xFE2, '½', - 0xFE3, 'comp', - 0xFE5, 'small', - 0xFE7, 'arabic presentation B', - 0xFF0, 'halfwidth & fullwidth forms', - 0xFFF, 'sp', + 0x0000, 'ascii', + 0x0008, 'latin', +# 0x0028, 'spacing modifier', + 0x0028, 'comb', + 0x0038, 'grk', + 0x0040, 'cyr', + 0x0050, 'arm', + 0x0058, 'heb', + 0x0060, 'arabic', + 0x0070, 'aram', + 0x0080, 'aramaic', + 0x0090, 'brahmic', + 0x0100, 'mm', + 0x0108, 'geor', + 0x0110, 'jamo', + 0x0120, 'ethiopic', + 0x0138, 'aboriginal', + 0x0168, 'ger', + 0x0170, 'brahm', + 0x0180, 'mon', + 0x0188, 'can', + 0x0190, 'brahmic', + 0x01D0, 'extensions', + 0x01F0, 'greek', + 0x0200, '·…', + 0x0208, 'symbols', + 0x0220, 'maths', + 0x0230, 'technical', + 0x0248, '()', + 0x0250, 'draw', + 0x0260, 'symbols', + 0x0280, 'braille', + 0x0290, 'arr', + 0x0298, 'maths', + 0x02B0, 'misc', + 0x02C0, 'ancient', + 0x02D0, 'ext', + 0x02E0, '·+', + 0x02E8, 'radicals', + 0x0300, 'japanese', + 0x0310, 'cjk+', + 0x0330, 'compat', + 0x0340, '', + 0x0380, 'cjk ideographs A', #+2 + 0x04E0, 'cjk unified ideographs', + 0x0A00, 'yi', + 0x0A48, 'lisu', + 0x0A50, 'vai', + 0x0A60, 'cyr', + 0x0A68, 'bam', + 0x0A70, 'lat-D', + 0x0A80, 'brahmic', + 0x0AB0, 'ext', + 0x0AC0, '', + 0x0B00, 'hangeul syllables', + 0x0D80, 'surrogates', + 0x0E00, 'private use', + 0x0F80, '', + 0x0F90, 'cjk compat', + 0x0FB0, 'presentation', + 0x0FF0, 'width', + 0x7D80, 'presentation', + 0x7DA8, '', + 0x7E00, 'arabic presentation forms A', + 0x7E80, '', + 0x7EE8, '?', + 0x7EF8, '', + 0x7F00, 'var', + 0x7F08, 'ver', + 0x7F10, '½', + 0x7F18, 'comp', + 0x7F28, 'small', + 0x7F38, 'arabic presentation B', + 0x7F80, 'halfwidth & fullwidth forms', + 0x7FF8, 'sp', ); sub { diff --git a/charset.plp b/charset.plp index 98a7345..6577f4c 100644 --- a/charset.plp +++ b/charset.plp @@ -21,6 +21,8 @@ Html({ <: 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) @@ -61,6 +63,8 @@ my @request = map { $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') { @@ -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 '
', !$row->{cell} && ' charmap'; printf '', $row->{set}; @@ -111,12 +114,13 @@ for my $row (@request) { for my $msb (0 .. (length($row->{table}) || 256) - 1 >> 4) { printf '
%s
%X', $msb + ($row->{offset} >> 4); for my $lsb (0 .. $#nibble) { + my $val = ( ($msb<<4) + $lsb ) * $nibsize; if ($row->{cell}) { - print $row->{cell}->(($msb<<4) + $lsb); + print $row->{cell}->($val); next; } - my $glyph = substr $row->{table}, ($msb<<4) + $lsb, 1; + my $glyph = substr $row->{table}, $val, 1; if ($glyph eq $NOCHAR) { print ''; next; -- 2.30.0