Data::Format::HTML - Format Perl data structures into simple HTML


Data-Format-HTML documentation Contained in the Data-Format-HTML distribution.

Index


Code Index:

NAME

Top

Data::Format::HTML - Format Perl data structures into simple HTML

SYNOPSIS

Top

 use Data::Format::HTML;

 my $f = Data::Format::HTML->new;

 my %hash = (simple => 'hash');

 # Of course it's very unlikely that you won't deal ever with this
 # kind of structure, but HTML is able to hand it all anyway :)
 my $struct = {
 	foo 				=> 'bar',
 	1 					=> 2,
 	\'hello' 			=> 'goodbye',
 	array_ref			=> [qw/one two three/],
 	nested_hash			=> \%hash,
 	[qw/1 2/]			=> sub { die; },
 	even_more			=> { arr => {
 			1 => [2, 3, 4],
 			this_is_insane => { a => { b => { c => { d => { e => 'z'}}}}}
 		},					
 	},
 };

 $struct->{'Data::Format::HTML handles it all'} = $f;

 print $f->format();

And that will output the following insane, but possible, for the sake of showing, HTML:

In theory you can pass any kind of Perl data structure to format and you will get its data HTML-formatted.

TODO

Top

SEE MORE

Top

The author keeps the versioned code at GitHub at: http://github.com/damog/data-format-html/tree/master.

AUTHOR

Top

David Moreno Garza, <david@axiombox.com> - http://damog.net/

THANKS

Top

To Raquel (http://www.maggit.com.mx/), who makes me happy every single day of my life.

COPYRIGHT AND LICENSE

Top


Data-Format-HTML documentation Contained in the Data-Format-HTML distribution.

#!/usr/bin/perl

package Data::Format::HTML;

use strict;
use warnings;

our $VERSION = '0.5';

use Switch 'Perl6';
use Data::Dumper;
use HTML::Entities;

sub new {
	my($self, %opts) = shift;
	
	return bless {
		css => $opts{css} || '',
		var => undef,
		title => undef,
	}, $self;
}

sub format {
	my($self, $var, $title) = @_;

	my $output;

	if(defined $title) {
		$output .= qq{<h2>$title</h2>\n};
	} 

	$output .= $self->_format($var);

}

sub _format {
	my($self, $var) = @_;
		
	given (ref $var) {
		when 'SCALAR'		{ return $self->_format_scalar($var); }
		when 'ARRAY'		{ return $self->_format_array($var); }
		when 'HASH'			{ return $self->_format_hash($var); }
		when 'CODE'			{ return $self->_format_code($var); }
#		when 'REF'			{ return $self->_format_ref($var); }
		when ''				{ return $self->_format_scalar(\$var); }
		default			 	{ return $self->_format_scalar(\$var); }
	}
}

sub _format_code {
	my($self, $code) = @_;

	qq{<p class="code">}.scalar($code).qq{</p>\n};
}

sub _format_hash {
	my($self, $hash) = @_;
	
	my $o = qq{<table border="1" class="hashTable">\n};
	
	while(my($k, $v) = each %{$hash}) {
		$k = $self->_format($k) if ref $k;
		$v = $self->_format($v) if ref $v;
		$v = '' unless defined $v;
		
		$o .= "<tr><th>$k</th><td>$v</td></tr>\n";
	}
	
	$o .= qq{</table>\n\n};
}

sub _format_array {
	my($self, $arr) = @_;
	
	my $output = qq{<table border="1" class="arrayTable">\n};
	
	foreach my $v (@{$arr}) {
		$v = $self->_format($v) if ref $v;
		$output .= qq{<tr><td>$v</td></tr>\n};
	}
	
	$output .= "</table>\n</div>\n\n";
}

sub _format_scalar {
	my($self, $var) = @_;

	qq{<p class="scalar">${$var}</p>\n\n};
}

1;