aboutsummaryrefslogtreecommitdiff
path: root/lib/WebCoso
diff options
context:
space:
mode:
authordakkar <dakkar@luxion>2006-12-17 12:08:23 +0000
committerdakkar <dakkar@luxion>2006-12-17 12:08:23 +0000
commitfce73c4f1cb1c3ebed4551e43108f3506bb66f51 (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /lib/WebCoso
parent r1350@narval: dakkar | 2006-02-21 13:05:07 +0100 (diff)
downloadWebCoso-fce73c4f1cb1c3ebed4551e43108f3506bb66f51.tar.gz
WebCoso-fce73c4f1cb1c3ebed4551e43108f3506bb66f51.tar.bz2
WebCoso-fce73c4f1cb1c3ebed4551e43108f3506bb66f51.zip
pulizia: si ricomincia (di nuovo...)
git-svn-id: svn://luxion/repos/WebCoso/trunk@234 fcb26f47-9200-0410-b104-b98ab5b095f3
Diffstat (limited to 'lib/WebCoso')
-rw-r--r--lib/WebCoso/Collection.pm133
-rw-r--r--lib/WebCoso/Collections.pm74
-rw-r--r--lib/WebCoso/Config.pm176
-rw-r--r--lib/WebCoso/Driver.pm19
-rw-r--r--lib/WebCoso/Pipeline.pm18
-rw-r--r--lib/WebCoso/Pipeline/Base.pm43
-rw-r--r--lib/WebCoso/Pipeline/Id.pm8
-rw-r--r--lib/WebCoso/Resource.pm183
-rw-r--r--lib/WebCoso/Step.pm18
-rw-r--r--lib/WebCoso/Step/Base.pm7
-rw-r--r--lib/WebCoso/Step/ReST/SplitLang.pm87
-rw-r--r--lib/WebCoso/Step/ReST/ToXml.pm139
-rw-r--r--lib/WebCoso/X.pm95
13 files changed, 0 insertions, 1000 deletions
diff --git a/lib/WebCoso/Collection.pm b/lib/WebCoso/Collection.pm
deleted file mode 100644
index 42442f1..0000000
--- a/lib/WebCoso/Collection.pm
+++ /dev/null
@@ -1,133 +0,0 @@
-package WebCoso::Collection;
-use strict;
-use warnings;
-use Class::Std;
-use Scalar::Util 'weaken';
-use List::MoreUtils 'any';
-use WebCoso::Config;
-
-{
-my %names_of :ATTR( :get<names> );
-my %parents_of :ATTR( :get<parents_ref> );
-my %children_of :ATTR( :get<children_ref> );
-my %resources_of :ATTR( :init_arg<resources> :get<resources_ref> );
-
-sub BUILD {
- my ($self,$ident,$args_ref)=@_;
-
- my $names=$args_ref->{name};
- # trasformo un nome semplice in un nome "per qualsiasi lingua"
- $names={''=>$names} unless ref($names) eq 'HASH';
- $names_of{$ident}=$names;
-
- my $parents=$args_ref->{parents} || [];
- $parents_of{$ident}=$parents;
- $_->add_child($self) for @$parents;
-
- my $children=$args_ref->{children} || [];
- $children_of{$ident}=$children;
- $_->add_parent($self) for @$children;
-
- $resources_of{$ident}=[];
-
- WebCoso::Config->add_collection($self);
-
- return;
-}
-
-sub get_axes {
- return 'language';
-}
-
-sub get_axis_values {
- my ($self,$axis_name)=@_;
- if ($axis_name eq 'language') {
- return grep { $_ } keys %{ $self->get_names() }
- }
- else {
- return;
- }
-}
-
-sub get_properties {
- my ($self,$axis_name,$axis_value,@rest)=@_;
-
- if (@rest==0 and $axis_name eq 'language') {
- if ( any { $_ eq $axis_value }
- keys %{ $self->get_names() }
- ) {
- return {
- name => $self->get_names()->{$axis_value}
- };
- }
- elsif (exists ${$self->get_names()}{''}) {
- return {
- name => $self->get_names()->{''}
- };
- }
- else {
- return;
- }
- }
-}
-
-sub add_child {
- my ($self,$child)=@_;
-
- return if any { $_ eq $child } @{ $self->get_children_ref() };
-
- push @{ $self->get_children_ref() },$child;
- $child->add_parent($self);
-
- return;
-}
-sub add_parent {
- my ($self,$parent)=@_;
-
- return if any { $_ eq $parent } @{ $self->get_parents_ref() };
-
- my $weak_parent=$parent;
- weaken $weak_parent;
-
- push @{ $self->get_parents_ref() },$weak_parent;
- $parent->add_child($self);
-
- return;
-}
-sub add_res {
- my ($self, @resources)=@_;
-
- # creo una tabellina di look-up per evitare i duplicati
- # NOTA: le chiavi sono stringhe, non ref, non si può usare per
- # pescare gli oggetti
- my %res_key;
- @res_key{ @{ $self->get_resources_ref() } } = ();
-
- RESOURCES:
- for my $res (@resources) {
- next RESOURCES if exists $res_key{$res};
-
- push @{ $self->get_resources_ref() }, $res;
- $res_key{$res}=undef;
- $res->add_coll($self);
- }
-
- return;
-}
-
-sub get_parents {
- my ($self)=@_;
- return @{ $self->get_parents_ref() };
-}
-sub get_children {
- my ($self)=@_;
- return @{ $self->get_children_ref() };
-}
-sub get_resources {
- my ($self)=@_;
- return @{ $self->get_resources_ref() };
-}
-
-}
-
-1;
diff --git a/lib/WebCoso/Collections.pm b/lib/WebCoso/Collections.pm
deleted file mode 100644
index f0f9815..0000000
--- a/lib/WebCoso/Collections.pm
+++ /dev/null
@@ -1,74 +0,0 @@
-package WebCoso::Collections;
-use strict;
-use warnings;
-use Class::Std;
-use List::MoreUtils 'any';
-
-{
-my %collections_of :ATTR( :get<collections_ref> );
-
-sub BUILD {
- my ($self,$ident,$args_ref)=@_;
-
- $collections_of{$ident} = [];
-}
-
-sub add_collection {
- my ($self, $collection)=@_;
-
- return if any { $_ eq $collection } $self->get_all_collections();
-
- push @{ $self->get_collections_ref() }, $collection;
-}
-
-sub get_all_collections {
- my ($self)=@_;
- return @{ $self->get_collections_ref() };
-}
-
-sub get_root_collections {
- my ($self)=@_;
-
- return grep {
- $_->get_parents() == 0
- } $self->get_all_collections();
-}
-
-sub get_leaf_collections {
- my ($self)=@_;
-
- return grep {
- $_->get_children() == 0
- } $self->get_all_collections();
-}
-
-sub get_axes {
- return 'language';
-}
-
-sub get_axis_values {
- my ($self,$axis_name)=@_;
- if ($axis_name eq 'language') {
- return $self->_get_languages();
- }
- else {
- return;
- }
-}
-
-sub _get_languages {
- my ($self)=@_;
- my %langs=();
-
- for my $collection ($self->get_all_collections()) {
- @langs{ $collection->get_axis_values('language') } = ();
- }
-
- delete $langs{''};
-
- return keys %langs;
-}
-
-}
-
-1;
diff --git a/lib/WebCoso/Config.pm b/lib/WebCoso/Config.pm
deleted file mode 100644
index 018c3c7..0000000
--- a/lib/WebCoso/Config.pm
+++ /dev/null
@@ -1,176 +0,0 @@
-package WebCoso::Config;
-use strict;
-use warnings;
-use WebCoso::Collections;
-use WebCoso::Pipeline;
-use WebCoso::X;
-use utf8;
-
-my @resources;
-my $collections=WebCoso::Collections->new();
-my %resource_to_pipeline;
-my %name_to_resource;
-my %name_to_collection;
-
-sub read_scalar {
- my ($class,$content,$filename)=@_;
- $WebCoso::Config::Helpers::FILENAME=$filename;
- $content=<<'EOF'.$content;
-package WEBCOSO::CONFIG;
-no strict;
-WebCoso::Config::Helpers->import();
-EOF
- eval $content;
- if ($@) {
- WebCoso::X::ConfigError->throw(
- filename => $filename,
- nested => $@,
- );
- }
- my $symbols=\%WEBCOSO::CONFIG::;
- for my $name (keys %$symbols) {
- my $object=${*{$symbols->{$name}}{SCALAR}};
- my $type=ref($object);
- if ($type eq 'WebCoso::Resource') {
- $name_to_resource{$name}=$object;
- }
- elsif ($type eq 'WebCoso::Collection') {
- $name_to_collection{$name}=$object;
- }
- }
- return 1;
-}
-
-sub add_resource {
- my ($class,$resource)=@_;
- push @resources,$resource;
-}
-
-sub get_all_resources {
- return @resources;
-}
-
-sub get_res_by_name {
- my ($class,$name)=@_;
-
- if (exists $name_to_resource{$name}) {
- return $name_to_resource{$name};
- }
- else {
- WebCoso::X::NoSuchResource->throw(
- resource => $name
- );
- }
-}
-
-sub add_collection {
- my ($class,$collection)=@_;
- $collections->add_collection($collection);
-}
-
-sub get_collections {
- return $collections;
-}
-
-sub get_coll_by_name {
- my ($class,$name)=@_;
-
- if (exists $name_to_collection{$name}) {
- return $name_to_collection{$name};
- }
- else {
- WebCoso::X::NoSuchCollection->throw(
- collection => $name
- );
- }
-}
-
-sub get_pipeline_for {
- my ($class, $resource)=@_;
-
- WebCoso::X::NoSuchResource->throw(
- resource => $resource,
- ) unless exists $resource_to_pipeline{$resource};
-
- return $resource_to_pipeline{$resource};
-}
-
-sub clear {
- @resources=();
- $collections=WebCoso::Collections->new();
- %resource_to_pipeline=();
-}
-
-package WebCoso::Config::Helpers;
-use Path::Class;
-use WebCoso::Resource;
-use WebCoso::Collection;
-use Exporter::Lite;
-use vars qw($FILENAME @EXPORT);
-
-@EXPORT=qw(res coll);
-
-sub res {
- my $dest_filename=pop @_;
- my $short_pipeline_name=pop @_;
- my @source_files=@_;
-
- my $config_dir=file($FILENAME)->parent->absolute;
-
- $dest_filename=file($dest_filename)->absolute($config_dir);
-
- my @abs_source_files = map {
- file($_)->absolute($config_dir);
- } @source_files;
-
- my $pipeline_name="WebCoso::Pipeline::$short_pipeline_name";
-
- if (! WebCoso::Pipeline->is_pipeline($pipeline_name)) {
- WebCoso::X::NoSuchPipeline->throw(
- pipeline => $short_pipeline_name,
- );
- };
-
- my $resource=WebCoso::Resource->new();
- $resource->set_property(sources=>[@abs_source_files]);
- $resource->set_property(destination=>$dest_filename);
-
- for my $filename (@abs_source_files) {
- $resource->set_property(
- {filename=>$filename},
- datastream => sub{_open_file($filename)},
- );
- }
-
- WebCoso::Config->add_resource($resource);
-
- # brutto!
- $resource_to_pipeline{$resource}=$pipeline_name;
-
- return $resource;
-}
-
-sub coll {
- my ($name,$parents,$children,$resources)=@_;
-
- my $collection=WebCoso::Collection->new({
- name=>$name,
- parents=>$parents||[],
- children=>$children||[],
- resources=>$resources||[],
- });
-
- return $collection;
-}
-
-sub _open_file {
- my ($filename)=@_;
-
- open my $fh,'<:raw',$filename
- or WebCoso::X::OpenError->throw(
- filename => $filename,
- error => $!);
- return $fh;
-}
-
-1;
diff --git a/lib/WebCoso/Driver.pm b/lib/WebCoso/Driver.pm
deleted file mode 100644
index d5e1db8..0000000
--- a/lib/WebCoso/Driver.pm
+++ /dev/null
@@ -1,19 +0,0 @@
-package WebCoso::Driver;
-use strict;
-use warnings;
-use WebCoso::Config;
-
-sub run {
- my @resources=WebCoso::Config->get_all_resources();
-
- for my $resource (@resources) {
- WebCoso::Config->get_pipeline_for($resource)->process($resource,'meta');
- }
- for my $resource (@resources) {
- WebCoso::Config->get_pipeline_for($resource)->process($resource,'gen');
- }
-
- return 1;
-}
-
-1;
diff --git a/lib/WebCoso/Pipeline.pm b/lib/WebCoso/Pipeline.pm
deleted file mode 100644
index b45d431..0000000
--- a/lib/WebCoso/Pipeline.pm
+++ /dev/null
@@ -1,18 +0,0 @@
-package WebCoso::Pipeline;
-use strict;
-use warnings;
-use Module::Pluggable::Fast
- name => '_pipelines',
- search => [ 'WebCoso::Pipeline' ],
- require => 1;
-
-my @pipelines=_pipelines();
-my %pipelines;
-@pipelines{@pipelines}=();
-
-sub is_pipeline {
- my ($class,$pipeline_name)=@_;
- return exists $pipelines{$pipeline_name};
-}
-
-1;
diff --git a/lib/WebCoso/Pipeline/Base.pm b/lib/WebCoso/Pipeline/Base.pm
deleted file mode 100644
index 2402b84..0000000
--- a/lib/WebCoso/Pipeline/Base.pm
+++ /dev/null
@@ -1,43 +0,0 @@
-package WebCoso::Pipeline::Base;
-use strict;
-use warnings;
-use WebCoso::X;
-use WebCoso::Step;
-use base 'Class::Data::Inheritable';
-
-__PACKAGE__->mk_classdata('_steps');
-
-sub set_steps {
- my ($class,@steps)=@_;
-
- my @step_instances=();
-
- while (@steps) {
- my $step_name=shift @steps;
- my $step_init_args=shift @steps;
-
- my $full_step_name="WebCoso::Step::$step_name";
- if (! WebCoso::Step->is_step($full_step_name)) {
- WebCoso::X::NoSuchStep->throw(
- pipeline => $class,
- step => $_,
- );
- }
-
- push @step_instances,$full_step_name->new($step_init_args);
- }
-
- $class->_steps([@step_instances]);
-}
-
-sub process {
- my ($class, $resource,$stage)=@_;
-
- for my $step (@{$class->_steps()}) {
- $step->process($resource,$stage);
- }
-
- return 1;
-}
-
-1;
diff --git a/lib/WebCoso/Pipeline/Id.pm b/lib/WebCoso/Pipeline/Id.pm
deleted file mode 100644
index bcd5615..0000000
--- a/lib/WebCoso/Pipeline/Id.pm
+++ /dev/null
@@ -1,8 +0,0 @@
-package WebCoso::Pipeline::Id;
-use strict;
-use warnings;
-
-sub process {
-}
-
-1;
diff --git a/lib/WebCoso/Resource.pm b/lib/WebCoso/Resource.pm
deleted file mode 100644
index 7d462f3..0000000
--- a/lib/WebCoso/Resource.pm
+++ /dev/null
@@ -1,183 +0,0 @@
-package WebCoso::Resource;
-use strict;
-use warnings;
-use Class::Std;
-use Scalar::Util 'weaken';
-use List::MoreUtils 'any';
-#use WebCoso::X;
-#use Smart::Comments;$Data::Dumper::Useqq=1;
-
-{
-my %values_of :ATTR(:default<{}>);
-my %propnames_of :ATTR(:default<{}>);
-my %axes_of :ATTR(:default<{}>);
-my %collections_of :ATTR(:get<collections_ref> :default<[]>);
-
-sub get_axes {
- my ($self)=@_;
-
- return keys %{$axes_of{ident $self}};
-}
-
-sub get_axis_values {
- my ($self,$axis_name)=@_;
-
- return keys %{$axes_of{ident $self}->{$axis_name}};
-}
-
-sub set_property {
- my $self=shift;
- my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {};
- my ($prop_name,$prop_value)=@_;
-
- $self->_populate_axes_from($axes_spec);
- my $key=_genkey($axes_spec);
-
- $propnames_of{ident $self}->{$prop_name}=undef;
-
- $values_of{ident $self}->{$prop_name}->{$key}=$prop_value;
-
- return;
-}
-
-sub get_property {
- my $self=shift;
- my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {};
- my ($prop_name)=@_;
-
- ### $self
- ### $axes_spec
- ### $prop_name
-
- return unless exists $values_of{ident $self}->{$prop_name};
- my $values_ref=$values_of{ident $self}->{$prop_name};
-
- ### $values_ref
-
- my $req_key=_genkey($axes_spec);
- my @keys=sort {($a=~tr/\001//) <=> ($b=~tr/\001//)} keys %$values_ref;
-
- for my $key (@keys) {
- ### testing key: $key
-
- my $key_rx=_genrx_from_key($key);
-
- if ($req_key =~ m{$key_rx}) {
- return $values_ref->{$key};
- }
- }
-
- return;
-}
-
-sub get_property_fh {
- my $self=shift;
- my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {};
- my ($prop_name)=@_;
-
- my $prop_value=$self->get_property($axes_spec,$prop_name);
-
- return unless defined $prop_value;
-
- if (ref($prop_value) eq 'CODE') {
- $prop_value=$prop_value->();
- }
-
- if (ref($prop_value)) { # speriamo filehandle...
- open my $fh,'<&',$prop_value; # dup in lettura
- seek $fh,0,0;
- return $fh;
- }
- else { # speriamo stringa...
- my $val="$prop_value";
- open my $fh,'<',\$val;
- return $fh;
- }
-}
-
-sub get_property_string {
- my $self=shift;
- my $axes_spec= (ref($_[0]) eq 'HASH') ? (shift) : {};
- my ($prop_name)=@_;
-
- my $prop_value=$self->get_property($axes_spec,$prop_name);
-
- return unless defined $prop_value;
-
- if (ref($prop_value) eq 'CODE') {
- $prop_value=$prop_value->();
- }
-
- if (ref($prop_value)) { # speriamo filehandle...
- seek $prop_value,0,0;
- return do {local $/;<$prop_value>}
- }
- else {
- return "$prop_value";
- }
-}
-
-sub get_collections {
- my ($self)=@_;
-
- return @{ $self->get_collections_ref() };
-}
-
-sub add_coll {
- my ($self, $collection)=@_;
-
- return if any { $_ eq $collection } @{ $self->get_collections_ref() };
-
- my $weak_collection = $collection;
- weaken $weak_collection;
-
- push @{ $self->get_collections_ref() }, $weak_collection;
-
- $collection->add_res($self);
-
- return;
-}
-
-sub _populate_axes_from {
- my ($self,$axes_spec)=@_;
-
- while (my ($axis_name,$axis_value)=each %$axes_spec) {
- my $axis_value_set=($axes_of{ident $self}->{$axis_name} ||= {});
- $axis_value_set->{$axis_value}=undef;
- }
-
- return;
-}
-
-sub _genkey {
- my ($axes_spec)=@_;
-
- my $key="\000";
- $key.=join "\000",map {$_."\001".$axes_spec->{$_}} sort keys %$axes_spec;
- $key.="\000";
-
- ### chiave: $key
-
- return $key;
-}
-
-sub _genrx_from_key {
- my ($key)=@_;
-
- my (undef,@axes)=split /\000/,$key;
-
- ### axes form key: \@axes
-
- my $rx="(?:";
- $rx.=join "\000).*?(?:",map {quotemeta($_)} @axes;
- $rx.=")";
- $rx=qr{^\000.*?${rx}(?:\000|$)};
-
- ### regexp: $rx
-
- return $rx;
-}
-
-}
-
-1;
diff --git a/lib/WebCoso/Step.pm b/lib/WebCoso/Step.pm
deleted file mode 100644
index 71a4f07..0000000
--- a/lib/WebCoso/Step.pm
+++ /dev/null
@@ -1,18 +0,0 @@
-package WebCoso::Step;
-use strict;
-use warnings;
-use Module::Pluggable::Fast
- name => '_steps',
- search => [ 'WebCoso::Step' ],
- require => 1;
-
-my @steps=_steps();
-my %steps;
-@steps{@steps}=();
-
-sub is_step {
- my ($class,$step_name)=@_;
- return exists $steps{$step_name};
-}
-
-1;
diff --git a/lib/WebCoso/Step/Base.pm b/lib/WebCoso/Step/Base.pm
deleted file mode 100644
index 8e73705..0000000
--- a/lib/WebCoso/Step/Base.pm
+++ /dev/null
@@ -1,7 +0,0 @@
-package WebCoso::Step::Base;
-use strict;
-use warnings;
-use Class::Std;
-use WebCoso::X;
-
-1;
diff --git a/lib/WebCoso/Step/ReST/SplitLang.pm b/lib/WebCoso/Step/ReST/SplitLang.pm
deleted file mode 100644
index cdbc109..0000000
--- a/lib/WebCoso/Step/ReST/SplitLang.pm
+++ /dev/null
@@ -1,87 +0,0 @@
-package WebCoso::Step::ReST::SplitLang;
-use strict;
-use warnings;
-use base 'WebCoso::Step';
-use Class::Std;
-
-{
-
-=head2 Che fa
-
-Prende il sorgente da {filename=>'sperosiaunosolo'}->datastream, cerca
-righe della forma
-
- ^\s*.. lang:: (\w*)
-
-raccoglie tutti i C<$1>, e quelle sono le lingue (C<''> sta per 'tutte
-le lingue')
-
-Splitta poi in {language=>'$1'}->rstdoc (stringhe)
-
-Fa tutto alla prima passata
-
-=cut
-
-my %srckey_of :ATTR(:init_arg<from> :get<srckey> :default<datastream>);
-my %dstkey_of :ATTR(:init_arg<to> :get<dstkey> :default<rstdoc>);
-
-my $lang_re=qr{^\s*\.\.\s+lang::(?:\s+(\w+))?\s*$};
-
-sub process {
- my ($self,$resource,$stage)=@_;
-
- return unless $stage eq 'meta';
-
- my $srckey=$self->get_srckey();
- my $dstkey=$self->get_dstkey();
-
- my $fh=$resource->get_property_fh($srckey);
- if (!defined $fh) {
- my ($filename)=$resource->get_axis_values('filename');
- $fh=$resource->get_property_fh({filename=>$filename},$srckey);
- }
-
- binmode $fh,':utf8';
-
- # raccolgo le lingue usate
- my %langs=(''=>undef);
- seek $fh,0,0;
- while (my $line=<$fh>) {
- if ($line =~ m{$lang_re}) {
- $langs{$1||''}=undef;
- }
- }
- delete $langs{''};
- seek $fh,0,0;
-
- if (%langs) { # multilingua: split!
- my $curlang='';my %docs=();
- while (my $line=<$fh>) {
- if ($line =~ m{$lang_re}) {
- $curlang=$1||'';
- next;
- }
- if ($curlang) {
- $docs{$curlang}.=$line;
- }
- else { # 'any', per cui scrivo su tutti
- $docs{$_}.=$line for keys %langs;
- }
- }
- # salvo
- $resource->set_property({language=>$_},$dstkey=>$docs{$_})
- for keys %langs;
- }
- else { # monolingua: passa il filehandle
- $resource->set_property($dstkey=>$fh);
- }
-
- # rimetto a posto il filehandle
- seek $fh,0,0;
-
- return;
-}
-
-}
-
-1;
diff --git a/lib/WebCoso/Step/ReST/ToXml.pm b/lib/WebCoso/Step/ReST/ToXml.pm
deleted file mode 100644
index f5cf5a9..0000000
--- a/lib/WebCoso/Step/ReST/ToXml.pm
+++ /dev/null
@@ -1,139 +0,0 @@
-package WebCoso::Step::ReST::ToXml;
-use strict;
-use warnings;
-use base 'WebCoso::Step';
-use Class::Std;
-use Inline 'Python';
-use XML::LibXML;
-use Encode;
-
-{
-
-=head2 Che fa
-
-prende i {language=>'quelchece'}->rstdoc, li passa a docutils, prende
-l'xml, lo passa al parser, e salva il dom in
-{language=>'quelchece'}->xmldom
-
-suppone venga tutto da un solo file
-
-Fa tutto alla prima passata, e raccatta un po' di meta
-
-=cut
-
-my %srckey_of :ATTR(:init_arg<from> :get<srckey> :default<rstdoc>);
-my %dstkey_of :ATTR(:init_arg<to> :get<dstkey> :default<xmldom>);
-
-my $xml_parser=XML::LibXML->new();
-$xml_parser->load_ext_dtd(0);
-$xml_parser->clean_namespaces(1);
-
-sub process {
- my ($self,$resource,$stage)=@_;
-
- return unless $stage eq 'meta';
-
- my ($src_path)=$resource->get_axis_values('filename');
-
- my $srckey=$self->get_srckey();
- my $dstkey=$self->get_dstkey();
-
- my ($rst_doc,$xml_dom);
- $rst_doc=$resource->get_property_string($srckey);
- if (defined $rst_doc) { # monolingua
- my $dom=rst2xml($rst_doc,$src_path);
- $resource->set_property(
- $dstkey,
- $dom,
- );
- $self->_set_meta($resource,$dom);
- }
- else { # multilingua
- my @langs=$resource->get_axis_values('language');
- for my $cur_lang (@langs) {
- $rst_doc=$resource->get_property_string({language=>$cur_lang},$srckey);
- my $dom=rst2xml($rst_doc,$src_path,$cur_lang);
- $resource->set_property(
- {language=>$cur_lang},
- $dstkey,
- $dom,
- );
- $self->_set_meta($resource,$cur_lang,$dom);
- }
- }
-
- return;
-}
-
-{
-my %docinfo_fields=(
- title => '/document/title',
- subtitle => '/document/subtitle',
- author => '/document/docinfo/author|/document/docinfo/authors/author',
- version => '/document/docinfo/version',
- status => '/document/docinfo/status',
- date => '/document/docinfo/date',
- creation_date => '/document/docinfo/field[field_name="CreationDate"]/field_body',
-);
-my $collections='/document/docinfo/field[field_name="Collection"]/field_body|/document/docinfo/field[field_name="Collections"]/field_body//list_item';
-sub _set_meta {
- my ($self,$res,$lang,$dom)=@_;
-
- if ($dom) { # 4 parametri
- $lang={language=>$lang};
- }
- else { # 3 parametri: monolingua
- $dom=$lang;
- $lang={};
- }
-
- for my $meta (keys %docinfo_fields) {
- my @nodes=$dom->findnodes($docinfo_fields{$meta});
- next unless @nodes;
- @nodes=map {$_->textContent()} @nodes;
- if (@nodes==1) {
- $res->set_property($lang,$meta,$nodes[0]);
- }
- else {
- $res->set_property($lang,$meta,[@nodes]);
- }
- }
-
- # per questo serve poter chiamare coll e res per nome TODO
- #my @collections=$dom->findnodes($collections);
- #return unless @collections;
- #@collections=map {$_->textContent()} @collections;
-
- #$res->add_coll($_) for @collections;
-
- return;
-}
-}
-
-sub rst2xml {
- my ($rst_string,$source_path,$language)=@_;
-
- $rst_string=Encode::encode('utf-8',$rst_string);
- my $xml_string=_rst2xml($rst_string,$source_path,'en');
- $xml_parser->base_uri($source_path);
- return $xml_parser->parse_string($xml_string);
-}
-
-}
-1;
-__DATA__
-__Python__
-
-import locale
-import docutils.core
-
-def _rst2xml(source,source_path,language):
- return docutils.core.publish_string(
- source,source_path=source_path,
- writer_name='xml',
- settings_overrides={
- 'input_encoding':'utf-8',
- 'output_encoding':'utf-8',
- 'language_code':language,
- },
- )
diff --git a/lib/WebCoso/X.pm b/lib/WebCoso/X.pm
deleted file mode 100644
index a882709..0000000
--- a/lib/WebCoso/X.pm
+++ /dev/null
@@ -1,95 +0,0 @@
-package WebCoso::X;
-use utf8;
-use strict;
-use warnings;
-
-use Exception::Class
- (
- 'WebCoso::X::Base' => {
- description => 'eccezione di base',
- },
- 'WebCoso::X::FileError' => {
- isa => 'WebCoso::X::Base',
- fields => [ 'filename' ],
- description => 'classe base per errori relativi a file',
- },
- 'WebCoso::X::ConfigError' => {
- isa => 'WebCoso::X::FileError',
- fields => [ 'nested' ],
- description => 'errore nel file di configurazione',
- },
- 'WebCoso::X::FileNotFound' => {
- isa => 'WebCoso::X::FileError',
- fields => [ 'abs_filename' ],
- description => 'un file di una risorsa non è presente',
- },
- 'WebCoso::X::OpenError' => {
- isa => 'WebCoso::X::FileError',
- description => ' non è stato possibile aprire un file',
- },
- 'WebCoso::X::NoSuchPipeline' => {
- isa => 'WebCoso::X::Base',
- fields => [ 'pipeline' ],
- description => 'è stata richiesta una pipeline ignota',
- },
- 'WebCoso::X::NoSuchResource' => {
- isa => 'WebCoso::X::Base',
- fields => [ 'resource' ],
- description => 'è stata richiesta una risorsa ignota',
- },
- 'WebCoso::X::NoSuchCollection' => {
- isa => 'WebCoso::X::Base',
- fields => [ 'collection' ],
- description => 'è stata richiesta una collezione ignota',
- },
- 'WebCoso::X::NoSuchStep' => {
- isa => 'WebCoso::X::Base',
- fields => [ 'pipeline', 'step' ],
- description => 'una pipeline vuole usare uno step ignoto',
- },
- );
-
-WebCoso::X::Base->Trace(1);
-
-sub WebCoso::X::ConfigError::full_message {
- my ($self)=@_;
- return 'Errore di configuazione: ' . $self->nested();
-}
-
-sub WebCoso::X::FileError::full_message {
- my ($self)=@_;
- return 'Errore relativo al file: ' . $self->filename();
-}
-
-sub WebCoso::X::FileNotFoundError::full_message {
- my ($self)=@_;
- return 'Impossibile trovare il file: ' . $self->filename();
-}
-
-sub WebCoso::X::OpenError::full_message {
- my ($self)=@_;
- return 'Impossibile aprire il file: ' . $self->filename();
-}
-
-sub WebCoso::X::NoSuchPipeline::full_message {
- my ($self)=@_;
- return 'Pipeline ignota: ' . $self->pipeline();
-}
-
-sub WebCoso::X::NoSuchResource::full_message {
- my ($self)=@_;
- return 'Risorsa ignota: ' . $self->resource();
-}
-
-sub WebCoso::X::NoSuchCollection::full_message {
- my ($self)=@_;
- return 'Collezione ignota: ' . $self->collection();
-}
-
-sub WebCoso::X::NoSuchStep::full_message {
- my ($self)=@_;
-
- return 'La pipeline ' . $self->pipeline() . ' vuole usare lo step ' . $self->step() . ' che è ignoto';
-}
-
-1;