unicode: one set of barb arrows from unicode 7.0
[sheet.git] / writing-latn.inc.pl
index 57193c8c8376d96f14be33b60a24b625537d5404..da917a2d1d37da807a8285770eb41909cd783676 100644 (file)
@@ -15,10 +15,10 @@ my @wrapstyle = (
        'td { white-space: normal; word-spacing: 10em }',
                # force line break between words
        '.sample { word-spacing: 0 }',
-       '.sample span { margin-right: 1ex; white-space: nowrap; display: inline-block }',
+       '.sample svg { margin-right: 1ex; white-space: nowrap; display: inline-block }',
                # larger space between letters
 );
-my $spacestyle = '.sample span { margin-right: 0.5ex }';  # separate letters
+my $spacestyle = '.sample svg { margin-right: 0.5ex }';  # separate letters
 my @tapstyle = (
        @wrapstyle,
        '{ line-height: 1ex }',
@@ -53,6 +53,65 @@ sub disptap {
        return $prefix . join(' ', map { '·' x $_ } @dots);
 }
 
+sub dispdomino {
+       my $code = shift;
+       my ($prefix, @dots) = $code =~ m/\A(-?)(\d)(\d)/ or return $code;
+       # unicode glyph alternative as DOMINO TILE HORIZONTAL-0a-0b
+       return $prefix . chr(0x1F031 + ($dots[0] * 7) + $dots[1]);
+}
+
+sub dispdash {
+       my $code = shift;
+       my ($prefix, @dots) = $code =~ m/\A(-?)(\d)(\d)/ or return $code;
+       my ($w, $h) = (12, 9);
+       my @w = map { $w / ($_ || 1) } @dots;
+       return sprintf(
+               '<svg height="20" viewBox="-.5 -.5 %s %s">'
+               . '<path d="%s" /></svg>',
+               $w + 1, $h + 1, join(' ',
+                       "m0,$h l+$w[0],-$h" x $dots[0], # slashes
+                       "m0,$h l-$w[1],-$h" x $dots[1], # backslashes
+               )
+       );
+}
+
+sub dispblock {
+       my $code = shift;
+       my ($prefix, $shape, $rotate) = $code =~ m/\A(-?)(\w)(\d?)/
+               or return $code;
+       my %path = (
+               S => 'm0,1h1v-1h1',
+               Z => 'm0,0h1v1h1',
+               L => 'm0,0v2h1',
+               v => 'm0,0v1h1',
+               J => 'm1,0v2h-1',
+               T => 'm0,0h2.5h-1.5v1',
+               O => 'm0,0h1v1h-1',
+               I => 'm0,1h3',
+               i => 'm0,1h2',
+               o => 'm0,1h1',
+       );
+       my %col = qw(
+               S 120  Z 0  J 240  L 30  T 300  O 60  I 180
+               v 45,50%  i 165,50%  o 165,0%
+       );
+       s/\z(?<!%)/,100%/ for values %col;
+       my @gaps = (grep $_,
+               $code =~ /[Ii]$|T[23]|L3?$|S1|Z$|J1|v3?$/ ? 'gapl1' : (),
+               $code =~ /T$|L2|Z$/ ? 'gapr1' : (),
+       );
+       return sprintf(
+               '<svg height="24" viewBox="-.5 -.5 %s 4"%s>'
+               . '<path d="%s" stroke="%s" fill="none"%s /></svg>',
+               $code eq 'I' ? 4 : $code =~ /T3|[LJO]$|[Iio]1/ ? 2 : 3,
+               @gaps ? qq( class="@gaps") : '',
+               $path{$shape}, "hsl($col{$shape},50%)", join('',
+                       $rotate && sprintf(' transform="rotate(%s 1 1)"', $rotate * 90),
+                       $prefix && ' style="opacity:.5"',
+               ),
+       );
+}
+
 sub dispbar {
        my $code = shift or return '';
 
@@ -107,6 +166,7 @@ suetterlin => {
                        src: url("/suetterlin.ttf");
                }',
                'td { font-family: Suetterlin }',
+               'td:hover::first-letter { text-transform: uppercase }',
        ],
        list => [qw{ a b c d e f g h i j k l m n o p q r ſ s t u v w x y z }],
 },
@@ -114,7 +174,7 @@ roman => {
        name => 'Old Roman Cursive',
        style => [
                'svg path { stroke-linecap: round; stroke-linejoin: round }',
-               '.sample span { margin-right: -10px }',
+               '.sample svg { margin-right: -10px }',
        ],
        list => [
                map {
@@ -164,6 +224,17 @@ sutton => {
                0         965aa6
        }],
 },
+graffiti => {
+       name => 'Palm Graffiti',
+       style => [
+               '@font-face {
+                       font-family: Graffiti;
+                       src: url("/graffiti.ttf");
+               }',
+               'td { font-family: Graffiti }',
+       ],
+       list => [qw{ a b c d e f g h i j k l m n o p q r s t u v w * y z }],
+},
 unistrokes => {
        name => 'Unistrokes',
        url   => 'https://www.google.com/patents/US5596656', # by Xerox
@@ -228,9 +299,6 @@ edgewrite => {
                )
        ],
 },
-#graffiti => {
-#      name => 'Palm Graffiti',
-#},
 ita2 => {
        name => '<abbr title="International Telegraph Alphabet">ITA</abbr>2',
        style => [@wrapstyle, 'td { font-size: 50% }'],
@@ -315,6 +383,35 @@ shorttap => {
                11 12 13 14 21 22 23 20 > 31 -13 32 33
                30 41 42 -13 43 40 10 51 52 53 50 -31 -40
        }],
+       altlist => [map { dispdash($_) } qw{
+               10 14 -13 12 20 23 22 21 30 -34 13 33 32
+               31 40 43 -13 42 41 11 50 -23 -50 -1341 -31 -41
+       }],
+},
+domino => {
+       name => 'Domino tiles',
+       style => [
+               # enlarge single tile height to span full vertical combinations
+               'td { font-size: 200%; line-height: .6; padding: 0 0 .3ex }',
+       ],
+       list => [map { dispdomino($_) } qw{
+               10 11 20 21 22 30 31 32 33 40 41 42 43
+               44 50 51 52 53 54 55 60 61 62 63 64 65
+       }],
+},
+tetromino => {
+       style => [
+               'svg path { stroke-linecap: square }',
+               '.sample .gapl1 + .gapr1 { margin-left: -6.3px }',
+       ],
+       name => 'Tetrominos',
+       list => [map { dispblock($_) } qw{
+               T2 T1 I  T3
+               i  L1 J  L3
+               o1 I1 L2 L  -S1 Z1
+               O  J2 v2 -J3 S  T
+               J1 v1 v  v3 i1 Z
+       }],
 },
 cards => {
        style => 'td { font-family: Symbola, "DejaVu Sans", serif, sans }',
@@ -580,7 +677,7 @@ dni => {
        name => "D'ni",
        style => [
                'svg { border: 1px solid currentColor }',
-               '.sample span + span svg { border-left: 0 }',
+               '.sample svg + svg { border-left: 0 }',
        ],
        list => [
                map {
@@ -663,7 +760,10 @@ nyctographs => {
 },
 chromacons => {
        title => 'Colour Alphabet by Paul Green-Armytage (2010)',
-#      style => '.sample { word-break: break-all }',
+       style => [
+               #'.sample { word-break: break-all }',
+               '.sample { background: white }',
+       ],
        list => [
                map {
                        sprintf('<span%s>%s</span>',