HTML-Bare
view release on metacpan or search on metacpan
if( $level > 1 ) { # $#dex < 4 &&
if( $obj && $obj =~ /[<>&;]/ ) { $html .= '<![CDATA[' . $obj . ']]>'; }
else { $html .= $obj if( $obj =~ /\S/ ); }
}
}
elsif( $i =~ /^_/ ) {}
else { $html .= '<' . $i . '>' . $obj . '</' . $i . '>'; }
}
}
my $pad2 = $imm ? '' : $pad;
my $cr = $imm ? '' : "\n";
if( substr( $name, 0, 1 ) ne '_' ) {
if( $name ) {
if( $html ) {
$html = $pad . '<' . $name . $att . '>' . $cr . $html . $pad2 . '</' . $name . '>';
}
else {
$html = $pad . '<' . $name . $att . ' />';
}
}
return $html."\n" if( $level > 1 );
return $html;
}
return '';
}
sub obj2htmlcol {
my ( $objs, $name, $pad, $level, $pdex ) = @_;
my $less = "<span class='ang'><</span>";
my $more = "<span class='ang'>></span>";
my $tn0 = "<span class='tname'>";
my $tn1 = "</span>";
my $eq0 = "<span class='eq'>";
my $eq1 = "</span>";
my $qo0 = "<span class='qo'>";
my $qo1 = "</span>";
my $sp0 = "<span class='sp'>";
my $sp1 = "</span>";
my $cd0 = "";
my $cd1 = "";
$level = 0 if( !$level );
$pad = '' if( $level == 1 );
my $html = '';
my $att = '';
my $imm = 1;
return '' if( !$objs );
my @dex = sort {
my $oba = $objs->{ $a };
my $obb = $objs->{ $b };
my $posa = 0;
my $posb = 0;
$oba = $oba->[0] if( ref( $oba ) eq 'ARRAY' );
$obb = $obb->[0] if( ref( $obb ) eq 'ARRAY' );
if( ref( $oba ) eq 'HASH' ) { $posa = $oba->{'_pos'} || 0; }
if( ref( $obb ) eq 'HASH' ) { $posb = $obb->{'_pos'} || 0; }
return $posa <=> $posb;
} keys %$objs;
if( $objs->{'_cdata'} ) {
my $val = $objs->{'value'};
$val =~ s/^(\s*\n)+//;
$val =~ s/\s+$//;
$val =~ s/&/&/g;
$val =~ s/</</g;
$objs->{'value'} = $val;
#$html = "$less![CDATA[<div class='node'><div class='cdata'>$val</div></div>]]$more";
$cd0 = "$less![CDATA[<div class='node'><div class='cdata'>";
$cd1 = "</div></div>]]$more";
}
for my $i ( @dex ) {
my $obj = $objs->{ $i } || '';
my $type = ref( $obj );
if( $type eq 'ARRAY' ) {
$imm = 0;
my @dex2 = sort {
if( !$a ) { return 0; }
if( !$b ) { return 0; }
if( ref( $a ) eq 'HASH' && ref( $b ) eq 'HASH' ) {
my $posa = $a->{'_pos'};
my $posb = $b->{'_pos'};
if( !$posa ) { $posa = 0; }
if( !$posb ) { $posb = 0; }
return $posa <=> $posb;
}
return 0;
} @$obj;
for my $j ( @dex2 ) { $html .= obj2html( $j, $i, $pad.' ', $level+1, $#dex ); }
}
elsif( $type eq 'HASH' && $i !~ /^_/ ) {
if( $obj->{ '_att' } ) {
my $val = $obj->{ 'value' };
$val =~ s/</</g;
if( $val eq '' ) {
$att .= " <span class='aname'>$i</span>" if( $i !~ /^_/ );
}
else {
$att .= " <span class='aname'>$i</span>$eq0=$eq1$qo0\"$qo1$val$qo0\"$qo1" if( $i !~ /^_/ );
}
}
else {
$imm = 0;
$html .= obj2html( $obj , $i, $pad.' ', $level+1, $#dex );
}
}
else {
if( $i eq 'comment' ) { $html .= "$less!--" . $obj . "--$more" . "<br>\n"; }
elsif( $i eq 'value' ) {
if( $level > 1 ) {
if( $obj && $obj =~ /[<>&;]/ && ! $objs->{'_cdata'} ) { $html .= "$less![CDATA[$obj]]$more"; }
else { $html .= $obj if( $obj =~ /\S/ ); }
}
}
elsif( $i =~ /^_/ ) {}
else { $html .= "$less$tn0$i$tn1$more$obj$less/$tn0$i$tn1$more"; }
}
}
my $pad2 = $imm ? '' : $pad;
if( substr( $name, 0, 1 ) ne '_' ) {
if( $name ) {
if( $imm ) {
if( $html =~ /\S/ ) {
$html = "$sp0$pad$sp1$less$tn0$name$tn1$att$more$cd0$html$cd1$less/$tn0$name$tn1$more";
}
else {
$html = "$sp0$pad$sp1$less$tn0$name$tn1$att/$more";
}
}
else {
if( $html =~ /\S/ ) {
$html = "$sp0$pad$sp1$less$tn0$name$tn1$att$more<div class='node'>$html</div>$sp0$pad$sp1$less/$tn0$name$tn1$more";
}
else { $html = "$sp0$pad$sp1$less$tn0$name$tn1$att/$more"; }
}
}
$html .= "<br>" if( $objs->{'_br'} );
if( $objs->{'_note'} ) {
$html .= "<br>";
my $note = $objs->{'_note'}{'value'};
my @notes = split( /\|/, $note );
for( @notes ) {
$html .= "<div class='note'>$sp0$pad$sp1<span class='com'><!--</span> $_ <span class='com'>--></span></div>";
}
}
return $html."<br>\n" if( $level );
return $html;
}
return '';
}
# a.b.c@att=10
# a.b.@att=10
# a.b.@value=10 ( value of node )
# a.*.c
sub nav {
my ( $node, $navtext ) = @_;
my @parts = split( /\./, $navtext );
my $curnodes;
if( ref( $node ) eq 'HASH' ) {
$curnodes = [ $node ];
}
else {
$curnodes = $node;
}
my $nextnodes = [];
# make sure we haven't passed in references to arrays of nodes
my $fix = 0;
for my $curnode ( @$curnodes ) {
( run in 2.668 seconds using v1.01-cache-2.11-cpan-df04353d9ac )