File Coverage

blib/lib/XML/Liberal/Remedy/UnclosedHTML.pm
Criterion Covered Total %
statement 6 14 42.8
branch 0 4 0.0
condition n/a
subroutine 2 3 66.6
pod 0 1 0.0
total 8 22 36.3


line stmt bran cond sub pod time code
1             package XML::Liberal::Remedy::UnclosedHTML;
2 2     2   1531 use strict;
  2         2  
  2         60  
3              
4 2     2   1898 use HTML::Tagset ();
  2         2599  
  2         434  
5              
6             my $ERROR_RX = do {
7             # Exclude void elements
8             my $pat = join '|', reverse sort grep { !$HTML::Tagset::emptyElement{$_} }
9             keys %HTML::Tagset::isKnown;
10             qr/^parser error : Opening and ending tag mismatch: ((?i:$pat)) line \d+ and (\S+)/
11             };
12              
13             sub apply {
14 0     0 0   my $class = shift;
15 0           my($driver, $error, $xml_ref) = @_;
16              
17 0 0         my ($unclosed, $detected) = $error->message =~ $ERROR_RX or return 0;
18              
19 0           my $index = $error->location;
20 0           my $tail = substr $$xml_ref, $index, length($$xml_ref) - $index, '';
21              
22 0 0         return 1 if $$xml_ref =~ s{( \z )}{$1$tail}xms;
23              
24 0           Carp::carp("Can't find incorrect close tag");
25 0           return 0;
26             }
27              
28             1;