X-Git-Url: http://git.shiar.net/sheet.git/blobdiff_plain/fd049eb294bf4536e0507a7591fd9be3a0567d9c..9cdf17f81bc6b6b16d82f48e1f8ae04c9f0886a7:/writing-latn.inc.pl?ds=inline
diff --git a/writing-latn.inc.pl b/writing-latn.inc.pl
index 42a680c..4ad57ff 100644
--- a/writing-latn.inc.pl
+++ b/writing-latn.inc.pl
@@ -1,7 +1,7 @@
use 5.014;
use utf8;
use warnings;
-use List::Util qw( pairs pairmap sum );
+use List::Util qw( pairs pairmap sum min max );
my %C = (
red => '#EC1C24',
@@ -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 }',
@@ -60,6 +60,22 @@ sub dispdomino {
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) = (max(6, 4 * max(@dots)), 9);
+ my ($w0, $w1) = ($w / $dots[0], $dots[1] ? $w / $dots[1] : 1);
+ return sprintf(
+ '',
+ $prefix && ' style="opacity:.5"',
+ $w + 1, $h + 1, join(' ',
+ "m0,$h l+$w0,-$h" x $dots[0], # slashes
+ "m0,$h l-$w1,-$h" x $dots[1], # backslashes
+ )
+ );
+}
+
sub dispblock {
my $code = shift;
my ($prefix, $shape, $rotate) = $code =~ m/\A(-?)(\w)(\d?)/
@@ -76,15 +92,20 @@ sub dispblock {
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%
+ my %col = (
+ 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(?'
+ '',
$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"',
@@ -131,7 +152,23 @@ sub disphues {
);
}
-(
++{
+default => [qw( written sign digital touch tactile sound games semaphore barcode personal )],
+written => [qw( uppercase lowercase suetterlin roman )],
+digital => [qw( stroke ita2 )],
+stroke => [qw( graffiti unistrokes edgewrite )],
+touch => [qw( moon braille )],
+sign => ['sutton'],
+sound => [qw( morse tap shorttap )],
+games => [qw( domino tetromino cards )],
+semaphore => [qw( maritime flag chappe prussian )],
+barcode => [qw( rm4scc code39 code93 code128 )],
+personal => [qw( rgbmap cmymap dni pigpen nyctographs chromacons )],
+
+order => {
+ name => '#',
+ list => [1 .. 26],
+},
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 }],
},
@@ -146,6 +183,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 }],
},
@@ -153,7 +191,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 {
@@ -203,6 +241,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
@@ -210,8 +259,9 @@ unistrokes => {
list => [
map { '' }
map {
- sprintf('', m/\AM(\d+),(\d+)(.?)/) . # start point
- (!!$3 && qq())
+ my ($x, $y, $next) = m/\AM(\d+),(\d+)(.)?/;
+ sprintf('', $x, $y) . # start point
+ (defined $next && qq())
}
'M3,8 V0',
'M0,0 6,4 0,8',
@@ -267,9 +317,6 @@ edgewrite => {
)
],
},
-#graffiti => {
-# name => 'Palm Graffiti',
-#},
ita2 => {
name => 'ITA2',
style => [@wrapstyle, 'td { font-size: 50% }'],
@@ -350,17 +397,21 @@ tap => {
shorttap => {
name => 'Short Tap',
style => \@tapstyle,
- list => [map { disptap($_) } qw{
+ altlist => [map { disptap($_) } qw{
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 { disptap($_) } 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
+ list => [map { dispdash($_) } qw{
+ 10 14 -24 12 20 23 22 21 30 -34 13 33 32
+ 31 40 43 -13 42 41 11 50 -53 -44 -52 -51 -54
}],
},
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
@@ -369,6 +420,7 @@ domino => {
tetromino => {
style => [
'svg path { stroke-linecap: square }',
+ '.sample .gapl1 + .gapr1 { margin-left: -6.3px }',
],
name => 'Tetrominos',
list => [map { dispblock($_) } qw{
@@ -643,7 +695,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 {
@@ -726,7 +778,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('%s',
@@ -745,4 +800,4 @@ chromacons => {
}
],
},
-);
+};