removing miker-filter series; superceded by filter_record_ids, which has far less...
[migration-tools.git] / marc-cleanup
index 5984c36..58b59a8 100755 (executable)
@@ -33,9 +33,12 @@ open my $EXMARC, '>:utf8', $conf->{exception};
 # edit(), below
 my %commands = ( c => \&print_context,
                  C => \&print_linecontext,
-                 k => \&kill_line,
                  o => \&show_original,
+                 f => \&flip_lines,
+                 k => \&kill_line,
                  m => \&merge_lines,
+                 n => \&next_line,
+                 p => \&prev_line,
                  s => \&substitute,
                  t => \&commit_edit,
                  x => \&dump_record,
@@ -83,7 +86,6 @@ while ( buildrecord() ) {
         }
         $recptr++;
     }
-
     write_record($NUMARC);
 }
 print $NUMARC "</collection>\n";
@@ -188,6 +190,9 @@ sub edit {
     message($msg, 1);
     print_context();
 
+    # stow original problem line
+    $conf->{origline} = $record[$recptr];
+
     while (1) {
         my $line = $term->readline('marc-cleanup>');
         my @chunks = split /\s+/, $line;
@@ -328,10 +333,20 @@ sub substitute {
 }
 
 sub merge_lines {
+    # remove <subfield stuff; extract (probably wrong) subfield code
     $record[$recptr] =~ s/^\s*<subfield code="(.*?)">//;
+    # and move to front of line
     $record[$recptr] = join(' ', $1 , $record[$recptr]);
-    $record[$recptr - 1] =~ s|<subfield>\n||;
+    # tear off trailing subfield tag from preceeding line
+    $record[$recptr - 1] =~ s|</subfield>\n||;
+    # join current line onto preceeding line
     $record[$recptr - 1] = join('', $record[$recptr - 1], $record[$recptr]);
+    # erase current line
+    my @a = @record[0 .. $recptr - 1];
+    my @b = @record[$recptr + 1 .. $#record];
+    @record = (@a, @b);
+    # move record pointer to previous line
+    prev_line();
     print_linecontext();
     return 0;
 }
@@ -351,14 +366,26 @@ sub dump_record {
     return 1;
 }
 
-sub commit_edit { return 1 }
+sub next_line {
+    $recptr++;
+    print_linecontext();
+    return 0;
+}
+
+sub prev_line {
+    $recptr--;
+    print_linecontext();
+    return 0;
+}
 
 sub show_original {
     my ($line_in) = @_;
-    print $OUT "\n$line_in\n";
+    print $OUT "\n", $conf->{origline}, "\n";
     return 0;
 }
 
+sub commit_edit { return 1 }
+
 sub help {
 print $OUT <<HELP;