diff options
author | dakkar <dakkar@luxion> | 2008-01-03 15:11:33 +0000 |
---|---|---|
committer | dakkar <dakkar@luxion> | 2008-01-03 15:11:33 +0000 |
commit | 5dffe330b2b356090928d0da53d9596f2856898c (patch) | |
tree | fa4e622a327a7084ba6e34395f50778ab817a21a | |
parent | added test for the output (diff) | |
download | WebCoso-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.html | 4 | ||||
-rw-r--r-- | t/test-site-output/tags/one/document.it.html | 4 | ||||
-rw-r--r-- | t/test-site-output/tags/three/bis/document.en.html | 2 | ||||
-rw-r--r-- | t/test-site-output/tags/three/bis/document.it.html | 2 | ||||
-rw-r--r-- | t/test-site-output/tags/two/document.en.html | 2 | ||||
-rw-r--r-- | t/test-site-output/tags/two/document.it.html | 2 | ||||
-rw-r--r-- | webcoso.pl | 102 |
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> @@ -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; }, |