From 57517de73fdc8c9035726996f1a99b3493541a31 Mon Sep 17 00:00:00 2001 From: dakkar Date: Thu, 3 Jan 2008 20:23:56 +0000 Subject: refactoring: xslt git-svn-id: svn://luxion/repos/WebCoso/trunk@327 fcb26f47-9200-0410-b104-b98ab5b095f3 --- lib/WebCoso/Common.pm | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'lib/WebCoso/Common.pm') diff --git a/lib/WebCoso/Common.pm b/lib/WebCoso/Common.pm index 0680550..e6e5ac9 100644 --- a/lib/WebCoso/Common.pm +++ b/lib/WebCoso/Common.pm @@ -1,9 +1,16 @@ package WebCoso::Common; +use strict; +use warnings; +use Path::Class; +use XML::LibXML::XPathContext; our $SRCPATH='src'; our $DSTPATH='dst'; our $DSTBASEURL='/'; +my $xpath=XML::LibXML::XPathContext->new(); +$xpath->registerNs('x', 'http://www.w3.org/1999/xhtml'); + sub langOf { my ($name)=@_; $name=~m{(^|/)document\.([^.]+)(\.|$)} and return $2; @@ -43,4 +50,46 @@ sub isLang { return; } +sub getTitleFor { + my ($fc,$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/}; + } + else { + $doc_name=file($doc_name)->absolute(file($path)->parent)->relative($SRCPATH); # absolutize it + $doc_name="$SRCPATH/$doc_name"; + } + warn "getTitleFor($lang,$path,$name)->$doc_name\n"; + + my $doc=$fc->get($doc_name); + unless ($doc) { + warn "No document for <$doc_name>, returning <$name>\n"; + return $name; + } + my $title=$xpath->findnodes( + q{/document/title}, + $doc); + return $title; +} + +sub getTags { + my ($fc,@docs)=@_; + + my %tagged; + for my $doc_name (@docs) { + my $doc=$fc->get($doc_name); + my @tags=map {$_->textContent} + $xpath->findnodes( + q{/document/docinfo/field[field_name='tags']/field_body/*/list_item}, + $doc); + chomp for @tags; + push @{$tagged{$_}},$doc_name for @tags; + } + return \%tagged; +} + 1; -- cgit v1.2.3