diff options
author | dakkar <dakkar@thenautilus.net> | 2010-11-23 20:59:28 +0000 |
---|---|---|
committer | dakkar <dakkar@thenautilus.net> | 2010-11-23 20:59:28 +0000 |
commit | 2844aba0f859497e13d0168a0e0171edcfdeabca (patch) | |
tree | 166c45d6020299eb4bfb8a244dc7c79d10265138 /lib/TextPrinter.pm | |
parent | first proof of concept (diff) | |
download | qr-builder-2844aba0f859497e13d0168a0e0171edcfdeabca.tar.gz qr-builder-2844aba0f859497e13d0168a0e0171edcfdeabca.tar.bz2 qr-builder-2844aba0f859497e13d0168a0e0171edcfdeabca.zip |
refactor
Diffstat (limited to 'lib/TextPrinter.pm')
-rw-r--r-- | lib/TextPrinter.pm | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/lib/TextPrinter.pm b/lib/TextPrinter.pm new file mode 100644 index 0000000..d786b86 --- /dev/null +++ b/lib/TextPrinter.pm @@ -0,0 +1,79 @@ +package TextPrinter; +use strict; +use warnings; +use Term::ANSIColor; + +{ +my %colours = ( + 'black' => [ + map { color($_,'on_black') } + 'dark yellow','dark green','dark blue' + ], + 'white' => [ + map { color($_,'on_white') } + 'green', 'blue', 'yellow' + ], +); + +my $strip_length = 0; + +sub rotate { + my ($arr) = @_; + + my $el = shift @$arr; + push @$arr, $el; + return; +} + +sub next_colour { + my ($which) = @_; + + if ($strip_length < 1) { + $strip_length = 1+int(rand(7)); + rotate($colours{$which}); + } + --$strip_length; + return $colours{$which}->[0]; +} +} + + +sub draw_cell { + print next_colour(shift eq '*' ? 'black' : 'white'), + chr(65+int(rand(26))); +} +{ +my $white = color('black','on_white'); +my $reset = color('reset'); +sub draw_row { + my ($row,$scale)=@_; + $scale||=1; + print $white,' 'x(3*$scale); + for my $cell (@$row) { + draw_cell($cell) for 1..$scale; + } + print $white,' 'x(3*$scale); + print $reset,"\n"; +} +sub draw_empty_row { + my ($row,$scale)=@_; + $scale||=1; + + print $white,' 'x((6+@$row)*$scale),$reset,"\n" for 1..(3*$scale); +} +} + +sub draw_whole { + my ($arr,$scale)=@_; + $scale||=1; + + draw_empty_row($arr->[0],$scale); + + for my $row (@$arr) { + draw_row($row,$scale) for 1..$scale; + } + + draw_empty_row($arr->[0],$scale); +} + +1; |