index: release v1.18 with only altgr index linked
[sheet.git] / charset-encoding.inc.pl
index c1fd74c8936ca6d33159c69ee6fb9eff4b51452c..8e748ed3f5e25cfe89e14c10098b075af0914f35 100644 (file)
@@ -9,7 +9,7 @@ use utf8;
        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 )],
+                          cp737 cp869 cp866 MIK 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
@@ -22,13 +22,13 @@ use utf8;
        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
+       cyrillic   => [qw( koi8-r koi8-u koi8-f iso-8859-5 cp1251 MacCyrillic cp866 MIK cp855
                           +400 +2DE0 +A640-A69F +500-52F )], # MacUkrainian is broken
        arabic     => [qw( iso-8859-6 cp1256 MacArabic cp864 cp1006 MacFarsi
                           +600 +8A0-8BF+8E0 +750-77F )],
        greek      => [qw( iso-8859-7 cp1253 MacGreek cp737 cp869  +370 +1F00 )],
        hebrew     => [qw( iso-8859-8 cp1255 MacHebrew cp862  +590 )],
-       thai       => [qw( iso-8859-11 cp874 MacThai )],
+       thai       => [qw( iso-8859-11 cp874 MacThai )], # U+0E00 identical to iso-8859-11
        vietnamese => [qw( viscii cp1258 MacVietnamese )],
        symbols    => [qw( symbol dingbats MacDingbats wingdings wingdings2 wingdings3 webdings )],
 
@@ -71,10 +71,54 @@ use utf8;
                },
        },
        'adobesymbol'  => {inherit => ['symbol' => '20-7F+A0', '' => '20-7F+A0']}, # minor differences, irrelevant except for different 'โ‚ฌ'
-       'wingdings'    => {inherit => ['' => '20'], setup => sub {require Encode::Wingdings}},
-       'wingdings2'   => {inherit => ['' => '20'], setup => sub {require Encode::Wingdings2}},
-       'wingdings3'   => {inherit => ['' => '20'], setup => sub {require Encode::Wingdings3}},
-       'webdings'     => {inherit => ['' => '20'], setup => sub {require Encode::Webdings}},
+       'wingdings'    => {
+               inherit => ['' => '20'],
+               table => [(map {chr} 0 .. 0x20), qw(
+                         ๐Ÿ–‰ โœ‚ โœ ๐Ÿ‘“ ๐Ÿ•ญ ๐Ÿ•ฎ ๐Ÿ•ฏ ๐Ÿ•ฟ โœ† ๐Ÿ–‚ ๐Ÿ–ƒ ๐Ÿ“ช ๐Ÿ“ซ ๐Ÿ“ฌ ๐Ÿ“ญ ๐Ÿ“ ๐Ÿ“‚ ๐Ÿ“„ ๐Ÿ— ๐Ÿ— ๐Ÿ—„ โŒ› ๐Ÿ–ฎ ๐Ÿ–ฐ ๐Ÿ–ฒ ๐Ÿ–ณ ๐Ÿ–ด ๐Ÿ–ซ ๐Ÿ–ฌ โœ‡ โœ
+                       ๐Ÿ–Ž โœŒ ๐Ÿ‘Œ ๐Ÿ‘ ๐Ÿ‘Ž โ˜œ โ˜ž โ˜ โ˜Ÿ ๐Ÿ– โ˜บ ๐Ÿ˜ โ˜น ๐Ÿ’ฃ โ˜  ๐Ÿณ ๐Ÿฑ โœˆ โ˜ผ ๐Ÿ’ง โ„ ๐Ÿ•† โœž ๐Ÿ•ˆ โœ  โœก โ˜ช โ˜ฏ เฅ โ˜ธ โ™ˆ โ™‰
+                       โ™Š โ™‹ โ™Œ โ™ โ™Ž โ™ โ™ โ™‘ โ™’ โ™“ ๐Ÿ™ฐ ๐Ÿ™ต โ— ๐Ÿ”พ โ–  โ–ก ๐Ÿž โ‘ โ’ โฌง โงซ โ—† โ– โฌฅ โŒง โฎน โŒ˜ ๐Ÿต ๐Ÿถ ๐Ÿ™ถ ๐Ÿ™ท \7f
+                       โ“ช โ‘  โ‘ก โ‘ข โ‘ฃ โ‘ค โ‘ฅ โ‘ฆ โ‘ง โ‘จ โ‘ฉ โ“ฟ โถ โท โธ โน โบ โป โผ โฝ โพ โฟ ๐Ÿ™ข ๐Ÿ™  ๐Ÿ™ก ๐Ÿ™ฃ ๐Ÿ™ž ๐Ÿ™œ ๐Ÿ™ ๐Ÿ™Ÿ ยท โ€ข
+                       โ–ช โšช ๐Ÿž† ๐Ÿžˆ โ—‰ โ—Ž ๐Ÿ”ฟ โ–ช โ—ป ๐ŸŸ‚ โœฆ โ˜… โœถ โœด โœน โœต โฏ โŒ– โŸก โŒ‘ โฏ‘ โœช โœฐ ๐Ÿ• ๐Ÿ•‘ ๐Ÿ•’ ๐Ÿ•“ ๐Ÿ•” ๐Ÿ•• ๐Ÿ•– ๐Ÿ•— ๐Ÿ•˜
+                       ๐Ÿ•™ ๐Ÿ•š ๐Ÿ•› โฎฐ โฎฑ โฎฒ โฎณ โฎด โฎต โฎถ โฎท ๐Ÿ™ช ๐Ÿ™ซ ๐Ÿ™• ๐Ÿ™” ๐Ÿ™— ๐Ÿ™– ๐Ÿ™ ๐Ÿ™‘ ๐Ÿ™’ ๐Ÿ™“ โŒซ โŒฆ โฎ˜ โฎš โฎ™ โฎ› โฎˆ โฎŠ โฎ‰ โฎ‹ ๐Ÿกจ
+                       ๐Ÿกช ๐Ÿกฉ ๐Ÿกซ ๐Ÿกฌ ๐Ÿกญ ๐Ÿกฏ ๐Ÿกฎ ๐Ÿกธ ๐Ÿกบ ๐Ÿกน ๐Ÿกป ๐Ÿกผ ๐Ÿกฝ ๐Ÿกฟ ๐Ÿกพ โ‡ฆ โ‡จ โ‡ง โ‡ฉ โฌ„ โ‡ณ โฌ€ โฌ โฌƒ โฌ‚ ๐Ÿขฌ ๐Ÿขญ ๐Ÿ—ถ โœ” ๐Ÿ—ท ๐Ÿ—น ๏ฃฟ
+               )],
+       },
+       'wingdings2'   => {
+               inherit => ['' => '20'],
+               table => [(map {chr} 0 .. 0x20), qw(
+                         ๐Ÿ–Š ๐Ÿ–‹ ๐Ÿ–Œ ๐Ÿ– โœ„ โœ€ ๐Ÿ•พ ๐Ÿ•ฝ ๐Ÿ—… ๐Ÿ—† ๐Ÿ—‡ ๐Ÿ—ˆ ๐Ÿ—‰ ๐Ÿ—Š ๐Ÿ—‹ ๐Ÿ—Œ ๐Ÿ— ๐Ÿ“‹ ๐Ÿ—‘ ๐Ÿ—” ๐Ÿ–ต ๐Ÿ–ถ ๐Ÿ–ท ๐Ÿ–ธ ๐Ÿ–ญ ๐Ÿ–ฏ ๐Ÿ–ฑ ๐Ÿ–’ ๐Ÿ–“ ๐Ÿ–˜ ๐Ÿ–™
+                       ๐Ÿ–š ๐Ÿ–› ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ–œ ๐Ÿ– ๐Ÿ–ž ๐Ÿ–Ÿ ๐Ÿ–  ๐Ÿ–ก ๐Ÿ‘† ๐Ÿ‘‡ ๐Ÿ–ข ๐Ÿ–ฃ ๐Ÿ–‘ ๐Ÿ—ด โœ“ ๐Ÿ—ต โ˜‘ โ˜’ โ˜’ โฎพ โฎฟ โฆธ โฆธ ๐Ÿ™ฑ ๐Ÿ™ด ๐Ÿ™ฒ ๐Ÿ™ณ โ€ฝ ๐Ÿ™น ๐Ÿ™บ
+                       ๐Ÿ™ป ๐Ÿ™ฆ ๐Ÿ™ค ๐Ÿ™ฅ ๐Ÿ™ง ๐Ÿ™š ๐Ÿ™˜ ๐Ÿ™™ ๐Ÿ™› โ“ช โ‘  โ‘ก โ‘ข โ‘ฃ โ‘ค โ‘ฅ โ‘ฆ โ‘ง โ‘จ โ‘ฉ โ“ฟ โถ โท โธ โน โบ โป โผ โฝ โพ โฟ \7f
+                       โ˜‰ ๐ŸŒ• โ˜ฝ โ˜พ โธฟ โœ ๐Ÿ•‡ ๐Ÿ•œ ๐Ÿ• ๐Ÿ•ž ๐Ÿ•Ÿ ๐Ÿ•  ๐Ÿ•ก ๐Ÿ•ข ๐Ÿ•ฃ ๐Ÿ•ค ๐Ÿ•ฅ ๐Ÿ•ฆ ๐Ÿ•ง ๐Ÿ™จ ๐Ÿ™ฉ โ€ข โ— โšซ โฌค ๐Ÿž… ๐Ÿž† ๐Ÿž‡ ๐Ÿžˆ ๐ŸžŠ โฆฟ โ—พ
+                       โ–  โ—ผ โฌ› โฌœ ๐Ÿž‘ ๐Ÿž’ ๐Ÿž“ ๐Ÿž” โ–ฃ ๐Ÿž• ๐Ÿž– ๐Ÿž— โฌฉ โฌฅ โ—† โ—‡ ๐Ÿžš โ—ˆ ๐Ÿž› ๐Ÿžœ ๐Ÿž โฌช โฌง โงซ โ—Š ๐Ÿž  โ—– โ—— โฏŠ โฏ‹ โ—ผ โฌฅ
+                       โฌŸ โฏ‚ โฌฃ โฌข โฏƒ โฏ„ ๐Ÿžก ๐Ÿžข ๐Ÿžฃ ๐Ÿžค ๐Ÿžฅ ๐Ÿžฆ ๐Ÿžง ๐Ÿžจ ๐Ÿžฉ ๐Ÿžช ๐Ÿžซ ๐Ÿžฌ ๐Ÿžญ ๐Ÿžฎ ๐Ÿžฏ ๐Ÿžฐ ๐Ÿžฑ ๐Ÿžฒ ๐Ÿžณ ๐Ÿžด ๐Ÿžต ๐Ÿžถ ๐Ÿžท ๐Ÿžธ ๐Ÿžน ๐Ÿžบ
+                       ๐Ÿžป ๐Ÿžผ ๐Ÿžฝ ๐Ÿžพ ๐Ÿžฟ ๐ŸŸ€ ๐ŸŸ‚ ๐ŸŸ„ โœฆ ๐ŸŸ‰ โ˜… โœถ ๐ŸŸ‹ โœท ๐ŸŸ ๐ŸŸ’ โœน ๐ŸŸƒ ๐ŸŸ‡ โœฏ ๐ŸŸ ๐ŸŸ” โฏŒ โฏ โ€ป โ‚
+               )],
+       },
+       'wingdings3'   => {
+               inherit => ['' => '20'],
+               table => [(map {chr} 0 .. 0x20), qw(
+                         โญ  โญข โญก โญฃ โญฆ โญง โญฉ โญจ โญฐ โญฒ โญฑ โญณ โญถ โญธ โญป โญฝ โญค โญฅ โญช โญฌ โญซ โญญ โญ โฎ  โฎก โฎข โฎฃ โฎค โฎฅ โฎฆ โฎง
+                       โฎ โฎ‘ โฎ’ โฎ“ โฎ€ โฎƒ โญพ โญฟ โฎ„ โฎ† โฎ… โฎ‡ โฎ โฎ โฎŽ โฎŒ โญฎ โญฏ โŽ‹ โŒค โŒƒ โŒฅ โŽต โก โ‡ช โฎธ ๐Ÿข  ๐Ÿขก ๐Ÿขข ๐Ÿขฃ ๐Ÿขค ๐Ÿขฅ
+                       ๐Ÿขฆ ๐Ÿขง ๐Ÿขจ ๐Ÿขฉ ๐Ÿขช ๐Ÿขซ โ† โ†’ โ†‘ โ†“ โ†– โ†— โ†™ โ†˜ ๐Ÿก˜ ๐Ÿก™ โ–ฒ โ–ผ โ–ณ โ–ฝ โ—„ โ–บ โ— โ–ท โ—ฃ โ—ข โ—ค โ—ฅ ๐Ÿž€ ๐Ÿž‚ ๐Ÿž \7f
+                       ๐Ÿžƒ โ–ฒ โ–ผ โ—€ โ–ถ โฎœ โฎž โฎ โฎŸ ๐Ÿ  ๐Ÿ ’ ๐Ÿ ‘ ๐Ÿ “ ๐Ÿ ” ๐Ÿ – ๐Ÿ • ๐Ÿ — ๐Ÿ ˜ ๐Ÿ š ๐Ÿ ™ ๐Ÿ › ๐Ÿ œ ๐Ÿ ž ๐Ÿ  ๐Ÿ Ÿ ๐Ÿ € ๐Ÿ ‚ ๐Ÿ  ๐Ÿ ƒ ๐Ÿ „ ๐Ÿ † ๐Ÿ …
+                       ๐Ÿ ‡ ๐Ÿ ˆ ๐Ÿ Š ๐Ÿ ‰ ๐Ÿ ‹ ๐Ÿ   ๐Ÿ ข ๐Ÿ ค ๐Ÿ ฆ ๐Ÿ จ ๐Ÿ จ ๐Ÿ ช ๐Ÿขœ ๐Ÿข ๐Ÿขž ๐ŸขŸ ๐Ÿ ฎ ๐Ÿ ฐ ๐Ÿ ฒ ๐Ÿ ด ๐Ÿ ถ ๐Ÿ ธ ๐Ÿ บ ๐Ÿ น ๐Ÿ ป ๐Ÿข˜ ๐Ÿขš ๐Ÿข™ ๐Ÿข› ๐Ÿ ผ ๐Ÿ พ ๐Ÿ ฝ
+                       ๐Ÿ ฟ ๐Ÿก€ ๐Ÿก‚ ๐Ÿก ๐Ÿกƒ ๐Ÿก„ ๐Ÿก† ๐Ÿก… ๐Ÿก‡ โฎจ โฎฉ โฎช โฎซ โฎฌ โฎญ โฎฎ โฎฏ ๐Ÿก  ๐Ÿกข ๐Ÿกก ๐Ÿกฃ ๐Ÿกค ๐Ÿกฅ ๐Ÿกง ๐Ÿกฆ ๐Ÿกฐ ๐Ÿกฒ ๐Ÿกฑ ๐Ÿกณ ๐Ÿกด ๐Ÿกต ๐Ÿกท
+                       ๐Ÿกถ ๐Ÿข€ ๐Ÿข‚ ๐Ÿข ๐Ÿขƒ ๐Ÿข„ ๐Ÿข… ๐Ÿข‡ ๐Ÿข† ๐Ÿข ๐Ÿข’ ๐Ÿข‘ ๐Ÿข“ ๐Ÿข” ๐Ÿข– ๐Ÿข• ๐Ÿข—
+               )],
+       },
+       'webdings'     => {
+               inherit => ['' => '20'],
+               table => [(map {chr} 0 .. 0x20), qw(
+                         ๐Ÿ•ท ๐Ÿ•ธ ๐Ÿ•ฒ ๐Ÿ•ถ ๐Ÿ† ๐ŸŽ– ๐Ÿ–‡ ๐Ÿ—จ ๐Ÿ—ฉ ๐Ÿ—ฐ ๐Ÿ—ฑ ๐ŸŒถ ๐ŸŽ— โ–ž ๐Ÿ™ผ ๐Ÿ—• ๐Ÿ—– ๐Ÿ—— โด โต โถ โท โช โฉ โฎ โญ โธ โน โบ ๐Ÿ—š ๐Ÿ—ณ
+                       ๐Ÿ›  ๐Ÿ— ๐Ÿ˜ ๐Ÿ™ ๐Ÿš ๐Ÿœ ๐Ÿญ ๐Ÿ› ๐Ÿ  ๐Ÿ– ๐Ÿ ๐Ÿ›ฃ ๐Ÿ” ๐Ÿ” ๐Ÿ‘ ๐Ÿ‘‚ ๐Ÿž ๐Ÿ• ๐Ÿ›ค ๐ŸŸ ๐Ÿ›ณ ๐Ÿ•ฌ ๐Ÿ•ซ ๐Ÿ•จ ๐Ÿ”ˆ ๐ŸŽ” ๐ŸŽ• ๐Ÿ—ฌ ๐Ÿ™ฝ ๐Ÿ—ญ ๐Ÿ—ช ๐Ÿ—ซ
+                       โฎ” โœ” ๐Ÿšฒ โ–ก ๐Ÿ›ก ๐Ÿ“ฆ ๐Ÿ›ฑ โ–  ๐Ÿš‘ ๐Ÿ›ˆ ๐Ÿ›ฉ ๐Ÿ›ฐ ๐ŸŸˆ ๐Ÿ•ด โšซ ๐Ÿ›ฅ ๐Ÿš” ๐Ÿ—˜ ๐Ÿ—™ โ“ ๐Ÿ›ฒ ๐Ÿš‡ ๐Ÿš โ›ณ ๐Ÿ›‡ โŠ– ๐Ÿšญ ๐Ÿ—ฎ | ๐Ÿ—ฏ ๐Ÿ—ฒ \7f
+                       ๐Ÿšน ๐Ÿšบ ๐Ÿ›‰ ๐Ÿ›Š ๐Ÿšผ ๐Ÿ‘ฝ ๐Ÿ‹ โ›ท ๐Ÿ‚ ๐ŸŒ ๐ŸŠ ๐Ÿ„ ๐Ÿ ๐ŸŽ ๐Ÿš˜ ๐Ÿ—  ๐Ÿ›ข ๐Ÿ’ฐ ๐Ÿท ๐Ÿ’ณ ๐Ÿ‘ช ๐Ÿ—ก ๐Ÿ—ข ๐Ÿ—ฃ โœฏ ๐Ÿ–„ ๐Ÿ–… ๐Ÿ–ƒ ๐Ÿ–† ๐Ÿ–น ๐Ÿ–บ ๐Ÿ–ป
+                       ๐Ÿ•ต ๐Ÿ•ฐ ๐Ÿ–ฝ ๐Ÿ–พ ๐Ÿ“‹ ๐Ÿ—’ ๐Ÿ—“ ๐Ÿ“– ๐Ÿ“š ๐Ÿ—ž ๐Ÿ—Ÿ ๐Ÿ—ƒ ๐Ÿ—‚ ๐Ÿ–ผ ๐ŸŽญ ๐ŸŽœ ๐ŸŽ˜ ๐ŸŽ™ ๐ŸŽง ๐Ÿ’ฟ ๐ŸŽž ๐Ÿ“ท ๐ŸŽŸ ๐ŸŽฌ ๐Ÿ“ฝ ๐Ÿ“น ๐Ÿ“พ ๐Ÿ“ป ๐ŸŽš ๐ŸŽ› ๐Ÿ“บ ๐Ÿ’ป
+                       ๐Ÿ–ฅ ๐Ÿ–ฆ ๐Ÿ–ง ๐Ÿ•น ๐ŸŽฎ ๐Ÿ•ป ๐Ÿ•ผ ๐Ÿ“Ÿ ๐Ÿ– ๐Ÿ–€ ๐Ÿ–จ ๐Ÿ–ฉ ๐Ÿ–ฟ ๐Ÿ–ช ๐Ÿ—œ ๐Ÿ”’ ๐Ÿ”“ ๐Ÿ— ๐Ÿ“ฅ ๐Ÿ“ค ๐Ÿ•ณ ๐ŸŒฃ ๐ŸŒค ๐ŸŒฅ ๐ŸŒฆ โ˜ ๐ŸŒง ๐ŸŒจ ๐ŸŒฉ ๐ŸŒช ๐ŸŒฌ ๐ŸŒซ
+                       ๐ŸŒœ ๐ŸŒก ๐Ÿ›‹ ๐Ÿ› ๐Ÿฝ ๐Ÿธ ๐Ÿ›Ž ๐Ÿ› โ“… โ™ฟ ๐Ÿ›† ๐Ÿ–ˆ ๐ŸŽ“ ๐Ÿ—ค ๐Ÿ—ฅ ๐Ÿ—ฆ ๐Ÿ—ง ๐Ÿ›ช ๐Ÿฟ ๐Ÿฆ ๐ŸŸ ๐Ÿ• ๐Ÿˆ ๐Ÿ™ฌ ๐Ÿ™ฎ ๐Ÿ™ญ ๐Ÿ™ฏ ๐Ÿ—บ ๐ŸŒ ๐ŸŒ ๐ŸŒŽ ๐Ÿ•Š
+               )],
+       },
 
        'iso-8859-2'   => {inherit => ['iso-8859-1' => 'A0']},
        'iso-8859-3'   => {inherit => ['iso-8859-1' => 'A0']}, #TODO: also apply to iso-8859-9
@@ -121,6 +165,19 @@ use utf8;
 
        'koi8-u'       => {inherit => ['koi8-r' => '90-BF']},
        'koi8-f'       => {inherit => ['koi8-u' => '90-BF']},
+       'mik'          => {
+               inherit => ['cp437' => '80-D8', 'cp866' => 'B0'],
+               table => [(map {chr} 0 .. 0x7F), qw(
+                       ะ ะ‘ ะ’ ะ“ ะ” ะ• ะ– ะ— ะ˜ ะ™ ะš ะ› ะœ ะ ะž ะŸ
+                       ะ  ะก ะข ะฃ ะค ะฅ ะฆ ะง ะจ ะฉ ะช ะซ ะฌ ะญ ะฎ ะฏ
+                       ะฐ ะฑ ะฒ ะณ ะด ะต ะถ ะท ะธ ะน ะบ ะป ะผ ะฝ ะพ ะฟ
+                       ั€ ั ั‚ ัƒ ั„ ั… ั† ั‡ ัˆ ั‰ ัŠ ั‹ ัŒ ั ัŽ ั
+                       โ”” โ”ด โ”ฌ โ”œ โ”€ โ”ผ โ•ฃ โ•‘ โ•š โ•” โ•ฉ โ•ฆ โ•  โ• โ•ฌ โ”
+                       โ–‘ โ–’ โ–“ โ”‚ โ”ค โ„– ยง โ•— โ• โ”˜ โ”Œ โ–ˆ โ–„ โ–Œ โ– โ–€
+                       ฮฑ รŸ ฮ“ ฯ€ ฮฃ ฯƒ ยต ฯ„ ฮฆ ฮ˜ ฮฉ ฮด โˆž ฯ† ฮต โˆฉ
+                       โ‰ก ยฑ โ‰ฅ โ‰ค โŒ  โŒก รท โ‰ˆ ยฐ โˆ™ ยท โˆš โฟ ยฒ โ– 
+               ), "\xA0"],
+       },
 
        'macromanian'  => {inherit => ['MacRoman' => 'A0-BF+D0-DF']},
        'macrumanian'  => {inherit => ['MacRomanian' => 'A0-BF+D0-DF', 'MacRoman' => 'A0-BF+D0-DF']},
@@ -131,9 +188,33 @@ use utf8;
        'macsami'      => {inherit => ['MacIcelandic' => '90-BF+D0-DF+F0', 'MacRoman' => '90']},
        'macgreek'     => {inherit => ['MacRoman' => '80']},
        'maccyrillic'  => {inherit => ['MacRoman' => '80']},
-       'machebrew'    => {inherit => ['iso-8859-8' => '80', 'MacRoman' => '80-8F+A0']}, # partial ascii
+       'machebrew'    => {
+               inherit => ['iso-8859-8' => '80', 'MacRoman' => '80-8F+A0'], # ignore partial ascii
+               varchar => 1,
+               replace => {
+                       # strip private use characters for unneeded roundtrip
+                       0xDE => chr(0x5C7), # qamats qatan
+                       0xC0 => 'ืœึน', # lamed holam
+                       #TODO: private use for canoral codes (obsolete nikud positioning)
+               },
+       },
        'macarabic'    => {inherit => ['iso-8859-6' => '80', 'cp864' => '80', 'MacRoman' => '80']}, #TODO: multiple parents
        'macfarsi'     => {inherit => ['MacArabic' => 'B0-BF', 'MacRoman' => '80']},
+       'macthai'      => {
+               inherit => ['iso-8859-11' => '80-9F+D0'],
+               varchar => 1,
+               replace => {
+                       # strip appended private use characters for unneeded roundtrip
+                       0x83 => "\x{E48}", 0x88 => "\x{E48}", 0x98 => "\x{E48}",
+                       0x84 => "\x{E49}", 0x89 => "\x{E49}", 0x99 => "\x{E49}",
+                       0x85 => "\x{E4A}", 0x8A => "\x{E4A}", 0x9A => "\x{E4A}",
+                       0x86 => "\x{E4B}", 0x8B => "\x{E4B}", 0x9B => "\x{E4B}",
+                       0x87 => "\x{E4C}", 0x8C => "\x{E4C}", 0x9C => "\x{E4C}",
+                       0x8F => "\x{E4D}",
+                       0x92 => "\x{E31}", 0x93 => "\x{E47}", 0x94 => "\x{E34}",
+                       0x95 => "\x{E35}", 0x96 => "\x{E36}", 0x97 => "\x{E37}",
+               },
+       },
 
        'cp37'         => {inherit => ['posix-bc' => '00']},
        'posix-bc'     => {inherit => ['cp1047' => '40']},
@@ -142,53 +223,114 @@ use utf8;
        'cp1026'       => {inherit => ['cp37' => '40']},
        'cp875'        => {inherit => ['cp37' => '30']},
 
-       ''             => {setup => sub {
-               my $row = shift;
-               $row->{offset} = delete $row->{startpoint};
-               $row->{set} = 'Unicode characters';
-               my $block = $row->{offset} >> 8;
-               $row->{endpoint} ||= ($block + 1 << 8) - 1;
-               $block == ($row->{endpoint} >> 8) or undef $block;
-
-               $row->{table} = join '', map { chr } $row->{offset} .. $row->{endpoint};
-               utf8::upgrade($row->{table});  # prevent latin1 output
-
-               $row->{endpoint} -= $row->{offset};
-
-               if (defined $block) {
-                       $row->{set} = sprintf 'Unicode block U+%02Xxx', $block;
-                       $row->{offset} %= 0x100;
-               }
-
-               return $row;
-       }},
-       u              => {setup => sub {
-               my $row = shift;
-               $row->{cell} = do 'charset-unicode.inc.pl'
-                       or Alert('Table data could not be read', $@ || $!);
-
-               $row->{endpoint} ||= 0x1FFF;
-               $row->{set} = 'Unicode ' . (
-                       $row->{startpoint} <  0x1000 && $row->{endpoint} < 0x1000 ? 'BMP' :
-                       $row->{startpoint} >= 0x1000 && $row->{endpoint} < 0x2000 ? 'SMP' :
-                       'allocations'
-               );
-               return $row;
-       }},
-       uu             => {setup => sub {
-               my $row = shift;
-               $row->{cell} = do 'charset-ucplanes.inc.pl'
-                       or Alert('Table data could not be read', $@ || $!);
-               $row->{endpoint} ||= 0x3FF;
-               $row->{set} = 'Unicode planes';
-               return $row;
-       }},
-       utf8           => {setup => sub {
-               my $row = shift;
-               $row->{set} = 'UTF-8';
-               $row->{cell} = do 'charset-utf8.inc.pl'
-                       or Alert('Table data could not be read', $@ || $!);
-               return $row;
-       }},
-       'utf-8'        => 'utf8',
+       legacy     => [qw( cp437 ATASCII PETSCII MSX ZX-Spectrum ANSEL )],
+       'petscii'      => {
+               inherit => ['' => '40-7F+A0-BF'],
+               table => [(map {chr} 0 .. 0x3F), qw(
+                       @ a b c d e f g h i j k l m n o p q r s t u v w x y z [ ยฃ ] โ†‘ โ†
+                       ๐Ÿญน A B C D E F G H I J K L M N O P Q R S T U V W X Y Z โ”ผ ๐ŸฎŒ โ”‚ ๐Ÿฎ– ๐Ÿฎ˜
+                       . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
+                       ย  โ–Œ โ–„ โ–” โ– โ– โ–’ โ–• ๐Ÿฎ ๐Ÿฎ™ ๐Ÿฎ‡ โ”œ โ–— โ”” โ” โ–‚ โ”Œ โ”ด โ”ฌ โ”ค โ–Ž โ– ๐Ÿฎˆ ๐Ÿฎ‚ ๐Ÿฎƒ โ–ƒ โœ“ โ–– โ– โ”˜ โ–˜ โ–š
+               )],
+       },
+       'atascii'      => {
+               inherit => ['' => '0-1F+60-7F'],
+               table => [qw(
+                       โ™ฅ โ”œ ๐Ÿฎ‡ โ”˜ โ”ค โ” โ•ฑ โ•ฒ โ—ข โ–— โ—ฃ โ– โ–˜ ๐Ÿฎ‚ โ–‚ โ–– โ™ฃ โ”Œ โ”€ โ”ผ โ€ข โ–„ โ–Ž โ”ฌ โ”ด โ–Œ โ”” โ› โ†‘ โ†“ โ† โ†’
+                       _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+                       _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+                       โ™ฆ a b c d e f g h i j k l m n o p q r s t u v w x y z โ™  | ๐Ÿขฐ โ—€ โ–ถ
+               )],
+       },
+       'zx-spectrum'  => {
+               inherit => ['' => '50-8F'],
+               set => 'ascii',
+               replace => {
+                       ord('^') => 'โ†‘',
+                       ord('`') => 'ยฃ',
+                       0x7F => 'ยฉโ€‡โ–โ–˜โ–€โ–—โ–โ–šโ–œโ––โ–žโ–Œโ–›โ–„โ–Ÿโ–™โ–ˆ',
+               },
+       },
+       'msx'          => {
+               inherit => ['cp437' => '80-FF'],
+               table => [(map {chr} 0 .. 0x7F), qw(
+                       ร‡ รผ รฉ รข รค ร  รฅ รง รช รซ รจ รฏ รฎ รฌ ร„ ร… ร‰ รฆ ร† รด รถ รฒ รป รน รฟ ร– รœ ยข ยฃ ยฅ โ‚ง ฦ’
+                       รก รญ รณ รบ รฑ ร‘ ยช ยบ ยฟ โŒ ยฌ ยฝ ยผ ยก ยซ ยป รƒ รฃ ฤจ ฤฉ ร• รต ลจ ลฉ ฤฒ ฤณ ยพ โˆฝ โ—Š โ€ฐ ยถ ยง
+                       โ–‚ โ–š โ–† ๐Ÿฎ‚ โ–ฌ ๐Ÿฎ… โ–Ž โ–ž โ–Š ๐Ÿฎ‡ ๐ŸฎŠ ๐Ÿฎ™ ๐Ÿฎ˜ ๐Ÿญญ ๐Ÿญฏ ๐Ÿญฌ ๐Ÿญฎ ๐Ÿฎš ๐Ÿฎ› โ–˜ โ–— โ– โ–– ๐Ÿฎ– ฮ” โ€ก ฯ‰ โ–ˆ โ–„ โ–Œ โ– โ–€
+                       ฮฑ รŸ ฮ“ ฯ€ ฮฃ ฯƒ ยต ฯ„ ฮฆ ฮ˜ ฮฉ ฮด โˆž โŒ€ โˆˆ โˆฉ โ‰ก ยฑ โ‰ฅ โ‰ค โŒ  โŒก รท โ‰ˆ ยฐ โˆ™ ยท โˆš โฟ ยฒ โ– 
+               )],
+       },
+       'brascii'      => {
+               inherit => ['' => 'D0-DF+F0-FF'],
+               table => [(map {chr} 0 .. 0xFF)],
+               replace => {
+                       0xD7 => 'ล’',
+                       0xF7 => 'ล“',
+               },
+       },
+       'ansel'        => {
+               note => '+GEDCOM',
+               inherit => ['' => 'A0-CF+E0-FE'],
+               table => [
+                               (undef) x 0xA0,
+                               undef, qw( ล ร˜ ฤ รž ร† ล’ สน ยท โ™ญ ยฎ    ยฑ          ฦ  ฦฏ สพ ), undef,
+                               qw( สฟ      ล‚ รธ ฤ‘ รพ รฆ ล“ สบ ฤฑ ยฃ รฐ ), undef, qw( ฦก ฦฐ ), undef, undef,
+                               qw( ยฐ      โ„“ โ„— ยฉ โ™ฏ ยฟ ยก ), (undef) x 0x19,
+                               (map {$_ && chr}
+                                       0x309, 0x300, 0x0301, 0x0302, 0x0303, 0x304, 0x306, 0x307,
+                                       0x308, 0x30C, 0x030A, 0xFE20, 0xFE21, 0x315, 0x30B, 0x310,
+                                       0x327, 0x328, 0x0323, 0x0324, 0x0325, 0x333, 0x332, 0x326,
+                                       0x31C, 0x32E, 0xFE22, 0xFE23, undef,  undef, 0x313, undef,
+                               ),
+               ],
+               replace => {
+                       # GEDCOM extensions
+                       0xBE => 'โ–ก',
+                       0xBF => 'โ– ',
+                       0xCD => 'e', # endowment?
+                       0xCE => 'o', # ordinance?
+                       0xCF => 'รŸ',
+                       0xFC => "\x{338}",
+                       # MARC21 extensions
+                       0xC7 => 'รŸ',
+                       0xC8 => 'โ‚ฌ',
+               },
+       },
+       'ti86'         => {
+               note => 'similar to TI85',
+               inherit => ['', => '0-1F+80-EC'],
+               table => [
+                               undef, qw(
+                                       ๐› ๐จ ๐ ๐ก โ–ถ โฌ† โฌ‡ โˆซ ร— ๐€ ๐ ๐‚ ๐ƒ ๐„ ๐…
+                                       โˆš โปยน ยฒ โˆ  ยฐ สณ แต€ โ‰ค โ‰  โ‰ฅ โป แด‡ โ†’ โจ โ†‘ โ†“
+                               ),
+                               (undef) x 0x60,
+                               qw(
+                                       โ‚€ โ‚ โ‚‚ โ‚ƒ โ‚„ โ‚… โ‚† โ‚‡ โ‚ˆ โ‚‰ ร ร€ ร‚ ร„ รก ร 
+                                       รข รค ร‰ รˆ รŠ ร‹ รฉ รจ รช รซ ร รŒ รŽ ร รญ รฌ
+                                       รฎ รฏ ร“ ร’ ร” ร– รณ รฒ รด รถ รš ร™ ร› รœ รบ รน
+                                       รป รผ ร‡ รง ร‘ รฑ ยด ` ยจ ยฟ ยก ฮฑ ฮฒ ฮณ ฮ” ฮด
+                                       ฯต ฮธ ฮป ฮผ ฯ€ ฯ ฮฃ ฯƒ ฯ„ ฯ• ฮฉ xฬ… yฬ… หŸ โ€ฆ โ—€
+                                       โ–  โˆ• โ€ ยฒ ยฐ ยณ :โƒž โžง โงต ๐Ÿ™ฝ โ—ฅ โ—ฃ โŠธ โˆ˜ โ‹ฑ โ–ˆ
+                                       โ‡ง Aโƒž aโƒž _ โ‡งฬฒ Aฬฒ aฬฒ โ–’ โฌž ห– ยท โด ๏นฆ
+                               ),
+               ],
+       },
+       'ti89'         => {
+               note => 'also TI92(+)',
+               inherit => ['', => '0-1F+7F-BE'],
+               table => [
+                               qw(
+                                       โ–’ โ โ‚ โƒ โ„ โ… โ† ๐Ÿ”” โŒซ โ‡ฅ ), chr(0xA), qw( โฌ โค’ โ†ต ๐Ÿ”’ โœ“
+                                       โ–  โ—‚ โ–ธ โ–ด โ–พ โ† โ†’ โ†‘ โ†“ โ—€ โ–ถ โฌ† โˆช โˆฉ โŠ‚ โˆˆ
+                               ),
+                               (map {chr} 0x20 .. 0x7E), 'โ—†',
+                               qw(
+                                       ฮฑ ฮฒ ฮ“ ฮณ ฮ” ฮด ฮต ฮถ ฮธ ฮป ฮพ โˆ ฯ€ ฯ โˆ‘ ฯƒ
+                                       ฯ„ ฯ• ฯˆ ฮฉ ฯ‰ แด‡ โ„ฏ ๐ข สณ แต€ xฬ… yฬ… โ‰ค โ‰  โ‰ฅ โˆ 
+                                       โ€ฆ ยก ยข ยฃ ยค ยฅ ยฆ ยง โˆš ยฉ ยช ยซ ยฌ โป ยฎ ยฏ
+                                       ยฐ ยฑ ยฒ ยณ โปยน ยต ยถ ยท โบ ยน ยบ ยป ๐‘‘ โˆซ โˆž ยฟ
+                               ),
+               ],
+       },
 };