-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
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
} 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;
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}++;
}
}
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('<control U+%04X>', $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
);
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";