/[webpac2]/trunk/lib/WebPAC/Input.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/Input.pm

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

revision 797 by dpavlin, Sun Feb 4 13:28:30 2007 UTC revision 823 by dpavlin, Wed Apr 11 12:22:37 2007 UTC
# Line 16  WebPAC::Input - read different file form Line 16  WebPAC::Input - read different file form
16    
17  =head1 VERSION  =head1 VERSION
18    
19  Version 0.17  Version 0.18
20    
21  =cut  =cut
22    
23  our $VERSION = '0.17';  our $VERSION = '0.18';
24    
25  =head1 SYNOPSIS  =head1 SYNOPSIS
26    
# Line 282  sub open { Line 282  sub open {
282                  $log->debug("position: $pos\n");                  $log->debug("position: $pos\n");
283    
284                  my $rec = $ll_db->fetch_rec($pos, sub {                  my $rec = $ll_db->fetch_rec($pos, sub {
285                                  my ($l,$f_nr) = @_;                                  my ($l,$f_nr,$debug) = @_;
286  #                               return unless defined($l);  #                               return unless defined($l);
287  #                               return $l unless ($rec_regex && $f_nr);  #                               return $l unless ($rec_regex && $f_nr);
288    
289                                    return unless ( defined($l) && defined($f_nr) );
290    
291                                    warn "-=> $f_nr ## |$l|\n" if ($debug);
292                                  $log->debug("-=> $f_nr ## $l");                                  $log->debug("-=> $f_nr ## $l");
293    
294                                  # codepage conversion and recode_regex                                  # codepage conversion and recode_regex
# Line 298  sub open { Line 301  sub open {
301                                          my $c = 0;                                          my $c = 0;
302                                          foreach my $r (@{ $rec_regex->{$f_nr} }) {                                          foreach my $r (@{ $rec_regex->{$f_nr} }) {
303                                                  my $old_l = $l;                                                  my $old_l = $l;
304                                                  eval '$l =~ ' . $r;                                                  $log->logconfess("expected regex in ", dump( $r )) unless defined($r->{regex});
305                                                    eval '$l =~ ' . $r->{regex};
306                                                  if ($old_l ne $l) {                                                  if ($old_l ne $l) {
307                                                          $log->debug("REGEX on $f_nr eval \$l =~ $r\n## old l: [$old_l]\n## new l: [$l]");                                                          my $d = "|$old_l| -> |$l| "; # . $r->{regex};
308                                                            $d .= ' +' . $r->{line} . ' ' . $r->{file} if defined($r->{line});
309                                                            $d .= ' ' . $r->{debug} if defined($r->{debug});
310                                                            $log->debug("MODIFY $d");
311                                                            warn "*** $d\n" if ($debug);
312    
313                                                  }                                                  }
314                                                  $log->error("error applying regex: $r") if ($@);                                                  $log->error("error applying regex: $r") if ($@);
315                                          }                                          }
316                                  }                                  }
317    
318                                  $log->debug("<=- $f_nr ## $l");                                  $log->debug("<=- $f_nr ## |$l|");
319                                    warn "<=- $f_nr ## $l\n" if ($debug);
320                                  return $l;                                  return $l;
321                  });                  });
322    
# Line 555  sub dump_ascii { Line 565  sub dump_ascii {
565          }          }
566  }  }
567    
568  =head2 modify_record_regexps  =head2 _get_regex
569    
570  Generate hash with regexpes to be applied using l<filter>.  Helper function called which create regexps to be execute on code.
571    
572    my $regexpes = $input->modify_record_regexps(    _get_regex( 900, 'regex:[0-9]+' ,'numbers' );
573                  900 => { '^a' => { ' : ' => '^b' } },    _get_regex( 900, '^b', ' : ^b' );
574                  901 => { '*' => { '^b' => ' ; ' } },  
575    );  It supports perl regexps with C<regex:> prefix to from value and has
576    additional logic to skip empty subfields.
577    
578  =cut  =cut
579    
# Line 579  sub _get_regex { Line 590  sub _get_regex {
590                  $from = '\Q' . $from . '\E';                  $from = '\Q' . $from . '\E';
591          }          }
592          if ($sf =~ /^\^/) {          if ($sf =~ /^\^/) {
593                    my $need_subfield_data = '*';   # no
594                    # if from is also subfield, require some data in between
595                    # to correctly skip empty subfields
596                    $need_subfield_data = '+' if ($from =~ m/^\\Q\^/);
597                  return                  return
598                          's/\Q'. $sf .'\E([^\^]*?)'. $from .'([^\^]*?)/'. $sf .'$1'. $to .'$2/';                          's/\Q'. $sf .'\E([^\^]' . $need_subfield_data . '?)'. $from .'([^\^]*?)/'. $sf .'$1'. $to .'$2/';
599          } else {          } else {
600                  return                  return
601                          's/'. $from .'/'. $to .'/g';                          's/'. $from .'/'. $to .'/g';
602          }          }
603  }  }
604    
605    
606    =head2 modify_record_regexps
607    
608    Generate hash with regexpes to be applied using L<filter>.
609    
610      my $regexpes = $input->modify_record_regexps(
611                    900 => { '^a' => { ' : ' => '^b' } },
612                    901 => { '*' => { '^b' => ' ; ' } },
613      );
614    
615    =cut
616    
617  sub modify_record_regexps {  sub modify_record_regexps {
618          my $self = shift;          my $self = shift;
619          my $modify_record = {@_};          my $modify_record = {@_};
# Line 604  sub modify_record_regexps { Line 631  sub modify_record_regexps {
631                          foreach my $from (keys %{ $modify_record->{$f}->{$sf} }) {                          foreach my $from (keys %{ $modify_record->{$f}->{$sf} }) {
632                                  my $to = $modify_record->{$f}->{$sf}->{$from};                                  my $to = $modify_record->{$f}->{$sf}->{$from};
633                                  #die "no field?" unless defined($to);                                  #die "no field?" unless defined($to);
634                                  $log->debug("transform: |$from| -> |$to|");                                  my $d = "|$from| -> |$to|";
635                                    $log->debug("transform: $d");
636    
637                                  my $regex = _get_regex($sf,$from,$to);                                  my $regex = _get_regex($sf,$from,$to);
638                                  push @{ $regexpes->{$f} }, $regex;                                  push @{ $regexpes->{$f} }, { regex => $regex, debug => $d };
639                                  $log->debug("regex: $regex");                                  $log->debug("regex: $regex");
640                          }                          }
641                  }                  }
# Line 618  sub modify_record_regexps { Line 646  sub modify_record_regexps {
646    
647  =head2 modify_file_regexps  =head2 modify_file_regexps
648    
649  Generate hash with regexpes to be applied using l<filter> from  Generate hash with regexpes to be applied using L<filter> from
650  pseudo hash/yaml format for regex mappings.  pseudo hash/yaml format for regex mappings.
651    
652  It should be obvious:  It should be obvious:
# Line 668  sub modify_file_regexps { Line 696  sub modify_file_regexps {
696                          $log->debug("transform: |$from| -> |$to|");                          $log->debug("transform: |$from| -> |$to|");
697    
698                          my $regex = _get_regex($sf,$from,$to);                          my $regex = _get_regex($sf,$from,$to);
699                          push @{ $regexpes->{$f} }, $regex;                          push @{ $regexpes->{$f} }, {
700                                    regex => $regex,
701                                    file => $modify_path,
702                                    line => $.,
703                            };
704                          $log->debug("regex: $regex");                          $log->debug("regex: $regex");
705                  }                  }
706          }          }

Legend:
Removed from v.797  
changed lines
  Added in v.823

  ViewVC Help
Powered by ViewVC 1.1.26