File Coverage

blib/lib/ICC/Profile/sig_.pm
Criterion Covered Total %
statement 36 47 76.6
branch 3 14 21.4
condition 0 3 0.0
subroutine 10 12 83.3
pod 1 6 16.6
total 50 82 60.9


line stmt bran cond sub pod time code
1             package ICC::Profile::sig_;
2              
3 2     2   124294 use strict;
  2         13  
  2         51  
4 2     2   10 use Carp;
  2         2  
  2         122  
5              
6             our $VERSION = 0.12;
7              
8             # revised 2018-08-07
9             #
10             # Copyright © 2004-2019 by William B. Birkett
11              
12             # add development directory
13 2     2   461 use lib 'lib';
  2         696  
  2         9  
14              
15             # inherit from Shared
16 2     2   240 use parent qw(ICC::Shared);
  2         4  
  2         17  
17              
18             # create new sig_ tag object
19             # parameters: ([text_string])
20             # returns: (ref_to_object)
21             sub new {
22              
23             # get object class
24 1     1 0 747 my $class = shift();
25            
26             # create empty sig_ object
27 1         4 my $self = [
28             {}, # object header
29             ' ' # text string
30             ];
31              
32             # if parameter supplied
33 1 50       5 if (@_) {
34            
35             # save as 4-byte string
36 0         0 $self->[1] = pack('a4', shift());
37            
38             }
39              
40             # bless object
41 1         2 bless($self, $class);
42            
43             # return object reference
44 1         3 return($self);
45              
46             }
47              
48             # create sig_ tag object from ICC profile
49             # parameters: (ref_to_parent_object, file_handle, ref_to_tag_table_entry)
50             # returns: (ref_to_object)
51             sub new_fh {
52              
53             # get object class
54 1     1 0 696 my $class = shift();
55              
56             # create empty sig_ object
57 1         4 my $self = [
58             {}, # object header
59             '' # text string
60             ];
61              
62             # verify 3 parameters
63 1 50       4 (@_ == 3) or croak('wrong number of parameters');
64              
65             # read sig_ data from profile
66 1         3 _readICCsig_($self, @_);
67              
68             # bless object
69 1         2 bless($self, $class);
70              
71             # return object reference
72 1         9 return($self);
73              
74             }
75              
76             # writes sig_ tag object to ICC profile
77             # parameters: (ref_to_parent_object, file_handle, ref_to_tag_table_entry)
78             sub write_fh {
79              
80             # verify 4 parameters
81 1 50   1 0 1085 (@_ == 4) or croak('wrong number of parameters');
82              
83             # write sig_ data to profile
84 1         7 goto &_writeICCsig_;
85              
86             }
87              
88             # get tag size (for writing to profile)
89             # returns: (tag_size)
90             sub size {
91            
92             # get parameters
93 3     3 0 476 my ($self) = @_;
94            
95             # return size
96 3         22 return(12);
97            
98             }
99              
100             # get/set text string
101             # parameters: ([text_string])
102             # returns: (text_string)
103             sub text {
104              
105             # get object reference
106 0     0 0 0 my $self = shift();
107            
108             # if parameter supplied
109 0 0       0 if (@_) {
110            
111             # save it
112 0         0 $self->[1] = pack('a4', shift());
113            
114             }
115            
116             # return text string
117 0         0 return($self->[1]);
118              
119             }
120              
121             # print object contents to string
122             # format is an array structure
123             # parameter: ([format])
124             # returns: (string)
125             sub sdump {
126              
127             # get parameters
128 0     0 1 0 my ($self, $p) = @_;
129              
130             # local variables
131 0         0 my ($s, $fmt);
132              
133             # resolve parameter to an array reference
134 0 0       0 $p = defined($p) ? ref($p) eq 'ARRAY' ? $p : [$p] : [];
    0          
135              
136             # get format string
137 0 0 0     0 $fmt = defined($p->[0]) && ! ref($p->[0]) ? $p->[0] : 'undef';
138              
139             # set string to object ID
140 0         0 $s = sprintf("'%s' object, (0x%x)\n", ref($self), $self);
141              
142             # return
143 0         0 return($s);
144              
145             }
146              
147             # read sig_ tag from ICC profile
148             # parameters: (ref_to_object, ref_to_parent_object, file_handle, ref_to_tag_table_entry)
149             sub _readICCsig_ {
150            
151             # get parameters
152 1     1   3 my ($self, $parent, $fh, $tag) = @_;
153            
154             # local variables
155 1         2 my ($buf);
156            
157             # save tag signature
158 1         3 $self->[0]{'signature'} = $tag->[0];
159            
160             # seek start of tag
161 1         12 seek($fh, $tag->[1], 0);
162            
163             # read tag
164 1         10 read($fh, $buf, 12);
165            
166             # unpack text string
167 1         5 $self->[1] = unpack('x8 a4', $buf);
168            
169             }
170              
171             # write sig_ tag to ICC profile
172             # parameters: (ref_to_object, ref_to_parent_object, file_handle, ref_to_tag_table_entry)
173             sub _writeICCsig_ {
174              
175             # get parameters
176 1     1   3 my ($self, $parent, $fh, $tag) = @_;
177              
178             # seek start of tag
179 1         10 seek($fh, $tag->[1], 0);
180              
181             # write tag
182 1         32 print $fh pack('a4 x4 a4', 'sig ', $self->[1]);
183              
184             }
185              
186             1;