],
);
+Returns number of records produced.
+
=cut
sub marc_template {
our $_template;
- $_template->{fields_re} = {
- isis => join('|', keys %$from_subfields ),
- marc => join('|', keys %$to_subfields ),
- };
+ $_template->{isis}->{fields_re} = join('|', keys %$from_subfields );
+ $_template->{marc}->{fields_re} = join('|', keys %$to_subfields );
my @marc_out;
sub _parse_template {
my ( $name, $templates ) = @_;
- my $fields_re = $_template->{fields_re}->{ $name } || die "can't find $name in ",dump( $_template->{fields_re} );
+ my $fields_re = $_template->{$name}->{fields_re} || die "can't find $name in ",dump( $_template->{$name}->{fields_re} );
foreach my $template ( @{ $templates } ) {
our $count = {};
warn "### r = ",dump( $r );
- my ( $new_r, $from_count, $to_count );
+ my ( $from_mapping, $to_mapping, $from_count, $to_count );
foreach my $sf ( keys %{$r} ) {
# skip everything which isn't one char subfield (e.g. 'subfields')
next unless $sf =~ m/^\w$/;
die "can't find subfield rename for $sf/$nr in ", dump( $subfields_rename );
warn "### rename $sf/$nr to ", dump( $rename_to->[$nr] ), $/;
my ( $to_sf, $to_nr ) = @{ $rename_to->[$nr] };
- $new_r->{ $to_sf }->[ $to_nr ] = [ $sf => $nr ];
+ $from_mapping->{ $sf }->[ $nr ] = [ $to_sf => $to_nr ];
+ $to_mapping->{ $to_sf }->[ $to_nr ] = [ $sf => $nr ];
$to_count->{ $to_sf }++;
}
- warn "### new_r = ",dump( $new_r );
+ warn "### to_mapping = ",dump( $to_mapping );
my $count_key = {
from => dump( $from_count ),
# this defines order of traversal
foreach ( qw/isis:from marc:to/ ) {
my ($name,$count_name) = split(/:/);
- warn "## traverse $name $count_name\n";
my $ckey = $count_key->{$count_name} || die "can't find count_key $count_name in ",dump( $count_key );
my $template = $_template->{$name}->{pos}->{ $ckey } || next;
$processed_templates++;
- warn "### selected template: |$template|\n";
+ warn "### traverse $name $count_name selected template: |$template|\n";
our $fill_in = {};
my ( $name, $r, $sf, $nr ) = @_;
my ( $from_sf, $from_nr, $v );
if ( $name eq 'marc' ) {
- ( $from_sf, $from_nr ) = @{ $new_r->{$sf}->[$nr] };
+ ( $from_sf, $from_nr ) = @{ $to_mapping->{$sf}->[$nr] };
} else {
( $from_sf, $from_nr ) = ( $sf, $nr );
}
die "requested subfield $from_sf/$from_nr but it's ",dump( $v );
}
}
- my $fields_re = $_template->{fields_re}->{ $name } || die "can't find $name in ",dump( $_template->{fields_re} );
+ my $fields_re = $_template->{$name}->{fields_re} || die "can't find $name in ",dump( $_template->{$name}->{fields_re} );
warn "#### $sf <<<< $fields_re\n";
$sf =~ s/($fields_re)(\d+)/fill_in($name,$r,$1,$2)/ge;
warn "#### >>>> $sf with fill_in = ",dump( $fill_in ),$/;
warn "## template: |$template|\n## _template->$name = ",dump( $_template->{$name} );
- $sf_pos = $#m;
-
foreach my $sf ( @{ $_template->{$name}->{order}->{$template} } ) {
my ( $sf, $nr ) = @$sf;
my $v = $fill_in->{$sf}->[$nr] || die "can't find fill_in $sf/$nr";
+ if ( $name eq 'isis') {
+ ( $sf, $nr ) = @{ $from_mapping->{$sf}->[$nr] };
+ }
warn "++ $sf/$nr |$v|\n";
push @$m, ( $sf, $v );
}
}
- warn "### marc_template produced following MARC records: ",dump( @marc_out );
+ my $recs = 0;
foreach my $marc ( @marc_out ) {
- warn "+++ ",dump( $marc );
+ warn "+++ ",dump( $marc ),$/;
WebPAC::Normalize::_marc_push( $marc );
+ $recs++;
}
+
+ warn "### marc_template produced $recs MARC records: ",dump( @marc_out ), $/;
}
1;
use strict;
use blib;
-use Test::More tests => 4;
+use Test::More tests => 7;
BEGIN {
use_ok( 'WebPAC::Test' );
'i' => 'i-4-1',
'w' => 'w-4-1',
},{
- 'a' => 'a-4-1',
- 'v' => 'v-4-1',
- 'i' => 'i-4-1',
+ 'a' => 'a-5-1',
+ 'v' => 'v-5-1',
+ 'i' => 'i-5-1',
},{
- 'a' => 'a-4-1',
- 'i' => 'i-4-1',
- 'w' => 'w-4-1',
+ 'a' => 'a-6-1',
+ 'i' => 'i-6-1',
+ 'w' => 'w-6-1',
+ },{
+ 'a' => 'a-7-1',
}],
};
is_deeply( $marc,
[
[440, " ", " ", "a", "a-1-1", "x", "x-1-1", "v", "v-1-1", "n", "h-1-1", "p", "i-1-1", "v", "w-1-1", ],
- [440, " ", " ", "a", "a-2-1", "p", "i-2-1", "v", "v-2-1"],
- [440, " ", " ", "a", "a-3-1", "p", "i-3-1", "v", "v-3-1"],
+ [440, " ", " ", "a", "a-2-1", "v", "v-2-1", "p", "i-2-1"],
+ [440, " ", " ", "a", "a-3-1", "v", "v-3-1", "p", "i-3-1"],
[440, " ", " ", "a", "a-4-1", "v", "v-4-1", "p", "i-4-1", "v", "w-4-1"],
- [440, " ", " ", "a", "a-5-1"],
+ [440, " ", " ", "a", "a-5-1", "v", "v-5-1", "p", "i-5-1"],
+ [440, " ", " ", "a", "a-6-1", "p", "i-6-1", "v", "w-6-1"],
+ [440, " ", " ", "a", "a-7-1"],
],
'is_deeply');