HTML-DOM
view release on metacpan or search on metacpan
lib/HTML/DOM/_TreeBuilder.pm view on Meta::CPAN
if ( $ptag eq 'table' ) {
print $indent,
" * Phrasal \U$tag\E right under TABLE makes implicit TR and TD\n"
if DEBUG > 1;
$self->insert_element( 'tr', 1 );
$pos = $self->insert_element( 'td', 1 )
; # yes, needs updating
}
elsif ( $ptag eq 'tr' ) {
print $indent,
" * Phrasal \U$tag\E right under TR makes an implicit TD\n"
if DEBUG > 1;
$pos = $self->insert_element( 'td', 1 )
; # yes, needs updating
}
$ptag = $pos->{'_tag'}; # yes, needs updating
}
# end of table-implication block.
# Now maybe do a little dance to enforce P-strictness.
# This seems like it should be integrated with the big
# "ALL HOPE..." block, further below, but that doesn't
# seem feasable.
if ( $self->{'_p_strict'}
and $HTML::DOM::_TreeBuilder::isKnown{$tag}
and not $HTML::Tagset::is_Possible_Strict_P_Content{$tag} )
{
my $here = $pos;
my $here_tag = $ptag;
while (1) {
if ( $here_tag eq 'p' ) {
print $indent, " * Inserting $tag closes strict P.\n"
if DEBUG > 1;
$self->end( \q{p} );
# NB: same as \'q', but less confusing to emacs cperl-mode
last;
}
#print("Lasting from $here_tag\n"),
last
if $HTML::DOM::_TreeBuilder::isKnown{$here_tag}
and
not $HTML::Tagset::is_Possible_Strict_P_Content{
$here_tag};
# Don't keep looking up the tree if we see something that can't
# be strict-P content.
$here_tag
= ( $here = $here->{'_parent'} || last )->{'_tag'};
} # end while
$ptag = ( $pos = $self->{'_pos'} || $self )
->{'_tag'}; # better update!
}
# end of strict-p block.
}
# And now, get busy...
#----------------------------------------------------------------------
if ( !$self->{'_implicit_tags'} ) { # bimskalabim
# do nothing
print $indent, " * _implicit_tags is off. doing nothing\n"
if DEBUG > 1;
#----------------------------------------------------------------------
}
elsif ( $HTML::DOM::_TreeBuilder::isHeadOrBodyElement{$tag} ) {
if ( $pos->is_inside('body') ) { # all is well
print $indent,
" * ambilocal element \U$tag\E is fine under BODY.\n"
if DEBUG > 1;
}
elsif ( $pos->is_inside('head') ) {
print $indent,
" * ambilocal element \U$tag\E is fine under HEAD.\n"
if DEBUG > 1;
}
else {
# In neither head nor body! mmmmm... put under head?
if ( $ptag eq 'html' ) { # expected case
# TODO?? : would there ever be a case where _head would be
# absent from a tree that would ever be accessed at this
# point?
die "Where'd my head go?" unless ref $self->{'_head'};
if ( $self->{'_head'}{'_implicit'} ) {
print $indent,
" * ambilocal element \U$tag\E makes an implicit HEAD.\n"
if DEBUG > 1;
# or rather, points us at it.
$self->{'_pos'}
= $self->{'_head'}; # to insert under...
}
else {
$self->warning(
"Ambilocal element <$tag> not under HEAD or BODY!?"
);
# Put it under HEAD by default, I guess
$self->{'_pos'}
= $self->{'_head'}; # to insert under...
}
}
else {
# Neither under head nor body, nor right under html... pass thru?
$self->warning(
"Ambilocal element <$tag> neither under head nor body, nor right under html!?"
);
}
}
#----------------------------------------------------------------------
}
elsif ( $HTML::DOM::_TreeBuilder::isBodyElement{$tag} ) {
( run in 1.118 second using v1.01-cache-2.11-cpan-39bf76dae61 )