aboutsummaryrefslogtreecommitdiff
path: root/lib/WebCoso/Common.pm
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2008-01-03 20:23:56 +0000
committerdakkar <dakkar@luxion>2008-01-03 20:23:56 +0000
commit57517de73fdc8c9035726996f1a99b3493541a31 (patch)
treebaccadf4d6336e63e9cd715857be58eaddc1ae87 /lib/WebCoso/Common.pm
parentrefactoring: TT (diff)
downloadWebCoso-57517de73fdc8c9035726996f1a99b3493541a31.tar.gz
WebCoso-57517de73fdc8c9035726996f1a99b3493541a31.tar.bz2
WebCoso-57517de73fdc8c9035726996f1a99b3493541a31.zip
refactoring: xslt
git-svn-id: svn://luxion/repos/WebCoso/trunk@327 fcb26f47-9200-0410-b104-b98ab5b095f3
Diffstat (limited to 'lib/WebCoso/Common.pm')
-rw-r--r--lib/WebCoso/Common.pm49
1 files changed, 49 insertions, 0 deletions
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;