word/edit: read fractional crop coordinates
[sheet.git] / charset-encoding.inc.pl
index 2da7614623044f5f0e878acacc7ede49f9661306..3eb7cc7f206016d6c30ddb03b36bfb44343e0455 100644 (file)
@@ -218,7 +218,7 @@ use utf8;
        'cp1026'       => {inherit => ['cp37' => '40']},
        'cp875'        => {inherit => ['cp37' => '30']},
 
-       legacy     => [qw( cp437 ATASCII PETSCII MSX ZX-Spectrum )],
+       legacy     => [qw( cp437 ATASCII PETSCII MSX ZX-Spectrum ANSEL )],
        'petscii'      => {inherit => ['' => '40-7F+A0-BF'], setup => sub {
                $_[0]->{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 [ £ ] ↑ ←
@@ -262,6 +262,77 @@ use utf8;
                        0xF7 => 'œ',
                },
        },
+       'ansel'        => {
+               note => '+GEDCOM',
+               inherit => ['' => 'A0-CF+E0-FE'],
+               setup => sub {
+                       $_[0]->{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'],
+               setup => sub {
+                       $_[0]->{table} = [
+                               undef, qw(
+                                       𝐛 𝐨 𝐝 𝐡 ▶ ⬆ ⬇ ∫ × 𝐀 𝐁 𝐂 𝐃 𝐄 𝐅
+                                       √ ⁻¹ ² ∠ ° ʳ ᵀ ≤ ≠ ≥ ⁻ ᴇ → ⏨ ↑ ↓
+                               ),
+                               (undef) x 0x60,
+                               qw(
+                                       ₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ Á À Â Ä á à
+                                       â ä É È Ê Ë é è ê ë Í Ì Î Ï í ì
+                                       î ï Ó Ò Ô Ö ó ò ô ö Ú Ù Û Ü ú ù
+                                       û ü Ç ç Ñ ñ ´ ` ¨ ¿ ¡ α β γ Δ δ
+                                       ϵ θ λ μ π ρ Σ σ τ ϕ Ω x̅ y̅ ˟ … ◀
+                                       ■ ∕ ‐ ² ° ³ :⃞ ➧ ⧵ 🙽 ◥ ◣ ⊸ ∘ ⋱ █
+                                       ⇧ A⃞ a⃞ _ ⇧̲ A̲ a̲ ▒ ⬞ ˖ · ⁴ ﹦
+                               ),
+                       ];
+               },
+       },
+       'ti89'         => {
+               note => 'also TI92(+)',
+               inherit => ['', => '0-1F+7F-BE'],
+               setup => sub {
+                       $_[0]->{table} = [
+                               qw(
+                                       ▒ ␁ ␂ ␃ ␄ ␅ ␆ 🔔 ⌫ ⇥ ), chr(0xA), qw( ⬏ ⤒ ↵ 🔒 ✓
+                                       ■ ◂ ▸ ▴ ▾ ← → ↑ ↓ ◀ ▶ ⬆ ∪ ∩ ⊂ ∈
+                               ),
+                               (map {chr} 0x20 .. 0x7E), '◆',
+                               qw(
+                                       α β Γ γ Δ δ ε ζ θ λ ξ ∏ π ρ ∑ σ
+                                       τ ϕ ψ Ω ω ᴇ ℯ 𝐢 ʳ ᵀ x̅ y̅ ≤ ≠ ≥ ∠
+                                       … ¡ ¢ £ ¤ ¥ ¦ § √ © ª « ¬ ⁻ ® ¯
+                                       ° ± ² ³ ⁻¹ µ ¶ · ⁺ ¹ º » 𝑑 ∫ ∞ ¿
+                               ),
+                       ];
+               },
+       },
 
        ''             => {setup => sub {
                my $row = shift;
@@ -271,7 +342,8 @@ use utf8;
                $row->{endpoint} ||= ($block + 1 << 8) - 1;
                $block == ($row->{endpoint} >> 8) or undef $block;
 
-               $row->{table} = join '', map { chr } $row->{offset} .. $row->{endpoint};
+               $row->{table} = join '', map { chr =~ s/\A\p{Unassigned}\z/�/r }
+                       $row->{offset} .. $row->{endpoint};
                utf8::upgrade($row->{table});  # prevent latin1 output
 
                $row->{endpoint} -= $row->{offset};