X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/ef1048178fa3bc0d43f4e2bbbee58530f8b0e55c..42302c75aa79bb1f14328d6b249379169f5a4fa1:/unicode.plp?ds=sidebyside
diff --git a/unicode.plp b/unicode.plp
index 7c05183..25f89de 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,69 +16,23 @@ $header{content_type} = 'text/html; charset=utf-8';
+
<:
my $diinfo = do 'digraphs.inc.pl';
my %di = map { $diinfo->{$_}->[0] => $_ } grep { ref $diinfo->{$_} }
@@ -91,37 +46,76 @@ sub quote {
return $_;
}
-sub table {
- my ($width, $digraphs, $rowheads, $colheads) = @_;
+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) {
- my $class;
- if ($cell eq '.') {
+ if ($cell =~ s/^\.//) {
+ # dot indicates start of a new row
push @rows, '';
- $rows[-1] .= ''.(shift @$rowheads || ' ') if $rowheads;
+ 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;
}
- elsif ($cell =~ s/^-//) {
- $class = 'empty';
+
+ 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 '=') {
- $class = 'reserved';
+ push @class, 'di-invalid';
$cell = '';
}
+ else {
+ if ($cell =~ s/^-//) {
+ push @class, 'di-rare'; # discouraged
+ }
- my $code = join '', map { $di{ord $_} || '' } split //, $cell;
- my $name = $diinfo->{$code}->[1];
+ 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"} : '',
- defined $class ? qq{ class="$class"} : '',
+ @class ? sprintf(' class="%s"', join ' ', @class) : '',
$colspan > 1 && qq{ colspan="$colspan"},
$cell eq '' ? ' ' : quote($cell),
$code ne '' ? sprintf(' %s', quote($code))
@@ -133,93 +127,174 @@ sub table {
$colspan = 1;
}
- if ($colheads) {
- unshift @rows, sprintf '%s | | ', join '',
- map { sprintf '%s', split(/:/, $_, 2) }
- @$colheads
- }
+ return sprintf qq{\n},
+ join '', map {" | $_\n"} @rows;
+}
- return sprintf "\n", join '', map {"
$_\n"} @rows;
+sub print_glyph_tables {
+ while (@_) {
+ printf "%s
\n\n", shift;
+ while (ref $_[0] and $_ = shift) {
+ print glyph_table($_);
+ }
+ print '';
+ }
}
-print "Arrows
\n\n";
-print table(@$_) for (
- [ 4 => [qw{. â â â â . â - â â . â â â -}]],
- [ 4 => [qw{. â â â â . â - â â . â â â -}]],
- [ 3 => [qw{. ⤠Ⲡ⥠. â â ⶠ. ⣠⼠â¢}]],
- [ 3 => [qw{. ⸠Ⳡ⹠. â â â· . ⺠⽠â¿}]],
-);
+print_glyph_tables(
+ 'Popular',
+ [qw{. « » . ⹠⺠. â â . â â . â â . â â}],
+ [qw{. â ⡠⢠. § ¶ # . © ® ⢠. ° â² â³ . â à ÷ . ± ² â}],
+ [qw{. Ã¥ ä ö ü à . Ã
æ ø ű ſ}],
+ [qw{. ¿ ç ñ é ê è}],
-print "Line drawing
\n\n";
-print table(@$_) for (
- [ 4 => [qw{. â ⬠â â . â ⼠⤠â . â â´ â -}]],
- [ 4 => [qw{. â â³ â â . ⣠â â« â . â â» â -}]],
- [ 3 => [qw{. â ⯠â . â ⿠⥠. â â· â}]],
- [ 3 => [qw{. â â° â . â â ⨠. â ⸠â}]],
-# [ 4 => [qw{. â ⦠â â . â ⬠⣠â . â â© â -}]],
-# [ 3 => [qw{. â ⤠â . â ⪠⡠. â ⧠â}]],
-# [ 3 => [qw{. â ⥠â . â ⫠⢠. â ⨠â}]],
-);
+ 'Arrows',
+ [qw{. â â â â . â - â â . â â â -}],
+ [qw{. â â â â . â - â â . â â â -}],
+ [qw{. ⤠Ⲡ⥠. â â ⶠ. ⣠⼠⢠}],
+ [qw{. ⸠Ⳡ⹠. â â â· . ⺠⽠⿠}],
-print "Signs
\n\n";
-print table(@$_) for (
- [ 3 => [qw{. â â â . â â â . â â â . â â â}]],
- [ 3 => [qw{. ⡠⣠â . ⤠⦠⥠. ⧠⩠â¨}]],
- [ 4 => [qw{. â ⡠⢠⣠. ⤠⥠⦠â§}]],
- [ 5 => [qw{. â¼ â¿ â â â â â â
â â}]], # solar
-# [12 => [qw{. â â â â â â â â â â â â}]], # zodiac
- [ 8 => [qw{. ¤ ¢ ⥠⬠£ ⨠$ Â¥ . â« â ⦠Ⱡ⧠⮠⩠âª}]],
-);
+ 'Line drawing',
+ [qw{. â ⬠â . â ⼠⤠. â â´ â}],
+ [qw{. â â³ â . ⣠â â« . â â» â}],
+ [qw{. â ⯠â . â ⿠⥠. â â· â}],
+ [qw{. â â° â . â â ⨠. â ⸠â}],
+ [qw{
+ . â´ â â â â ⶠâ¾
+ . ⸠â â â
â ⺠â¼
+ . âµ â â â â â· â¿
+ . â¹ â â â â â» â½
+ }],
+ [qw{. â± â³ â² }],
+ [qw{. â ⦠â â . â ⬠⣠â . â â© â - }],
+ [qw{. â ⤠â . â ⪠⡠. â ⧠â }],
+ [qw{. â ⥠â . â ⫠⢠. â ⨠â }],
+
+ 'Blocks',
+ [qw{. â â â . â â â . â â â }],
+ [qw{. â . â . â }],
+ [qw{. â â â . â â â }],
+ [qw{. â â â â â
â â â . â â â â â â â â }],
+ [qw{. ⡠⣠â . ⤠⦠⥠. ⧠⩠â¨}],
+
+ 'Signs',
+ [qw{. ¤ ¢ ⥠⬠£ ⨠$ Â¥ . â« â ⦠Ⱡ⧠⮠⩠âª}],
+ [qw{. â ⡠⢠⣠. ⤠⥠⦠â§}],
+ [qw{. â â¿ â â â â â â
â â}], # solar
+ [qw{. â â â â â â â â â â â â}], # zodiac
-print "IPA
\n\n";
-print table(@$_) for (
- [
- 12 => [qw{
- . p p̪ > > t Ê c k q = Ê¡ Ê
- . b b̪ > > d É É É¡ É¢ = - =
- . m ɱ > > n ɳ ɲ Šɴ = = =
- . Ê - > > r - - = Ê = -Ñ =
- . - â±± > > ɾ ɽ - = É¢Ì = - =
- . ɸ f θ s Ê Ê Ã§ x Ï Ä§ Ê h
- . β v ð z Ê Ê Ê É£ Ê Ê Ê¢ ɦ
- . = = > > ɬ - - - - = = =
- . = = > > É® - - - - = = =
- . - Ê > > ɹ É» j É° - - - =
- . = = > > l É Ê Ê - = = =
- . Ê - Ç Ç Ç -â¼ Ç - - = = =
- . É É̪ > > É -á¶ Ê É Ê = = =
- }],
- [
- 'Plosive',
- 'Voiced plosive',
- 'Nasal',
- 'Trill',
- 'Tap/flap',
- 'Fricative',
- 'Voiced fricative',
- 'Lateral fricative',
- 'Voiced lateral fricative',
- 'Approximant',
- 'Lateral approximant',
- 'Click',
- 'Implosive',
- ],
- [
- 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',
- ],
- ],
- [
- 6 => [qw{
- . i y ɨ Ê É¯ u
- . - ɪ Ê - Ê -
- . e ø É Éµ ɤ o
- . - - É - - -
- . É Å É É Ê É
- . æ - É - - -
- . a ɶ - - É É
- }],
- [qw{Close Near-close Close-mid Mid Open-mid Near-open Open}],
- [map {substr($_, 0, 1).':'.$_, substr($_, 0, 1)." r:$_ rounded"} qw{Front Central Back}]
- ],
+ '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
+ |
+
+
+
+
+