#!/usr/bin/perl -w use strict; use XML::Twig; use Text::Template; use Getopt::Std; use File::Path; getopts('vt:d:'); our($opt_t, $opt_v, $opt_d); my $xmlfile = shift || die "need an XML file..."; my $template = $opt_t || 'slide_template.html'; my $html_dir = $opt_d || 'slides'; my $t = XML::Twig->new(); $t->parsefile($xmlfile); my $r = $t->root; ## Parse out slideshow info print "Parsing $xmlfile ...\n" if $opt_v; my %info; my $info = $r->first_child('info'); if (defined $info) { for my $item ($info->children) { $info{$item->gi} = $item->text; } } my %style; my $style = $r->first_child('style'); if (defined $style) { for my $item ($style->children) { $style{$item->gi} = $item->text; } } ## Get slides my @slides; for my $slide ($r->children('slide')) { my %slide; $slide{title} = $slide->first_child_text('title'); my @content; for my $item ($slide->children) { next if ($item->gi eq 'title'); push(@content, [$item->gi, $item->text, $item->att('class'), $item->att('src'), $item->att('swf') ] ); } $slide{content} = \@content; push(@slides, \%slide); } ## Generate files mkpath($html_dir); my $pc = 1; for my $item (@slides) { my $filename = "$html_dir/slide_$pc\.html"; my $prevfile = ($pc>1)?"slide_".($pc-1).".html":''; my $nextfile = ($pc<@slides)?"slide_".($pc+1).".html":''; my $template = Text::Template->new(TYPE => 'FILE', SOURCE => $template, ); my $temp_h = { info => \%info, style => \%style, title => $$item{title}, html => \$$item{content}, pagenum => $pc, filename => $filename, prevfile => $prevfile, nextfile => $nextfile, }; my $content = $template->fill_in(HASH => $temp_h); print "...writing $filename\n"; open(OUT,">$filename") || die "can't open $filename: $!"; print OUT $content; close(OUT); $pc++; } link("$html_dir/slide_1.html", "$html_dir/index.html"); print "Done.\n" if $opt_v;