X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/e51287199a48ab223d72d41a8b28ddb8b9b2818a..378d119f5791fea807f36749ce9ecb5a5c60952e:/unicode.plp diff --git a/unicode.plp b/unicode.plp index 3435730..f558448 100644 --- a/unicode.plp +++ b/unicode.plp @@ -22,105 +22,14 @@ Also see the complete digraphs table.

<: -my $diinfo = do 'digraphs.inc.pl'; -my %di = map { $diinfo->{$_}->[0] => $_ } grep { ref $diinfo->{$_} } - sort { length $a <=> length $b } keys %$diinfo; - -sub glyph_table { - my ($digraphs) = @_; - - my @rows; - - my @colheads; - while ($digraphs->[0] !~ /^\./) { - my $cell = shift @$digraphs or last; - push @colheads, sprintf( - '<%s%s>%s', - $cell =~ s/^-// ? 'td' : 'th', - $cell =~ s/:(.*)// ? qq{ title="$1"} : '', - $cell eq '_' ? ' ' : $cell - ); - } - push @rows, sprintf '%s', join '', @colheads if @colheads; - - my $colspan = 1; - for my $cell (@$digraphs) { - if ($cell =~ s/^\.//) { - # dot indicates start of a new row - push @rows, ''; - if ($cell =~ s/^>//) { - # header cell text follows - $cell =~ s/_/ /g; # underscores may be used instead of whitespace (for qw//ability) - $rows[-1] .= ''.($cell || ' '); - } - next; - } - elsif ($cell eq '>') { - # merge this cell to the next column - $colspan++; - next; - } - - my ($code, $name); - - # determine display class - my @class; - if ($cell eq '-') { - $cell = ''; - } - elsif ($cell eq '=') { - push @class, 'di-invalid'; - $cell = ''; - } - else { - push @class, 'X'; - - if ($cell =~ s/^-//) { - push @class, 'di-rare'; # discouraged - } - - $code = join '', map { $di{ord $_} || '' } split //, $cell; - $name = $diinfo->{$code}->[1]; - length $code == 2 or undef $code; - - if (defined $code) { - push @class, 'di-d'; # digraph - push @class, 'di-prop' # unofficial - if $diinfo->{$code}->[2] =~ /\bXz\b/; - } - - if ($cell =~ /[ -~]/) { - push @class, 'di-a'; # ascii - } - else { - push @class, 'di-b'; # basic unicode - } - } - - # add cell html - $rows[-1] .= sprintf('%s%s', - defined $name ? qq{ title="$name"} : '', - @class ? sprintf(' class="%s"', join ' ', @class) : '', - $colspan > 1 && qq{ colspan="$colspan"}, - $cell eq '' ? ' ' : EscapeHTML($cell), - defined $code ? sprintf(' %s', EscapeHTML($code)) - : length($cell) == 1 && $cell !~ /[a-z]/ - ? sprintf(' %04X', 'value', ord $cell) - : '', - ); - - $colspan = 1; - } - - return sprintf qq{\n%s
\n}, - join '', map {"$_\n"} @rows; -} +use Shiar_Sheet::FormatChar; +my $glyphs = Shiar_Sheet::FormatChar->new; sub print_glyph_tables { while (@_) { printf '

%s

'."\n\n", shift; while (ref $_[0] and $_ = shift) { - print glyph_table($_); + print $glyphs->table($_); } print '
'; }