@@ -12,18 +12,20 @@ my $after = substr $text, $pos; my $parent = $text->parentNode; - $parent->insertBefore('XML::LibXML::Text'->new($before), $text); + my $preceding + = $parent->insertBefore('XML::LibXML::Text'->new($before), $text); $parent->insertAfter('XML::LibXML::Text'->new($after), $text); my $tag = 'XML::LibXML::Element'->new($tag_name); $parent->replaceChild($tag, $text); $tag->{query} = $query; + return $preceding } my $xml = "The quick brown fox"; $xml .= " jumps over the lazy dog."; my $new_element = "canid"; -my @queried = ("lazy dog", "quick brown fox",); +my @queried = ("lazy dog", "quick brown fox", "the"); my $dom = 'XML::LibXML'->load_xml(string => $xml); @@ -48,8 +50,10 @@ my $subtext_length = sum(map length, @texts[ $from .. $to ]); my $last_pos = length($texts[$to]) - ($subtext_length - $found - length $query); - insert_tag($texts[$to], $last_pos, 'end', $query); - insert_tag($texts[$from], $found, 'start', $query); + my $preceding = insert_tag($texts[$to], $last_pos, 'end', $query); + + my $start_text = $from == $to ? $preceding : $texts[$from]; + insert_tag($start_text, $found, 'start', $query); last OUTER; }