aboutsummaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2008-01-03 20:05:51 +0000
committerdakkar <dakkar@luxion>2008-01-03 20:05:51 +0000
commit409b0fae3968de8b7ec3adfc4840ddad536757ff (patch)
tree182eb0b71053ff9d4bb665bd7fc0173cfe9672c2 /script
parentMakeMaker! (diff)
downloadWebCoso-409b0fae3968de8b7ec3adfc4840ddad536757ff.tar.gz
WebCoso-409b0fae3968de8b7ec3adfc4840ddad536757ff.tar.bz2
WebCoso-409b0fae3968de8b7ec3adfc4840ddad536757ff.zip
refactoring: TT
git-svn-id: svn://luxion/repos/WebCoso/trunk@326 fcb26f47-9200-0410-b104-b98ab5b095f3
Diffstat (limited to 'script')
-rw-r--r--script/webcoso.pl203
1 files changed, 63 insertions, 140 deletions
diff --git a/script/webcoso.pl b/script/webcoso.pl
index 3552974..4803ac0 100644
--- a/script/webcoso.pl
+++ b/script/webcoso.pl
@@ -13,36 +13,25 @@ use XML::LibXML;
use XML::LibXSLT;
use YAML::Syck;
use Getopt::Long;
+use WebCoso::Common;
+use WebCoso::TT;
-my $SRCPATH='src';
-my $DSTPATH='dst';
-my $DSTBASEURL='/';
my @TMPLPATH=('common/');
my $CLEAN=0;
{
-my $res=GetOptions('src|s=s'=>\$SRCPATH,
- 'dst|d=s'=>\$DSTPATH,
- 'url|u=s'=>\$DSTBASEURL,
+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,
'clean'=>\$CLEAN,
);
exit 1 unless $res;
-$SRCPATH=~s{/+$}{};
-$DSTPATH=~s{/+$}{};
-$DSTBASEURL=~s{/*$}{/};
+$WebCoso::Common::SRCPATH=~s{/+$}{};
+$WebCoso::Common::DSTPATH=~s{/+$}{};
+$WebCoso::Common::DSTBASEURL=~s{/*$}{/};
}
-my $stash={};
-my $template_provider=Template::Provider->new({
- INCLUDE_PATH=> \@TMPLPATH,
- ABSOLUTE=>1,
- RELATIVE=>1,
-});
-my $template=Template->new({
- LOAD_TEMPLATES=>[$template_provider],
-});
-
my $rest=Text::Restructured->new(
{
D=>{
@@ -62,10 +51,6 @@ my $xpath=XML::LibXML::XPathContext->new();
$xpath->registerNs('x', 'http://www.w3.org/1999/xhtml');
my $fc=File::Cache::Parsed->new(follow=>1);
-$fc->add_parser(qr{\.tt2?$} =>
- sub {
- $template->context->template($_[0]);
- });
$fc->add_parser(qr{\.rest\.txt$} =>
sub {
my $dudom=$rest->Parse($_[1],$_[0]);
@@ -84,18 +69,20 @@ $fc->add_parser(qr{\.ya?ml$} =>
$fc->add_writer(qr{\.ya?ml$} =>
sub { DumpFile($_[0],$_[1]) });
+my $template=WebCoso::TT->new(TMPLPATH=>\@TMPLPATH,fc=>$fc);
+
sub getTitleFor {
my ($lang,$path,$name)=@_;
my $doc_name=$name;
$doc_name=~s{\.html$}{.du.xml};
$doc_name=~s{/$}{/document.$lang.du.xml};
- if ($doc_name=~m{^\Q$DSTBASEURL\E}) {
- $doc_name=~s{^\Q$DSTBASEURL\E}{$SRCPATH/};
+ if ($doc_name=~m{^\Q$WebCoso::Common::DSTBASEURL\E}) {
+ $doc_name=~s{^\Q$WebCoso::Common::DSTBASEURL\E}{$WebCoso::Common::SRCPATH/};
}
else {
- $doc_name=file($doc_name)->absolute(file($path)->parent)->relative($SRCPATH); # absolutize it
- $doc_name="$SRCPATH/$doc_name";
+ $doc_name=file($doc_name)->absolute(file($path)->parent)->relative($WebCoso::Common::SRCPATH); # absolutize it
+ $doc_name="$WebCoso::Common::SRCPATH/$doc_name";
}
warn "getTitleFor($lang,$path,$name)->$doc_name\n";
@@ -130,7 +117,7 @@ sub getTagsXML {
$te->setAttribute('name',$tagname);
$de->appendChild($te);
my %docs;
- push @{$docs{dstUriFor($_)}},langOf($_) for @$doclist;
+ push @{$docs{WebCoso::Common::dstUriFor($_)}},WebCoso::Common::langOf($_) for @$doclist;
my ($docurl,$langs);
while (($docurl,$langs)=each %docs) {
my $dle=$doc->createElementNS($NS,'wc:doc');
@@ -148,70 +135,6 @@ sub getTagsXML {
}
$xslt_proc->register_function($NS,'tagged',\&getTagsXML);
-sub langOf {
- my ($name)=@_;
- $name=~m{(^|/)document\.([^.]+)(\.|$)} and return $2;
- return;
-}
-
-sub typeOf {
- my ($name)=@_;
- $name=~m{(^|/)document\.[^.]+\.([^.]+\.[^.]+)$} and return $2;
- return;
-}
-
-sub typedAs {
- my ($name,$newtype)=@_;
- $name=~s{(^|/)(document\.[^.]+\.)([^.]+\.[^.]+)$}{$1$2$newtype};
- return $name;
-}
-
-sub dstUriFor {
- my ($name,$short)=(@_,1);
- warn "dstUriFor($name,$short)\n";
- if ($short) {
- $name=~s{/[^/]+$}{/};
- }
- else {
- $name=typedAs($name,'html');
- }
- $name=~s{^\Q$SRCPATH\E/}{$DSTBASEURL};
- return $name;
-}
-
-sub isLang {
- my ($lang,$name)=@_;
- warn "isLang($lang,$name)\n";
- return 1 if $name=~m{/$}; # assume that MultiViews on the server will work
- return 1 if langOf($name) eq $lang;
- return;
-}
-
-$stash->{dstUriFor}=\&dstUriFor;
-$stash->{isLang}=\&isLang;
-
-sub expandTT {
- my ($maker,$target,$deps,$matches)=@_;
-
- warn "expandTT($target,@$deps,@$matches)\n";
-
- my $tmpl=$fc->get($deps->[-1]);
- my $vars={ path=> $matches->[0],
- language => $matches->[1],
- %$stash,
- };
- if (@$deps>1) {
- warn "tagging as $deps->[0]\n";
- $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)=@_;
@@ -309,8 +232,8 @@ sub keepEarliest {
my %dirs;
for my $f (@_) {
my $c=file($f);
- my $lang=langOf($c->basename);
- my $type=typeOf($c->basename);
+ 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>";
}
@@ -332,16 +255,16 @@ my %docfiles=(
if ($CLEAN) {
my %to_keep;
- @to_keep{keepEarliest(fromTo($SRCPATH,{%docfiles,dirs=>sub{!m{^(_webcoso|\.svn)$}}}))}=();
- @to_keep{fromTo($SRCPATH,{files=>sub{!m{^document\.}},dirs=>sub{!m{^(_webcoso|\.svn)$}}})}=();
+ @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)$}}})}=();
- my $iter=File::Next::files({descend_filter=>sub{!m{^\.svn$}}},$SRCPATH,$DSTPATH);
+ my $iter=File::Next::files({descend_filter=>sub{!m{^\.svn$}}},$WebCoso::Common::SRCPATH,$WebCoso::Common::DSTPATH);
while (defined (my $file=$iter->())) {
next if exists $to_keep{$file};
unlink $file;
}
- dir($DSTPATH)->rmtree;
- dir($SRCPATH,'_webcoso')->rmtree;
+ dir($WebCoso::Common::DSTPATH)->rmtree;
+ dir($WebCoso::Common::SRCPATH,'_webcoso')->rmtree;
exit 0;
}
@@ -359,77 +282,77 @@ my @passes=(
# tags : must come first, otherwise tha "tags" directory will
# be taken as a normal document directory
- ["$SRCPATH/tags/(**)/document.(*).rest.txt",
+ ["$WebCoso::Common::SRCPATH/tags/(**)/document.(*).rest.txt",
':',
- "$SRCPATH/_webcoso/tags.yml",
- ifExists("$SRCPATH/tags/\$1/document.\$2.rest.tt"),
+ "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
+ ifExists("$WebCoso::Common::SRCPATH/tags/\$1/document.\$2.rest.tt"),
'=',
- \&expandTT],
- ["$SRCPATH/tags/(**)/document.(*).du.xml",
+ $template->expandTT()],
+ ["$WebCoso::Common::SRCPATH/tags/(**)/document.(*).du.xml",
':',
- "$SRCPATH/_webcoso/tags.yml",
- ifExists("$SRCPATH/tags/\$1/document.\$2.rest.txt"),
+ "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
+ ifExists("$WebCoso::Common::SRCPATH/tags/\$1/document.\$2.rest.txt"),
'=',
\&parseRST],
# normal documents, in subdirs
- ["$SRCPATH/(**)/document.(*).rest.txt",
+ ["$WebCoso::Common::SRCPATH/(**)/document.(*).rest.txt",
':',
- ifExists("$SRCPATH/\$1/document.\$2.rest.tt"),
+ ifExists("$WebCoso::Common::SRCPATH/\$1/document.\$2.rest.tt"),
'=',
- \&expandTT],
- ["$SRCPATH/(**)/document.(*).du.xml",
+ $template->expandTT()],
+ ["$WebCoso::Common::SRCPATH/(**)/document.(*).du.xml",
':',
- ifExists("$SRCPATH/\$1/document.\$2.rest.txt"),
+ ifExists("$WebCoso::Common::SRCPATH/\$1/document.\$2.rest.txt"),
'=',
\&parseRST],
# normal documents, in top dir
- ["$SRCPATH/()document.(*).rest.txt",
+ ["$WebCoso::Common::SRCPATH/()document.(*).rest.txt",
':',
- ifExists("$SRCPATH/document.\$2.rest.tt"),
+ ifExists("$WebCoso::Common::SRCPATH/document.\$2.rest.tt"),
'=',
- \&expandTT],
- ["$SRCPATH/()document.(*).du.xml",
+ $template->expandTT()],
+ ["$WebCoso::Common::SRCPATH/()document.(*).du.xml",
':',
- ifExists("$SRCPATH/document.\$2.rest.txt"),
+ ifExists("$WebCoso::Common::SRCPATH/document.\$2.rest.txt"),
'=',
\&parseRST],
# tags from normal documents (tag documents can't be tagged!)
- ["$SRCPATH/_webcoso/tags.yml",
+ ["$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
':',
- fromTo($SRCPATH,
+ fromTo($WebCoso::Common::SRCPATH,
{
%docfiles,
- transform=>sub{typedAs($_[0],'du.xml')}
+ transform=>sub{WebCoso::Common::typedAs($_[0],'du.xml')}
}),
'=',
\&getTags],
# changes (currently unimplemented)
- ["$SRCPATH/_webcoso/changes.xml",
+ ["$WebCoso::Common::SRCPATH/_webcoso/changes.xml",
':',
- keepEarliest(fromTo($SRCPATH,{%docfiles})),
+ keepEarliest(fromTo($WebCoso::Common::SRCPATH,{%docfiles})),
'=',
\&getChanges],
],
%maker_opts,
}),
targets=>[
- fromTo("$SRCPATH/",
+ fromTo("$WebCoso::Common::SRCPATH/",
{
%docfiles,
- transform=>sub{typedAs($_[0],'du.xml')},
+ transform=>sub{WebCoso::Common::typedAs($_[0],'du.xml')},
}),
- fromTo("$SRCPATH/tags/",
+ fromTo("$WebCoso::Common::SRCPATH/tags/",
{
%docfiles,
- transform=>sub{typedAs($_[0],'du.xml')},
+ transform=>sub{WebCoso::Common::typedAs($_[0],'du.xml')},
})]},
{maker=>Slay::Maker->new({
rules => [
@@ -437,48 +360,48 @@ my @passes=(
# tags : must come first, otherwise tha "tags" directory will
# be taken as a normal document directory
- ["$DSTPATH/tags/(**)/document.(*).html",
+ ["$WebCoso::Common::DSTPATH/tags/(**)/document.(*).html",
':',
- "$SRCPATH/_webcoso/tags.yml",
- "$SRCPATH/tags/\$1/document.\$2.du.xml",
+ "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
+ "$WebCoso::Common::SRCPATH/tags/\$1/document.\$2.du.xml",
'=',
\&du2html],
# normal documents, in subdirs
- ["$DSTPATH/(**)/document.(*).html",
+ ["$WebCoso::Common::DSTPATH/(**)/document.(*).html",
':',
- "$SRCPATH/_webcoso/tags.yml",
- "$SRCPATH/\$1/document.\$2.du.xml",
+ "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
+ "$WebCoso::Common::SRCPATH/\$1/document.\$2.du.xml",
'=',
\&du2html],
# normal documents, in top dir
- ["$DSTPATH/()document.(*).html",
+ ["$WebCoso::Common::DSTPATH/()document.(*).html",
':',
- "$SRCPATH/_webcoso/tags.yml",
- "$SRCPATH/document.\$2.du.xml",
+ "$WebCoso::Common::SRCPATH/_webcoso/tags.yml",
+ "$WebCoso::Common::SRCPATH/document.\$2.du.xml",
'=',
\&du2html],
],
%maker_opts,
}),
- targets=>[fromTo("$SRCPATH/",
+ targets=>[fromTo("$WebCoso::Common::SRCPATH/",
{
%docfiles,
transform=>sub{
- (my $file=typedAs($_[0],'html'))
- =~s{^\Q$SRCPATH\E/}{$DSTPATH/};
+ (my $file=WebCoso::Common::typedAs($_[0],'html'))
+ =~s{^\Q$WebCoso::Common::SRCPATH\E/}{$WebCoso::Common::DSTPATH/};
return $file;
},
}),
- fromTo("$SRCPATH/tags/",
+ fromTo("$WebCoso::Common::SRCPATH/tags/",
{
%docfiles,
transform=>sub{
- (my $file=typedAs($_[0],'html'))
- =~s{^\Q$SRCPATH\E/tags/}{$DSTPATH/tags/};
+ (my $file=WebCoso::Common::typedAs($_[0],'html'))
+ =~s{^\Q$WebCoso::Common::SRCPATH\E/tags/}{$WebCoso::Common::DSTPATH/tags/};
return $file;
},
})]},