X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/98699865db67c9772d2a56571e8ddcaee5a5e7bd..6721f1111bc49b8ee5efc0b39d74321c1393cdfb:/charset.plp diff --git a/charset.plp b/charset.plp index 2dc6964..e5fdd45 100644 --- a/charset.plp +++ b/charset.plp @@ -1,30 +1,25 @@ -<: -use utf8; -use strict; -use warnings; -use open IO => ':utf8'; - -our $VERSION = '1.0'; - -$header{content_type} = 'text/html; charset=utf-8'; - -:> - +<(common.inc.plp)><: + +Html({ + title => 'charset cheat sheet', + version => 'v1.0', + description => [ + "Reference sheet with all glyphs in common character encoding tables,", + "and an overview of Unicode ranges and UTF-8 bytes.", + ], + keywords => [qw' + charset codepage unicode ascii utf8 latin glyph character encoding + reference common overview table + '], + stylesheet => [qw'light'], +}); - -charset cheat sheet - - - - - +:>

Character encoding

<: -my $diinfo = do 'digraphs.inc.pl'; -my %di = map { $diinfo->{$_}->[0] => $_ } grep { ref $diinfo->{$_} } - keys %$diinfo; +use Shiar_Sheet::FormatChar; +my $glyphs = Shiar_Sheet::FormatChar->new; use Encode qw(decode resolve_alias); # generate character table(s) @@ -53,14 +48,29 @@ my @request = map { if ($input =~ s/-$//) { $endpoint = $row{offset} ? $row{offset} < 160 ? 159 : 191 : 127; } - if ($row{set} = resolve_alias($input)) { + + if ($input =~ /^U([0-9a-f]+)(?:-([0-9a-f]+))?/) { + my $start = hex($1) << ($2 ? 4 : 8); + my $end = $2 ? hex($2) << 4 : $start + 240; + $row{table} = join '', map { chr } $start .. $end+15; + utf8::upgrade($row{table}); # prevent latin1 output + $row{set} = sprintf 'Unicode block U+%02Xxx', $start >> 8; + } + elsif ($input eq 'U') { + $row{table} = ' ' x 512; + $row{set} = 'Unicode planes'; + $row{cell} = do 'charset-ucplanes.inc.pl'; + } + elsif ($row{set} = resolve_alias($input)) { if ($row{set} eq 'Internal') { $row{table} = ' ' x ($endpoint < 255 ? 640 : 4096); $row{set} = 'Unicode BMP'; + $row{cell} = do 'charset-unicode.inc.pl'; } elsif ($row{set} eq 'utf-8-strict') { $row{table} = undef; $row{set} = 'UTF-8'; + $row{cell} = do 'charset-utf8.inc.pl'; } else { $row{table} = decode($row{set}, pack 'C*', $row{offset} .. $endpoint); @@ -86,606 +96,11 @@ for my $cp437 (grep {$request[$_]->{set} eq 'cp437'} 0 .. $#request) { ); } -sub quote { - local $_ = shift; - s/"/"/g; - s//>/g; - return $_; -} - -sub printcell_unicode { - my ($value) = @_; - if ($value > 0xFFF) { - print "\n".'?'; - } - elsif ($value == 0) { - print 'control'; - } - elsif ($value == 2) { - print 'comn'; - } - elsif ($value == 4) { - print 'basic latin'; - } - elsif ($value == 8) { - print 'control'; - } - elsif ($value == 10) { - print 'comn'; - } - elsif ($value == 12) { - print 'latin1'; - } - elsif ($value == 0x10) { - print 'latin extended-A'; - } - elsif ($value == 0x18) { - print 'latin extended-B'; - } - elsif ($value == 0x20) { - print 'latin ext-B'; - } - elsif ($value == 0x25) { - print 'IPA'; - } - elsif ($value == 0x2B) { - print 'spacing modifier'; - } - elsif ($value == 0x30) { - print 'diacritics'; - } - elsif ($value == 0x38) { - print 'greek'; - } - elsif ($value == 0x40) { - print 'cyrillic'; - } - elsif ($value == 0x50) { - print 'cyrillic+'; - } - elsif ($value == 0x53) { - print 'armenian'; - } - elsif ($value == 0x58) { - print 'hebrew'; - } - elsif ($value == 0x60) { - print 'arabic'; - } - elsif ($value == 0x70) { - print 'syriac'; - } - elsif ($value == 0x75) { - print 'arabic+'; - } - elsif ($value == 0x78) { - print 'thaana'; - } - elsif ($value == 0x7C) { - print 'n\'ko'; - } - elsif ($value == 0x80) { - print 'samaritan'; - } - elsif ($value == 0x84) { - print 'manda'; - } - elsif ($value == 0x86) { - print 'reserved'; - } - elsif ($value == 0x90) { - print 'devanagari'; - } - elsif ($value == 0x98) { - print 'bengali'; - } - elsif ($value == 0xA0) { - print 'gurmukhi'; - } - elsif ($value == 0xA8) { - print 'gujarati'; - } - elsif ($value == 0xB0) { - print 'oriya'; - } - elsif ($value == 0xB8) { - print 'tamil'; - } - elsif ($value == 0xC0) { - print 'telugu'; - } - elsif ($value == 0xC8) { - print 'kannada'; - } - elsif ($value == 0xD0) { - print 'malayalam'; - } - elsif ($value == 0xD8) { - print 'sinhala'; - } - elsif ($value == 0xE0) { - print 'thai'; - } - elsif ($value == 0xE8) { - print 'lao'; - } - elsif ($value == 0xF0) { - print 'tibetan'; - } - elsif ($value == 0x100) { - print 'myanmar'; - } - elsif ($value == 0x10A) { - print 'georgian'; - } - elsif ($value == 0x110) { - print 'hangeul jamo'; - } - elsif ($value == 0x120) { - print 'ethiopic'; - } - elsif ($value == 0x130) { - print 'ethiopic'; - } - elsif ($value == 0x138) { - print 'eth+'; - } - elsif ($value == 0x13A) { - print 'cherokee'; - } - elsif ($value == 0x140) { - print 'unified canadian aboriginal syllabics'; - } - elsif ($value == 0x160) { - print 'unified canadian syllabics'; - } - elsif ($value == 0x168) { - print 'ogham'; - } - elsif ($value == 0x16A) { - print 'runic'; - } - elsif ($value == 0x170) { - print 'tagalog'; - } - elsif ($value == 0x172) { - print 'hanun'; - } - elsif ($value == 0x174) { - print 'buhid'; - } - elsif ($value == 0x176) { - print 'tagb'; - } - elsif ($value == 0x178) { - print 'khmer'; - } - elsif ($value == 0x180) { - print 'mongolian'; - } - elsif ($value == 0x18B) { - print 'canadian+'; - } - elsif ($value == 0x190) { - print 'limbu'; - } - elsif ($value == 0x195) { - print 'tai le'; - } - elsif ($value == 0x198) { - print 'new tai lue'; - } - elsif ($value == 0x19E) { - print 'km'; - } - elsif ($value == 0x1A0) { - print 'lontara'; - } - elsif ($value == 0x1A2) { - print 'tai tham'; - } - elsif ($value == 0x1AB) { - print 'reserved'; - } - elsif ($value == 0x1B0) { - print 'balinese'; - } - elsif ($value == 0x1B8) { - print 'sundanese'; - } - elsif ($value == 0x1BC) { - print 'batak'; - } - elsif ($value == 0x1C0) { - print 'lepcha'; - } - elsif ($value == 0x1C5) { - print 'ol chiki'; - } - elsif ($value == 0x1C8) { - print 'reserved'; - } - elsif ($value == 0x1CD) { - print 'vedic'; - } - elsif ($value == 0x1D0) { - print 'phonetic'; - } - elsif ($value == 0x1D8) { - print 'phonetic+'; - } - elsif ($value == 0x1DC) { - print 'combining'; - } - elsif ($value == 0x1E0) { - print 'latin extended additional'; - } - elsif ($value == 0x1F0) { - print 'greek+'; - } - elsif ($value == 0x200) { - print 'general punctuation'; - } - elsif ($value == 0x207) { - print 'suþscript'; # suth now means "sub and/or sup" - } - elsif ($value == 0x20A) { - print 'currency'; - } - elsif ($value == 0x20D) { - print 'overlay'; - } - elsif ($value == 0x210) { - print 'letterlike'; - } - elsif ($value == 0x215) { - print 'number'; - } - elsif ($value == 0x219) { - print 'arrows'; - } - elsif ($value == 0x220) { - print 'mathematical symbols'; - } - elsif ($value == 0x230) { - print 'miscellaneous technical'; - } - elsif ($value == 0x240) { - print 'control'; - } - elsif ($value == 0x244) { - print 'OCR'; - } - elsif ($value == 0x246) { - print 'enclosed alphanumerics'; - } - elsif ($value == 0x250) { - print 'box drawing'; - } - elsif ($value == 0x258) { - print 'blocks'; - } - elsif ($value == 0x25A) { - print 'geometric shapes'; - } - elsif ($value == 0x260) { - print 'miscellaneous symbols'; - } - elsif ($value == 0x270) { - print 'dingbats'; - } - elsif ($value == 0x27C) { - print 'maths-A'; - } - elsif ($value == 0x27F) { - print 'arr'; - } - elsif ($value == 0x280) { - print 'braille'; - } - elsif ($value == 0x290) { - print 'supplemental arrows-B'; - } - elsif ($value == 0x298) { - print 'mathematical symbols-B'; - } - elsif ($value == 0x2A0) { - print 'supplemental mathematical operators'; - } - elsif ($value == 0x2B0) { - print 'miscellaneous symbols and arrows'; - } - elsif ($value == 0x2C0) { - print 'glagolitic'; - } - elsif ($value == 0x2C6) { - print 'latin-C'; - } - elsif ($value == 0x2C8) { - print 'coptic'; - } - elsif ($value == 0x2D0) { - print 'georgian+'; - } - elsif ($value == 0x2D3) { - print 'tifinagh'; #TODO: proto-canaanite - } - elsif ($value == 0x2D8) { - print 'ethiopic+'; - } - elsif ($value == 0x2DE) { - print 'cyrl-A'; - } - elsif ($value == 0x2E0) { - print 'punctuation+'; - } - elsif ($value == 0x2E8) { - print 'cjk radicals'; - } - elsif ($value == 0x2F0) { - print 'kangxi radicals'; - } - elsif ($value == 0x2FE) { - print ''; - } - elsif ($value == 0x2FF) { - print 'idc'; - } - elsif ($value == 0x300) { - print 'cjk misc'; - } - elsif ($value == 0x304) { - print 'hiragana'; - } - elsif ($value == 0x30A) { - print 'katakana'; - } - elsif ($value == 0x310) { - print 'bopomofo'; - } - elsif ($value == 0x313) { - print 'hangeul compat'; - } - elsif ($value == 0x319) { - print 'kbn'; - } - elsif ($value == 0x31A) { - print 'bpmf'; - } - elsif ($value == 0x31C) { - print 'strokes'; - } - elsif ($value == 0x31F) { - print 'k+'; - } - elsif ($value == 0x320) { - print 'enclosed cjk characters'; - } - elsif ($value == 0x330) { - print 'cjk compatibility'; - } - elsif ($value == 0x340) { - print 'cjk unified ideographs extension A'; - } - elsif ($value == 0x4D0) { - print 'cjk unified ideographs extension A'; - } - elsif ($value == 0x4DC) { - print 'hexagrams'; - } - elsif ($value == 0x4E0) { - print 'cjk unified ideographs'; - } - elsif ($value == 0xA00) { - print 'yi'; - } - elsif ($value == 0xA40) { - print 'yi'; - } - elsif ($value == 0xA49) { - print 'yi radicals'; - } - elsif ($value == 0xA4D) { - print 'lisu'; - } - elsif ($value == 0xA50) { - print 'vai'; - } - elsif ($value == 0xA60) { - print 'vai'; - } - elsif ($value == 0xA64) { - print 'cyrillic extended-B'; - } - elsif ($value == 0xA6A) { - print 'bamum'; - } - elsif ($value == 0xA70) { - print 'tones'; - } - elsif ($value == 0xA72) { - print 'latin extended-D'; - } - elsif ($value == 0xA80) { - print 'sylheti'; - } - elsif ($value == 0xA83) { - print 'in'; - } - elsif ($value == 0xA84) { - print 'phags-pa'; - } - elsif ($value == 0xA88) { - print 'saurashtra'; - } - elsif ($value == 0xA8E) { - print 'deva+'; - } - elsif ($value == 0xA90) { - print 'kayah li'; - } - elsif ($value == 0xA93) { - print 'rejang'; - } - elsif ($value == 0xA96) { - print 'jamo-A'; - } - elsif ($value == 0xA98) { - print 'javanese'; - } - elsif ($value == 0xA9E) { - print 'res'; - } - elsif ($value == 0xAA0) { - print 'cham'; - } - elsif ($value == 0xAA6) { - print 'mym-A'; - } - elsif ($value == 0xAA8) { - print 'tai viet'; - } - elsif ($value == 0xAAE) { - print 'mtei+'; - } - elsif ($value == 0xAB0) { - print 'reserved'; - } - elsif ($value == 0xABC) { - print 'manipuri'; - } - elsif ($value == 0xAC0) { - print 'hangeul syllables'; - } - elsif ($value == 0xD70) { - print 'hangeul syllables'; - } - elsif ($value == 0xD7B) { - print 'haungeul jamo-B'; - } - elsif ($value == 0xD80) { - print 'high surrogates'; - } - elsif ($value == 0xDC0) { - print 'low surrogates'; - } - elsif ($value == 0xE00) { - print 'private use'; - } - elsif ($value == 0xF90) { - print 'cjk compatibility ideographs'; - } - elsif ($value == 0xFB0) { - print 'presentation'; - } - elsif ($value == 0xFB5) { - print ''; - } - elsif ($value == 0xFC0) { - print 'arabic presentation forms A'; - } - elsif ($value == 0xFD0) { - print ''; - } - elsif ($value == 0xFDD) { - print '?'; - } - elsif ($value == 0xFDF) { - print ''; - } - elsif ($value == 0xFE0) { - print 'var'; - } - elsif ($value == 0xFE1) { - print 'ver'; - } - elsif ($value == 0xFE2) { - print '½'; - } - elsif ($value == 0xFE3) { - print 'comp'; - } - elsif ($value == 0xFE5) { - print 'small'; - } - elsif ($value == 0xFE7) { - print 'arabic presentation B'; - } - elsif ($value == 0xFF0) { - print 'halfwidth & fullwidth forms'; - } - elsif ($value == 0xFFF) { - print 'sp'; - } -} - -sub printcell_utf8 { - my ($value) = @_; - if ($value <= 0x7F) { - print 'single byte ASCII' - if $value == 0; - } - elsif ($value <= 0xBF) { - print 'multi-byte continuation' - if $value == 0x80; - } - elsif ($value <= 0xC1) { - print '(overl.)' - if $value == 0xC0; - } - elsif ($value <= 0xDF) { - print '2-byte sequence start' - if $value == 0xC2; - print '' - if $value == 0xD0; - } - elsif ($value <= 0xEF) { - print '3-byte sequence start' - if $value == 0xE0; - } - elsif ($value <= 0xF4) { - print '4-byte sequence' - if $value == 0xF0; - } - elsif ($value <= 0xF7) { - print '(overflow)' - if $value == 0xF5; - } - elsif ($value <= 0xFB) { - print '5-byte' - if $value == 0xF8; - } - elsif ($value <= 0xFD) { - print '6-byte' - if $value == 0xFC; - } - elsif ($value <= 0xFF) { - print 'invalid' - if $value == 0xFE; - } - else { - print "\n".'?'; - } -} - -print "\n"; - :>
- +
+ +
control + whitespace + diacritic +
letter +
+
punctuation +
quote +
+
symbol +
math + currency +
+
numeric + greek +
latin + cyrillic +
+
aramaic +
brahmic + arabic +
+
syllabic +
african + japanese + cjk + chinese +
+
alphabetic +
+ + +
unicode 5.0 + proposed + deprecated + unassigned + invalid +
+
-