make biblio_record_entry be biblio_record_entry_legacy
[migration-tools.git] / marc_cleanup
index e79180a..524109e 100755 (executable)
@@ -111,7 +111,7 @@ while ( buildrecord() ) {
         # subfields can't be non-alphanumeric
         if ($record[$ptr] =~ /<subfield code="(.*?)"/) {
             if ($1 =~ /\P{IsAlnum}/ or $1 eq '') {
-                edit("Junk in subfield code/Null subfield code");
+                edit("Junk in subfield code/Null subfield code ($1)");
                 next;
             }
         }
@@ -205,13 +205,28 @@ sub do_automated_cleanups {
         }
 
         # automatable subfield maladies
-        $record[$ptr] =~ s/code=" ">c/code="c">/;
-        $record[$ptr] =~ s/code=" ">\$/code="c">\$/;
+        if ($record[$ptr] =~ /code=" ">c/) {
+            message('Fixing probable subfield c, scenario 1');
+            $record[$ptr] =~ s/code=" ">c/code="c">/;
+        }
+        if ($record[$ptr] =~ /code=" ">\$/) {
+            message('Fixing probable subfield c, scenario 2');
+            $record[$ptr] =~ s/code=" ">\$/code="c">\$/;
+        }
 
         if ($c->{'fix-subfield'}) {
-            $record[$ptr] =~ s/code="&amp;">/code="$c->{'fix-subfield'}">/;
-            $record[$ptr] =~ s/code="\P{IsAlnum}">/code="$c->{'fix-subfield'}">/;
-            $record[$ptr] =~ s/code="">/code="$c->{'fix-subfield'}">/;
+            if ($record[$ptr] =~ /code="&amp;">/) {
+                message('Fixing &amp; for subfield code');
+                $record[$ptr] =~ s/code="&amp;">/code="$c->{'fix-subfield'}">/;
+            }
+            if ($record[$ptr] =~ /code="(.*?\P{IsAlnum}.*?)">/) {
+                message("Fixing non-alphanumeric subfield code: $1 -> " . $c->{'fix-subfield'});
+                $record[$ptr] =~ s/code=".*?\P{IsAlnum}.*?">/code="$c->{'fix-subfield'}">/;
+            }
+            if ($record[$ptr] =~ /code="">/) {
+                message('Fixing null subfield code');
+                $record[$ptr] =~ s/code="">/code="$c->{'fix-subfield'}">/;
+            }
         }
     }
     return 0;
@@ -645,6 +660,13 @@ sub initialize {
     $c->{'renumber-tag'} = 903 unless defined $c->{'renumber-tag'};
     $c->{'renumber-subfield'} = 'a' unless defined $c->{'renumber-subfield'};
     $c->{window} = 9;
+       if ($c->{marcfile} and $c->{prefix}) { abort('You can not declare a marc file and prefix.'); }
+    if ($c->{marcfile}) {
+        $c->{output} = join('.',$c->{marcfile},'clean')
+          unless $c->{output};
+        $c->{exception} = join('.',$c->{marcfile},'exception')
+          unless $c->{exception};
+    }
     if ($c->{prefix}) {
         $c->{output} = join('.',$c->{prefix},'clean','marc','xml')
           unless $c->{output};
@@ -670,6 +692,12 @@ sub initialize {
       if ( $c->{'original-tag'} and $c->{trash}->has($c->{'original-tag'}) );
 }
 
+sub abort {
+    my $msg = shift;
+    print STDERR "$0: $msg", "\n";
+    exit 1;
+}
+
 sub show_help {
     print <<HELP;
 Usage is: marc_cleanup [OPTIONS] <filelist>