This is an automated email from the git hooks/post-receive script. js pushed a commit to annotated tag upstream/1.19 in repository libcatmandu-marc-perl.
commit 94386253ffef84928f51cd9b827f9529e755fd6e Author: Patrick Hochstenbach <[email protected]> Date: Thu Jun 15 09:00:12 2017 +0200 Fixing semicolons --- Changes | 1 + lib/Catmandu/MARC.pm | 124 ++++++++++++++++++++++++++------------------------- 2 files changed, 64 insertions(+), 61 deletions(-) diff --git a/Changes b/Changes index 2e172de..d14bada 100644 --- a/Changes +++ b/Changes @@ -1,6 +1,7 @@ Revision history for Catmandu-MARC {{$NEXT}} + - Fixing join subfields per field correctly in marc_spec 1.12 2017-05-29 10:23:23 CEST - Fixing missing space to caret translation in 008 fields for ALEPHSEQ exports diff --git a/lib/Catmandu/MARC.pm b/lib/Catmandu/MARC.pm index 75f63aa..e6ab9c7 100644 --- a/lib/Catmandu/MARC.pm +++ b/lib/Catmandu/MARC.pm @@ -381,11 +381,11 @@ sub marc_spec { my ( $indicator1, $indicator2 ); if ( $field_spec->has_indicator1 ) { $indicator1 = $field_spec->indicator1; - $indicator1 = qr/$indicator1/ + $indicator1 = qr/$indicator1/; } if ( $field_spec->has_indicator2 ) { $indicator2 = $field_spec->indicator2; - $indicator2 = qr/$indicator2/ + $indicator2 = qr/$indicator2/; } # calculate char start @@ -395,9 +395,9 @@ sub marc_spec { if ( $sp->has_char_start ) { $char_start = ( '#' eq $sp->char_start ) ? $sp->char_length * -1 - : $sp->char_start + : $sp->char_start; } - return $char_start + return $char_start; }; # vars we need only for subfields @@ -406,7 +406,7 @@ sub marc_spec { # set the order of subfields @sf_spec = map { $_ } @{ $ms->subfields }; unless ( $pluck ) { - @sf_spec = sort { $a->code cmp $b->code } @sf_spec + @sf_spec = sort { $a->code cmp $b->code } @sf_spec; } # set invert level default @@ -414,20 +414,20 @@ sub marc_spec { if ( $invert ) { $codes = '[^'; $codes .= join $EMPTY, map { $_->code } @sf_spec; - $codes .= ']' + $codes .= ']'; } $invert_chars = sub { my ( $str, $start, $length ) = @_; for ( substr $str, $start, $length ) { - $_ = $EMPTY + $_ = $EMPTY; } - return $str + return $str; }; } else { # return $value_set ASAP - return $value_set if defined $value_set + return $value_set if defined $value_set; } # vars we need for fields and subfields @@ -440,9 +440,9 @@ sub marc_spec { my $to_referred = sub { my ( @values ) = @_; if($nested_arrays) { - push @{$referred}, \@values + push @{$referred}, \@values; } elsif($split) { - push @{$referred}, @values + push @{$referred}, @values; } else { push @{$referred}, join $join_char, @values; } @@ -450,7 +450,7 @@ sub marc_spec { if( defined $field_spec->index_start ) { $index_range = - _get_index_range( $field_spec->index_start, $field_spec->index_end, $#fields ) + _get_index_range( $field_spec->index_start, $field_spec->index_end, $#fields ); } # iterate over fields @@ -464,40 +464,40 @@ sub marc_spec { # filter by indicator if( defined $indicator1 ) { - next unless ( defined $field->[1] && $field->[1] =~ $indicator1) + next unless ( defined $field->[1] && $field->[1] =~ $indicator1); } if( defined $indicator2 ) { #next unless $field->[2] =~ $indicator2; - next unless ( defined $field->[2] && $field->[2] =~ $indicator2) + next unless ( defined $field->[2] && $field->[2] =~ $indicator2); } # filter by index if ( defined $index_range ) { - next unless ( Catmandu::Util::array_includes( $index_range, $tag_index ) ) + next unless ( Catmandu::Util::array_includes( $index_range, $tag_index ) ); } # filter field by subspec if( $field_spec->has_subspecs) { my $valid = $self->_it_subspecs( $data, $field_spec->tag, $field_spec->subspecs, $tag_index ); - next unless $valid + next unless $valid; } - + my @subfields = (); - + if ( $ms->has_subfields ) { # now we dealing with subfields for my $sf (@sf_spec) { # set invert level if ( $invert && !$sf->has_subspecs) { if ( -1 == $sf->index_length && !$sf->has_char_start ) { next if ( $invert_level == 3 ); # skip subfield spec it's already covered - $invert_level = 3 + $invert_level = 3; } elsif ( $sf->has_char_start ) { - $invert_level = 1 + $invert_level = 1; } else { - $invert_level = 2 + $invert_level = 2; } } @@ -506,7 +506,7 @@ sub marc_spec { $code = qr/$code/; for ( my $i = 3 ; $i < @{$field} ; $i += 2 ) { if ( $field->[$i] =~ /$code/ ) { - push @subfield, $field->[ $i + 1 ] + push @subfield, $field->[ $i + 1 ]; } } @@ -516,10 +516,12 @@ sub marc_spec { } if ( $referred && $value_set ) { # return $value_set ASAP - return $value_set + return $value_set; } - next + + next; } + next unless (@subfield); # filter by index @@ -531,18 +533,18 @@ sub marc_spec { @subfield = map { Catmandu::Util::array_includes( $sf_range, $_ ) ? () - : $subfield[$_] - } 0 .. $#subfield + : $subfield[$_]; + } 0 .. $#subfield; } else { # without invert @subfield = map { defined $subfield[$_] ? $subfield[$_] - : () - } @{$sf_range} + : (); + } @{$sf_range}; } - next unless (@subfield) + next unless (@subfield); } # return $value_set ASAP @@ -551,7 +553,7 @@ sub marc_spec { # filter subfield by subspec if( $sf->has_subspecs) { my $valid = $self->_it_subspecs( $data, $field_spec->tag, $sf->subspecs, $tag_index); - next unless $valid + next unless $valid; } # get substring @@ -560,14 +562,14 @@ sub marc_spec { if ( $invert_level == 1 ) { # inverted @subfield = map { - $invert_chars->( $_, $char_start, $sf->char_length ) - } @subfield + $invert_chars->( $_, $char_start, $sf->char_length ); + } @subfield; } else { @subfield = map { - substr $_, $char_start, $sf->char_length - } @subfield + substr $_, $char_start, $sf->char_length; + } @subfield; } } next unless @subfield; @@ -583,7 +585,7 @@ sub marc_spec { my $content = ( defined $char_start ) ? substr $field->[$i], $char_start, $field_spec->char_length : $field->[$i]; - push @contents, $content + push @contents, $content; } next unless (@contents); $to_referred->(@contents); @@ -593,12 +595,12 @@ sub marc_spec { if($append) { return [$referred] if $split; - return $referred + return $referred; } elsif($split) { - return [$referred] + return [$referred]; } - return join $join_char, @{$referred} + return join $join_char, @{$referred}; } sub _it_subspecs { @@ -609,7 +611,7 @@ sub _it_subspecs { next if ( ref $subspec->$side eq 'MARC::Spec::Comparisonstring' ); # only set new index if subspec field tag equals spec field tag!! next unless ( $tag eq $subspec->$side->field->tag ); - $subspec->$side->field->set_index_start_end( $tag_index ) + $subspec->$side->field->set_index_start_end( $tag_index ); } }; @@ -620,17 +622,17 @@ sub _it_subspecs { $set_index->( $or_subspec ); $valid = $self->_validate_subspec( $or_subspec, $data ); # at least one of them is true (OR) - last if $valid + last if $valid; } } else { # repeated SubSpecs (AND) $set_index->( $subspec ); $valid = $self->_validate_subspec( $subspec, $data ); # all of them have to be true (AND) - last unless $valid + last unless $valid; } } - return $valid + return $valid; } sub _validate_subspec { @@ -644,10 +646,10 @@ sub _validate_subspec { $subspec->left, { '-split' => 1 } ); # split should result in an array ref - return 0 unless defined $left_subterm + return 0 unless defined $left_subterm; } else { - push @{$left_subterm}, $subspec->left->comparable + push @{$left_subterm}, $subspec->left->comparable; } } @@ -658,77 +660,77 @@ sub _validate_subspec { { '-split' => 1 } ); # split should result in an array ref unless( defined $right_subterm ) { - $right_subterm = [] + $right_subterm = []; } } else { - push @{$right_subterm}, $subspec->right->comparable + push @{$right_subterm}, $subspec->right->comparable; } if($subspec->operator eq '?') { - return (@{$right_subterm}) ? 1 : 0 + return (@{$right_subterm}) ? 1 : 0; } if($subspec->operator eq '!') { - return (@{$right_subterm}) ? 0 : 1 + return (@{$right_subterm}) ? 0 : 1; } if($subspec->operator eq '=') { foreach my $v ( @{$left_subterm->[0]} ) { - return 1 if List::Util::any {$v eq $_} @{$right_subterm} + return 1 if List::Util::any {$v eq $_} @{$right_subterm}; } } if($subspec->operator eq '!=') { foreach my $v ( @{$left_subterm->[0]} ) { - return 0 if List::Util::any {$v eq $_} @{$right_subterm} + return 0 if List::Util::any {$v eq $_} @{$right_subterm}; } - return 1 + return 1; } if($subspec->operator eq '~') { foreach my $v ( @{$left_subterm->[0]} ) { - return 1 if List::Util::any {$v =~ m?$_?} @{$right_subterm} + return 1 if List::Util::any {$v =~ m?$_?} @{$right_subterm}; } } if($subspec->operator eq '!~') { foreach my $v ( @{$left_subterm->[0]} ) { - return 0 if List::Util::any {$v =~ m?$_?} @{$right_subterm} + return 0 if List::Util::any {$v =~ m?$_?} @{$right_subterm}; } - return 1 + return 1; } - return 0 + return 0; } sub parse_marc_spec { my ( $self, $marc_spec ) = @_; - return MARC::Spec::Parser->new( $marc_spec )->marcspec + return MARC::Spec::Parser->new( $marc_spec )->marcspec; } sub _get_index_range { my ( $index_start, $index_end, $last_index ) = @_; if ( '#' eq $index_start ) { - if ( '#' eq $index_end or 0 == $index_end ) { return [$last_index] } + if ( '#' eq $index_end or 0 == $index_end ) { return [$last_index]; } $index_start = $last_index; $index_end = $last_index - $index_end; - if ( 0 > $index_end ) { $index_end = 0 } + if ( 0 > $index_end ) { $index_end = 0; } } else { if ( $last_index < $index_start ) { - return [$index_start] + return [$index_start]; } # this will result to no hits } if ( '#' eq $index_end or $index_end > $last_index ) { - $index_end = $last_index + $index_end = $last_index; } return ( $index_start <= $index_end ) ? [ $index_start .. $index_end ] - : [ $index_end .. $index_start ] + : [ $index_end .. $index_start ]; } sub marc_xml { -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libcatmandu-marc-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits
