X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/dbddc268edc610c50c7ec27de30e13bdd585b377..d7c1207fb1cf7dcac45dd455a78d4c8c106ca4a3:/rfc1345convert diff --git a/rfc1345convert b/rfc1345convert index c6131ad..3157e04 100644 --- a/rfc1345convert +++ b/rfc1345convert @@ -124,14 +124,22 @@ for (values %info) { $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('', $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); +} + +# convert info hashes into arrays of strings to output in display order +for my $row (values %info) { + $row = [ map { $row->{$_} } qw/name category script string/ ]; + # strip off trailing missing values (especially string may be unknown) + defined $row->[-1] ? last : pop @$row for 1 .. @$row; } # output perl code of hash @@ -141,9 +149,9 @@ printf '(map {$_=>0} qw{%s}),'."\n", join(' ', 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{$_} } : () ) for sort keys %di; print "}\n";