aboutsummaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2008-01-03 20:35:26 +0000
committerdakkar <dakkar@luxion>2008-01-03 20:35:26 +0000
commit2969fd3ef2ac1004ff4594198e84b31c60adb0c5 (patch)
treeef168964514cf84eca489683cbd00e4f58888fcb /script
parentrefactoring: xslt (diff)
downloadWebCoso-2969fd3ef2ac1004ff4594198e84b31c60adb0c5.tar.gz
WebCoso-2969fd3ef2ac1004ff4594198e84b31c60adb0c5.tar.bz2
WebCoso-2969fd3ef2ac1004ff4594198e84b31c60adb0c5.zip
refactoring: ReST
git-svn-id: svn://luxion/repos/WebCoso/trunk@328 fcb26f47-9200-0410-b104-b98ab5b095f3
Diffstat (limited to 'script')
-rw-r--r--script/webcoso.pl275
1 files changed, 7 insertions, 268 deletions
diff --git a/script/webcoso.pl b/script/webcoso.pl
index 657caa8..0e888d4 100644
--- a/script/webcoso.pl
+++ b/script/webcoso.pl
@@ -1,27 +1,18 @@
#!/usr/bin/perl
use strict;
use warnings;
-use Slay::Maker;
use File::Next;
use Path::Class;
-use File::Cache::Parsed;
-use Cwd 'abs_path';
-use Text::Restructured;
-use Text::Restructured::Writer::LibXML;
-use YAML::Syck;
use Getopt::Long;
use WebCoso::Common;
-use WebCoso::TT;
-use WebCoso::XSLT;
-my @TMPLPATH=('common/');
my $CLEAN=0;
{
my $res=GetOptions('src|s=s'=>\$WebCoso::Common::SRCPATH,
'dst|d=s'=>\$WebCoso::Common::DSTPATH,
'url|u=s'=>\$WebCoso::Common::DSTBASEURL,
- 'include|I=s'=>\@TMPLPATH,
+ 'include|I=s'=>\@WebCoso::Common::TMPLPATH,
'clean'=>\$CLEAN,
);
exit 1 unless $res;
@@ -30,124 +21,10 @@ $WebCoso::Common::DSTPATH=~s{/+$}{};
$WebCoso::Common::DSTBASEURL=~s{/*$}{/};
}
-my $rest=Text::Restructured->new(
- {
- D=>{
- 'file-insertion-enabled'=>0, # we use TT
- generator=>0,
- date=>0,
- 'time'=>0,
- 'source-link'=>0,
- 'section-subtitles'=>1,
- },
- },
- 'WebCoso');
-
-my $fc=File::Cache::Parsed->new(follow=>1);
-$fc->add_parser(qr{\.rest\.txt$} =>
- sub {
- my $dudom=$rest->Parse($_[1],$_[0]);
- return Text::Restructured::Writer::LibXML
- ->new->ProcessDOM($dudom);
- });
-$fc->add_parser(qr{\.ya?ml$} =>
- sub { Load($_[1]) });
-$fc->add_writer(qr{\.ya?ml$} =>
- sub { DumpFile($_[0],$_[1]) });
-
-my $template=WebCoso::TT->new(TMPLPATH=>\@TMPLPATH,fc=>$fc);
-my $xslt=WebCoso::XSLT->new(fc=>$fc);
-
-sub parseRST {
- my ($maker,$target,$deps,$matches)=@_;
-
- $fc->put($target,$fc->get($deps->[-1]));
-}
-
-sub getTags {
- my ($maker,$target,$deps,$matches)=@_;
-
- $fc->put($target,WebCoso::Common::getTags($fc,@$deps));
-}
-
-sub getChanges {
- my ($maker,$target,$deps,$matches)=@_;
-
- warn "changes: $target <- @$deps, @$matches\n";
- open my $fh,'>',$target;
-}
-
-sub ifExists {
- my ($src)=@_;
- return sub {
- my ($maker,$target,$matches)=@_;
- my $dep=Slay::MakerRule::var_expand_dep($src,$target,$matches);
- return if -e $target and ! -e $dep;
- return $dep;
- }
-}
-
-sub fromTo {
- my ($base,$opts)=@_;
- my $iter=File::Next::files(
- {
- file_filter=>$opts->{files},
- descend_filter=>$opts->{dirs},
- },
- $base);
- my (@ret,$file);
- if (defined $opts->{transform}) {
- push @ret,$opts->{transform}->($file) while $file=$iter->();
- }
- else {
- push @ret,$file while $file=$iter->();
- }
- return @ret;
-}
-
-{
-my %order=(
- 'rest.tt'=>0,
- 'rest.txt'=>1,
- 'du.xml'=>2,
-);
-sub earliest {
- my ($a,$b)=@_;
- return $a unless $b;
- return $order{$a} < $order{$b}
- ? $a
- : $b;
-}
-
-sub keepEarliest {
- my %dirs;
- for my $f (@_) {
- my $c=file($f);
- my $lang=WebCoso::Common::langOf($c->basename);
- my $type=WebCoso::Common::typeOf($c->basename);
- if (!defined $lang or !defined $type) {
- die "Weird document name <$f>";
- }
- $dirs{$c->parent}->{$lang}=earliest($type,$dirs{$c->parent}->{$lang});
- }
- my @ret;
- while (my ($d,$langs)=each %dirs) {
- while (my ($lang,$type)=each %$langs) {
- push @ret,file($d,"document.$lang.$type")->stringify;
- }
- }
- return @ret;
-}
-}
-
-my %docfiles=(
- files=>sub{m{^document\.}},
- dirs=>sub{!m{^(tags|_webcoso|\.svn)$}});
-
if ($CLEAN) {
my %to_keep;
- @to_keep{keepEarliest(fromTo($WebCoso::Common::SRCPATH,{%docfiles,dirs=>sub{!m{^(_webcoso|\.svn)$}}}))}=();
- @to_keep{fromTo($WebCoso::Common::SRCPATH,{files=>sub{!m{^document\.}},dirs=>sub{!m{^(_webcoso|\.svn)$}}})}=();
+ @to_keep{WebCoso::Common::keepEarliest(WebCoso::Common::fromTo($WebCoso::Common::SRCPATH,{%WebCoso::Common::docfiles,dirs=>sub{!m{^(_webcoso|\.svn)$}}}))}=();
+ @to_keep{WebCoso::Common::fromTo($WebCoso::Common::SRCPATH,{files=>sub{!m{^document\.}},dirs=>sub{!m{^(_webcoso|\.svn)$}}})}=();
my $iter=File::Next::files({descend_filter=>sub{!m{^\.svn$}}},$WebCoso::Common::SRCPATH,$WebCoso::Common::DSTPATH);
while (defined (my $file=$iter->())) {
@@ -158,145 +35,7 @@ if ($CLEAN) {
dir($WebCoso::Common::SRCPATH,'_webcoso')->rmtree;
exit 0;
}
-
-my %maker_opts=(
- options => {
- auto_create_dirs => 1,
- #debug => 1,
- },
-);
-
-my @passes=(
- {maker=>Slay::Maker->new({
- rules => [
-
- # tags : must come first, otherwise tha "tags" directory will
- # be taken as a normal document directory
-
- ["$WebCoso::Common::SRCPATH/tags/(**)/document.(*).rest.txt",
- ':',
- "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
- ifExists("$WebCoso::Common::SRCPATH/tags/\$1/document.\$2.rest.tt"),
- '=',
- $template->expandTT()],
- ["$WebCoso::Common::SRCPATH/tags/(**)/document.(*).du.xml",
- ':',
- "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
- ifExists("$WebCoso::Common::SRCPATH/tags/\$1/document.\$2.rest.txt"),
- '=',
- \&parseRST],
-
- # normal documents, in subdirs
-
- ["$WebCoso::Common::SRCPATH/(**)/document.(*).rest.txt",
- ':',
- ifExists("$WebCoso::Common::SRCPATH/\$1/document.\$2.rest.tt"),
- '=',
- $template->expandTT()],
- ["$WebCoso::Common::SRCPATH/(**)/document.(*).du.xml",
- ':',
- ifExists("$WebCoso::Common::SRCPATH/\$1/document.\$2.rest.txt"),
- '=',
- \&parseRST],
-
- # normal documents, in top dir
-
- ["$WebCoso::Common::SRCPATH/()document.(*).rest.txt",
- ':',
- ifExists("$WebCoso::Common::SRCPATH/document.\$2.rest.tt"),
- '=',
- $template->expandTT()],
- ["$WebCoso::Common::SRCPATH/()document.(*).du.xml",
- ':',
- ifExists("$WebCoso::Common::SRCPATH/document.\$2.rest.txt"),
- '=',
- \&parseRST],
-
- # tags from normal documents (tag documents can't be tagged!)
-
- ["$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
- ':',
- fromTo($WebCoso::Common::SRCPATH,
- {
- %docfiles,
- transform=>sub{WebCoso::Common::typedAs($_[0],'du.xml')}
- }),
- '=',
- \&getTags],
-
- # changes (currently unimplemented)
-
- ["$WebCoso::Common::SRCPATH/_webcoso/changes.xml",
- ':',
- keepEarliest(fromTo($WebCoso::Common::SRCPATH,{%docfiles})),
- '=',
- \&getChanges],
- ],
- %maker_opts,
- }),
- targets=>[
- fromTo("$WebCoso::Common::SRCPATH/",
- {
- %docfiles,
- transform=>sub{WebCoso::Common::typedAs($_[0],'du.xml')},
- }),
- fromTo("$WebCoso::Common::SRCPATH/tags/",
- {
- %docfiles,
- transform=>sub{WebCoso::Common::typedAs($_[0],'du.xml')},
- })]},
- {maker=>Slay::Maker->new({
- rules => [
-
- # tags : must come first, otherwise tha "tags" directory will
- # be taken as a normal document directory
-
- ["$WebCoso::Common::DSTPATH/tags/(**)/document.(*).html",
- ':',
- "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
- "$WebCoso::Common::SRCPATH/tags/\$1/document.\$2.du.xml",
- '=',
- $xslt->du2html()],
-
- # normal documents, in subdirs
-
- ["$WebCoso::Common::DSTPATH/(**)/document.(*).html",
- ':',
- "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
- "$WebCoso::Common::SRCPATH/\$1/document.\$2.du.xml",
- '=',
- $xslt->du2html()],
-
- # normal documents, in top dir
-
- ["$WebCoso::Common::DSTPATH/()document.(*).html",
- ':',
- "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
- "$WebCoso::Common::SRCPATH/document.\$2.du.xml",
- '=',
- $xslt->du2html()],
- ],
- %maker_opts,
- }),
- targets=>[fromTo("$WebCoso::Common::SRCPATH/",
- {
- %docfiles,
- transform=>sub{
- (my $file=WebCoso::Common::typedAs($_[0],'html'))
- =~s{^\Q$WebCoso::Common::SRCPATH\E/}{$WebCoso::Common::DSTPATH/};
- return $file;
- },
- }),
- fromTo("$WebCoso::Common::SRCPATH/tags/",
- {
- %docfiles,
- transform=>sub{
- (my $file=WebCoso::Common::typedAs($_[0],'html'))
- =~s{^\Q$WebCoso::Common::SRCPATH\E/tags/}{$WebCoso::Common::DSTPATH/tags/};
- return $file;
- },
- })]},
-);
-
-$_->{maker}->make(@{$_->{targets}}) for @passes;
-
+else {
+ require WebCoso::Maker;
+ WebCoso::Maker::make();
+}