charset: legacy encodings petscii, atascii, msx, zx-spectrum
authorMischa POSLAWSKY <perl@shiar.org>
Tue, 28 Dec 2021 15:24:38 +0000 (16:24 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Mon, 7 Feb 2022 17:42:33 +0000 (18:42 +0100)
Sources now represented by unicode 13.0 legacy computing symbols.
Copied from Wikipedia.

charset-encoding.inc.pl
charset.plp

index 1414f394fe1a583730ea949d87d562bf219ce89d..2da7614623044f5f0e878acacc7ede49f9661306 100644 (file)
@@ -218,6 +218,51 @@ use utf8;
        'cp1026'       => {inherit => ['cp37' => '40']},
        'cp875'        => {inherit => ['cp37' => '30']},
 
+       legacy     => [qw( cp437 ATASCII PETSCII MSX ZX-Spectrum )],
+       '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 [ £ ] ↑ ←
+                       🭹 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'], setup => sub {
+               $_[0]->{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'], setup => sub {
+               $_[0]->{table} = [(map {chr} 0 .. 0x7F), qw(
+                       Ç ü é â ä à å ç ê ë è ï î ì Ä Å É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ ₧ ƒ
+                       á í ó ú ñ Ñ ª º ¿ ⌐ ¬ ½ ¼ ¡ « » Ã ã Ĩ ĩ Õ õ Ũ ũ IJ ij ¾ ∽ ◊ ‰ ¶ §
+                       ▂ ▚ ▆ 🮂 ▬ 🮅 ▎ ▞ ▊ 🮇 🮊 🮙 🮘 🭭 🭯 🭬 🭮 🮚 🮛 ▘ ▗ ▝ ▖ 🮖 Δ ‡ ω █ ▄ ▌ ▐ ▀
+                       α ß Γ π Σ σ µ τ Φ Θ Ω δ ∞ ⌀ ∈ ∩ ≡ ± ≥ ≤ ⌠ ⌡ ÷ ≈ ° ∙ · √ ⁿ ² ■
+               )];
+       }},
+       'brascii'      => {
+               inherit => ['' => 'D0-DF+F0-FF'],
+               setup => sub {
+                       $_[0]->{table} = [(map {chr} 0 .. 0xFF)];
+               },
+               replace => {
+                       0xD7 => 'Œ',
+                       0xF7 => 'œ',
+               },
+       },
+
        ''             => {setup => sub {
                my $row = shift;
                $row->{offset} = delete $row->{startpoint};
index d8527f01ff307bc5a80abfe4db1959ec7b0f409b..ccbf145cf6ce28e674fa2e440209321309011089 100644 (file)
@@ -55,6 +55,7 @@ print join " •\n", (
                dos      => 'DOS',
                mac      => 'Apple',
                ebcdic   => 'EBCDIC',
+               legacy   => 'legacy',
                $tablist[0] eq 'default' ? () : ('' => 'common'),
        ],
        [
@@ -153,7 +154,7 @@ sub tabinput {
        if (defined $row{table} or defined $row{cell}) {
                $row{set} //= $input;
        }
-       elsif ($row{set} = Encode::resolve_alias($input)) {
+       elsif ($row{set} = Encode::resolve_alias($charset->{set} // $input)) {
                $row{offset} = delete $row{startpoint};
                if ($charset->{varchar}) {
                        # array of possibly multiple characters per code point
@@ -169,6 +170,7 @@ sub tabinput {
 
                $row{endpoint} -= $row{offset};
                $visible->{ascii}++;  # assume common base
+               $row{set} = $input if $charset->{set};  # base override
        }
        else {
                Alert("Encoding <q>$input</q> unknown");