/[webpac]/branches/hidra/all2xml.pl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /branches/hidra/all2xml.pl

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 62 by dpavlin, Fri Jul 4 20:11:48 2003 UTC revision 81 by dpavlin, Tue Jul 8 22:13:56 2003 UTC
# Line 58  my %type2tag = ( Line 58  my %type2tag = (
58          'isis' => 'isis',          'isis' => 'isis',
59          'excel' => 'column',          'excel' => 'column',
60          'marc' => 'marc',          'marc' => 'marc',
61            'feed' => 'feed'
62  );  );
63    
64  sub data2xml {  sub data2xml {
# Line 230  sub data2xml { Line 231  sub data2xml {
231    
232          # dump formatted output in <html>          # dump formatted output in <html>
233          if ($html) {          if ($html) {
234                  $xml .= xmlify("html",$html);                  #$xml .= xmlify("html",$html);
235                    $xml .= "<html><![CDATA[ $html ]]></html>";
236          }          }
237                    
238          if ($xml) {          if ($xml) {
# Line 283  print STDERR "reading ./import_xml/$type Line 285  print STDERR "reading ./import_xml/$type
285                  }                  }
286          }          }
287    
288            my $fake_dir = 1;
289            sub fakeprogress {
290                    my $current = shift @_;
291    
292                    my @ind = ('-','\\','|','/','-','\\','|','/', '-');
293    
294                    $last_p += $fake_dir;
295                    $fake_dir = -$fake_dir if ($last_p > 1000 || $last_p < 0);
296                    if ($last_p % 10 == 0) {
297                            printf STDERR ("%5d / %5s [%-51s]\r",$current,"?"," " x ($last_p/20).$ind[($last_p/20) % $#ind]);
298                    }
299            }
300    
301          # now read database          # now read database
302  print STDERR "using: $type...\n";  print STDERR "using: $type...\n";
303    
# Line 373  print STDERR "using: $type...\n"; Line 388  print STDERR "using: $type...\n";
388                          }                          }
389                  }                  }
390          } elsif ($type_base eq "marc") {          } elsif ($type_base eq "marc") {
391          ## XXX  
392                  use MARC;                  use MARC;
393                                    
394                  $import2cp = Text::Iconv->new($config->{marc_codepage},$codepage);                  $import2cp = Text::Iconv->new($config->{marc_codepage},$codepage);
# Line 382  print STDERR "using: $type...\n"; Line 397  print STDERR "using: $type...\n";
397                  # optional argument is format                  # optional argument is format
398                  my $format = x($config->{format}) || 'usmarc';                  my $format = x($config->{format}) || 'usmarc';
399    
                 my %id_stored;  # to aviod duplicates  
   
400                  print STDERR "Reading MARC file '$marc_file'\n";                  print STDERR "Reading MARC file '$marc_file'\n";
401    
402                  my $marc = new MARC;                  my $marc = new MARC;
# Line 392  print STDERR "using: $type...\n"; Line 405  print STDERR "using: $type...\n";
405                          }) || die "Can't open MARC file '$marc_file'";                          }) || die "Can't open MARC file '$marc_file'";
406    
407                  my $i=0;        # record nr.                  my $i=0;        # record nr.
                 my $inc=1;  
                 my $max_i=1000;  
408    
409                  my $rec;                  my $rec;
410    
411                  while ($marc->nextmarc(1)) {                  while ($marc->nextmarc(1)) {
412    
413                          # XXX                          # XXX
414                          progress($i, $max_i);                          fakeprogress($i++);
                         $i += $inc;  
                         $inc = -$inc if ($i > $max_i || $i < 0);  
415    
416                          my $swishpath = $database."#".$i;                          my $swishpath = $database."#".$i;
417    
# Line 414  print STDERR "using: $type...\n"; Line 423  print STDERR "using: $type...\n";
423                                  print "Document-Type: XML\n\n$xml\n";                                  print "Document-Type: XML\n\n$xml\n";
424                          }                          }
425                  }                  }
426            } elsif ($type_base eq "feed") {
427    
428                    $import2cp = Text::Iconv->new($config->{feed_codepage},$codepage);
429                    my $prog = x($config->{prog}) || die "$database doesn't have 'prog' defined!";
430    
431                    print STDERR "Reading feed from program '$prog'\n";
432    
433                    open(FEED,"feeds/$prog |") || die "can't start $prog: $!";
434    
435                    my $i=1;        # record nr.
436    
437                    my $data;
438                    my $line=1;
439    
440                    while (<FEED>) {
441                            chomp;
442    
443                            if (/^$/) {
444                                    my $swishpath = $database."#".$i++;
445    
446                                    if (my $xml = data2xml($type_base,$data,$add_xml,$cfg,$database)) {
447                                            $xml = $cp2utf->convert($xml);
448                                            use bytes;      # as opposed to chars
449                                            print "Path-Name: $swishpath\n";
450                                            print "Content-Length: ".(length($xml)+1)."\n";
451                                            print "Document-Type: XML\n\n$xml\n";
452                                    }
453                                    $line = 1;
454                                    $data = {};
455                                    next;
456                            }
457    
458                            $line = $1 if (s/^(\d+):\s*//);
459                            $data->{$line++} = $_;
460    
461                            fakeprogress($i);
462    
463                    }
464          }          }
465  }  }
466    
# Line 426  __END__ Line 473  __END__
473    
474  =head1 NAME  =head1 NAME
475    
476  isis2xml.pl - read isis file and dump XML  all2xml.pl - read various file formats and dump XML for SWISH-E
477    
478  =head1 DESCRIPTION  =head1 DESCRIPTION
479    
480  This command will read ISIS data file using OpenIsis perl module and  This command will read ISIS data file using OpenIsis perl module, MARC
481  create XML file for usage with I<SWISH-E>  records using MARC module and optionally Micro$oft Excel files to
482  indexer. Dispite it's name, this script B<isn't general xml generator>  create one XML file for usage with I<SWISH-E> indexer. Dispite it's name,
483  from isis files (isis allready has something like that). Output of this  this script B<isn't general xml generator> from isis files (isis allready
484  script is tailor-made for SWISH-E.  has something like that). Output of this script is tailor-made for SWISH-E.
485    
486    =head1 BUGS
487    
488    Documentation is really lacking. However, in true Open Source spirit, source
489    is best documentation. I even made considerable effort to comment parts
490    which are not intuitively clear, so...
491    
492  =head1 AUTHOR  =head1 AUTHOR
493    

Legend:
Removed from v.62  
changed lines
  Added in v.81

  ViewVC Help
Powered by ViewVC 1.1.26