diff options
Diffstat (limited to 'a8utf8')
-rwxr-xr-x | a8utf8 | 172 |
1 files changed, 0 insertions, 172 deletions
@@ -1,172 +0,0 @@ -#!/usr/bin/perl -w - -# convert A8 text to UTF-8. Control graphics characters are replaced with -# nearest Unicode equivalents (mostly from the box-drawing range, or from -# the basic-latin range with -i option). - -# Careful editing this script: you need an editor that groks UTF-8, or at -# least one that won't mangle the UTF-8 sequences embedded in the tables -# below. - -($SELF = $0) =~ s,.*/,,; - -binmode(STDOUT, ":utf8"); -binmode(STDIN, ":bytes"); - -use utf8; - -%atascii_table = ( - 0 => "♥", - 1 => "┣", - 2 => "┃", - 3 => "┛", - 4 => "┫", - 5 => "┓", - 6 => "╱", - 7 => "╲", - 8 => "◢", - 9 => "▗", - 10 => "◣", - 11 => "▝", - 12 => "▘", - 13 => "▔", - 14 => "▁", - 15 => "▖", - 16 => "♣", - 17 => "┏", - 18 => "━", - 19 => "╋", - 20 => "●", - 21 => "▄", - 22 => "▎", - 23 => "┳", - 24 => "┻", - 25 => "▌", - 26 => "┗", - 27 => "␛", - 28 => "↑", - 29 => "↓", - 30 => "←", - 31 => "→", - 96 => "◆", - 123 => "♠", - 125 => "↰", - 126 => "◀", - 127 => "▶", - 136 => "◤", - 137 => "▛", - 138 => "◥", - 139 => "▙", - 140 => "▟", - 141 => "▆", - 142 => "🮅", - 143 => "▜", - 148 => "◙", - 149 => "▀", - 150 => "🮊", - 153 => "▐", - 155 => "\n", - 156 => "⍐", - 157 => "⍗", - 158 => "⍇", - 159 => "⍈", - 160 => "█", -); - -%xl_intl_table = ( - 0 => "á", - 1 => "ù", - 2 => "Ñ", - 3 => "É", - 4 => "ç", - 5 => "ô", - 6 => "ò", - 7 => "ì", - 8 => "£", - 9 => "ï", - 10 => "ü", - 11 => "ä", - 12 => "Ö", - 13 => "ú", - 14 => "ó", - 15 => "ö", - 16 => "Ü", - 17 => "â", - 18 => "û", - 19 => "î", - 20 => "é", - 21 => "è", - 22 => "ñ", - 23 => "ê", - 24 => "ȧ", - 25 => "à", - 26 => "Ȧ", - 27 => "␛", - 28 => "↑", - 29 => "↓", - 30 => "←", - 31 => "→", - 96 => "¡", - 123 => "Ä", - 126 => "◀", - 127 => "▶", - 155 => "\n", -); - -undef $/; - -$table = \%atascii_table; -$print_table = 0; -while(@ARGV && $ARGV[0] =~ /^-/) { - for($ARGV[0]) { - /^-i$/ && do { $table = \%xl_intl_table; next; }; - /^-t$/ && do { $print_table = 1; next; }; - /^-r$/ && do { $reverse = 1; next; }; - /^--?h/ && do { usage(0) }; - warn "$SELF: unknown option: $_\n"; - usage(1); - } - shift @ARGV; -} - -if($reverse) { - binmode(STDOUT, ":bytes"); - for(keys %$table) { - $revtable{ord($table->{$_})} = chr($_); - } - $table = \%revtable; -} - -if($print_table) { - for(sort { $a <=> $b } keys %$table) { - my $chr = translate(chr $_); - $chr = '\n' if $chr eq "\n"; - printf '"%d","$%02x","%s"' . "\n", $_, $_, $chr; - } - exit 0; -} - -$_ = <>; -s/(.)/translate($1)/seg; -print; - -sub translate { - my $o = ord(shift); - my $ret; - - $ret = $table->{$o}; - return $ret if defined($ret); - - $ret = $table->{$o & 0x7f}; - return $ret if defined($ret); - - return chr($o & 0x7f); -} - -sub usage { - print <<EOF; -Usage: $SELF [--help] | [-t [-r] [-i]] | [-r] [-i] infile [infile ...] -See man page for details. -EOF - exit $_[0]; -} |