File Coverage

blib/lib/JSON/Tokenize.pm
Criterion Covered Total %
statement 24 25 96.0
branch 3 4 75.0
condition 1 3 33.3
subroutine 5 5 100.0
pod 1 1 100.0
total 34 38 89.4


line stmt bran cond sub pod time code
1             package JSON::Tokenize;
2 2     2   16173 use warnings;
  2         4  
  2         68  
3 2     2   10 use strict;
  2         4  
  2         83  
4             require Exporter;
5             our @ISA = qw(Exporter);
6 2     2   10 use JSON::Parse;
  2         4  
  2         130  
7             our @EXPORT_OK = qw/
8             tokenize_child
9             tokenize_end
10             tokenize_json
11             tokenize_next
12             tokenize_start
13             tokenize_text
14             tokenize_type
15             /;
16             our %EXPORT_TAGS = ('all' => \@EXPORT_OK);
17 2     2   13 use Carp;
  2         4  
  2         464  
18             our $VERSION = '0.60_01';
19              
20             sub tokenize_text
21             {
22 4     4 1 11 my ($input, $token) = @_;
23 4 50 33     30 if (! $input || ! $token) {
24 0         0 croak "tokenize_text requires input string and JSON::Tokenize object";
25             }
26 4         15 my $start = tokenize_start ($token);
27 4         13 my $length = tokenize_end ($token) - $start;
28 4         5 my $text;
29 4 100       14 if (utf8::is_utf8 ($input)) {
30             # $start and $length refer to bytes, so we need to convert
31             # $input into bytes.
32 1         3 my $copy = $input;
33 1         4 utf8::encode ($copy);
34 1         4 $text = substr ($copy, $start, $length);
35             # Make the output utf8-flagged.
36 1         9 utf8::decode ($text);
37             }
38             else {
39 3         8 $text = substr ($input, $start, $length);
40             }
41 4         34 return $text;
42             }
43              
44             1;