+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 {
} @_;
}
-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(
+ '<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 }],
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>',
), # 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 '<svg width="16" height="16" viewBox="-.5 -.5 9 9"><path d="%s"/></svg>',
+ $window . ($h->[$_ % 5] . $v->[$_ / 5] || $v->[6]);
+ } 0 .. 5*5
+],
'Pigpen' => [
map {
qq(<svg width="12" height="12" viewBox="-.5 -.5 7 7">$_</svg>)