Re: completely rewind an HTML::TokeParser (PullParser)
apv <[email protected]>
| Newsgroups | gmane.comp.lang.perl.modules.lwp |
|---|---|
| Message-ID | <[email protected]> |
D'oh, sorry, just realized that proposed sub change is useless. So,
please ignore that part. Still looking for ideas to make the rewind
work though.
On Wednesday, December 21, 2005, at 11:23 AM, Ashley Pond V wrote:
> I want to parse out some HTML to count the text characters and then
> rewind to the beginning of the parser to step through tags and excerpt
> to an argument supplied character or percentage point in the *text*
> chars and then, keeping track of what tags are open, automatically add
> close tags.
>
> To be used in a TT2 filter like "truncate" but for HTML instead of
> plain text. So that...
>
> [% html = "<p><b>this <i>is something to truncate</i></b></p>" %]
> [% html | truncate_html(10) %]
>
> Would output
> <p><b>this <i>is so...</i></b></p>
> ^^^^^^12345^^^67890
>
> Anyway, the trouble I'm trying to address is rewinding the parser for
> the second walkthrough once I've counted text characters.
>
> I want to do this: 1 while $p->unget_token()
>
> But it doesn't work because HTML::PullParser->unget_token returns the
> parser object itself.
>
> To make a long story short, and it's not too late for that -- would
> changing the return be reasonable or would it break code?
>
> sub unget_token
> {
> my $self = shift;
> unshift @{$self->{pullparser_accum}}, @_;
> # $self; <-- change, don't return $self anymore
> }
>
> If not, does anyone have a smart idea for how to rewind it while
> respecting the interface (ie, not testing $self->{pullparser_accum})?
>
> Thanks!
> -Ashley
>