use strict;
use warnings;
+use utf8;
+use open OUT => ':utf8', ':std';
use Data::Dumper;
our $VERSION = '1.01';
if (-r 'shiar.inc.txt') {
open my $include, '<:utf8', 'shiar.inc.txt';
for (readline $include) {
- m{^([!"%'-Z_a-z]{2}) (.)} or next;
+ m{^(\$?[!"%'-Z_a-z]{2}) (.)} or next;
warn("$1 already defined"), next if defined $di{$1};
$di{$1} = ord $2;
push @extra, $1;
}
warn $@ if $@;
+$di{chr $_} = $_ for 32 .. 126;
+$di{'\\'.$_} = delete $di{$_} for '{', '}', '\\';
+
# optionally get unicode character information
my %info = eval {
require Unicode::UCD;
# show descriptive symbols instead of control chars themselves
$info{$_}->{string} = $di{$_} < 32 ? chr($di{$_} + 0x2400) : chr(0xFFFD);
}
+# presentational string for some control(lish) entries
+$info{$_}->{string} = '-' for grep { $di{$_} == 0x00AD } keys %di;
+$info{$_}->{string} = '→' for grep { $di{$_} == 0x200E } keys %di;
+$info{$_}->{string} = '←' for grep { $di{$_} == 0x200F } keys %di;
# convert info hashes into arrays of strings to output in display order
for my $row (values %info) {