latin: convert code39 to common svg codes
[sheet.git] / writing-latn.inc.pl
index c026c0fcd0227dcb77b278a05e3b820099ad6f67..6adf33b8f5713a4740bd584974aaabd0c40eb310 100644 (file)
@@ -6,16 +6,13 @@ 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);
 }
 
 sub dispbar {
-       my $code = shift;
+       my $code = shift or return '';
 
        return join '', pairmap {
                ($a =~ tr/123/❘❙❚/r) . ($b =~ tr/321/  /dr)
@@ -106,14 +103,14 @@ sub dispbar {
        .- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. --
        -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --..
 }],
-'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
-})],
-'Short Tap' => [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('<b>%s</b>', chr(0x1F0B0 + $_)) }  # spades, hearts
        1 .. 11, 13, 14  # A 2-10 J Q K
@@ -277,39 +274,23 @@ sub dispbar {
                131001 231301 000202 023302 230003 032003 201003 101003
        )
 ],
-'Code 39' => [
-       # ISO/IEC 16388
-       map { !!$_ && tr/012/ ❘❙/r }
-       # bar widths (1-2) followed by space of width 1 (implied) or 2 (0)
-       qw(
-               211012 121012 221011 112012 212011 122011 111022 211021 121021 112021
-               211102 121102 221101 112102 212101 122101 111202 211201 121201 112201
-               201112 102112 202111 101212 201211 102211        102121 0 101221
-       )
-],
+'Code 39' => [map { dispbar($_) } qw(
+       2111121121 1121121121 2121121111 1111221121 2111221111 1121221111
+       1111122121 2111122111 1121122111 1111222111 2111111221 1121111221
+       2121111211 1111211221 2111211211 1121211211 1111112221 2111112211
+       1121112211 1111212211 2211111121 1221111121 2221111111 1211211121
+       2211211111 1221211111            1221112111 0 1211212111
+)], # ISO/IEC 16388
 '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
-               '<svg width="22" height="14" viewBox="-.5 0 11 7"><path d="M0,0 %s"/></svg>',
-               join ' ',
-               map {
-                       $_ eq '' ? 'm2,-7' :
-                       $_ eq '.' ? 'm3,-7' :
-                       $_ eq ':' ? 'm4,-7' :
-                       join 'm1,-7', ('v7') x $_
-               }
-               split /([.:])?/  # each bar [123] and space [ .:]
-       }
-       # bar widths (1-3) followed by space of width 1 (implied), 2 (.) or 3 (:)
-       qw(
-               11:2 1:12 1:1:2 12:1 1:21 1:2:1 21:1 2:11 2:1:1 123  12:3 1:23 132
-               13:2 1:32 332   21:3 2:13 231   23:1 233  312   31:2 3:12 321  32:1 22.2
-       )
-],
+'Code 128' => [map { dispbar($_) } qw(
+       111323 131123 131321 112313 132113 132311 211313 231113 231311 112133
+       112331 132131 113123 113321 133121 313121 211331 231131 213113 213311
+       213131 311123 311321 331121 312113 312311        212222
+)],
 '<abbr title="Royal Mail 4-State Customer Code">RM4SCC</abbr>' => [
        map {
                my $len = length $_;