X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/9b34f6d9fa60d96025fe3835777f277b9cc002ad..9f0a6057388ceffc00f22ae5fe9a28250cc338be:/writing-latn.inc.pl diff --git a/writing-latn.inc.pl b/writing-latn.inc.pl index 1be023d..5921802 100644 --- a/writing-latn.inc.pl +++ b/writing-latn.inc.pl @@ -1,22 +1,42 @@ +use 5.014; use utf8; -use List::Util qw( pairs ); +use List::Util qw( pairs pairmap sum ); + +my %C = qw(red #EC1C24 blue #3953A3 yellow #F9EC31 black #231F20); +my $U = 0; # optional unicode alternatives sub disptap { - return map { - !m/\A(-?)(\d)(\d)/ ? $_ : - $1.join(' ', - '·' x $2, '·' x $3, - ); - } @_; + my $code = shift; + $code =~ m/\A(-?)(\d)(\d)/ or return $code; + return $1 . join(' ', '·' x $2, '·' x $3); } -my %C = qw(red #EC1C24 blue #3953A3 yellow #F9EC31 black #231F20); -my $U = 0; # optional unicode alternatives +sub dispbar { + my $code = shift; + + return join '', pairmap { + ($a =~ tr/123/❘❙❚/r) . ($b =~ tr/321/  /dr) + } split //, $code if $U; + + my @cols = split //, $code; # bar and space widths + my $width = sum(@cols); + return sprintf( + '', + $width * 2, 14, $width, 7, join(' ', + 'M0,0', + map { + join('m1,-7', ('v7') x $_->[0]), # line per bar width + (map { sprintf 'm%d,-7', $_ + 1 } $_->[1] || ()), # space forward + } + pairs @cols + ) + ); +} ( 'Uppercase' => [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 }], 'Lowercase' => [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 }], -'Sütterlin' => [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 }], +'Sütterlin' => [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 }], 'Old Roman Cursive' => [ map { m/^(-?)(\w.*)/ ? $1.'' : $_ } "m2,4 c1,2 8,9 8,9 M2,15 6,9", @@ -83,14 +103,14 @@ my $U = 0; # optional unicode alternatives .- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.. }], -'Tap code' => [disptap(qw{ +'Tap code' => [map { disptap($_) } qw{ 11 12 13 14 15 21 22 23 > 24 25 31 32 33 34 35 41 42 43 44 45 51 52 53 54 55 -})], -'Tap simplified' => [disptap(qw{ +}], +'Short Tap' => [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 -})], +}], 'Cards' => [( map { chr(0x1F0A0 + $_), sprintf('%s', chr(0x1F0B0 + $_)) } # spades, hearts 1 .. 11, 13, 14 # A 2-10 J Q K @@ -264,24 +284,11 @@ my $U = 0; # optional unicode alternatives 201112 102112 202111 101212 201211 102211 102121 0 101221 ) ], -'Code 93' => [ - map { - sprintf - '', - join ' ', - map { - join('m1,-7', ('v7') x $_->[0]), # line per bar width - (map { sprintf 'm%d,-7', $_ + 1 } $_->[1] || ()), # space forward - } - pairs split // - } - # bar and space widths (1-3) - qw( - 21111 21121 21131 22111 22121 23111 11211 11221 11231 - 12211 13211 11112 11122 11132 12112 13112 21211 21221 - 21112 21122 22112 22211 11212 11222 12212 12311 31121 - ) -], +'Code 93' => [map { dispbar($_) } qw( + 211113 211212 211311 221112 221211 231111 112113 112212 112311 122112 + 132111 111123 111222 111321 121122 131121 212112 212211 211122 211221 + 221121 222111 112122 112221 122121 123111 311211 +)], 'Code 128' => [ map { $U ? tr/1-3-/❘❙❚ /r : sprintf '', @@ -301,15 +308,19 @@ my $U = 0; # optional unicode alternatives ) ], 'RM4SCC' => [ - map { sprintf - '' - . '', - join ' m2', - map { sprintf ',%dv%dm0,-%d', - ($_ & 1 ? 0 : 2), 2 + ($_ & 2) + ($_ & 1) * 2, - ($_ & 1 ? 0 : 2) + 2 + ($_ & 2) + ($_ & 1) * 2, - } - split // + map { + my $len = length $_; + !$len ? '' : sprintf( + '' + . '', + $len * 5, $len * 2, + join ' m2', + map { sprintf ',%dv%dm0,-%d', + ($_ & 1 ? 0 : 2), 2 + ($_ & 2) + ($_ & 1) * 2, + ($_ & 1 ? 0 : 2) + 2 + ($_ & 2) + ($_ & 1) * 2, + } + split // + ); } qw( 2121 2301 @@ -318,7 +329,31 @@ my $U = 0; # optional unicode alternatives 1032 1212 1230 3012 3030 3210 1122 1302 1320 3102 3120 3300 0033 - ) # 0 for space + ), # 0 for space + '', 1, 3 # start/end +], +"D'ni" => [ + map { + state $window = 'M-.5,-.5H8.5V8.5H-.5Z'; + state $v = [ + '', + 'M0,4 8,4', + 'M0,8 Q4,4 8,8', + 'M0,4 4,8 8,4', + 'M2,0 2,4 8,4', + 'M0,0 8,8 M0,8 8,0', # cross + 'M3.5,4 h1', # dot + ]; + state $h = [ + '', + 'M4,0 4,8', + 'M0,0 Q4,4 0,8', + 'M4,-.5 0,4 4,8.5', + 'M4,8 4,2 8,2', + ]; + sprintf '', + $window . ($h->[$_ % 5] . $v->[$_ / 5] || $v->[6]); + } 0 .. 5*5 ], 'Pigpen' => [ map {