/[webpac2]/trunk/lib/WebPAC/Normalize.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /trunk/lib/WebPAC/Normalize.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 583 by dpavlin, Wed Jul 5 00:12:08 2006 UTC revision 595 by dpavlin, Mon Jul 10 10:16:11 2006 UTC
# Line 35  WebPAC::Normalize - describe normalisato Line 35  WebPAC::Normalize - describe normalisato
35    
36  =head1 VERSION  =head1 VERSION
37    
38  Version 0.11  Version 0.14
39    
40  =cut  =cut
41    
42  our $VERSION = '0.11';  our $VERSION = '0.14';
43    
44  =head1 SYNOPSIS  =head1 SYNOPSIS
45    
# Line 69  Return data structure Line 69  Return data structure
69          row => $row,          row => $row,
70          rules => $normalize_pl_config,          rules => $normalize_pl_config,
71          marc_encoding => 'utf-8',          marc_encoding => 'utf-8',
72            config => $config,
73    );    );
74    
75  Options C<lookup>, C<row>, C<rules> and C<log> are mandatory while all  Options C<lookup>, C<row>, C<rules> and C<log> are mandatory while all
# Line 90  sub data_structure { Line 91  sub data_structure {
91          no strict 'subs';          no strict 'subs';
92          _set_lookup( $arg->{lookup} );          _set_lookup( $arg->{lookup} );
93          _set_rec( $arg->{row} );          _set_rec( $arg->{row} );
94            _set_config( $arg->{config} );
95          _clean_ds( %{ $arg } );          _clean_ds( %{ $arg } );
96          eval "$arg->{rules}";          eval "$arg->{rules}";
97          die "error evaling $arg->{rules}: $@\n" if ($@);          die "error evaling $arg->{rules}: $@\n" if ($@);
# Line 111  sub _set_rec { Line 113  sub _set_rec {
113          $rec = shift or die "no record hash";          $rec = shift or die "no record hash";
114  }  }
115    
116    =head2 _set_config
117    
118    Set current config hash
119    
120      _set_config( $config );
121    
122    Magic keys are:
123    
124    =over 4
125    
126    =item _
127    
128    Code of current database
129    
130    =item _mfn
131    
132    Current MFN
133    
134    =back
135    
136    =cut
137    
138    my $config;
139    
140    sub _set_config {
141            $config = shift;
142    }
143    
144  =head2 _get_ds  =head2 _get_ds
145    
146  Return hash formatted as data structure  Return hash formatted as data structure
# Line 516  sub marc_compose { Line 546  sub marc_compose {
546                  warn "## ++ marc_compose($f,$sf,$v) ", dump( $m ),$/ if ($debug > 1);                  warn "## ++ marc_compose($f,$sf,$v) ", dump( $m ),$/ if ($debug > 1);
547          }          }
548    
549          warn "## marc_compose(d) ", dump( $m ),$/ if ($debug > 1);          warn "## marc_compose current marc = ", dump( $m ),$/ if ($debug > 1);
550    
551          push @{ $marc_record->[ $marc_record_offset ] }, $m if ($#{$m} > 2);          push @{ $marc_record->[ $marc_record_offset ] }, $m if ($#{$m} > 2);
552  }  }
# Line 649  sub rec2 { Line 679  sub rec2 {
679          my $f = shift;          my $f = shift;
680          return unless (defined($rec && $rec->{$f}));          return unless (defined($rec && $rec->{$f}));
681          my $sf = shift;          my $sf = shift;
682          return map { $_->{$sf} } grep { ref($_) eq 'HASH' && $_->{$sf} } @{ $rec->{$f} };          return map {
683                    if (ref($_->{$sf}) eq 'ARRAY') {
684                            @{ $_->{$sf} };
685                    } else {
686                            $_->{$sf};
687                    }
688            } grep { ref($_) eq 'HASH' && $_->{$sf} } @{ $rec->{$f} };
689  }  }
690    
691  =head2 rec  =head2 rec
# Line 704  Prefix all values with a string Line 740  Prefix all values with a string
740  =cut  =cut
741    
742  sub prefix {  sub prefix {
743          my $p = shift or die "prefix needs string as first argument";          my $p = shift or return;
744          return map { $p . $_ } grep { defined($_) } @_;          return map { $p . $_ } grep { defined($_) } @_;
745  }  }
746    
# Line 767  sub lookup { Line 803  sub lookup {
803          }          }
804  }  }
805    
806    =head2 config
807    
808    Consult config values stored in C<config.yml>
809    
810      # return database code (key under databases in yaml)
811      $database_code = config();    # use _ from hash
812      $database_name = config('name');
813      $database_input_name = config('input name');
814      $tag = config('input normalize tag');
815    
816    Up to three levels are supported.
817    
818    =cut
819    
820    sub config {
821            return unless ($config);
822    
823            my $p = shift;
824    
825            $p ||= '';
826    
827            my $v;
828    
829            warn "### getting config($p)\n" if ($debug > 1);
830    
831            my @p = split(/\s+/,$p);
832            if ($#p < 0) {
833                    $v = $config->{ '_' };  # special, database code
834            } else {
835    
836                    my $c = dclone( $config );
837    
838                    foreach my $k (@p) {
839                            warn "### k: $k c = ",dump($c),$/ if ($debug > 1);
840                            if (ref($c) eq 'ARRAY') {
841                                    $c = shift @$c;
842                                    warn "config($p) taking first occurence of '$k', probably not what you wanted!\n";
843                                    last;
844                            }
845    
846                            if (! defined($c->{$k}) ) {
847                                    $c = undef;
848                                    last;
849                            } else {
850                                    $c = $c->{$k};
851                            }
852                    }
853                    $v = $c if ($c);
854    
855            }
856    
857            warn "## config( '$p' ) = ",dump( $v ),$/ if ($v && $debug);
858            warn "config( '$p' ) is empty\n" if (! $v);
859    
860            return $v;
861    }
862    
863    =head2 id
864    
865    Returns unique id of this record
866    
867      $id = id();
868    
869    Returns C<42/2> for 2nd occurence of MFN 42.
870    
871    =cut
872    
873    sub id {
874            my $mfn = $config->{_mfn} || die "no _mfn in config data";
875            return $mfn . $#{$marc_record} ? $#{$marc_record} + 1 : '';
876    }
877    
878  =head2 join_with  =head2 join_with
879    
880  Joins walues with some delimiter  Joins walues with some delimiter
# Line 777  Joins walues with some delimiter Line 885  Joins walues with some delimiter
885    
886  sub join_with {  sub join_with {
887          my $d = shift;          my $d = shift;
888            warn "### join_with('$d',",dump(@_),")\n" if ($debug > 2);
889          my $v = join($d, grep { defined($_) && $_ ne '' } @_);          my $v = join($d, grep { defined($_) && $_ ne '' } @_);
890          return '' unless defined($v);          return '' unless defined($v);
891          return $v;          return $v;

Legend:
Removed from v.583  
changed lines
  Added in v.595

  ViewVC Help
Powered by ViewVC 1.1.26