From 038fe5ca52455d64865054bc1ccae57c0e9e4c79 Mon Sep 17 00:00:00 2001 From: Mischa POSLAWSKY Date: Tue, 11 Apr 2017 22:18:35 +0200 Subject: [PATCH] latin: common function to format code93 bar codes --- writing-latn.inc.pl | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/writing-latn.inc.pl b/writing-latn.inc.pl index 2fbdb46..3aab17a 100644 --- a/writing-latn.inc.pl +++ b/writing-latn.inc.pl @@ -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( + '', + $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 - '', - 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 '', -- 2.30.0