aboutsummaryrefslogtreecommitdiff
path: root/stest.pl
diff options
context:
space:
mode:
Diffstat (limited to 'stest.pl')
-rw-r--r--stest.pl78
1 files changed, 61 insertions, 17 deletions
diff --git a/stest.pl b/stest.pl
index a22c5ce..fc87b8b 100644
--- a/stest.pl
+++ b/stest.pl
@@ -11,6 +11,7 @@ use Text::Restructured;
use Text::Restructured::Writer::LibXML;
use XML::LibXML;
use XML::LibXSLT;
+use YAML::Syck;
my $stash={};
my $template=Template->new();
@@ -18,7 +19,7 @@ my $rest=Text::Restructured->new({},'WebCoso');
my $xml_parser=XML::LibXML->new();
my $xslt_proc=XML::LibXSLT->new();
-my $fc=File::Cache::Parsed->new();
+my $fc=File::Cache::Parsed->new(follow=>1);
$fc->add_parser(qr{\.tt2?$} =>
sub {
$template->context->template($_[0]);
@@ -36,35 +37,65 @@ $fc->add_parser(qr{\.xslt?$} =>
($xml_parser->parse_string($_[1],$_[0])) });
$fc->add_writer(qr{\.xml$} =>
sub { $_[1]->toFile($_[0]) });
+$fc->add_parser(qr{\.ya?ml$} =>
+ sub { Load($_[1]) });
+$fc->add_writer(qr{\.ya?ml$} =>
+ sub { DumpFile($_[0],$_[1]) });
+
sub expandTT {
my ($maker,$target,$deps,$matches)=@_;
- print "TT: $target <- @$deps, @$matches\n";
- open my $fh,'>',$target;
+ my $tmpl=$fc->get($deps->[-1]);
+ my $vars={ path=> $matches->[0],
+ language => $matches->[1],
+ %$stash,
+ };
+ if (@$deps>1) {
+ $vars->{tagged}=$fc->get($deps->[0]);
+ }
+ $fc->put($target,
+ $template->context->process($tmpl,
+ $vars));
}
sub parseRST {
my ($maker,$target,$deps,$matches)=@_;
- print "RST: $target <- @$deps, @$matches\n";
- open my $fh,'>',$target;
+ $fc->put($target,$fc->get($deps->[0]));
}
sub du2html {
my ($maker,$target,$deps,$matches)=@_;
- print "HTML: $target <- @$deps, @$matches\n";
- open my $fh,'>',$target;
+ my $du=$fc->get($deps->[-1]);
+ my $xslt=file($deps->[-1])->parent->file('du2html.xsl');
+ $xslt=$fc->get($xslt);
+ my $out=$xslt->transform($du,
+ XML::LibXSLT::xpath_to_string(
+ path => $matches->[0],
+ language => $matches->[1],
+ ));
+ $fc->put($target,$xslt->output_string($out));
}
+{my $xpath=XML::LibXML::XPathContext->new();
+$xpath->registerNs('x', 'http://www.w3.org/1999/xhtml');
sub getTags {
my ($maker,$target,$deps,$matches)=@_;
- print "tags: $target <- @$deps, @$matches\n";
- open my $fh,'>',$target;
+ my %tagged;
+ for my $doc_name (@$deps) {
+ my $doc=$fc->get($doc_name);
+ my @tags=map {$_->textContext}
+ $xpath->find(
+ q{/document/docinfo/field[field_name='tags']/field_body/*/list_item},
+ $doc);
+ push @{$tagged{$_}},$doc_name for @tags;
+ }
+ $fc->put($target,\%tagged);
+}
}
-
sub getChanges {
my ($maker,$target,$deps,$matches)=@_;
@@ -133,11 +164,14 @@ my %files=(files=>sub{m{^document\.}});
my $maker=Slay::Maker->new({
rules => [
- ['src/(**)/document.rest.txt',':',ifExists('src/$1/document.rest.tt'),'=',\&expandTT],
- ['src/(**)/document.du.xml',':',ifExists('src/$1/document.rest.txt'),'=',\&parseRST],
- ['deps/tags.xml',':',fromTo('src/',{%files,transform=>sub{my $s=shift;$s=~s{\..*$}{.du.xml};$s}}),'=',\&getTags],
- ['deps/changes.xml',':',keepEarliest(fromTo('src/',{%files})),'=',\&getChanges],
- ['dst/(**)/document.xhtml',':','deps/tags.xml','deps/changes.xml',ifExists('src/$1/document.du.xml'),'=',\&du2html],
+ ['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],
+ #['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],
],
options => {
auto_create_dirs => 1,
@@ -152,11 +186,21 @@ my @targets=fromTo('src/',
%files,
transform=>sub{
my $src=shift;
- $src=~s{\..*$}{.xhtml};
+ $src=~s{\.[^.]+\.[^.]+$}{.xhtml};
$src=~s{^src/}{dst/};
return $src;
},
- });
+ }),
+ fromTo('tags/',
+ {
+ %files,
+ transform=>sub{
+ my $src=shift;
+ $src=~s{\.[^.]+\.[^.]+$}{.xhtml};
+ $src=~s{^tags/}{dst/};
+ return $src;
+ },
+ });
print "targets: @targets\n";
$maker->make(@targets);