File Coverage

blib/lib/Term/DataMatrix.pm
Criterion Covered Total %
statement 46 47 97.8
branch 3 4 75.0
condition 10 13 76.9
subroutine 8 8 100.0
pod 2 2 100.0
total 69 74 93.2


line stmt bran cond sub pod time code
1             package Term::DataMatrix 1.000000;
2 9     9   5797 use 5.012;
  9         33  
3 9     9   48 use warnings;
  9         17  
  9         408  
4              
5             require Barcode::DataMatrix;
6 9     9   64 use Carp qw/ croak /;
  9         19  
  9         589  
7 9         34 use fields qw/
8             black
9             black_text
10             text_dmcode
11             white
12             white_text
13 9     9   4205 /;
  9         14253  
14 9     9   4778 use Term::ANSIColor qw/ colored /;
  9         42737  
  9         7389  
15              
16             =head1 NAME
17              
18             Term::DataMatrix - Generate terminal-based Data Matrix 2D barcodes
19              
20             =head1 SYNOPSIS
21              
22             require Term::DataMatrix;
23              
24             print Term::DataMatrix->new->plot('Some text here.') . "\n";
25              
26             =head1 DESCRIPTION
27              
28             Term::DataMatrix generates Data Matrix 2D barcodes on the terminal.
29              
30             =head1 METHODS
31              
32             =head2 C
33              
34             my $dmcode = Term::DataMatrix->new( %options );
35              
36             Instantiate a new L object. Key/value pair arguments may be
37             provided to set up the initial state. The following options are recognized:
38              
39             KEY DEFAULT
40             ----------- --------------------
41             black 'on_black'
42             black_text Term::ANSIColor::colored(' ', $black)
43             text_dmcode Barcode::DataMatrix->new
44             white 'on_white'
45             white_text Term::ANSIColor::colored(' ', $white)
46              
47             =over
48              
49             =item black, white
50              
51             What color to make the foreground (black) and the background (white) of the generated
52             barcode. See L for recognized colors.
53              
54             =item black_text, white_text
55              
56             What colored text to use for each of the foreground (black) and background
57             (white) pixels of the generated barcode. Can be used to stretch the barcode
58             width-wise.
59              
60             =item text_dmcode
61              
62             What object to use as the barcode's data generator. See L.
63              
64             =back
65              
66             =cut
67              
68             sub new {
69 16     16 1 8642 my ($class, %args) = @_;
70 16         68 my Term::DataMatrix $self = fields::new($class);
71 16         32792 %{$self} = (%{$self}, %args);
  16         49  
  16         50  
72              
73             # Barcode::DataMatrix doesn't take any constructor params
74 15   66     272 $self->{text_dmcode} //= Barcode::DataMatrix->new;
75 15   100     13232 $self->{white_text} //= colored(' ', $self->{white} // 'on_white');
      66        
76 15   100     647 $self->{black_text} //= colored(' ', $self->{black} // 'on_black');
      66        
77 15         440 return $self;
78             }
79              
80             =head2 C
81              
82             $barcode = $dmcode->plot('blah blah');
83              
84             Create a Data Matrix barcode text for terminal.
85              
86             =cut
87              
88             sub plot {
89 10     10 1 54 my ($self, $text) = @_;
90 10 50       30 unless ($text) {
91 0         0 croak('Not enough arguments for plot()');
92             }
93              
94 10         39 my $arref = $self->{text_dmcode}->barcode($text);
95 10         61784 _add_blank($arref);
96             return join "\n", map { join '', map {
97             $_ ? $self->{black_text} : $self->{white_text}
98 10 100       17 } @{$_} } @{$arref};
  170         257  
  2900         5637  
  170         255  
  10         33  
99             }
100              
101             sub _add_blank {
102 10     10   24 my ($ref) = @_;
103             # Add a column of all 0 to every row
104 10         20 foreach my $row (@{$ref}) {
  10         27  
105 150         209 unshift @{$row}, 0;
  150         267  
106 150         180 push @{$row}, 0;
  150         286  
107             }
108             # Add a row of all 0 to the beginning
109 10         79 unshift @{$ref}, [(0) x scalar @{$ref->[0]}];
  10         32  
  10         43  
110             # Add a row of all 0 to the end
111 10         21 push @{$ref}, [(0) x scalar @{$ref->[0]}];
  10         21  
  10         27  
112 10         22 return;
113             }
114              
115             =head1 AUTHOR
116              
117             Dan Church Eh3xx [a] gmx comE
118              
119             =head1 SEE ALSO
120              
121             L
122             L
123              
124             =head1 LICENSE
125              
126             This library is free software; you can redistribute it and/or modify it under
127             the same terms as Perl itself.
128              
129             =head1 AVAILABILITY
130              
131             The latest version of this library is likely to be available from CPAN as well
132             as:
133              
134             L
135              
136             =cut
137              
138             1;