--- trunk/lib/WebPAC/Input.pm 2006/11/03 20:40:33 771 +++ trunk/lib/WebPAC/Input.pm 2007/04/05 21:53:52 818 @@ -16,11 +16,11 @@ =head1 VERSION -Version 0.15 +Version 0.17 =cut -our $VERSION = '0.15'; +our $VERSION = '0.17'; =head1 SYNOPSIS @@ -282,10 +282,13 @@ $log->debug("position: $pos\n"); my $rec = $ll_db->fetch_rec($pos, sub { - my ($l,$f_nr) = @_; + my ($l,$f_nr,$debug) = @_; # return unless defined($l); # return $l unless ($rec_regex && $f_nr); + return unless ( defined($l) && defined($f_nr) ); + + warn "-=> $f_nr ## |$l|\n" if ($debug); $log->debug("-=> $f_nr ## $l"); # codepage conversion and recode_regex @@ -298,15 +301,22 @@ my $c = 0; foreach my $r (@{ $rec_regex->{$f_nr} }) { my $old_l = $l; - eval '$l =~ ' . $r; + $log->logconfess("expected regex in ", dump( $r )) unless defined($r->{regex}); + eval '$l =~ ' . $r->{regex}; if ($old_l ne $l) { - $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}; + $d .= ' +' . $r->{line} . ' ' . $r->{file} if defined($r->{line}); + $d .= ' ' . $r->{debug} if defined($r->{debug}); + $log->debug("MODIFY $d"); + warn "*** $d\n" if ($debug); + } $log->error("error applying regex: $r") if ($@); } } - $log->debug("<=- $f_nr ## $l"); + $log->debug("<=- $f_nr ## |$l|"); + warn "<=- $f_nr ## $l\n" if ($debug); return $l; }); @@ -469,10 +479,12 @@ sub seek { my $self = shift; - my $pos = shift || return; + my $pos = shift; my $log = $self->_get_logger(); + $log->logconfess("called without pos") unless defined($pos); + if ($pos < 1) { $log->warn("seek before first record"); $pos = 1; @@ -535,19 +547,19 @@ return $out; } -=head2 dump +=head2 dump_ascii Display humanly readable dump of record =cut -sub dump { +sub dump_ascii { my $self = shift; return unless $self->{ll_db}; if ($self->{ll_db}->can('dump_rec')) { - return $self->{ll_db}->dump_rec( $self->{pos} ); + return $self->{ll_db}->dump_ascii( $self->{pos} ); } else { return dump( $self->{ll_db}->fetch_rec( $self->{pos} ) ); } @@ -555,7 +567,7 @@ =head2 modify_record_regexps -Generate hash with regexpes to be applied using l. +Generate hash with regexpes to be applied using L. my $regexpes = $input->modify_record_regexps( 900 => { '^a' => { ' : ' => '^b' } }, @@ -566,12 +578,22 @@ sub _get_regex { my ($sf,$from,$to) = @_; + + # protect / + $from =~ s!/!\\/!gs; + $to =~ s!/!\\/!gs; + + if ($from =~ m/^regex:(.+)$/) { + $from = $1; + } else { + $from = '\Q' . $from . '\E'; + } if ($sf =~ /^\^/) { return - 's/\Q'. $sf .'\E([^\^]*?)\Q'. $from .'\E([^\^]*?)/'. $sf .'$1'. $to .'$2/'; + 's/\Q'. $sf .'\E([^\^]*?)'. $from .'([^\^]*?)/'. $sf .'$1'. $to .'$2/'; } else { return - 's/\Q'. $from .'\E/'. $to .'/g'; + 's/'. $from .'/'. $to .'/g'; } } @@ -592,10 +614,11 @@ foreach my $from (keys %{ $modify_record->{$f}->{$sf} }) { my $to = $modify_record->{$f}->{$sf}->{$from}; #die "no field?" unless defined($to); - $log->debug("transform: |$from| -> |$to|"); + my $d = "|$from| -> |$to|"; + $log->debug("transform: $d"); my $regex = _get_regex($sf,$from,$to); - push @{ $regexpes->{$f} }, $regex; + push @{ $regexpes->{$f} }, { regex => $regex, debug => $d }; $log->debug("regex: $regex"); } } @@ -606,7 +629,7 @@ =head2 modify_file_regexps -Generate hash with regexpes to be applied using l from +Generate hash with regexpes to be applied using L from pseudo hash/yaml format for regex mappings. It should be obvious: @@ -656,7 +679,11 @@ $log->debug("transform: |$from| -> |$to|"); my $regex = _get_regex($sf,$from,$to); - push @{ $regexpes->{$f} }, $regex; + push @{ $regexpes->{$f} }, { + regex => $regex, + file => $modify_path, + line => $., + }; $log->debug("regex: $regex"); } }