File Coverage

blib/lib/Wikibase/Datatype/Print/Utils.pm
Criterion Covered Total %
statement 61 61 100.0
branch 10 10 100.0
condition n/a
subroutine 18 18 100.0
pod 10 10 100.0
total 99 99 100.0


line stmt bran cond sub pod time code
1             package Wikibase::Datatype::Print::Utils;
2              
3 36     36   6567355 use base qw(Exporter);
  36         192  
  36         4235  
4 36     36   286 use strict;
  36         106  
  36         767  
5 36     36   204 use warnings;
  36         87  
  36         1082  
6              
7 36     36   1114 use Error::Pure qw(err);
  36         24027  
  36         1433  
8 36     36   344 use Readonly;
  36         96  
  36         29690  
9              
10             Readonly::Array our @EXPORT_OK => qw(print_aliases print_common print_descriptions
11             print_forms print_glosses print_labels print_references print_senses
12             print_sitelinks print_statements);
13              
14             our $VERSION = 0.09;
15              
16             sub print_aliases {
17 4     4 1 39801 my ($obj, $opts_hr, $alias_cb) = @_;
18              
19             return print_common($obj, $opts_hr, 'aliases', $alias_cb,
20             'Aliases', sub {
21 23     23   45 grep { $_->language eq $opts_hr->{'lang'} } @_
  23         46  
22             },
23 4         38 );
24             }
25              
26             sub print_common {
27 61     61 1 22806 my ($obj, $opts_hr, $list_method, $print_cb, $title, $input_cb,
28             $flag_one_line) = @_;
29              
30 61         109 my @input;
31 61 100       178 if (defined $input_cb) {
32 16         28 @input = map { $input_cb->($_) } @{$obj->$list_method};
  40         365  
  16         104  
33             } else {
34 45         80 @input = @{$obj->$list_method};
  45         199  
35             }
36              
37 61         666 my @ret;
38             my @values;
39 61         155 my $separator = ' ';
40 61 100       168 if ($flag_one_line) {
41 10         24 $separator = ' ';
42             }
43 61         142 foreach my $list_item (@input) {
44 63         228 push @values, map { $separator.$_ } $print_cb->($list_item, $opts_hr);
  103         1113  
45             }
46 61 100       204 if (@values) {
47 43 100       115 if ($flag_one_line) {
48 9 100       66 if (@values > 1) {
49 1         5 err "Multiple values are printed to one line.";
50             }
51 8         37 push @ret, $title.':'.$values[0];
52             } else {
53 34         118 push @ret, (
54             $title.':',
55             @values,
56             );
57             }
58             }
59              
60 60         285 return @ret;
61             }
62              
63             sub print_descriptions {
64 4     4 1 19128 my ($obj, $opts_hr, $desc_cb) = @_;
65              
66             return print_common($obj, $opts_hr, 'descriptions', $desc_cb,
67             'Description', sub {
68 5     5   29 grep { $_->language eq $opts_hr->{'lang'} } @_
  5         22  
69 4         57 }, 1,
70             );
71             }
72              
73             sub print_forms {
74 2     2 1 13844 my ($obj, $opts_hr, $form_cb) = @_;
75              
76 2         10 return print_common($obj, $opts_hr, 'forms', $form_cb,
77             'Forms');
78             }
79              
80             sub print_glosses {
81 4     4 1 5359 my ($obj, $opts_hr, $glosse_cb) = @_;
82              
83 4         35 return print_common($obj, $opts_hr, 'glosses', $glosse_cb,
84             'Glosses');
85             }
86              
87             sub print_labels {
88 4     4 1 20789 my ($obj, $opts_hr, $label_cb) = @_;
89              
90             return print_common($obj, $opts_hr, 'labels', $label_cb,
91             'Label', sub {
92 6     6   21 grep { $_->language eq $opts_hr->{'lang'} } @_
  6         19  
93 4         51 }, 1,
94             );
95             }
96              
97             sub print_references {
98 20     20 1 5199 my ($obj, $opts_hr, $reference_cb) = @_;
99              
100 20         119 return print_common($obj, $opts_hr, 'references', $reference_cb,
101             'References');
102             }
103              
104             sub print_senses {
105 2     2 1 14163 my ($obj, $opts_hr, $sense_cb) = @_;
106              
107 2         7 return print_common($obj, $opts_hr, 'senses', $sense_cb,
108             'Senses');
109             }
110              
111             sub print_sitelinks {
112 2     2 1 18587 my ($obj, $opts_hr, $sitelink_cb) = @_;
113              
114 2         8 return print_common($obj, $opts_hr, 'sitelinks', $sitelink_cb,
115             'Sitelinks');
116             }
117              
118             sub print_statements {
119 12     12 1 2597 my ($obj, $opts_hr, $statement_cb) = @_;
120              
121 12         45 return print_common($obj, $opts_hr, 'statements', $statement_cb,
122             'Statements');
123             }
124              
125             1;
126              
127             __END__
128              
129             =pod
130              
131             =encoding utf8
132              
133             =head1 NAME
134              
135             Wikibase::Datatype::Print::Utils - Wikibase pretty print helper utils.
136              
137             =head1 SYNOPSIS
138              
139             use Wikibase::Datatype::Print::Utils qw(print_aliases print_common print_descriptions
140             print_forms print_glosses print_labels print_references print_senses
141             print_sitelinks print_statements);
142              
143             my @aliase_strings = print_aliases($obj, $opts_hr, $alias_cb);
144             my @common_strings = print_common($obj, $opts_hr, $list_method, $print_cb, $title, $input_cb, $flag_one_line);
145             my @desc_strings = print_descriptions($obj, $opts_hr, $desc_cb);
146             my @form_strings = print_forms($obj, $opts_hr, $form_cb);
147             my @glosse_strings = print_glosses($obj, $opts_hr, $glosse_cb);
148             my @label_strings = print_labels($obj, $opts_hr, $label_cb);
149             my @reference_strings = print_references($obj, $opts_hr, $reference_cb);
150             my @sense_strings = print_senses($obj, $opts_hr, $sense_cb);
151             my @sitelink_strings = print_sitelinks($obj, $opts_hr, $sitelink_cb);
152             my @statement_strings = print_statements($obj, $opts_hr, $statement_cb);
153              
154             =head1 SUBROUTINES
155              
156             =head2 C<print_aliases>
157              
158             my @aliase_strings = print_aliases($obj, $opts_hr, $alias_cb);
159              
160             Get aliase strings from data object.
161              
162             Returns array with pretty print strings.
163              
164             =head2 C<print_common>
165              
166             my @common_strings = print_common($obj, $opts_hr, $list_method, $print_cb, $title, $input_cb, $flag_one_line);
167              
168             Common function for get pretty print strings from object.
169              
170             Returns array with pretty print strings.
171              
172             =head2 C<print_descriptions>
173              
174             my @desc_strings = print_descriptions($obj, $opts_hr, $desc_cb);
175              
176             Get description strings from data object.
177              
178             Returns array with pretty print strings.
179              
180             =head2 C<print_forms>
181              
182             my @form_strings = print_forms($obj, $opts_hr, $form_cb);
183              
184             Get form strings from data object.
185              
186             Returns array with pretty print strings.
187              
188             =head2 C<print_glosses>
189              
190             my @glosse_strings = print_glosses($obj, $opts_hr, $glosse_cb);
191              
192             Get glosse strings from data object.
193              
194             Returns array with pretty print strings.
195              
196             =head2 C<print_labels>
197              
198             my @label_strings = print_labels($obj, $opts_hr, $label_cb);
199              
200             Get label strings from data object.
201              
202             Returns array with pretty print strings.
203              
204             =head2 C<print_references>
205              
206             my @reference_strings = print_references($obj, $opts_hr, $reference_cb);
207              
208             Get reference strings from data object.
209              
210             Returns array with pretty print strings.
211              
212             =head2 C<print_senses>
213              
214             my @sense_strings = print_senses($obj, $opts_hr, $sense_cb);
215              
216             Get sense strings from data object.
217              
218             Returns array with pretty print strings.
219              
220             =head2 C<print_sitelinks>
221              
222             my @sitelink_strings = print_sitelinks($obj, $opts_hr, $sitelink_cb);
223              
224             Get sitelink strings from data object.
225              
226             Returns array with pretty print strings.
227              
228             =head2 C<print_statements>
229              
230             my @statement_strings = print_statements($obj, $opts_hr, $statement_cb);
231              
232             Get statement strings from data object.
233              
234             Returns array with pretty print strings.
235              
236             =head1 ERRORS
237              
238             print_common():
239             Multiple values are printed to one line.
240              
241             print_descriptions():
242             From print_common():
243             Multiple values are printed to one line.
244              
245             print_labels():
246             From print_common():
247             Multiple values are printed to one line.
248              
249             =head1 EXAMPLE
250              
251             =for comment filename=utils_print_aliases.pl
252              
253             use strict;
254             use warnings;
255              
256             use Unicode::UTF8 qw(encode_utf8);
257             use Test::Shared::Fixture::Wikibase::Datatype::Item::Wikidata::Dog;
258             use Wikibase::Datatype::Print::Utils qw(print_aliases);
259             use Wikibase::Datatype::Print::Value::Monolingual;
260              
261             my $obj = Test::Shared::Fixture::Wikibase::Datatype::Item::Wikidata::Dog->new;
262             my @ret = print_aliases($obj, {'lang' => 'cs'},
263             \&Wikibase::Datatype::Print::Value::Monolingual::print);
264              
265             # Print.
266             print encode_utf8(join "\n", @ret);
267             print "\n";
268              
269             # Output:
270             # Aliases:
271             # pes domácí (cs)
272              
273             =head1 DEPENDENCIES
274              
275             L<Error::Pure>,
276             L<Exporter>,
277             L<Readonly>.
278              
279             =head1 REPOSITORY
280              
281             L<https://github.com/michal-josef-spacek/Wikibase-Datatype-Print>
282              
283             =head1 AUTHOR
284              
285             Michal Josef Špaček L<mailto:skim@cpan.org>
286              
287             L<http://skim.cz>
288              
289             =head1 LICENSE AND COPYRIGHT
290              
291             © 2020-2023 Michal Josef Špaček
292              
293             BSD 2-Clause License
294              
295             =head1 VERSION
296              
297             0.09
298              
299             =cut