X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/6721f1111bc49b8ee5efc0b39d74321c1393cdfb..84f6f39be4ffeb6307756b97126ad993bef367a8:/chars.plp diff --git a/chars.plp b/chars.plp index c36615d..5b5065e 100644 --- a/chars.plp +++ b/chars.plp @@ -10,28 +10,17 @@ Html({ data => [qw( unicode-cover.inc.pl ttfsupport unicode-char.inc.pl )], }); -:> -

Character support

- -

-Selected characters from Unicode preset -or range. -

- -
- -<: use 5.010; use Shiar_Sheet::FormatChar; my $glyphs = Shiar_Sheet::FormatChar->new; my %oslist = ( win95 => [qw( arial ariuni verdana times )], # microsoft - mac10 => [qw( )], # apple + mac10 => [qw( lucida garamond )], # apple android => [qw( droidsans )], # google oss => [qw( dvsans c2k unifont )], ); -my @ossel = qw( win95 oss android ); +my @ossel = qw( win95 mac10 oss android ); my (%font, @fontlist); for my $os (@ossel) { @@ -50,43 +39,65 @@ for my $os (@ossel) { # parse input -my @chars; -my @querydesc; - -if (my $query = $ENV{PATH_INFO} || $get{q} || 'ipa') { - my $groupinfo = do 'unicode-cover.inc.pl' or die $@ || $!; - for (split /[\s+]/, $query) { +my ($title, $parent) = ('Character overview'); +my $query = eval { + for ($ENV{PATH_INFO} || ()) { s{^/}{}; - when (qr{^[\d,;\s+-]+$}) { - push @querydesc, "character codepoints $_"; - for (map { split /[^\d-]/ } $_) { - my ($charnum, $range) = split /-/, $_; - push @chars, chr $_ for $charnum .. ($range // $charnum); - } - } - when ($_) { - my $row = $groupinfo->{$_} or do { - warn "group $_ not found"; - next; - }; - push @querydesc, $row->{-name} // $_; - push @chars, map { chr } @{ $row->{-chars} }; - } - default { - die "unknown parameter: $_\n"; + return $_ if m{^[0-9 +-]+$}; + + my ($cat, $name) = split m{/}, $_, 2 or die "invalid query\n"; + if (!$name) { + ($cat, $name) = ('table', $cat); } + + my $groupinfo = do 'unicode-cover.inc.pl' or die $@ || $!; + my $row = $groupinfo->{$cat}->{$name} + or die "unknown character group $cat/$name\n"; + + $title = ucfirst EscapeHTML($name).' characters'; + $parent = $cat; + return EscapeHTML($row->{-query}); } +} || $get{q}; + +say "

$title

"; + +if (!$query) { + say "

Unicode group not specified: $@

"; + exit; +}; + +for ($parent || 'Unicode range') { + my %CATDESC = ( + block => 'Unicode block', + script => 'Unicode script', + category => 'Unicode category', + table => 'Unicode preset group', + ); + say sprintf('

List %s in selected %s.

', + 'characters and font support', + $CATDESC{$parent} || $parent, + ); } +my @chars; +for (map { split /[^\d-]/ } $query) { + my @range = split /-/, $_, 2; + m/^[0-9]+$/ or die "Invalid code point $_ in query $query\n" for @range; + push @chars, chr $_ for $range[0] .. ($range[1] // $range[0]); +} + +@chars or die "No match for query $query\n"; + @chars <= 1500 or die sprintf( - 'too many matches (%d) for %s'."\n", - scalar @chars, join(', ', @querydesc), + 'Too many matches (%d) for query %s'."\n", + scalar @chars, $query, ); # output character list +say '
'; print ''; -say ''; print '' x 3; print "" for 2, map { scalar @{$oslist{$_}} } @ossel; @@ -123,6 +134,5 @@ for my $chr (@chars) { } say "
'.EscapeHTML(join ', ', @querydesc).'
\n"; - -:>
+say "
\n";