marc_original_order support for leader and fixed fields
authorDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 12 Mar 2012 19:00:00 +0000 (19:00 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 12 Mar 2012 19:00:00 +0000 (19:00 +0000)
git-svn-id: svn+ssh://mjesec/home/dpavlin/svn/webpac2/trunk@1368 07558da8-63fa-0310-ba24-9fe276d99e06

lib/WebPAC/Normalize/MARC.pm
t/3-normalize-marc.t

index f2755a7..c77e5b4 100644 (file)
@@ -270,7 +270,7 @@ Setup fields within MARC leader or get leader
 sub marc_leader {
        my ($offset,$value) = @_;
 
-       if ($offset) {
+       if ( defined $offset && defined $value ) {
                $marc_leader->[ $marc_record_offset ]->{ $offset } = $value;
        } else {
                
@@ -569,14 +569,19 @@ sub marc_original_order {
        my $r = $rec->{$from};
        die "record field $from isn't array ",dump( $rec ) unless (ref($r) eq 'ARRAY');
 
-       my ($i1,$i2) = _get_marc_indicators( $to );
        warn "## marc_original_order($to,$from) source = ", dump( $r ),$/ if ($debug > 1);
 
        foreach my $d (@$r) {
 
                if ( ! ref($d) ) {
                        # scalar
-                       warn "## marc_original_order($to,$from) skipped: ",dump( $d );
+                       if ( $to eq 'leader' ) {
+                               marc_leader( 0, $d );
+                       } elsif ( $to < 100 ) {
+                               marc_fixed( $to, 0, $d );
+                       } else {
+                               warn "## marc_original_order($to,$from) skipped: ",dump( $d );
+                       }
                        next;
                }
 
@@ -591,6 +596,10 @@ sub marc_original_order {
 
                warn "#--> d: ",dump($d), "\n#--> sfs: ",dump(@sfs),$/ if ($debug > 2);
 
+               my ($i1,$i2) = _get_marc_indicators( $from );
+               $i1 = $d->{i1} if exists $d->{i1};
+               $i2 = $d->{i2} if exists $d->{i2};
+       
                my $m = [ $to, $i1, $i2 ];
 
                while (my $sf = shift @sfs) {
@@ -641,7 +650,7 @@ Clone marc records from input file, whole or just some fields/indicators
 
 sub marc_clone {
        warn "### marc_clone rec: ",dump( $rec ) if $debug > 2;
-       foreach my $f ( keys %$rec ) {
+       foreach my $f ( sort keys %$rec ) {
                warn "## marc_clone $f\n" if $debug;
                marc_original_order( $f, $f );
        }
index ea50575..1f26929 100755 (executable)
@@ -3,7 +3,7 @@
 use strict;
 use lib 'lib';
 
-use Test::More tests => 330;
+use Test::More tests => 331;
 
 BEGIN {
        use_ok( 'WebPAC::Test' );
@@ -138,53 +138,27 @@ sub test_marc_clone {
 
        ok(my $marc = WebPAC::Normalize::MARC::_get_marc_fields(), "_get_marc_fields");
 #      diag "rec = ",dump( $rec );
-#      diag "marc = ",dump( $marc );
-#      diag "expect = ",dump( $marc );
+       diag "marc = ",dump( $marc );
+       diag "expect = ",dump( $expect );
 
        is_deeply( $marc, $expect, 'marc_clone same' );
+diag "marc_leader = ",dump( marc_leader );
+       cmp_ok( WebPAC::Normalize::MARC::marc_leader()->{0}, 'eq', $rec->{leader}->[0], 'leader' );
 
 }
 
-my $rec = {
-  "000"  => [2, 2],
-  "001"  => ["ocm00734950 "],
+$rec = {
+  "000"  => [2],
+  "001"  => ["ocm00734950"],
   "003"  => ["OCoLC"],
-  "005"  => ["19830824185243.0"],
-  "008"  => ["731105s1962    nyua     a    00000 eng  "],
-  "010"  => [
-              { a => "   62015770 ", i1 => " ", i2 => " ", subfields => ["a", 0] },
-            ],
   "040"  => [
               {
                 a => "DLC",
                 c => "BOS",
                 d => "TML",
-                i1 => " ",
-                i2 => " ",
-                subfields => ["a", 0, "c", 0, "d", 0, "d", 1, "d", 2],
-              },
-            ],
-  "041"  => [{ a => "engfre", i1 => 1, i2 => " ", subfields => ["a", 0] }],
-  "049"  => [{ a => "TMLM", i1 => " ", i2 => " ", subfields => ["a", 0] }],
-  "050"  => [
-              {
-                a => "RC340",
-                b => ".P513 1806a",
-                i1 => 0,
-                i2 => " ",
-                subfields => ["a", 0, "b", 0],
-              },
-            ],
-  "096"  => [
-              { a => "WM 11 P653t 1962", i1 => " ", i2 => " ", subfields => ["a", 0] },
-            ],
-  100    => [
-              {
-                a => "Pinel, Philippe,",
-                d => "1745-1826.",
-                i1 => 1,
-                i2 => 0,
-                subfields => ["a", 0, "d", 0],
+                i1 => "1",
+                i2 => "2",
+                subfields => ["a", 0, "c", 0, "d", 0],
               },
             ],
   245    => [
@@ -193,96 +167,18 @@ my $rec = {
                 a => "A treatise on insanity /",
                 c => "translated from the French by D. D. Davis, with an introd. by Paul F. Cranefield.",
                 subfields => [1, 0, "a", 0, "c", 0],
-              },
-            ],
-  260    => [
-              {
-                a => "New York :",
-                b => "Published under the auspices of the Library of the New York Academy of Medicine by Hafner Pub. Co.,",
-                c => "1962.",
-                i1 => 0,
-                i2 => " ",
-                subfields => ["a", 0, "b", 0, "c", 0],
-              },
-            ],
-  300    => [
-              {
-                a => "lv, 288 p. :",
-                b => "ill. ;",
-                c => "21 cm.",
-                i1 => " ",
-                i2 => " ",
-                subfields => ["a", 0, "b", 0, "c", 0],
-              },
-            ],
-  440    => [
-              {
-                a => "History of medicine ;",
-                i1 => " ",
-                i2 => 0,
-                subfields => ["a", 0, "v", 0],
-                v => "no. 14",
-              },
-            ],
-  500    => [
-              {
-                a => "\"Facsimile of the London 1806 edition.\"",
-                i1 => " ",
-                i2 => " ",
-                subfields => ["a", 0],
-              },
-              {
-                a => "Translation of: Traite medico-philosophique sur l'alienation mentale.",
-                i1 => " ",
-                i2 => " ",
-                subfields => ["a", 0],
-              },
-            ],
-  590    => [
-              {
-                a => "L21942,WM ,purc,  10.00,rtr,1-78",
-                i1 => " ",
-                i2 => " ",
-                subfields => ["a", 0],
-              },
-            ],
-  650    => [
-              { " " => 2, a => "Psychiatry", subfields => [" ", 0, "a", 0] },
-              { " " => 2, a => "Mental Disorders", subfields => [" ", 0, "a", 0] },
-            ],
-  852    => [
-              {
-                8 => ".1",
-                9 => "`;11623`07/02/1991 08:09````````````````B^61^R04CZ4^^^^1^101^1^1000^^`1^11623^54969,29361^^`2^0^0^2^0^1^0^4`",
-                b => "LU GENCOL",
-                d => "TWO WEEKS",
-                h => "WM 11 P653t 1962",
-                i => 43,
-                i1 => " ",
-                i2 => " ",
-                o => "available",
-                p => "R04CZ4",
-                subfields => [8, 0, "b", 0, "h", 0, "t", 0, "p", 0, "i", 0, "d", 0, "o", 0, 9, 0],
-                t => 1,
-              },
-            ],
-  911    => [{ a => 61, i1 => " ", i2 => " ", subfields => ["a", 0] }],
-  979    => [
-              {
-                a => "USERS",
-                b => 19831011,
-                c => "TAPE",
-                d => "ARCH",
-                i1 => " ",
-                i2 => " ",
-                subfields => ["a", 0, "b", 0, "c", 0, "d", 0],
+               i1 => '0',
+               i2 => '1',
               },
             ],
   leader => ["01237cam  2200301Ii 4500"],
 };
 
 test_marc_clone( $rec, [
-   [900, " ", " ", "a", "900a", "b", "900b"],
-   [901, " ", " ", "c", "901c"],
+  ["000", 2],
+  ["001", "ocm00734950"],
+  ["003", "OCoLC"],
+  ["040", 1,2, "a" => "DLC", "c" => "BOS", "d" => "TML"],
+  [ 245,  0,1, 1 => 2, "a" => "A treatise on insanity /", "c" => "translated from the French by D. D. Davis, with an introd. by Paul F. Cranefield." ],
 ] );