diff options
Diffstat (limited to 'stest.pl')
-rw-r--r-- | stest.pl | 39 |
1 files changed, 27 insertions, 12 deletions
@@ -14,7 +14,14 @@ use XML::LibXSLT; use YAML::Syck; my $stash={}; -my $template=Template->new(); +my $template_provider=Template::Provider->new({ + INCLUDE_PATH=> 'common/', + ABSOLUTE=>1, + RELATIVE=>1, +}); +my $template=Template->new({ + LOAD_TEMPLATES=>[$template_provider], +}); my $rest=Text::Restructured->new({},'WebCoso'); my $xml_parser=XML::LibXML->new(); my $xslt_proc=XML::LibXSLT->new(); @@ -54,15 +61,18 @@ sub expandTT { if (@$deps>1) { $vars->{tagged}=$fc->get($deps->[0]); } + push @{$template_provider->include_path}, + file($deps->[-1])->parent; $fc->put($target, $template->context->process($tmpl, $vars)); + pop @{$template_provider->include_path}; } sub parseRST { my ($maker,$target,$deps,$matches)=@_; - $fc->put($target,$fc->get($deps->[0])); + $fc->put($target,$fc->get($deps->[-1])); } sub du2html { @@ -87,10 +97,11 @@ sub getTags { my %tagged; for my $doc_name (@$deps) { my $doc=$fc->get($doc_name); - my @tags=map {$_->textContext} - $xpath->find( + my @tags=map {$_->textContent} + $xpath->findnodes( q{/document/docinfo/field[field_name='tags']/field_body/*/list_item}, $doc); + chomp for @tags; push @{$tagged{$_}},$doc_name for @tags; } $fc->put($target,\%tagged); @@ -160,18 +171,22 @@ sub keepEarliest { return @ret; } -my %files=(files=>sub{m{^document\.}}); +my %files=(files=>sub{m{^document\.} and ($File::Next::dir !~ m{/\.svn/})}); my $maker=Slay::Maker->new({ rules => [ ['src/(**)/document.(*).rest.txt',':',ifExists('src/$1/document.$2.rest.tt'),'=',\&expandTT], ['src/(**)/document.(*).du.xml',':',ifExists('src/$1/document.$2.rest.txt'),'=',\&parseRST], - ['deps/tags.xml',':',fromTo('src/',{%files,transform=>sub{my $s=shift;$s=~s{\.[^.]+\.[^.]+$}{.du.xml};$s}}),'=',\&getTags], + ['src/()document.(*).rest.txt',':',ifExists('src/document.$2.rest.tt'),'=',\&expandTT], + ['src/()document.(*).du.xml',':',ifExists('src/document.$2.rest.txt'),'=',\&parseRST], + ['deps/tags.yml',':',fromTo('src/',{%files,transform=>sub{my $s=shift;$s=~s{\.[^.]+\.[^.]+$}{.du.xml};$s}}),'=',\&getTags], #['deps/changes.xml',':',keepEarliest(fromTo('src/',{%files})),'=',\&getChanges], ['tags/(**)/document.(*).rest.txt',':','deps/tags.yml',ifExists('tags/$1/document.$2.rest.tt'),'=',\&expandTT], ['tags/(**)/document.(*).du.xml',':','deps/tags.yml',ifExists('tags/$1/document.$2.rest.txt'),'=',\&parseRST], - ['dst/(**)/document.(*).xhtml',':','deps/tags.yml','deps/changes.xml',ifExists('src/$1/document.$2.du.xml'),ifExists('tags/$1/document.$2.du.xml'),'=',\&du2html], + ['dtags/(**)/document.(*).html',':','deps/tags.yml','tags/$1/document.$2.du.xml','=',\&du2html], + ['dst/(**)/document.(*).html',':','deps/tags.yml','src/$1/document.$2.du.xml','=',\&du2html], + ['dst/()document.(*).html',':','deps/tags.yml','src/document.$2.du.xml','=',\&du2html], ], options => { auto_create_dirs => 1, @@ -181,12 +196,12 @@ my $maker=Slay::Maker->new({ }, }); -my @targets=fromTo('src/', +my @targets=(fromTo('src/', { %files, transform=>sub{ my $src=shift; - $src=~s{\.[^.]+\.[^.]+$}{.xhtml}; + $src=~s{\.[^.]+\.[^.]+$}{.html}; $src=~s{^src/}{dst/}; return $src; }, @@ -196,11 +211,11 @@ my @targets=fromTo('src/', %files, transform=>sub{ my $src=shift; - $src=~s{\.[^.]+\.[^.]+$}{.xhtml}; - $src=~s{^tags/}{dst/}; + $src=~s{\.[^.]+\.[^.]+$}{.html}; + $src=~s{^tags/}{dtags/}; return $src; }, - }); + })); print "targets: @targets\n"; $maker->make(@targets); |