summaryrefslogtreecommitdiff
path: root/lib/Data/QRCode.pm
blob: 680e2511267f94733934042cf1d8df1038b24490 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package Data::QRCode; 
use strict;
use warnings;
# ABSTRACT: qrcodes in C 
# VERSION 
use Data::QRCode::XS;
 
my %levels = (
    => Data::QRCode::XS::ECLEVEL_L(),
    => Data::QRCode::XS::ECLEVEL_M(),
    => Data::QRCode::XS::ECLEVEL_Q(),
    => Data::QRCode::XS::ECLEVEL_H(),
);
 
sub new {
    my ($class$data$level$version) = @_;
    $version ||= 0;
    $level = $levels{uc $level} || Data::QRCode::XS::ECLEVEL_M();
    return Data::QRCode::XS::_build($class,$data,$level,$version);
}
 
sub width { Data::QRCode::XS::width(@_) }
 
sub version { Data::QRCode::XS::version(@_) }
 
sub data_at {
    my ($self,$x,$y) = @_;
    my $width = $self->width;
    if ($x < 0 or $x >= $width or $y < 0 or $y >= $width) {
        return;
    }
    my $value = Data::QRCode::XS::_data_at($self,$x,$y);
 
    return {
        color        => $value & 0x01,
        in_data      => $value & 0x02,
        in_format    => $value & 0x04,
        in_version   => $value & 0x08,
        in_timing    => $value & 0x10,
        in_alignment => $value & 0x20,
        in_finder    => $value & 0x40,
        in_misc      => $value & 0x80,
    };
}
 
1;