After all this time, and finally getting closer and closer to
releasing XML::TokeParser (one which has this functionality built-in),
I finally took another look at this thread and realized I too need to do something like that.
D'oh.
I mean, why would you get_tag and then test to see if it's a tag, or a process instruction,
since it can only be a tag.
I quickly fixed this and then I got reminded again that a XML::TokeParser::Token
doesn't have a constructor -- yuck.
Then I thought maybe I should force get_tag to return a proper token, but that would break backwards compatiblity,
and I sure don't wanna do that.
Then I think to myself I should forget all this nonsense, and have
- XML::TokeParser::Token::StartTag
- XML::TokeParser::Token::EndTag
- XML::TokeParser::Token::PI
- XML::TokeParser::Token::Comment
- XML::TokeParser::Token::Text
Might as well take full advantage of blessed references.
Something like
package XML::TokeParser::Token;
sub is_text { return 0; }
sub is_comment { return 0; }
sub is_pi { return 0; }
sub is_tag { return 0; }
sub is_start_tag { return 0; }
sub is_end_tag { return 0; }
sub raw { return $_[0]->[-1]; }
package XML::TokeParser::Token::Text;
# use vars::i '@ISA' => 'XML::TokeParser::Token'; # i'll probably put
+vars::i on cpan also
use vars '@ISA';
@ISA = 'XML::TokeParser::Token';
sub is_text { return 1; }
sub text { return $_[0]->[-2]; }
Thoughts/Comments?
I think maybe that's what i'll do, because
sub is_end_tag {
if( $_[0]->[0] eq 'E'
or ( @{$_[0]} == 2 && substr( $_[0]->[0], 0, 1 ) eq '/' )
){
if(defined $_[1]){
return 1 if $_[0]->[1] eq $_[1];
} else {
return 1;
}
}
return 0;
}
does not look so hot. *sigh*
MJD says you
can't just make shit up and expect the computer to know what you mean, retardo!
I run a Win32 PPM
repository for perl 5.6x+5.8x. I take requests.
** The Third rule of perl club is a statement of fact: pod is sexy.
|
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.