latin: assign polyomino shapes (tetris pieces)
[sheet.git] / writing-latn.inc.pl
index e904ddcb614ffd23d3df594bf3ae84d0568c9ab9..42a680c4ebc823d4be45bed45dab38e6baa28d6f 100644 (file)
@@ -60,6 +60,38 @@ sub dispdomino {
        return $prefix . chr(0x1F031 + ($dots[0] * 7) + $dots[1]);
 }
 
+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;
+       return sprintf(
+               '<svg height="24" viewBox="-.5 -.5 %s 4">'
+               . '<path d="%s" stroke="%s" fill="none"%s /></svg>',
+               $code eq 'I' ? 4 : $code =~ /T3|[LJO]$|[Iio]1/ ? 2 : 3,
+               $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 '';
 
@@ -334,6 +366,19 @@ domino => {
                44 50 51 52 53 54 55 60 61 62 63 64 65
        }],
 },
+tetromino => {
+       style => [
+               'svg path { stroke-linecap: square }',
+       ],
+       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 }',
        list => [(