use strict;
use warnings;
use HTML::Seamstress;
use File::Spec;
use Data::Dumper;
my $file = 'html/hello_world.html';
my $abs = File::Spec->rel2abs($file);
my $tree = HTML::Seamstress->new_from_file($file);
my $module_file = 'pkg/hello_world.pm';
my $module_pkg = 'html::hello_world';
my ($content_subs, $look_downs) = find_content_subs();
my $serial = serialize_html_parse($tree);
save_module();
exit;
# subs ------------------------------------------------------------------
sub save_module {
open D, ">$module_file" or die $!;
print D pkg();
}
sub serialize_html_parse {
my $tree = shift;
$Data::Dumper::Purity = 1;
our $serial = Data::Dumper->Dump([$tree], ['tree']);
$serial =~ s/HTML::Seamstress/$module_pkg/;
$serial;
}
sub find_content_subs {
my @content_sub;
my @klass_content = $tree->look_down(klass => 'content') ;
warn "found " . @klass_content . ' nodes ' ;
my @scalar = map {
my $id = $_->attr('id');
push @content_sub, make_content_sub($id);
$id
} @klass_content;
my $content_subs = join "\n", @content_sub;
my $look_downs = join ";\n",
map {
sprintf 'my $%s = $tree->look_down(id => q/%s/)', $_, $_
} @scalar;
($content_subs, $look_downs)
}
sub make_content_sub { sprintf <<'EOK', ($_[0]) x 4 }
sub %s {
my $class = shift;
my $content = shift;
if (defined($content)) {
$%s->content_handler(%s => $content);
return $tree
} else {
return $%s
}
}
EOK
sub pkg { sprintf <<'EOPKG', $module_pkg, $look_downs, $content_subs, $abs, $serial }
package %s;
use strict;
use warnings;
use base qw(HTML::Seamstress);
use vars qw($tree);
tree();
# content_accessors;
%s;
# content subs
%s
# the html file %s
sub tree {
# serial
%s
}
1;
EOPKG