From e81df0ef9f0d7b5d22b0829f0a89a380a8e310ab Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Sat, 21 Feb 2015 03:58:21 +0100 Subject: [PATCH] digraphs: reuse unicode character details --- Makefile | 6 +++--- digraphs.plp | 2 +- tools/mkcharinfo | 12 ++++------- tools/mkdigraphlist | 52 ++++++--------------------------------------- 4 files changed, 15 insertions(+), 57 deletions(-) diff --git a/Makefile b/Makefile index 6314e18..c945996 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -all: unicode-char.inc.pl unicode-cover.inc.pl countries.inc.pl data/browser/support.inc.pl +all: digraphs.inc.pl unicode-cover.inc.pl countries.inc.pl data/browser/support.inc.pl download: data/DerivedAge.txt data/rfc1345.txt data/countryInfo.txt data/caniuse.json .PHONY: download @@ -18,10 +18,10 @@ data/digraphs-rfc.inc.pl: tools/mkdigraphs-rfc data/rfc1345.txt data/digraphs-shiar.inc.pl: tools/mkdigraphs-shiar shiar.inc.txt $< $(word 2,$^) >$@ -digraphs.inc.pl: tools/mkdigraphlist data/digraphs-rfc.inc.pl data/digraphs-shiar.inc.pl +digraphs.inc.pl: tools/mkdigraphlist data/digraphs-rfc.inc.pl data/digraphs-shiar.inc.pl unicode-char.inc.pl $< >$@ -unicode-char.inc.pl: tools/mkcharinfo digraphs.inc.pl unicode-age.inc.pl +unicode-char.inc.pl: tools/mkcharinfo data/digraphs-rfc.inc.pl data/digraphs-shiar.inc.pl unicode-age.inc.pl $< >$@ ttfsupport: tools/mkttfinfo diff --git a/digraphs.plp b/digraphs.plp index 3f2d1bf..702e3e6 100644 --- a/digraphs.plp +++ b/digraphs.plp @@ -63,7 +63,7 @@ for my $c1group (@chars) { my @class = ('X', grep {$_} $prop, $script); $glyph = EscapeHTML($glyph); - $glyph = "$glyph" if $prop eq 'Zs'; + $glyph = "$glyph" if $prop =~ /\bZs\b/; printf "\n".'%s', join(' ', @class), EscapeHTML($desc), $glyph; diff --git a/tools/mkcharinfo b/tools/mkcharinfo index 2315495..b58f0c3 100755 --- a/tools/mkcharinfo +++ b/tools/mkcharinfo @@ -47,7 +47,8 @@ eval { } or warn "Failed importing html entities: $@"; my %diinc = ( - 'digraphs.inc.pl' => 'u-di', + 'data/digraphs-rfc.inc.pl' => 'u-di', + 'data/digraphs-shiar.inc.pl' => 'u-prop Xz', ); for (keys %diinc) { -e $_ or next; @@ -55,13 +56,8 @@ for (keys %diinc) { while (my ($mnem, $cp) = each %$di) { length $mnem == 2 or next; # limit to digraphs my $class = $diinc{$_}; - if (ref $cp) { - # old style array - $class = 'u-prop' if $cp->[2] and $cp->[2] =~ m/\bXz\b/; - $cp = chr $cp->[0]; - } - $info{$cp}->{di} //= $mnem; - $info{$cp}->{class}->{$class}++; + $info{chr $cp}->{di} //= $mnem; + $info{chr $cp}->{class}->{$class}++; } } diff --git a/tools/mkdigraphlist b/tools/mkdigraphlist index 4cacc6c..4af3590 100755 --- a/tools/mkdigraphlist +++ b/tools/mkdigraphlist @@ -18,51 +18,15 @@ my $extra = do 'data/digraphs-shiar.inc.pl' or warn "could not include shiar proposals: ", $@ // $!; $di = { %{$di}, %{$extra // {}} }; -$di->{chr $_} = $_ for 32 .. 126; -$di->{'\\'.$_} = delete $di->{$_} for '{', '}', '\\'; - # optionally get unicode character information -my %info = eval { - require Unicode::UCD; - map { - $_ => Unicode::UCD::charinfo($di->{$_}) - || { block => '?', category => 'Xn', name => '', script => '' } - } keys %{$di}; -}; - -# add custom categories for certain blocks -for (values %info) { - $_->{category} .= ' Xa' if $_->{block} eq 'Basic Latin'; - $_->{category} .= ' Xl' if $_->{block} eq 'Latin-1 Supplement'; -} - -# mark unofficial extras as such -$info{$_}->{category} .= ' Xz' for keys %{$extra}; - -for (keys %{$di}) { - $info{$_}->{string} = chr(9676) . chr($di->{$_}) if $info{$_}->{combining}; - # find control characters (first 32 chars from 0 and 128) - 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 - $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->{$_} == 0x200B } keys %{$di}; -$info{$_}->{string} = '|' for grep { $di->{$_} == 0x200C } keys %{$di}; -$info{$_}->{string} = '⁀' for grep { $di->{$_} == 0x200D } keys %{$di}; -$info{$_}->{string} = '→' for grep { $di->{$_} == 0x200E } keys %{$di}; -$info{$_}->{string} = '←' for grep { $di->{$_} == 0x200F } keys %{$di}; +my $uninfo = do 'unicode-char.inc.pl' + or warn "could not include unicode details: ", $@ // $!; # 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; +for my $row (values %{$uninfo}) { + my ($class, $name, $di, $html, $string) = @{$row}; + $row = [$name, $class]; + push @{$row}, '', $string if defined $string; } # output perl code of hash @@ -75,9 +39,7 @@ printf '(map {$_=>0} qw{%s}),'."\n", join(' ', ); printf "q{%s}=>[%s],\n", $_, join(',', $di->{$_}, # original code point - $info{$_} # optional additional arguments - ? map {"'$_'"} @{ $info{$_} } - : () + (map {"'$_'"} @{ $uninfo->{ chr $di->{$_} } // [] }), # optional additional arguments ) for sort keys %{$di}; print "}\n"; -- 2.30.0