index: release v1.18 with only altgr index linked
[sheet.git] / charset-encoding.inc.pl
1 use 5.014;
2 use warnings;
3 use utf8;
4
5 +{
6         default    => [qw( u+0-27F utf8+realsize iso-8859-1 iso-8859-15 cp1252 cp437 cp850 )],
7         unicode    => [qw( uu+cols=32+realsize u+0-FFF u+1000-18AF u+18B0-1FFF )],
8         us         => [qw( cp437 cp863 gsm0338 AdobeStandardEncoding )],
9         ebcdic     => [qw( cp37 cp500 cp1047 posix-bc cp1026 cp875 )],
10         iso        => [map {"iso-8859-$_"} 1 .. 11, 13 .. 16],
11         dos        => [qw( cp437 cp865 cp861 cp860 cp863 cp850 cp857 cp852 cp775
12                            cp737 cp869 cp866 MIK cp855 cp862 cp864 )],
13         aix        => [qw( cp1006 )],
14         win        => [qw( cp1252 cp1250 cp1254 cp1257 cp1258 cp1253 cp1251 cp1255 cp1256 cp874 )],
15         mac        => [qw( MacRoman MacRomanian MacRumanian MacCroatian MacCentralEurRoman MacTurkish MacIcelandic MacSami
16                            MacGreek MacCyrillic MacHebrew MacArabic MacFarsi MacThai )],
17
18         # languages
19         westeur    => [qw( iso-8859-1 iso-8859-15 cp1252 iso-8859-14 cp850 hp-roman8 nextstep MacRoman )],
20         centeur    => [qw( iso-8859-2 iso-8859-16 cp1250 cp852 MacRomanian MacCroatian MacCentralEurRoman )], # MacRumanian only for DB
21         turkish    => [qw( iso-8859-9 iso-8859-3 cp1254 cp857 MacTurkish )],
22         norteur    => [qw( baltic nordic )],
23         baltic     => [qw( iso-8859-4 iso-8859-13 cp1257 cp775 )],
24         nordic     => [qw( iso-8859-10 cp865 cp861 MacIcelandic MacSami )],
25         cyrillic   => [qw( koi8-r koi8-u koi8-f iso-8859-5 cp1251 MacCyrillic cp866 MIK cp855
26                            +400 +2DE0 +A640-A69F +500-52F )], # MacUkrainian is broken
27         arabic     => [qw( iso-8859-6 cp1256 MacArabic cp864 cp1006 MacFarsi
28                            +600 +8A0-8BF+8E0 +750-77F )],
29         greek      => [qw( iso-8859-7 cp1253 MacGreek cp737 cp869  +370 +1F00 )],
30         hebrew     => [qw( iso-8859-8 cp1255 MacHebrew cp862  +590 )],
31         thai       => [qw( iso-8859-11 cp874 MacThai )], # U+0E00 identical to iso-8859-11
32         vietnamese => [qw( viscii cp1258 MacVietnamese )],
33         symbols    => [qw( symbol dingbats MacDingbats wingdings wingdings2 wingdings3 webdings )],
34
35         # iso-code shorthand
36         1 => 'westeur',
37         2 => 'centeur',
38         3 => 'turkish',
39         4 => 'baltic',
40         5 => 'cyrillic',
41         6 => 'arabic',
42         7 => 'greek',
43         8 => 'hebrew',
44         9 => 'turkish',
45         10 => 'nordic',
46         11 => 'thai',
47
48         'ascii'        => {inherit => ['' => '00-7F']},
49         'cp437'        => {
50                 inherit => ['cp850' => 0, 'ascii' => '00-1F+80'], # ascii range overridden later
51                 replace => {
52                         0    => ' ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼', # visible variants of control characters
53                         0xED => 'ϕ', # non-greek usage and appearance
54                 },
55         },
56         'gsm0338'      => {inherit => ['ascii' => '00-7F']},
57         'dingbats'     => {inherit => ['' => '20-7F+A0']},
58         'macdingbats'  => {inherit => ['dingbats' => '80-9F']},
59         'adobezdingbat'=> {inherit => ['MacDingbats' => '80-9F']}, # should be identical but maps to private use
60         'symbol'       => {
61                 inherit => ['' => '20-7F+A0'],
62                 replace => {
63                         0x60 => '│', # replace radical extender by closest unicode equivalent
64                         0xBD => '⏐⎯', # arrow extenders
65                         0xD2 => '®©™', # serif variants
66                         0xE0 => '◊', # replace lookalike, should match AdobeSymbol
67                         0xE2 => '®©™', # sans-serif variants
68                         0xE6 => '⎛⎜⎝⎡⎢⎣⎧⎨⎩⎪',
69                         0xF0 => '€',
70                         0xF4 => '⎮⌡⎞⎟⎠⎤⎥⎦⎫⎬⎭',
71                 },
72         },
73         'adobesymbol'  => {inherit => ['symbol' => '20-7F+A0', '' => '20-7F+A0']}, # minor differences, irrelevant except for different '€'
74         'wingdings'    => {
75                 inherit => ['' => '20'],
76                 table => [(map {chr} 0 .. 0x20), qw(
77                           🖉 ✂ ✁ 👓 🕭 🕮 🕯 🕿 ✆ 🖂 🖃 📪 📫 📬 📭 📁 📂 📄 🗏 🗐 🗄 ⌛ 🖮 🖰 🖲 🖳 🖴 🖫 🖬 ✇ ✍
78                         🖎 ✌ 👌 👍 👎 ☜ ☞ ☝ ☟ 🖐 ☺ 😐 ☹ 💣 ☠ 🏳 🏱 ✈ ☼ 💧 ❄ 🕆 ✞ 🕈 ✠ ✡ ☪ ☯ ॐ ☸ ♈ ♉
79                         ♊ ♋ ♌ ♍ ♎ ♏ ♐ ♑ ♒ ♓ 🙰 🙵 ● 🔾 ■ □ 🞐 ❑ ❒ ⬧ ⧫ ◆ ❖ ⬥ ⌧ ⮹ ⌘ 🏵 🏶 🙶 🙷 \7f
80                         ⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⓿ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ 🙢 🙠 🙡 🙣 🙞 🙜 🙝 🙟 · •
81                         ▪ ⚪ 🞆 🞈 ◉ ◎ 🔿 ▪ ◻ 🟂 ✦ ★ ✶ ✴ ✹ ✵ ⯐ ⌖ ⟡ ⌑ ⯑ ✪ ✰ 🕐 🕑 🕒 🕓 🕔 🕕 🕖 🕗 🕘
82                         🕙 🕚 🕛 ⮰ ⮱ ⮲ ⮳ ⮴ ⮵ ⮶ ⮷ 🙪 🙫 🙕 🙔 🙗 🙖 🙐 🙑 🙒 🙓 ⌫ ⌦ ⮘ ⮚ ⮙ ⮛ ⮈ ⮊ ⮉ ⮋ 🡨
83                         🡪 🡩 🡫 🡬 🡭 🡯 🡮 🡸 🡺 🡹 🡻 🡼 🡽 🡿 🡾 ⇦ ⇨ ⇧ ⇩ ⬄ ⇳ ⬀ ⬁ ⬃ ⬂ 🢬 🢭 🗶 ✔ 🗷 🗹 
84                 )],
85         },
86         'wingdings2'   => {
87                 inherit => ['' => '20'],
88                 table => [(map {chr} 0 .. 0x20), qw(
89                           🖊 🖋 🖌 🖍 ✄ ✀ 🕾 🕽 🗅 🗆 🗇 🗈 🗉 🗊 🗋 🗌 🗍 📋 🗑 🗔 🖵 🖶 🖷 🖸 🖭 🖯 🖱 🖒 🖓 🖘 🖙
90                         🖚 🖛 👈 👉 🖜 🖝 🖞 🖟 🖠 🖡 👆 👇 🖢 🖣 🖑 🗴 ✓ 🗵 ☑ ☒ ☒ ⮾ ⮿ ⦸ ⦸ 🙱 🙴 🙲 🙳 ‽ 🙹 🙺
91                         🙻 🙦 🙤 🙥 🙧 🙚 🙘 🙙 🙛 ⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⓿ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ \7f
92                         ☉ 🌕 ☽ ☾ ⸿ ✝ 🕇 🕜 🕝 🕞 🕟 🕠 🕡 🕢 🕣 🕤 🕥 🕦 🕧 🙨 🙩 • ● ⚫ ⬤ 🞅 🞆 🞇 🞈 🞊 ⦿ ◾
93                         ■ ◼ ⬛ ⬜ 🞑 🞒 🞓 🞔 ▣ 🞕 🞖 🞗 ⬩ ⬥ ◆ ◇ 🞚 ◈ 🞛 🞜 🞝 ⬪ ⬧ ⧫ ◊ 🞠 ◖ ◗ ⯊ ⯋ ◼ ⬥
94                         ⬟ ⯂ ⬣ ⬢ ⯃ ⯄ 🞡 🞢 🞣 🞤 🞥 🞦 🞧 🞨 🞩 🞪 🞫 🞬 🞭 🞮 🞯 🞰 🞱 🞲 🞳 🞴 🞵 🞶 🞷 🞸 🞹 🞺
95                         🞻 🞼 🞽 🞾 🞿 🟀 🟂 🟄 ✦ 🟉 ★ ✶ 🟋 ✷ 🟏 🟒 ✹ 🟃 🟇 ✯ 🟍 🟔 ⯌ ⯍ ※ ⁂
96                 )],
97         },
98         'wingdings3'   => {
99                 inherit => ['' => '20'],
100                 table => [(map {chr} 0 .. 0x20), qw(
101                           ⭠ ⭢ ⭡ ⭣ ⭦ ⭧ ⭩ ⭨ ⭰ ⭲ ⭱ ⭳ ⭶ ⭸ ⭻ ⭽ ⭤ ⭥ ⭪ ⭬ ⭫ ⭭ ⭍ ⮠ ⮡ ⮢ ⮣ ⮤ ⮥ ⮦ ⮧
102                         ⮐ ⮑ ⮒ ⮓ ⮀ ⮃ ⭾ ⭿ ⮄ ⮆ ⮅ ⮇ ⮏ ⮍ ⮎ ⮌ ⭮ ⭯ ⎋ ⌤ ⌃ ⌥ ⎵ ⏡ ⇪ ⮸ 🢠 🢡 🢢 🢣 🢤 🢥
103                         🢦 🢧 🢨 🢩 🢪 🢫 ← → ↑ ↓ ↖ ↗ ↙ ↘ 🡘 🡙 ▲ ▼ △ ▽ ◄ ► ◁ ▷ ◣ ◢ ◤ ◥ 🞀 🞂 🞁 \7f
104                         🞃 ▲ ▼ ◀ ▶ ⮜ ⮞ ⮝ ⮟ 🠐 🠒 🠑 🠓 🠔 🠖 🠕 🠗 🠘 🠚 🠙 🠛 🠜 🠞 🠝 🠟 🠀 🠂 🠁 🠃 🠄 🠆 🠅
105                         🠇 🠈 🠊 🠉 🠋 🠠 🠢 🠤 🠦 🠨 🠨 🠪 🢜 🢝 🢞 🢟 🠮 🠰 🠲 🠴 🠶 🠸 🠺 🠹 🠻 🢘 🢚 🢙 🢛 🠼 🠾 🠽
106                         🠿 🡀 🡂 🡁 🡃 🡄 🡆 🡅 🡇 ⮨ ⮩ ⮪ ⮫ ⮬ ⮭ ⮮ ⮯ 🡠 🡢 🡡 🡣 🡤 🡥 🡧 🡦 🡰 🡲 🡱 🡳 🡴 🡵 🡷
107                         🡶 🢀 🢂 🢁 🢃 🢄 🢅 🢇 🢆 🢐 🢒 🢑 🢓 🢔 🢖 🢕 🢗
108                 )],
109         },
110         'webdings'     => {
111                 inherit => ['' => '20'],
112                 table => [(map {chr} 0 .. 0x20), qw(
113                           🕷 🕸 🕲 🕶 🏆 🎖 🖇 🗨 🗩 🗰 🗱 🌶 🎗 ▞ 🙼 🗕 🗖 🗗 ⏴ ⏵ ⏶ ⏷ ⏪ ⏩ ⏮ ⏭ ⏸ ⏹ ⏺ 🗚 🗳
114                         🛠 🏗 🏘 🏙 🏚 🏜 🏭 🏛 🏠 🏖 🏝 🛣 🔍 🏔 👁 👂 🏞 🏕 🛤 🏟 🛳 🕬 🕫 🕨 🔈 🎔 🎕 🗬 🙽 🗭 🗪 🗫
115                         ⮔ ✔ 🚲 □ 🛡 📦 🛱 ■ 🚑 🛈 🛩 🛰 🟈 🕴 ⚫ 🛥 🚔 🗘 🗙 ❓ 🛲 🚇 🚍 ⛳ 🛇 ⊖ 🚭 🗮 | 🗯 🗲 \7f
116                         🚹 🚺 🛉 🛊 🚼 👽 🏋 ⛷ 🏂 🏌 🏊 🏄 🏍 🏎 🚘 🗠 🛢 💰 🏷 💳 👪 🗡 🗢 🗣 ✯ 🖄 🖅 🖃 🖆 🖹 🖺 🖻
117                         🕵 🕰 🖽 🖾 📋 🗒 🗓 📖 📚 🗞 🗟 🗃 🗂 🖼 🎭 🎜 🎘 🎙 🎧 💿 🎞 📷 🎟 🎬 📽 📹 📾 📻 🎚 🎛 📺 💻
118                         🖥 🖦 🖧 🕹 🎮 🕻 🕼 📟 🖁 🖀 🖨 🖩 🖿 🖪 🗜 🔒 🔓 🗝 📥 📤 🕳 🌣 🌤 🌥 🌦 ☁ 🌧 🌨 🌩 🌪 🌬 🌫
119                         🌜 🌡 🛋 🛏 🍽 🍸 🛎 🛍 Ⓟ ♿ 🛆 🖈 🎓 🗤 🗥 🗦 🗧 🛪 🐿 🐦 🐟 🐕 🐈 🙬 🙮 🙭 🙯 🗺 🌍 🌏 🌎 🕊
120                 )],
121         },
122
123         'iso-8859-2'   => {inherit => ['iso-8859-1' => 'A0']},
124         'iso-8859-3'   => {inherit => ['iso-8859-1' => 'A0']}, #TODO: also apply to iso-8859-9
125         'iso-8859-4'   => {inherit => ['iso-8859-2' => 'A0']},
126         'iso-8859-5'   => {inherit => ['iso-8859-1' => 'A0']},
127         'iso-8859-6'   => {inherit => ['cp1256' => '80', 'iso-8859-1' => 'A0']},
128         'iso-8859-7'   => {inherit => ['iso-8859-1' => 'A0']},
129         'iso-8859-8'   => {inherit => ['iso-8859-1' => 'A0']},
130         'iso-8859-9'   => {inherit => ['iso-8859-1' => 'D0-DF+F0']},
131         'iso-8859-10'  => {inherit => ['iso-8859-4' => 'A0']},
132         'iso-8859-11'  => {inherit => ['iso-8859-1' => 'A0']},
133         'iso-8859-13'  => {inherit => ['iso-8859-4' => 'A0']},
134         'iso-8859-14'  => {inherit => ['iso-8859-1' => 'A0']},
135         'iso-8859-15'  => {inherit => ['iso-8859-1' => 'A0-BF']},
136         'iso-8859-16'  => {inherit => ['iso-8859-2' => 'A0']},
137         'hp-roman8'    => {inherit => ['iso-8859-1' => 'A0']},
138
139         'cp1252'       => {inherit => ['iso-8859-1' => '80-9F']},
140         'cp1250'       => {inherit => ['iso-8859-2' => '80-BF', 'cp1252' => '80']},
141         'cp1254'       => {inherit => ['iso-8859-9' => '80-9F', 'cp1252' => '80-9F+D0']},
142         'cp874'        => {inherit => ['iso-8859-11' => '80-9F', 'cp1252' => '80']}, # windows-874 actually cp1162
143         'cp1257'       => {inherit => ['iso-8859-13' => '80-9F+FF', 'cp1252' => '80']},
144         'cp1251'       => {inherit => ['cp1252' => '80']},
145         'cp1253'       => {inherit => ['cp1252' => '80']},
146         'cp1255'       => {inherit => ['iso-8859-8' => '80-DF', 'cp1252' => '80']},
147         'cp1256'       => {inherit => ['cp1252' => '80']},
148         'cp1258'       => {inherit => ['cp1252' => '80-9F+C0']},
149
150         'cp850'        => {inherit => ['cp437' => '90']},
151         'cp860'        => {inherit => ['cp437' => '80-AF']},
152         'cp861'        => {inherit => ['cp865' => '80-AF']},
153         'cp863'        => {inherit => ['cp437' => '80-AF']},
154         'cp865'        => {inherit => ['cp437' => '90-AF']},
155         'cp852'        => {inherit => ['cp850' => '80', 'cp437' => '80']},
156         'cp857'        => {inherit => ['cp850' => '80-AF+D0-EF', 'cp437' => '80']},
157         'cp775'        => {inherit => ['cp850' => '80']},  # partial cp437
158         'cp866'        => {inherit => ['cp437' => '80-AF+E0']},
159         'cp855'        => {inherit => ['cp437' => '80']},
160         'cp1006'       => {inherit => ['iso-8859-6' => 'A0', 'cp437' => '80']},
161         'cp737'        => {inherit => ['cp437' => '80-AF+E0']},
162         'cp869'        => {inherit => ['cp437' => '80']},
163         'cp862'        => {inherit => ['cp437' => '80-9F']},
164         'cp864'        => {inherit => ['MacArabic' => '80', 'iso-8859-6' => '80', 'cp437' => '80']}, #TODO: compare form variants
165
166         'koi8-u'       => {inherit => ['koi8-r' => '90-BF']},
167         'koi8-f'       => {inherit => ['koi8-u' => '90-BF']},
168         'mik'          => {
169                 inherit => ['cp437' => '80-D8', 'cp866' => 'B0'],
170                 table => [(map {chr} 0 .. 0x7F), qw(
171                         А Б В Г Д Е Ж З И Й К Л М Н О П
172                         Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
173                         а б в г д е ж з и й к л м н о п
174                         р с т у ф х ц ч ш щ ъ ы ь э ю я
175                         └ ┴ ┬ ├ ─ ┼ ╣ ║ ╚ ╔ ╩ ╦ ╠ ═ ╬ ┐
176                         ░ ▒ ▓ │ ┤ № § ╗ ╝ ┘ ┌ █ ▄ ▌ ▐ ▀
177                         α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ φ ε ∩
178                         ≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■
179                 ), "\xA0"],
180         },
181
182         'macromanian'  => {inherit => ['MacRoman' => 'A0-BF+D0-DF']},
183         'macrumanian'  => {inherit => ['MacRomanian' => 'A0-BF+D0-DF', 'MacRoman' => 'A0-BF+D0-DF']},
184         'maccroatian'  => {inherit => ['MacRoman' => 'A0']},
185         'maccentraleurroman' => {inherit => ['MacRoman' => '80']},
186         'macicelandic' => {inherit => ['MacRoman' => 'A0-AF+D0-EF']},
187         'macturkish'   => {inherit => ['MacRoman' => 'D0-DF']}, # F5 is unassigned
188         'macsami'      => {inherit => ['MacIcelandic' => '90-BF+D0-DF+F0', 'MacRoman' => '90']},
189         'macgreek'     => {inherit => ['MacRoman' => '80']},
190         'maccyrillic'  => {inherit => ['MacRoman' => '80']},
191         'machebrew'    => {
192                 inherit => ['iso-8859-8' => '80', 'MacRoman' => '80-8F+A0'], # ignore partial ascii
193                 varchar => 1,
194                 replace => {
195                         # strip private use characters for unneeded roundtrip
196                         0xDE => chr(0x5C7), # qamats qatan
197                         0xC0 => 'לֹ', # lamed holam
198                         #TODO: private use for canoral codes (obsolete nikud positioning)
199                 },
200         },
201         'macarabic'    => {inherit => ['iso-8859-6' => '80', 'cp864' => '80', 'MacRoman' => '80']}, #TODO: multiple parents
202         'macfarsi'     => {inherit => ['MacArabic' => 'B0-BF', 'MacRoman' => '80']},
203         'macthai'      => {
204                 inherit => ['iso-8859-11' => '80-9F+D0'],
205                 varchar => 1,
206                 replace => {
207                         # strip appended private use characters for unneeded roundtrip
208                         0x83 => "\x{E48}", 0x88 => "\x{E48}", 0x98 => "\x{E48}",
209                         0x84 => "\x{E49}", 0x89 => "\x{E49}", 0x99 => "\x{E49}",
210                         0x85 => "\x{E4A}", 0x8A => "\x{E4A}", 0x9A => "\x{E4A}",
211                         0x86 => "\x{E4B}", 0x8B => "\x{E4B}", 0x9B => "\x{E4B}",
212                         0x87 => "\x{E4C}", 0x8C => "\x{E4C}", 0x9C => "\x{E4C}",
213                         0x8F => "\x{E4D}",
214                         0x92 => "\x{E31}", 0x93 => "\x{E47}", 0x94 => "\x{E34}",
215                         0x95 => "\x{E35}", 0x96 => "\x{E36}", 0x97 => "\x{E37}",
216                 },
217         },
218
219         'cp37'         => {inherit => ['posix-bc' => '00']},
220         'posix-bc'     => {inherit => ['cp1047' => '40']},
221         'cp500'        => {inherit => ['cp37' => '40-5F+B0-BF']},
222         'cp1047'       => {inherit => ['cp37' => '10-2F+50-5F+A0-BF']},
223         'cp1026'       => {inherit => ['cp37' => '40']},
224         'cp875'        => {inherit => ['cp37' => '30']},
225
226         legacy     => [qw( cp437 ATASCII PETSCII MSX ZX-Spectrum ANSEL )],
227         'petscii'      => {
228                 inherit => ['' => '40-7F+A0-BF'],
229                 table => [(map {chr} 0 .. 0x3F), qw(
230                         @ 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 [ £ ] ↑ ←
231                         🭹 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 ┼ 🮌 │ 🮖 🮘
232                         . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
233                           ▌ ▄ ▔ ▁ ▏ ▒ ▕ 🮏 🮙 🮇 ├ ▗ └ ┐ ▂ ┌ ┴ ┬ ┤ ▎ ▍ 🮈 🮂 🮃 ▃ ✓ ▖ ▝ ┘ ▘ ▚
234                 )],
235         },
236         'atascii'      => {
237                 inherit => ['' => '0-1F+60-7F'],
238                 table => [qw(
239                         ♥ ├ 🮇 ┘ ┤ ┐ ╱ ╲ ◢ ▗ ◣ ▝ ▘ 🮂 ▂ ▖ ♣ ┌ ─ ┼ • ▄ ▎ ┬ ┴ ▌ └ ␛ ↑ ↓ ← →
240                         _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
241                         _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
242                         ♦ 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 ♠ | 🢰 ◀ ▶
243                 )],
244         },
245         'zx-spectrum'  => {
246                 inherit => ['' => '50-8F'],
247                 set => 'ascii',
248                 replace => {
249                         ord('^') => '↑',
250                         ord('`') => '£',
251                         0x7F => '© ▝▘▀▗▐▚▜▖▞▌▛▄▟▙█',
252                 },
253         },
254         'msx'          => {
255                 inherit => ['cp437' => '80-FF'],
256                 table => [(map {chr} 0 .. 0x7F), qw(
257                         Ç ü é â ä à å ç ê ë è ï î ì Ä Å É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ ₧ ƒ
258                         á í ó ú ñ Ñ ª º ¿ ⌐ ¬ ½ ¼ ¡ « » Ã ã Ĩ ĩ Õ õ Ũ ũ IJ ij ¾ ∽ ◊ ‰ ¶ §
259                         ▂ ▚ ▆ 🮂 ▬ 🮅 ▎ ▞ ▊ 🮇 🮊 🮙 🮘 🭭 🭯 🭬 🭮 🮚 🮛 ▘ ▗ ▝ ▖ 🮖 Δ ‡ ω █ ▄ ▌ ▐ ▀
260                         α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ ⌀ ∈ ∩ ≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■
261                 )],
262         },
263         'brascii'      => {
264                 inherit => ['' => 'D0-DF+F0-FF'],
265                 table => [(map {chr} 0 .. 0xFF)],
266                 replace => {
267                         0xD7 => 'Œ',
268                         0xF7 => 'œ',
269                 },
270         },
271         'ansel'        => {
272                 note => '+GEDCOM',
273                 inherit => ['' => 'A0-CF+E0-FE'],
274                 table => [
275                                 (undef) x 0xA0,
276                                 undef, qw( Ł Ø Đ Þ Æ Œ ʹ · ♭ ®    ±          Ơ Ư ʾ ), undef,
277                                 qw( ʿ      ł ø đ þ æ œ ʺ ı £ ð ), undef, qw( ơ ư ), undef, undef,
278                                 qw( °      ℓ ℗ © ♯ ¿ ¡ ), (undef) x 0x19,
279                                 (map {$_ && chr}
280                                         0x309, 0x300, 0x0301, 0x0302, 0x0303, 0x304, 0x306, 0x307,
281                                         0x308, 0x30C, 0x030A, 0xFE20, 0xFE21, 0x315, 0x30B, 0x310,
282                                         0x327, 0x328, 0x0323, 0x0324, 0x0325, 0x333, 0x332, 0x326,
283                                         0x31C, 0x32E, 0xFE22, 0xFE23, undef,  undef, 0x313, undef,
284                                 ),
285                 ],
286                 replace => {
287                         # GEDCOM extensions
288                         0xBE => '□',
289                         0xBF => '■',
290                         0xCD => 'e', # endowment?
291                         0xCE => 'o', # ordinance?
292                         0xCF => 'ß',
293                         0xFC => "\x{338}",
294                         # MARC21 extensions
295                         0xC7 => 'ß',
296                         0xC8 => '€',
297                 },
298         },
299         'ti86'         => {
300                 note => 'similar to TI85',
301                 inherit => ['', => '0-1F+80-EC'],
302                 table => [
303                                 undef, qw(
304                                         𝐛 𝐨 𝐝 𝐡 ▶ ⬆ ⬇ ∫ × 𝐀 𝐁 𝐂 𝐃 𝐄 𝐅
305                                         √ ⁻¹ ² ∠ ° ʳ ᵀ ≤ ≠ ≥ ⁻ ᴇ → ⏨ ↑ ↓
306                                 ),
307                                 (undef) x 0x60,
308                                 qw(
309                                         ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ Á À Â Ä á à
310                                         â ä É È Ê Ë é è ê ë Í Ì Î Ï í ì
311                                         î ï Ó Ò Ô Ö ó ò ô ö Ú Ù Û Ü ú ù
312                                         û ü Ç ç Ñ ñ ´ ` ¨ ¿ ¡ α β γ Δ δ
313                                         ϵ θ λ μ π ρ Σ σ τ ϕ Ω x̅ y̅ ˟ … ◀
314                                         ■ ∕ ‐ ² ° ³ :⃞ ➧ ⧵ 🙽 ◥ ◣ ⊸ ∘ ⋱ █
315                                         ⇧ A⃞ a⃞ _ ⇧̲ A̲ a̲ ▒ ⬞ ˖ · ⁴ ﹦
316                                 ),
317                 ],
318         },
319         'ti89'         => {
320                 note => 'also TI92(+)',
321                 inherit => ['', => '0-1F+7F-BE'],
322                 table => [
323                                 qw(
324                                         ▒ ␁ ␂ ␃ ␄ ␅ ␆ 🔔 ⌫ ⇥ ), chr(0xA), qw( ⬏ ⤒ ↵ 🔒 ✓
325                                         ■ ◂ ▸ ▴ ▾ ← → ↑ ↓ ◀ ▶ ⬆ ∪ ∩ ⊂ ∈
326                                 ),
327                                 (map {chr} 0x20 .. 0x7E), '◆',
328                                 qw(
329                                         α β Γ γ Δ δ ε ζ θ λ ξ ∏ π ρ ∑ σ
330                                         τ ϕ ψ Ω ω ᴇ ℯ 𝐢 ʳ ᵀ x̅ y̅ ≤ ≠ ≥ ∠
331                                         … ¡ ¢ £ ¤ ¥ ¦ § √ © ª « ¬ ⁻ ® ¯
332                                         ° ± ² ³ ⁻¹ µ ¶ · ⁺ ¹ º » 𝑑 ∫ ∞ ¿
333                                 ),
334                 ],
335         },
336 };