From: Mischa POSLAWSKY Date: Mon, 9 Apr 2012 22:57:58 +0000 (+0200) Subject: font: grouped character groups X-Git-Tag: v1.5~1 X-Git-Url: http://git.shiar.nl/sheet.git/commitdiff_plain/1b59bfbf3962b74b973bde67c3de5b20dd5e7b58 font: grouped character groups --- diff --git a/chars.plp b/chars.plp index c36615d..869366c 100644 --- a/chars.plp +++ b/chars.plp @@ -10,17 +10,6 @@ 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; @@ -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"; diff --git a/font.plp b/font.plp index 50d8dcb..11eba2f 100644 --- a/font.plp +++ b/font.plp @@ -57,7 +57,7 @@ for my $group (sort keys %{$cover}) { for my $name (sort keys %{ $cover->{$group} }) { my $row = $cover->{$group}->{$name}; print ''; - $name = qq{$name} + $name = sprintf '%s', EncodeURI("/chars/$group/$name"), EscapeHTML($name) if $row->{-count} and $row->{-count} < 1280; print '', $name; print '', $row->{-count};