X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/d5bb14b29d37e8fdd1e4f7b44f7b548d4d0ad74d..a226a258f1c08e8dc9b2bb3003955dff3bdf5159:/unicode.plp?ds=sidebyside
diff --git a/unicode.plp b/unicode.plp
index cc45d66..6e585a4 100644
--- a/unicode.plp
+++ b/unicode.plp
@@ -2,6 +2,7 @@
use utf8;
use strict;
use warnings;
+no warnings 'qw'; # that's not a comment, it's a NUMBER SIGN
use open IO => ':utf8';
our $VERSION = '1.0';
@@ -15,35 +16,17 @@ $header{content_type} = 'text/html; charset=utf-8';
+
<:
my $diinfo = do 'digraphs.inc.pl';
my %di = map { $diinfo->{$_}->[0] => $_ } grep { ref $diinfo->{$_} }
@@ -57,77 +40,255 @@ sub quote {
return $_;
}
-sub table {
- my ($width, $digraphs) = @_;
-
- my @cells;
- push @cells, sprintf '
%s%s',
- $di{ord $_} && $diinfo->{$di{ord $_}}->[1],
- $_ eq '-' ? ' ' : quote($_),
- $di{ord $_} && sprintf(' %s', $di{ord $_})
- for @$digraphs;
+sub glyph_table {
+ my ($digraphs) = @_;
my @rows;
- push @rows, sprintf ' | %s', join '', splice @cells, 0, $width, ()
- while @cells;
- return sprintf "\n", join '', @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 = join '', map { $di{ord $_} || '' } split //, $cell;
+ my $name = $diinfo->{$code}->[1];
+
+ # determine display class
+ my @class;
+ if ($cell eq '-') {
+ $cell = '';
+ }
+ elsif ($cell eq '=') {
+ push @class, 'di-invalid';
+ $cell = '';
+ }
+ else {
+ if ($cell =~ s/^-//) {
+ push @class, 'di-rare'; # discouraged
+ }
+
+ if ($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 '' ? ' ' : quote($cell),
+ $code ne '' ? sprintf(' %s', quote($code))
+ : length($cell) == 1 && $cell !~ /[a-z]/
+ ? sprintf(' %04X', 'value', ord $cell)
+ : '',
+ );
+
+ $colspan = 1;
+ }
+
+ return sprintf qq{\n},
+ join '', map {" | $_\n"} @rows;
}
-print "Arrows
\n\n";
-print table(@$_) for (
- [ 4 => [qw{â â â â â - â â â â â -}]],
- [ 4 => [qw{â â â â â - â â â â â -}]],
- [ 3 => [qw{⤠Ⲡ⥠â â ⶠ⣠⼠â¢}]],
- [ 3 => [qw{⸠Ⳡ⹠â â ⷠ⺠⽠â¿}]],
-);
+sub print_glyph_tables {
+ while (@_) {
+ printf "%s
\n\n", shift;
+ while (ref $_[0] and $_ = shift) {
+ print glyph_table($_);
+ }
+ print '';
+ }
+}
-print "Line drawing
\n\n";
-print table(@$_) for (
- [ 4 => [qw{â ⬠â â â ⼠⤠â â â´ â -}]],
- [ 4 => [qw{â â³ â â ⣠â â« â â â» â -}]],
- [ 3 => [qw{â ⯠â â ⿠⥠â â· â}]],
- [ 3 => [qw{â â° â â â ⨠â ⸠â}]],
-# [ 4 => [qw{â ⦠â â â ⬠⣠â â â© â -}]],
-# [ 3 => [qw{â ⤠â â ⪠⡠â ⧠â}]],
-# [ 3 => [qw{â ⥠â â ⫠⢠â ⨠â}]],
-);
+print_glyph_tables(
+ 'Popular',
+ [qw{. « » . ⹠⺠. â â . â â . â â . â â}],
+ [qw{. â ⡠⢠. § ¶ # . © ® ⢠. ° â² â³ . â à ÷ . ± ² â}],
+ [qw{. Ã¥ ä ö ü à . Ã
æ ø ű ſ}],
+ [qw{. ¿ ç ñ é ê è}],
-print "Signs
\n\n";
-print table(@$_) for (
- [ 3 => [qw{â â â â â â â â â}]],
- [ 3 => [qw{â â â ⡠⣠â ⤠⦠⥠⧠⩠â¨}]],
- [ 4 => [qw{â ⡠⢠⣠⤠⥠⦠â§}]],
- [10 => [qw{â¼ â¿ â â â â â â
â â}]], # solar
-# [12 => [qw{â â â â â â â â â â â â}]], # zodiac
- [ 8 => [qw{¤ ¢ ⥠⬠£ ⨠$ Â¥ â« â ⦠Ⱡ⧠⮠⩠âª}]],
-);
+ 'Arrows',
+ [qw{. â â â â . â - â â . â â â -}],
+ [qw{. â â â â . â - â â . â â â -}],
+ [qw{. ⤠Ⲡ⥠. â â ⶠ. ⣠⼠⢠}],
+ [qw{. ⸠Ⳡ⹠. â â â· . ⺠⽠⿠}],
+
+ 'Line drawing',
+ [qw{. â ⬠â . â ⼠⤠. â â´ â}],
+ [qw{. â â³ â . ⣠â â« . â â» â}],
+ [qw{. â ⯠â . â ⿠⥠. â â· â}],
+ [qw{. â â° â . â â ⨠. â ⸠â}],
+ [qw{
+ . â´ â â â â ⶠâ¾
+ . ⸠â â â
â ⺠â¼
+ . âµ â â â â â· â¿
+ . â¹ â â â â â» â½
+ }],
+ [qw{. â± â³ â² }],
+ [qw{. â ⦠â â . â ⬠⣠â . â â© â - }],
+ [qw{. â ⤠â . â ⪠⡠. â ⧠â }],
+ [qw{. â ⥠â . â ⫠⢠. â ⨠â }],
+
+ 'Blocks',
+ [qw{. â â â . â â â . â â â }],
+ [qw{. â . â . â }],
+ [qw{. â â â . â â â }],
+ [qw{. â â â â â
â â â . â â â â â â â â }],
+ [qw{. ⡠⣠â . ⤠⦠⥠. ⧠⩠â¨}],
-print "IPA
\n\n";
-print table(@$_) for (
- [12 => [qw{
- p t - Ê - c k q - Ê - Ê¡
- b d - É - É É¡ É¢ - - - -
- m ɱ - n - ɳ ɲ Šɴ - - -
- Ê - - r - - - - - - - -
- - ⱱ - ɾ - ɽ - - - - - -
- ɸ f θ s Ê Ê Ã§ x Ï Ä§ h Ê
- β v ð z Ê Ê Ê É£ Ê Ê É¦ Ê¢
- - - - ɬ - - - - - - - -
- - - - É® - - - - - - - -
- - Ê - ɹ - É» j É° - - - -
- - - - l - É Ê Ê - - - -
- Ê - Ç Ç Ç - Ç - - - - -
- É - É - - - Ê É Ê - - -
- }]],
- [6 => [qw{
- i y ɨ Ê É¯ u
- - ɪ Ê - Ê -
- e ø É Éµ ɤ o
- - - É - - -
- É Å É É Ê É
- æ - É - - -
- a ɶ - - É É
- }]],
+ 'Signs',
+ [qw{. ¤ ¢ ⥠⬠£ ⨠$ Â¥ . â« â ⦠Ⱡ⧠⮠⩠âª}],
+ [qw{. â ⡠⢠⣠. ⤠⥠⦠â§}],
+ [qw{. â â¿ â â â â â â
â â}], # solar
+ [qw{. â â â â â â â â â â â â}], # zodiac
+
+ 'IPA',
+ [qw{
+ - BiL:Bilabial LD:Labiodental D:Dental Alv:Alveolar PA:Postalveolar
+ Rf:Retroflex Pal:Palatal Vel:Velar Uv:Uvular Ph:Pharyngeal
+ EG:Epiglottal Gl:Glottal
+ .>Plosive p -ȹ > > t Ê c k q = Ê¡ Ê
+ .>Voiced_Plosive b -ȸ > > d É É É¡ É¢ = - =
+ .>Nasal m ɱ > > n ɳ ɲ Šɴ = = =
+ .>Trill Ê - > > r - - = Ê = -Ñ =
+ .>Tap/flap - â±± > > ɾ ɽ - = É¢Ì = - =
+ .>Fricative ɸ f θ s Ê Ê Ã§ x Ï Ä§ Ê h
+ .>Voiced_fricative β v ð z Ê Ê Ê É£ Ê Ê Ê¢ ɦ
+ .>Lateral_fricative = = > > ɬ - - - - = = =
+ .>Voiced_lateral_fricative = = > > É® - - - - = = =
+ .>Approximant - Ê > > ɹ É» j É° - - - =
+ .>Lateral_approximant = = > > l É Ê Ê - = = =
+ .>Click Ê - Ç Ç Ç -â¼ Ç - - = = =
+ .>Implosive É É̪ > > É -á¶ Ê É Ê = = =
+ }],
+ [qw{
+ co . É . Ê . ɧ . É¥ . Ê . w
+ }],
+ [(
+ '-',
+ map { substr($_, 0, 1).':'.$_, substr($_, 0, 1)." r:$_ rounded" }
+ qw{Front Central Back}
+ ), qw{
+ .>Close i y ɨ Ê É¯ u
+ .>Near-close ɪ Ê - - - Ê
+ .>Close-mid e ø É Éµ ɤ o
+ .>Mid - - É - - -
+ .>Open-mid É Å É É Ê É
+ .>Near-open æ - É - - -
+ .>Open a ɶ - - É É
+ }],
+
+ 'Alphabetics',
+ [qw{
+ .>Latin a Ä« ı Ä Ã´ ɳ Šṡ Å¡ Ä Ã° Æ·
+ .>Cyrillic а Ñ Ð¹ Ñ Ñ Ð½ Ñ Ñ Ñ Ñ Ñ Ð¯
+ .>Greek α ί Ï Î· Ï Ï Ï Ï Ï Î¸ ξ Ω
+ .>Hebrew × ×² × ×¢ × × × ×¡ ש × ×¦ ×¥
+ }],
+
+ 'Japanese',
+ [qw{
+ - A I U E O _
+ .> ã ã ã ã ã =
+ .>K ã ã ã ã ã =
+ .>S ã ã ã ã ã =
+ .>T ã 㡠㤠㦠㨠=
+ .>N 㪠㫠㬠ã ã® ã
+ .>H 㯠㲠㵠㸠㻠=
+ .>M ã¾ ã¿ ã ã ã =
+ .>Y ã = ã = ã =
+ .>R ã ã ã ã ã =
+ .>W ã -ã = -ã ã =
+ }],
+ [qw{
+ - A I U E O
+ .>G ã ã ã ã ã
+ .>Z ã ã ã ã ã
+ .>D ã 㢠㥠㧠ã©
+ .>B 㰠㳠㶠㹠ã¼
+ .>P 㱠㴠㷠㺠ã½
+ }],
+ [qw{
+ - A I U E O _
+ .> 㢠㤠㦠㨠㪠ã¼
+ .>K ã« ã 㯠㱠㳠=
+ .>S ãµ ã· ã¹ ã» ã½ =
+ .>T ã¿ ã ã ã ã =
+ .>N ã ã ã ã ã ã³
+ .>H ã ã ã ã ã =
+ .>M ã ã ã 㡠㢠=
+ .>Y 㤠- 㦠- 㨠=
+ .>R 㩠㪠㫠㬠ã =
+ .>W 㯠㰠- 㱠㲠=
+ }],
+ [qw{
+ - A I U E O
+ .>G 㬠㮠㰠㲠ã´
+ .>Z 㶠㸠㺠㼠ã¾
+ .>D ã ã ã
ã ã
+ .>B ã ã ã ã ã
+ .>P ã ã ã ã ã
+ .>V 㷠㸠㴠㹠ãº
+ }],
);
+:>
+
+
+
+ ascii
+ | digraph
+ | proposed
+ | other unicode
+ | discouraged
+ |
+
+
+
+
+