File Coverage

blib/lib/ICC/Profile/Generic.pm
Criterion Covered Total %
statement 29 42 69.0
branch 3 14 21.4
condition 1 6 16.6
subroutine 8 11 72.7
pod 1 6 16.6
total 42 79 53.1


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