latin: common function to format code93 bar codes
[sheet.git] / writing-latn.inc.pl
index 2fbdb4692fdf81b0fb63a33d8c8bfa5d86d5b578..3aab17a9630c0930d0029b572c32ea39dd6f6af8 100644 (file)
@@ -1,6 +1,9 @@
 use 5.014;
 use utf8;
-use List::Util qw( pairs );
+use List::Util qw( pairs sum );
+
+my %C = qw(red #EC1C24  blue #3953A3  yellow #F9EC31  black #231F20);
+my $U = 0;  # optional unicode alternatives
 
 sub disptap {
        return map {
@@ -11,8 +14,21 @@ sub disptap {
        } @_;
 }
 
-my %C = qw(red #EC1C24  blue #3953A3  yellow #F9EC31  black #231F20);
-my $U = 0;  # optional unicode alternatives
+sub dispbar {
+       my @cols = split //, shift;  # bar and space widths
+       my $width = sum(@cols);
+       return sprintf(
+               '<svg width="%d" height="%d" viewBox="-.5 0 %d %d"><path d="%s"/></svg>',
+               $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 }],
@@ -265,24 +281,11 @@ my $U = 0;  # optional unicode alternatives
                201112 102112 202111 101212 201211 102211        102121 0 101221
        )
 ],
-'Code 93' => [
-       map {
-               sprintf
-               '<svg width="18" height="14" viewBox="-.5 0 9 7"><path d="M0,0 %s"/></svg>',
-               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
                '<svg width="22" height="14" viewBox="-.5 0 11 7"><path d="M0,0 %s"/></svg>',