use strict; use HTML::Parser; use Test::More tests => 3; my $text = ""; sub text { my $cdata = shift() ? "CDATA" : "TEXT"; my($offset, $line, $col, $t) = @_; $text .= "[$cdata:$offset:$line.$col:$t]"; } sub tag { $text .= shift; } my $p = HTML::Parser->new(unbroken_text => 1, text_h => [\&text, "is_cdata,offset,line,column,text"], start_h => [\&tag, "text"], end_h => [\&tag, "text"], ); $p->parse("foo "); $p->parse("bar "); $p->parse(""); $p->parse("bar\n"); $p->parse(""); $p->parse("xmp"); $p->parse("atend"); #diag $text; is($text, "[TEXT:0:1.0:foo bar ][TEXT:13:1.13:bar\n][CDATA:28:2.11:xmp]"); $text = ""; $p->eof; #diag $text; is($text, "[TEXT:37:2.20:atend]"); $p = HTML::Parser->new(unbroken_text => 1, text_h => [\&text, "is_cdata,offset,line,column,text"], ); $text = ""; $p->parse("foo"); $p->parse("parse(">bar\n"); $p->parse("fooparse("p>xmp"); $p->parse("parse(">bar"); $p->eof; #diag $text; is($text, "[TEXT:0:1.0:foobar\nfoo][CDATA:20:2.8:xmp][TEXT:29:2.17:bar]");