diff options
Diffstat (limited to 'lib/WebCoso/Step/ReST/SplitLang.pm')
-rw-r--r-- | lib/WebCoso/Step/ReST/SplitLang.pm | 87 |
1 files changed, 0 insertions, 87 deletions
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; |