$info{$_}->{category} .= ' Xz' for @extra;
for (keys %di) {
+ $info{$_}->{string} = chr(9676) . chr($di{$_}) if $info{$_}->{combining};
# find control characters (first 32 chars from 0 and 128)
- next if $di{$_} & ~0b1001_1111;
+ next unless ($di{$_} & ~0b1001_1111) == 0 or $di{$_} == 127;
# rename to something more descriptive
$info{$_}->{name} = $info{$_}->{unicode10}
? '<'.$info{$_}->{unicode10}.'>' # the old name was much more useful
: sprintf('<control U+%04X>', $di{$_}); # at least identify by value
# show descriptive symbols instead of control chars themselves
- $di{$_} += 0x2400 if $di{$_} < 32;
+ $info{$_}->{string} = $di{$_} < 32 ? chr($di{$_} + 0x2400) : chr(0xFFFD);
}
# output perl code of hash
map { substr($_, 1, 1).substr($_, 0, 1) } sort keys %di
);
printf "q{%s}=>[%s],\n", $_, join(',',
- $di{$_}, # glyph code point
+ $di{$_}, # original code point
$info{$_} # optional additional arguments
- ? map {"'$_'"} @{ $info{$_} }{qw/name category script/}
+ ? map {"'$_'"} @{ $info{$_} }{qw/name category script/},
+ $info{$_}->{string} || ()
: ()
) for sort keys %di;
print "}\n";