aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2008-01-03 15:11:33 +0000
committerdakkar <dakkar@luxion>2008-01-03 15:11:33 +0000
commit5dffe330b2b356090928d0da53d9596f2856898c (patch)
treefa4e622a327a7084ba6e34395f50778ab817a21a
parentadded test for the output (diff)
downloadWebCoso-5dffe330b2b356090928d0da53d9596f2856898c.tar.gz
WebCoso-5dffe330b2b356090928d0da53d9596f2856898c.tar.bz2
WebCoso-5dffe330b2b356090928d0da53d9596f2856898c.zip
chaged default form of dstUriFor, prepared for XML-visible tags
git-svn-id: svn://luxion/repos/WebCoso/trunk@321 fcb26f47-9200-0410-b104-b98ab5b095f3
-rw-r--r--t/test-site-output/tags/one/document.en.html4
-rw-r--r--t/test-site-output/tags/one/document.it.html4
-rw-r--r--t/test-site-output/tags/three/bis/document.en.html2
-rw-r--r--t/test-site-output/tags/three/bis/document.it.html2
-rw-r--r--t/test-site-output/tags/two/document.en.html2
-rw-r--r--t/test-site-output/tags/two/document.it.html2
-rw-r--r--webcoso.pl102
7 files changed, 89 insertions, 29 deletions
diff --git a/t/test-site-output/tags/one/document.en.html b/t/test-site-output/tags/one/document.en.html
index 2171272..7a90cab 100644
--- a/t/test-site-output/tags/one/document.en.html
+++ b/t/test-site-output/tags/one/document.en.html
@@ -2,6 +2,6 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wc="http://webcoso.thenautilus.net/" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Category 'one'
</title></head><body><h1>Category 'one'
-</h1><ul><li><a href="/bar/baz/document.en.html">bar-baz english
-</a></li><li><a href="/foo/document.en.html">foo page
+</h1><ul><li><a href="/bar/baz/">bar-baz english
+</a></li><li><a href="/foo/">foo page
</a></li></ul></body></html>
diff --git a/t/test-site-output/tags/one/document.it.html b/t/test-site-output/tags/one/document.it.html
index 260e56b..58c1837 100644
--- a/t/test-site-output/tags/one/document.it.html
+++ b/t/test-site-output/tags/one/document.it.html
@@ -2,5 +2,5 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wc="http://webcoso.thenautilus.net/" xml:lang="it" lang="it"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Categoria 'uno'
</title></head><body><h1>Categoria 'uno'
-</h1><ul><li><a href="/bar/baz/document.it.html">bar-baz italiano
-</a></li><li><a href="/foo/document.it.html">Pagina <em>foo</em></a></li></ul></body></html>
+</h1><ul><li><a href="/bar/baz/">bar-baz italiano
+</a></li><li><a href="/foo/">Pagina <em>foo</em></a></li></ul></body></html>
diff --git a/t/test-site-output/tags/three/bis/document.en.html b/t/test-site-output/tags/three/bis/document.en.html
index b38990b..33f714b 100644
--- a/t/test-site-output/tags/three/bis/document.en.html
+++ b/t/test-site-output/tags/three/bis/document.en.html
@@ -2,5 +2,5 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wc="http://webcoso.thenautilus.net/" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Category 'three/bis'
</title></head><body><h1>Category 'three/bis'
-</h1><ul><li><a href="/bar/baz/document.en.html">bar-baz english
+</h1><ul><li><a href="/bar/baz/">bar-baz english
</a></li></ul></body></html>
diff --git a/t/test-site-output/tags/three/bis/document.it.html b/t/test-site-output/tags/three/bis/document.it.html
index 73974ef..465b27c 100644
--- a/t/test-site-output/tags/three/bis/document.it.html
+++ b/t/test-site-output/tags/three/bis/document.it.html
@@ -2,5 +2,5 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wc="http://webcoso.thenautilus.net/" xml:lang="it" lang="it"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Categoria 'three/bis'
</title></head><body><h1>Categoria 'three/bis'
-</h1><ul><li><a href="/bar/baz/document.it.html">bar-baz italiano
+</h1><ul><li><a href="/bar/baz/">bar-baz italiano
</a></li></ul></body></html>
diff --git a/t/test-site-output/tags/two/document.en.html b/t/test-site-output/tags/two/document.en.html
index a48b66a..40c151d 100644
--- a/t/test-site-output/tags/two/document.en.html
+++ b/t/test-site-output/tags/two/document.en.html
@@ -2,5 +2,5 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wc="http://webcoso.thenautilus.net/" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Category 'two'
</title></head><body><h1>Category 'two'
-</h1><ul><li><a href="/foo/document.en.html">foo page
+</h1><ul><li><a href="/foo/">foo page
</a></li></ul></body></html>
diff --git a/t/test-site-output/tags/two/document.it.html b/t/test-site-output/tags/two/document.it.html
index becf85d..1fa942a 100644
--- a/t/test-site-output/tags/two/document.it.html
+++ b/t/test-site-output/tags/two/document.it.html
@@ -2,4 +2,4 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wc="http://webcoso.thenautilus.net/" xml:lang="it" lang="it"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Categoria 'two'
</title></head><body><h1>Categoria 'two'
-</h1><ul><li><a href="/foo/document.it.html">Pagina <em>foo</em></a></li></ul></body></html>
+</h1><ul><li><a href="/foo/">Pagina <em>foo</em></a></li></ul></body></html>
diff --git a/webcoso.pl b/webcoso.pl
index 7840f53..3a788bb 100644
--- a/webcoso.pl
+++ b/webcoso.pl
@@ -110,12 +110,71 @@ sub getTitleFor {
return $title;
}
-$xslt_proc->register_function('http://webcoso.thenautilus.net/','title-for',\&getTitleFor);
+my $NS='http://webcoso.thenautilus.net/';
+
+$xslt_proc->register_function($NS,'title-for',\&getTitleFor);
+
+{my $tags_file;
+sub setXMLTagsSource {$tags_file=shift}
+sub getTagsXML {
+ my $doc=XML::LibXML::Document->new();
+ return $doc unless defined $tags_file;
+ my $tagged=$fc->get($tags_file);
+ return $doc unless defined $tagged;
+
+ my $de=$doc->createElemenNS($NS,'wc:tags');
+ $doc->setDocumentElement($de);
+ my ($tagname,$doclist);
+ while (($tagname,$doclist)=each %$tagged) {
+ my $te=$doc->createElemenNS($NS,'wc:tag');
+ $te->setAttribute('name',$tagname);
+ $de->appendChild($te);
+ my %docs;
+ push @{$docs{dstUriFor($_)}},langOf($_) for @$doclist;
+ my ($docurl,$langs);
+ while (($docurl,$langs)=each %docs) {
+ my $dle=$doc->createElemenNS($NS,'wc:doc');
+ $dle->setAttribute('uri',$docurl);
+ $te->appendChild($dle);
+ for my $lang (@$langs) {
+ my $le=$doc->createElemenNS($NS,'wc:lang');
+ $le->appendTextNode($lang);
+ $dle->appendChild($le);
+ }
+ }
+ }
+ return $doc;
+}
+}
+$xslt_proc->register_function($NS,'tagged',\&getTagsXML);
-sub dstUriFor {
+sub langOf {
+ my ($name)=@_;
+ $name=~m{(^|/)document\.([^.]+)(\.|$)} and return $2;
+ return;
+}
+
+sub typeOf {
my ($name)=@_;
- warn "dstUriFor($name)\n";
- $name=~s{\.[^.]+\.[^.]+$}{.html};
+ $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;
}
@@ -124,7 +183,7 @@ 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 $name=~m{/document\.$lang(\.|$)};
+ return 1 if langOf($name) eq $lang;
return;
}
@@ -165,6 +224,13 @@ sub du2html {
my $du=$fc->get($deps->[-1]);
my $xslt=file($deps->[-1])->parent->file('du2html.xsl');
$xslt=$fc->get($xslt);
+ if (@$deps>1) {
+ warn "tagging as $deps->[0]\n";
+ setXMLTagsSource($fc->get($deps->[0]));
+ }
+ else {
+ setXMLTagsSource(undef);
+ }
my $out=$xslt->transform($du,
XML::LibXSLT::xpath_to_string(
path => $matches->[0],
@@ -243,9 +309,11 @@ sub keepEarliest {
my %dirs;
for my $f (@_) {
my $c=file($f);
- $c->basename=~m{^document\.([^.]+)\.([^.]+\.[^.]+)$}
- or die "Weird document name <$f>";
- my ($lang,$type)=($1,$2);
+ my $lang=langOf($c->basename);
+ my $type=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;
@@ -285,7 +353,7 @@ my $maker1st=Slay::Maker->new({
["$SRCPATH/(**)/document.(*).du.xml",':',ifExists("$SRCPATH/\$1/document.\$2.rest.txt"),'=',\&parseRST],
["$SRCPATH/()document.(*).rest.txt",':',ifExists("$SRCPATH/document.\$2.rest.tt"),'=',\&expandTT],
["$SRCPATH/()document.(*).du.xml",':',ifExists("$SRCPATH/document.\$2.rest.txt"),'=',\&parseRST],
- ["$SRCPATH/_webcoso/tags.yml",':',fromTo($SRCPATH,{%docfiles,transform=>sub{my $s=shift;$s=~s{\.[^.]+\.[^.]+$}{.du.xml};$s}}),'=',\&getTags],
+ ["$SRCPATH/_webcoso/tags.yml",':',fromTo($SRCPATH,{%docfiles,transform=>sub{typedAs($_[0],'du.xml')}}),'=',\&getTags],
#["$SRCPATH/_webcoso/changes.xml",':',keepEarliest(fromTo($SRCPATH,{%docfiles})),'=',\&getChanges],
],
options => {
@@ -309,20 +377,12 @@ my $maker2nd=Slay::Maker->new({
my @targets1st=(fromTo("$SRCPATH/",
{
%docfiles,
- transform=>sub{
- my $src=shift;
- $src=~s{\.[^.]+\.[^.]+$}{.du.xml};
- return $src;
- },
+ transform=>sub{typedAs($_[0],'du.xml')},
}),
fromTo("$SRCPATH/tags/",
{
%docfiles,
- transform=>sub{
- my $src=shift;
- $src=~s{\.[^.]+\.[^.]+$}{.du.xml};
- return $src;
- },
+ transform=>sub{typedAs($_[0],'du.xml')},
}));
my @targets2nd=(fromTo("$SRCPATH/",
@@ -330,7 +390,7 @@ my @targets2nd=(fromTo("$SRCPATH/",
%docfiles,
transform=>sub{
my $src=shift;
- $src=~s{\.[^.]+\.[^.]+$}{.html};
+ $src=typedAs($src,'html');
$src=~s{^\Q$SRCPATH\E/}{$DSTPATH/};
return $src;
},
@@ -340,7 +400,7 @@ my @targets2nd=(fromTo("$SRCPATH/",
%docfiles,
transform=>sub{
my $src=shift;
- $src=~s{\.[^.]+\.[^.]+$}{.html};
+ $src=typedAs($src,'html');
$src=~s{^\Q$SRCPATH\E/tags/}{$DSTPATH/tags/};
return $src;
},