/[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 641 by dpavlin, Wed Sep 6 20:54:47 2006 UTC revision 669 by dpavlin, Mon Sep 11 14:29:01 2006 UTC
# Line 24  use strict; Line 24  use strict;
24    
25  #use base qw/WebPAC::Common/;  #use base qw/WebPAC::Common/;
26  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
 use Encode qw/from_to/;  
27  use Storable qw/dclone/;  use Storable qw/dclone/;
28    
29  # debugging warn(s)  # debugging warn(s)
# Line 37  WebPAC::Normalize - describe normalisato Line 36  WebPAC::Normalize - describe normalisato
36    
37  =head1 VERSION  =head1 VERSION
38    
39  Version 0.17  Version 0.19
40    
41  =cut  =cut
42    
43  our $VERSION = '0.17';  our $VERSION = '0.19';
44    
45  =head1 SYNOPSIS  =head1 SYNOPSIS
46    
# Line 470  sub marc { Line 469  sub marc {
469          foreach (@_) {          foreach (@_) {
470                  my $v = $_;             # make var read-write for Encode                  my $v = $_;             # make var read-write for Encode
471                  next unless (defined($v) && $v !~ /^\s*$/);                  next unless (defined($v) && $v !~ /^\s*$/);
                 from_to($v, 'iso-8859-2', $marc_encoding) if ($marc_encoding);  
472                  my ($i1,$i2) = defined($marc_indicators->{$f}) ? @{ $marc_indicators->{$f} } : (' ',' ');                  my ($i1,$i2) = defined($marc_indicators->{$f}) ? @{ $marc_indicators->{$f} } : (' ',' ');
473                  if (defined $sf) {                  if (defined $sf) {
474                          push @{ $marc_record->[ $marc_record_offset ] }, [ $f, $i1, $i2, $sf => $v ];                          push @{ $marc_record->[ $marc_record_offset ] }, [ $f, $i1, $i2, $sf => $v ];
# Line 550  sub marc_compose { Line 548  sub marc_compose {
548                  my $v = shift;                  my $v = shift;
549    
550                  next unless (defined($v) && $v !~ /^\s*$/);                  next unless (defined($v) && $v !~ /^\s*$/);
                 from_to($v, 'iso-8859-2', $marc_encoding) if ($marc_encoding);  
551                  warn "## ++ marc_compose($f,$sf,$v) ", dump( $m ),$/ if ($debug > 1);                  warn "## ++ marc_compose($f,$sf,$v) ", dump( $m ),$/ if ($debug > 1);
552                  if ($sf ne '+') {                  if ($sf ne '+') {
553                          push @$m, ( $sf, $v );                          push @$m, ( $sf, $v );
# Line 725  above. Line 722  above.
722    
723  =head2 _pack_subfields_hash  =head2 _pack_subfields_hash
724    
725   @values = _pack_subfields_hash( $h, $include_subfields )   @subfields = _pack_subfields_hash( $h );
726     $subfields = _pack_subfields_hash( $h, 1 );
727    
728    Return each subfield value in array or pack them all together and return scalar
729    with subfields (denoted by C<^>) and values.
730    
731  =cut  =cut
732    
733  sub _pack_subfields_hash {  sub _pack_subfields_hash {
734    
735          warn "## _pack_subfields_hash( ",dump(@_), " )\n";          warn "## _pack_subfields_hash( ",dump(@_), " )\n" if ($debug > 1);
736    
737          my ($h,$include_subfields) = @_;          my ($h,$include_subfields) = @_;
738    
   
739          if ( defined($h->{subfields}) ) {          if ( defined($h->{subfields}) ) {
740                  my $sfs = delete $h->{subfields} || die "no subfields?";                  my $sfs = delete $h->{subfields} || die "no subfields?";
741                  my @out;                  my @out;
# Line 745  sub _pack_subfields_hash { Line 745  sub _pack_subfields_hash {
745                          my $o = shift @$sfs;                          my $o = shift @$sfs;
746                          if ($o == 0 && ref( $h->{$sf} ) ne 'ARRAY' ) {                          if ($o == 0 && ref( $h->{$sf} ) ne 'ARRAY' ) {
747                                  # single element subfields are not arrays                                  # single element subfields are not arrays
748    #warn "====> $sf $o / $#$sfs ", dump( $sfs, $h->{$sf} ), "\n";
749    
750                                  push @out, $h->{$sf};                                  push @out, $h->{$sf};
751                          } else {                          } else {
752  #warn "====> $f $sf $o $#$sfs ", dump( $sfs ), "\n";  #warn "====> $sf $o / $#$sfs ", dump( $sfs, $h->{$sf} ), "\n";
753                                  push @out, $h->{$sf}->[$o];                                  push @out, $h->{$sf}->[$o];
754                          }                          }
755                  }                  }
756                  return @out;                  if ($include_subfields) {
757                            return join('', @out);
758                    } else {
759                            return @out;
760                    }
761          } else {          } else {
762                  # FIXME this should probably be in alphabetical order instead of hash order                  if ($include_subfields) {
763                  values %{$h};                          my $out = '';
764                            foreach my $sf (sort keys %$h) {
765                                    if (ref($h->{$sf}) eq 'ARRAY') {
766                                            $out .= '^' . $sf . join('^' . $sf, @{ $h->{$sf} });
767                                    } else {
768                                            $out .= '^' . $sf . $h->{$sf};
769                                    }
770                            }
771                            return $out;
772                    } else {
773                            # FIXME this should probably be in alphabetical order instead of hash order
774                            values %{$h};
775                    }
776          }          }
777  }  }
778    
# Line 777  sub rec1 { Line 795  sub rec1 {
795                  my @out;                  my @out;
796                  foreach my $h ( @{ $rec->{$f} } ) {                  foreach my $h ( @{ $rec->{$f} } ) {
797                          if (ref($h) eq 'HASH') {                          if (ref($h) eq 'HASH') {
 warn "rec1 hash: ",dump($h),"\n";  
798                                  push @out, ( _pack_subfields_hash( $h ) );                                  push @out, ( _pack_subfields_hash( $h ) );
799                          } else {                          } else {
800                                  push @out, $h;                                  push @out, $h;

Legend:
Removed from v.641  
changed lines
  Added in v.669

  ViewVC Help
Powered by ViewVC 1.1.26