-sub printcell_unicode {
- my ($value) = @_;
- if ($value > 0x1FF) {
- print "\n".'<td class="X">?';
- }
- elsif ($value == 0) {
- print '<td colspan="2" class="X Cc">control';
- }
- elsif ($value == 2) {
- print '<td colspan="6" class="X Ll Latin">latin';
- }
- elsif ($value == 8) {
- print '<td colspan="2" class="X Cc">control';
- }
- elsif ($value == 10) {
- print '<td colspan="6" class="X Ll Latin">latin supplement';
- }
- elsif ($value == 0x10) {
- print '<td colspan="8" class="X Ll Latin">latin ext-A';
- }
- elsif ($value == 0x18) {
- print '<td colspan="8" class="X Ll Latin">latin ext-B';
- }
- elsif ($value == 0x20) {
- print '<td colspan="5" class="X Ll Latin">latin ext-B';
- }
- elsif ($value == 0x25) {
- print '<td colspan="6" class="X Ll Latin">IPA';
- }
- elsif ($value == 0x2B) {
- print '<td colspan="5" class="X Sk">spacing modifier';
- }
- elsif ($value == 0x30) {
- print '<td colspan="8" class="X Mn">diacritics';
- }
- elsif ($value == 0x38) {
- print '<td colspan="8" class="X Ll Greek">greek';
- }
- elsif ($value == 0x40) {
- print '<td colspan="16" class="X Ll Cyrillic">cyrillic';
- }
- elsif ($value == 0x50) {
- print '<td colspan="3" class="X Ll Cyrillic">cyrillic+';
- }
- elsif ($value == 0x53) {
- print '<td colspan="5" class="X Ll Armenian">armenian';
- }
- elsif ($value == 0x58) {
- print '<td colspan="8" class="X Ll Hebrew">hebrew';
- }
- elsif ($value == 0x60) {
- print '<td colspan="16" class="X Ll Arabic">arabic';
- }
- elsif ($value == 0x70) {
- print '<td colspan="5" class="X Ll Aramaic">syriac';
- }
- elsif ($value == 0x75) {
- print '<td colspan="3" class="X Ll Arabic">arabic+';
- }
- elsif ($value == 0x78) {
- print '<td colspan="4" class="X Ll African">thaana';
- }
- elsif ($value == 0x7C) {
- print '<td colspan="4" class="X Ll African">nko';
- }
- elsif ($value == 0x80) {
- print '<td colspan="4" class="X di-rare">samaritan';
- }
- elsif ($value == 0x84) {
- print '<td colspan="2" class="X di-rare Ll Aramaic">manda';
- }
- elsif ($value == 0x86) {
- print '<td colspan="12" class="di-invalid">reserved';
- }
- elsif ($value == 0x90) {
- print '<td colspan="8" class="X Ll Brahmic">devanagari';
- }
- elsif ($value == 0x98) {
- print '<td colspan="8" class="X Ll Brahmic">bengali';
- }
- elsif ($value == 0xA0) {
- print '<td colspan="8" class="X Ll Brahmic">gurmukhi';
- }
- elsif ($value == 0xA8) {
- print '<td colspan="8" class="X Ll Brahmic">gujarati';
- }
- elsif ($value == 0xB0) {
- print '<td colspan="8" class="X Ll Brahmic">oriya';
- }
- elsif ($value == 0xB8) {
- print '<td colspan="8" class="X Ll Brahmic">tamil';
- }
- elsif ($value == 0xC0) {
- print '<td colspan="8" class="X Ll Brahmic">telugu';
- }
- elsif ($value == 0xC8) {
- print '<td colspan="8" class="X Ll Brahmic">kannada';
- }
- elsif ($value == 0xD0) {
- print '<td colspan="8" class="X Ll Brahmic">malayalam';
- }
- elsif ($value == 0xD8) {
- print '<td colspan="8" class="X Ll Brahmic">sinhala';
- }
- elsif ($value == 0xE0) {
- print '<td colspan="8" class="X Ll Brahmic Khmer">thai';
- }
- elsif ($value == 0xE8) {
- print '<td colspan="8" class="X Ll Brahmic Khmer">lao';
- }
- elsif ($value == 0xF0) {
- print '<td colspan="16" class="X Ll Brahmic">tibetan';
- }
- elsif ($value == 0x100) {
- print '<td colspan="10" class="X Ll Brahmic">myanmar';
- }
- elsif ($value == 0x10A) {
- print '<td colspan="6" class="X Ll Aramaic">georgian';
- }
- elsif ($value == 0x110) {
- print '<td colspan="16" class="X Ll Hangul">hangeul jamo';
- }
- elsif ($value == 0x120) {
- print '<td colspan="16" class="X Ll African">ethiopic';
- }
- elsif ($value == 0x130) {
- print '<td colspan="8" class="X Ll African">ethiopic';
- }
- elsif ($value == 0x138) {
- print '<td colspan="2" class="X Ll African">eth+';
- }
- elsif ($value == 0x13A) {
- print '<td colspan="6" class="X Ll X">cherokee';
- }
- elsif ($value == 0x140) {
- print '<td colspan="16" rowspan="2" class="X Ll Syllabic">unified canadian aboriginal syllabics';
- }
- elsif ($value == 0x160) {
- print '<td colspan="8" class="X Ll Syllabic">unified canadian syllabics';
- }
- elsif ($value == 0x168) {
- print '<td colspan="2" class="X Ll X">ogham';
- }
- elsif ($value == 0x16A) {
- print '<td colspan="6" class="X Ll X">runic';
- }
- elsif ($value == 0x170) {
- print '<td colspan="2" class="X Ll Brahmic">tagalog';
- }
- elsif ($value == 0x172) {
- print '<td colspan="2" class="X Ll Brahmic">hanun';
- }
- elsif ($value == 0x174) {
- print '<td colspan="2" class="X Ll Brahmic">buhid';
- }
- elsif ($value == 0x176) {
- print '<td colspan="2" class="X Ll Brahmic" title="tagbanwa">tagb';
- }
- elsif ($value == 0x178) {
- print '<td colspan="8" class="X Ll Brahmic Khmer">khmer';
- }
- elsif ($value == 0x180) {
- print '<td colspan="11" class="X Ll Aramaic">mongolian';
- }
- elsif ($value == 0x18B) {
- print '<td colspan="5" class="X Ll Syllabic di-rare">canadian+';
- }
- elsif ($value == 0x190) {
- print '<td colspan="5" class="X Ll Brahmic">limbu';
- }
- elsif ($value == 0x195) {
- print '<td colspan="4" class="X Ll Brahmic">tai le';
- }
- elsif ($value == 0x198) {
- print '<td colspan="6" class="X Ll Brahmic">new tai lue';
- }
- elsif ($value == 0x19E) {
- print '<td colspan="2" class="X Ll Brahmic Khmer" title="khmer symbols">km';
- }
- elsif ($value == 0x1A0) {
- print '<td colspan="2" class="X Ll Brahmic">lontara';
- }
- elsif ($value == 0x1A2) {
- print '<td colspan="9" class="X Ll Brahmic di-rare">tai tham';
- }
- elsif ($value == 0x1AB) {
- print '<td colspan="5" class="di-invalid">reserved';
- }
- elsif ($value == 0x1B0) {
- print '<td colspan="8" class="X Ll ">balinese';
- }
- elsif ($value == 0x1B8) {
- print '<td colspan="4" class="X Ll ">sundanese';
- }
- elsif ($value == 0x1BC) {
- print '<td colspan="4" class="X Ll di-rare">batak';
- }
- elsif ($value == 0x1C0) {
- print '<td colspan="5" class="X Ll ">lepcha';
- }
- elsif ($value == 0x1C5) {
- print '<td colspan="3" class="X Ll ">ol chiki';
- }
- elsif ($value == 0x1C8) {
- print '<td colspan="5" class="di-invalid">reserved';
- }
- elsif ($value == 0x1CD) {
- print '<td colspan="3" class="X Ll di-rare">vedic';
- }
- elsif ($value == 0x1D0) {
- print '<td colspan="8" class="X Ll Latin">phonetic';
+<:
+use POSIX qw( ceil );
+use Shiar_Sheet::FormatChar;
+my $glyphs = Shiar_Sheet::FormatChar->new;
+my @request;
+
+sub tabinput {
+ # generate character table(s)
+ my $input = shift or return;
+
+ state $ALIAS = {
+ default => [qw( u+0-639 utf-8+realsize iso-8859-1 iso-8859-15 cp1252 cp437 cp850 )],
+ unicode => [qw( uu+cols=32+realsize u+0-4095 u+4096-6319 u+6320-8191 )],
+ us => [qw( cp437 cp863 gsm0338 AdobeStandardEncoding )],
+ ebcdic => [qw( cp37 cp500 cp1047 posix-bc cp1026 cp875 )],
+ iso => [map {"iso-8859-$_"} 1 .. 11, 13 .. 16],
+ dos => [qw( cp437 cp865 cp861 cp860 cp863 cp850 cp857 cp852 cp775
+ cp737 cp869 cp866 cp855 cp862 cp864 )],
+ aix => [qw( cp1006 )],
+ win => [qw( cp1252 cp1250 cp1254 cp1257 cp1258 cp1253 cp1251 cp1255 cp1256 cp874 )],
+ mac => [qw( MacRoman MacRomanian MacRumanian MacCroatian MacCentralEurRoman MacTurkish MacIcelandic MacSami
+ MacGreek MacCyrillic MacHebrew MacArabic MacFarsi MacThai )],
+
+ # languages
+ westeur => [qw( iso-8859-1 iso-8859-15 cp1252 iso-8859-14 cp850 hp-roman8 nextstep MacRoman )],
+ centeur => [qw( iso-8859-2 iso-8859-16 cp1250 cp852 MacRomanian MacCroatian MacCentralEurRoman )], # MacRumanian only for DB
+ turkish => [qw( iso-8859-9 iso-8859-3 cp1254 cp857 MacTurkish )],
+ norteur => [qw( baltic nordic )],
+ baltic => [qw( iso-8859-4 iso-8859-13 cp1257 cp775 )],
+ nordic => [qw( iso-8859-10 cp865 cp861 MacIcelandic MacSami )],
+ cyrillic => [qw( koi8-r koi8-u koi8-f iso-8859-5 cp1251 MacCyrillic cp866 cp855
+ U4 U2DE-2DF UA64-A69 U50-52 )], # MacUkrainian is broken
+ arabic => [qw( iso-8859-6 cp1256 MacArabic cp864 cp1006 MacFarsi
+ U6 U8A-8F+0-31+64 U75-77 )],
+ greek => [qw( iso-8859-7 cp1253 MacGreek cp737 cp869 U37-3F U1F )],
+ hebrew => [qw( iso-8859-8 cp1255 MacHebrew cp862 U59-5F )],
+ thai => [qw( iso-8859-11 cp874 MacThai )],
+ vietnamese => [qw( viscii cp1258 MacVietnamese )],
+ symbol => [qw( symbol dingbats MacDingbats AdobeZdingbat AdobeSymbol )],
+
+ # iso-code shorthand
+ 1 => 'westeur',
+ 2 => 'centeur',
+ 3 => 'turkish',
+ 4 => 'baltic',
+ 5 => 'cyrillic',
+ 6 => 'arabic',
+ 7 => 'greek',
+ 8 => 'hebrew',
+ 9 => 'turkish',
+ 10 => 'nordic',
+ 11 => 'thai',
+ };
+ if (my $follow = $ALIAS->{$input}) {
+ tabinput($_) for ref $follow ? @{$follow} : $follow;
+ return;