/[webpac-proto]/isis2stream.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 /isis2stream.pl

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

revision 1.7 by dpavlin, Sun Jun 16 18:11:14 2002 UTC revision 1.14 by dpavlin, Mon Jun 24 17:08:20 2002 UTC
# Line 8  use common; Line 8  use common;
8    
9  my %opts;  my %opts;
10    
11  getopt('dm', \%opts);  getopts('d:m:q', \%opts);
12    
13  die "usage: $0 -d [database_dir] -m [database1,database2] " if (! %opts);  die "usage: $0 -d [database_dir] -m [database1,database2] " if (! %opts);
14    
# Line 28  open(MPS,"| $common::mpsindex -d $common Line 28  open(MPS,"| $common::mpsindex -d $common
28  print S $common::mps_header;  print S $common::mps_header;
29  print MPS $common::mps_header;  print MPS $common::mps_header;
30    
31    #--------------------------------------------------------------------
32    # init array in_mps_header for config checks later
33    
34    my %in_mps_header;
35    foreach (split(/\n/,$common::mps_header)) {
36            if (/^F /) {
37                    my (undef,$isis,$mps,undef) = split(/ /,$_,4);
38                    $in_mps_header{$mps}=$isis;
39            }
40    }
41    require "./search/config.pm";
42    
43    #--------------------------------------------------------------------
44    # read database configuration, store database names
45    open(CF,$common::database_cf) || die "$common::database_cf: $!";
46    my %DatabaseDescriptions;
47    while(<CF>) {
48            chomp;
49            if (/^database-name:([^=]+)=(.*)$/) {
50                    my ($db_name,$db_desc) = ($1,$2);
51                    $db_desc=~s/^##\w+##//g;
52                    $DatabaseDescriptions{$db_name}=$db_desc;
53            }
54    }
55    close(CF);
56    
57    #--------------------------------------------------------------------
58  #  #
59  # expand(nr,"space separated string");  # expand(nr,"space separated string");
60  #  #
61    
62  sub expand {  sub expand {
63          my $nr = shift @_;          my $nr = shift @_;
64            die "$nr is not in mps_header" if (!$in_mps_header{$nr});
65          my $out = "";          my $out = "";
66          while (my $fld = c_852_iso(shift @_)) {          while (my $fld = c_852_iso(shift @_)) {
67                  my @words=split(/\s+/,$fld);                  my @words=split(/\s+/,$fld);
# Line 50  sub expand { Line 78  sub expand {
78    
79  #--------------------------------------------------------------------  #--------------------------------------------------------------------
80    
 ################### ERASE###############3  
   
 # expand sub-fileds from ISIS field  
 # (^a.....^b....)  
 my %data;       # FIX  
 sub ex_sf {  
         %data = ();  
         my $in = $_[0];  
         if (my $tmp = $in) {  
 #               $tmp =~ tr/џ/ƾ/; # ISIS -> iso-8859-2  
                 $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/;  
                 if ($in =~ m/^\^/) {  
                         my @sub = split(/\^/,$in);  
                         foreach my $fld (@sub) {  
                                 $data{$1} = $2 if ($fld =~ m/^(\w+)(.+)$/)  
                         }  
                 } else {  
                         $data{all} = $in."<-- iz polja bez podpolja";  
                 }  
         }  
 }  
   
 # dump all sub-fields  
 sub all_sf {  
         my $nr = shift @_;  
         my $out="";  
         foreach my $k (sort keys %data) {  
                 $out.=expand($nr,$data{$k});  
         }  
         return $out;  
 }  
   
 sub all_sf_r {  
         my $nr = shift @_;  
         my $out="";  
         foreach my $k (sort {$b cmp $a} keys %data) {  
                 $out.=expand($nr,$data{$k});  
         }  
         return $out;  
 }  
   
 sub all_sf2bib {  
         my $nr = shift @_;  
         my $max_in_line=shift @_ || 0;  
         my $sep = shift @_ || ' ';  
         my $out;  
         my $i=0;  
         my $bib = "";  
         foreach my $k (sort keys %data) {  
                 if ($out) {  
                         $out.= $sep.$data{$k};  
                 } else {  
                         $out = $data{$k};  
                 }  
                 $i++;  
                 if ($i == $max_in_line) {  
                         $bib .= $nr." ".$out."\n" if ($out);  
                         $i=0;  
                         $out="";  
                 }  
         }  
         $bib .= $nr." ".$out."\n" if ($out);  
         return $bib;  
 }  
   
 sub all_sf2bib_r {  
         my $nr = shift @_;  
         my $max_in_line=shift @_ || 0;  
         my $sep = shift @_ || ' ';  
         my $out;  
         my $i=0;  
         my $bib = "";  
         foreach my $k (sort {$b cmp $a} keys %data) {  
                 if ($out) {  
                         $out.= $sep.$data{$k};  
                 } else {  
                         $out = $data{$k};  
                 }  
                 $i++;  
                 if ($i == $max_in_line) {  
                         $bib .= $nr." ".$out."\n" if ($out);  
                         $i=0;  
                         $out="";  
                 }  
         }  
         $bib .= $nr." ".$out."\n" if ($out);  
         return $bib;  
 }  
   
 #--------------------------------------------------------------------  
   
81  sub c_852_iso {  sub c_852_iso {
82          my $tmp = $_[0];          my $tmp = $_[0];
83          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/ if ($tmp);          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/ if ($tmp);
84          return $tmp;          return $tmp;
85  }  }
86    
87    sub c_iso_852 {
88            my $tmp = $_[0];
89            $tmp =~ tr/ܫꔼȺ̪㍐슂ٝ// if ($tmp);
90            return $tmp;
91    }
92    
93  sub c_852_czs {  sub c_852_czs {
94          my $tmp = $_[0];          my $tmp = $_[0];
95          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/;          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/;
# Line 157  sub c_852_czs { Line 100  sub c_852_czs {
100    
101  #--------------------------------------------------------------------  #--------------------------------------------------------------------
102    
103  # $mps .= sf_to_mps($subfiled_hash,"subfields",mps_id);  # $mps .= sf_to_mps("subfields",$subfiled_hash)
104  #  #
105  # subfields options:  # subfields options:
106  #       * - all (no sort)  #       * - all (no sort)
# Line 188  sub subfields_str_2_arr { Line 131  sub subfields_str_2_arr {
131    
132  sub sf_to_mps {  sub sf_to_mps {
133          my ($sf_hash,$subfields,$mps_id) = @_;          my ($sf_hash,$subfields,$mps_id) = @_;
134            die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id});
135          my $out="";          my $out="";
136          my @sf_arr = subfields_str_2_arr($subfields,$sf_hash);          my @sf_arr = subfields_str_2_arr($subfields,$sf_hash);
137    
# Line 207  sub isis_to_mps { Line 151  sub isis_to_mps {
151          my $mps_id = shift @_ || die;          my $mps_id = shift @_ || die;
152          my $subfields = shift @_;          my $subfields = shift @_;
153    
154            die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id});
155    
156          my $i=0;          my $i=0;
157          my $out = "";          my $out = "";
158    
# Line 250  sub isis_to_bib { Line 196  sub isis_to_bib {
196          my $group_sort = shift @_ || '';          my $group_sort = shift @_ || '';
197          my $sep = shift @_ || ' ';          my $sep = shift @_ || ' ';
198    
199            my $fld = $bib_id; $fld =~ s/^%//;
200            die "$fld is not in FieldNames" if (!$default::FieldNames{$fld});
201    
202          my $i=0;          my $i=0;
203    
204          my $bib="";          my $bib="";
# Line 342  sub isis_sf { Line 291  sub isis_sf {
291  }  }
292    
293  #--------------------------------------------------------------------  #--------------------------------------------------------------------
 #--------------------------------------------------------------------  
   
294    
295  my $last_tell=0;  my $last_tell=0;
296    
# Line 383  foreach my $isis_db (@isis_dbs) { Line 330  foreach my $isis_db (@isis_dbs) {
330    
331                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);
332                  if ($pcnt != $last_pcnt) {                  if ($pcnt != $last_pcnt) {
333                          printf MPS ("M %5d / %5d -- %-2d %%\n",$row->{mfn},$max_rowid,$pcnt);                          printf MPS ("M %5d / %5d -- %-2d %%\n",$row->{mfn},$max_rowid,$pcnt) if (! $opts{q});
334                          $last_pcnt = $pcnt;                          $last_pcnt = $pcnt;
335                  }                  }
336    
337                  my $headline;                  my $headline;
338                  $headline .= isis_sf($row,'200','a',"'");                  $headline .= isis_sf($row,'200','a');
339                  $headline .= isis_sf($row,'200','e'," : ","'");                  $headline .= isis_sf($row,'200','e'," : ");
340                    $headline .= isis_sf($row,'200','f'," / ");
341                    $headline .= isis_sf($row,'210','d'," , ");
342    
343                    # remove newlines, compress spaces
344                    $headline =~ s/[\n\r]//g;
345                    $headline =~ s/^\s+//g;
346                    $headline =~ s/\s+$//g;
347    
348                  # author                  # author
349                  $bib .= isis_to_bib($row,'700','%700+','*',2,'<');                  $bib .= isis_to_bib($row,'700','%700+','ab',undef,'>',', ');
350                  $bib .= isis_to_bib($row,'701','%700+','*',2,'<');                  $bib .= isis_to_bib($row,'701','%700+','ab',undef,'>',', ');
351                  $bib .= isis_to_bib($row,'710','%700+','*',2,'<');                  $bib .= isis_to_bib($row,'701','%700+','cd',undef,'>',', ');
352                  $bib .= isis_to_bib($row,'711','%700+','*',2,'<');  
353                  $bib .= isis_to_bib($row,'503','%700+','*',2,'<');                  my $tmp = isis_sf($row,'710','abc', '', '', (' : ',', '));
354                    $tmp .= isis_sf($row,'710','dfe', ' (', ')', ('', ' ; ',' ; '));
355                    $bib .= "%700+ $tmp\n" if ($tmp);
356    
357                    my $tmp = isis_sf($row,'711','abc', '', '', (' : ',', '));
358                    $tmp .= isis_sf($row,'711','dfe', ' (', ')', ('', ' ; ',' ; '));
359                    $bib .= "%700+ $tmp\n" if ($tmp);
360    
361                    $bib .= isis_to_bib($row,'503','%700+','ab',undef,'>',', ');
362    
363                  $mps .= isis_to_mps($row,'700',1);                  $mps .= isis_to_mps($row,'700',1);
364                  $mps .= isis_to_mps($row,'701',1);                  $mps .= isis_to_mps($row,'701',1);
# Line 420  foreach my $isis_db (@isis_dbs) { Line 382  foreach my $isis_db (@isis_dbs) {
382                  $book .= ". ".$sf->{c} if ($sf->{c});                  $book .= ". ".$sf->{c} if ($sf->{c});
383                  $book .= " / ".$sf->{x} if ($sf->{x});                  $book .= " / ".$sf->{x} if ($sf->{x});
384                  $book .= " ; ".$sf->{y} if ($sf->{y});                  $book .= " ; ".$sf->{y} if ($sf->{y});
385                  $bib .= "%200 $book\n" if ($book);                  $bib .= "%200+ $book\n" if ($book);
386    
387                  $mps .= isis_to_mps($row,'200',2,"akcde");                  $mps .= isis_to_mps($row,'200',2,"akcde");
388                  $mps .= isis_to_mps($row,'532',2);                  $mps .= isis_to_mps($row,'532',2);
# Line 432  foreach my $isis_db (@isis_dbs) { Line 394  foreach my $isis_db (@isis_dbs) {
394                  $mps .= isis_to_mps($row,'233',2,"ae");                  $mps .= isis_to_mps($row,'233',2,"ae");
395    
396    
397                  $bib .= "%sv ".isis_sf($row,'230','v').                  my $tmp;
398                    $tmp =  isis_sf($row,'230','v').
399                          isis_sf($row,'230','a',' : ').                          isis_sf($row,'230','a',' : ').
400                          isis_sf($row,'250',undef,'. - ').                          isis_sf($row,'250',undef,'. - ').
401                          isis_sf($row,'260',undef,'. - ').                          isis_sf($row,'260',undef,'. - ').
402                          isis_sf($row,'290',undef,'<br>ISBN ').                          isis_sf($row,'290',undef,'<br>ISBN ');
403                          "\n";                  $bib .= "%sv $tmp\n" if ($tmp);
404                  $bib .= "%sv ".isis_sf($row,'231','v','<br>').          
405                    $tmp =  isis_sf($row,'231','v','<br>').
406                          isis_sf($row,'231','a',' : ').                          isis_sf($row,'231','a',' : ').
407                          isis_sf($row,'251',undef,'. - ').                          isis_sf($row,'251',undef,'. - ').
408                          isis_sf($row,'261',undef,'. - ').                          isis_sf($row,'261',undef,'. - ').
409                          isis_sf($row,'291',undef,'<br>ISBN ').                          isis_sf($row,'291',undef,'<br>ISBN ');
410                          "\n";                  $bib .= "%sv $tmp\n" if ($tmp);
411                  $bib .= "%sv ".isis_sf($row,'232','v','<br>').                  
412                    $tmp =  isis_sf($row,'232','v','<br>').
413                          isis_sf($row,'232','a',' : ').                          isis_sf($row,'232','a',' : ').
414                          isis_sf($row,'252',undef,'. - ').                          isis_sf($row,'252',undef,'. - ').
415                          isis_sf($row,'262',undef,'. - ').                          isis_sf($row,'262',undef,'. - ').
416                          isis_sf($row,'292',undef,'<br>ISBN ').                          isis_sf($row,'292',undef,'<br>ISBN ');
417                          "\n";                  $bib .= "%sv $tmp\n" if ($tmp);
418                  $bib .= "%sv ".isis_sf($row,'233','v','<br>').  
419                    $tmp =  isis_sf($row,'233','v','<br>').
420                          isis_sf($row,'233','a',' : ').                          isis_sf($row,'233','a',' : ').
421                          isis_sf($row,'253',undef,'. - ').                          isis_sf($row,'253',undef,'. - ').
422                          isis_sf($row,'263',undef,'. - ').                          isis_sf($row,'263',undef,'. - ').
423                          isis_sf($row,'293',undef,'<br>ISBN ').                          isis_sf($row,'293',undef,'<br>ISBN ');
                         "\n";  
424    
425                  $mps .= isis_to_mps($row,'270',2);                  $mps .= isis_to_mps($row,'270',2);
426                  $mps .= isis_to_mps($row,'271',2);                  $mps .= isis_to_mps($row,'271',2);
427                  $mps .= isis_to_mps($row,'272',2);                  $mps .= isis_to_mps($row,'272',2);
428                  $mps .= isis_to_mps($row,'273',2);                  $mps .= isis_to_mps($row,'273',2);
429    
                 $headline .= isis_sf($row,'700','b'," ");  
                 $headline .= isis_sf($row,'700','a'," ");  
   
430                  # izdavac                  # izdavac
431                  $mps .= isis_to_mps($row,'210',3);                  $mps .= isis_to_mps($row,'210',3);
432                  $mps .= isis_to_mps($row,'250',3);                  $mps .= isis_to_mps($row,'250',3);
# Line 483  foreach my $isis_db (@isis_dbs) { Line 445  foreach my $isis_db (@isis_dbs) {
445                  if (my $year = isis_sf($row,'210','d')) {                  if (my $year = isis_sf($row,'210','d')) {
446                          $year =~ s/^\s*cop\.*\s*//i;                          $year =~ s/^\s*cop\.*\s*//i;
447                          $year =~ s/[\[\]]*//g;                          $year =~ s/[\[\]]*//g;
448                            $year =~ s/[\n\r]//g;   # remove cr
449                          $mps .= "D ${year}\n" if ($year !~ m/\?/ && $year =~ /\d{4}/);                          $mps .= "D ${year}\n" if ($year !~ m/\?/ && $year =~ /\d{4}/);
                         $headline .= " ($year)";  
450                  }                  }
451    
452                  $mps .= isis_to_mps($row,'215',15);                  $mps .= isis_to_mps($row,'215',15);
# Line 529  foreach my $isis_db (@isis_dbs) { Line 491  foreach my $isis_db (@isis_dbs) {
491                  $bib .= isis_to_bib($row,'991','%991');                  $bib .= isis_to_bib($row,'991','%991');
492                  $mps .= isis_to_mps($row,'991',12);                  $mps .= isis_to_mps($row,'991',12);
493    
494                  sub store_isn {                  sub isis_isn_to_mps {
495                          if (my $isn = shift @_) {                          my $row = shift @_ || die;
496                                  my $nr = shift @_;                          my $isis_id = shift @_ || die;
497                                  my $tag = shift @_;                          my $nr = shift @_ || die;
498                            my $i=0;
499                            my $mps='';
500                            while (my $isn=$row->{$isis_id}->[$i]) {
501                                  $isn =~ s/ +//g;        # remove spaces                                  $isn =~ s/ +//g;        # remove spaces
502                                    $isn =~ s/[\n\r]//g;    # remove cr
503                                  $mps .= "W $isn $nr\n";                                  $mps .= "W $isn $nr\n";
                                 $bib .= "$tag $isn\n";  
504                                  if ($isn =~ s/-//g) {                                  if ($isn =~ s/-//g) {
505                                          $mps .= "W $isn $nr\n";                                          $mps .= "W $isn $nr\n";
506                                  }                                  }
507                                    $i++;
508                          }                          }
509                            return $mps;
510                  }                  }
511    
512                  # ISBN                  # ISBN
513                  store_isn($row->{10}->[0],13,'%ISBN');                  $bib .= isis_to_bib($row,'10','%ISBN');
514                  $mps .= isis_to_mps($row,'290',13);                  $mps .= isis_isn_to_mps($row,'10',13);
515                  $mps .= isis_to_mps($row,'291',13);                  $mps .= isis_isn_to_mps($row,'290',13);
516                  $mps .= isis_to_mps($row,'292',13);                  $mps .= isis_isn_to_mps($row,'291',13);
517                  $mps .= isis_to_mps($row,'293',13);                  $mps .= isis_isn_to_mps($row,'292',13);
518                    $mps .= isis_isn_to_mps($row,'293',13);
519    
520                  # ISSN                  # ISSN
521                  #store_isn($row->{11}->[0],14,'%ISSN');                  #store_isn($row->{11}->[0],14,'%ISSN');
# Line 558  foreach my $isis_db (@isis_dbs) { Line 526  foreach my $isis_db (@isis_dbs) {
526    
527                  # headline                  # headline
528                  if ($headline) {                  if ($headline) {
529                          $headline .= " [".$row->{mfn}."]";      ## debug MFN!                          $headline .= " <i>(".$DatabaseDescriptions{$db_dir}.", ".$row->{mfn}.")</i>";   ## debug MFN!
530                            $headline =~ s/&/&and;/g;
531                            $headline =~ s/</&lt;/g;
532                            $headline =~ s/>/&gt;/g;
533                          $mps .= "H ".c_852_iso($headline)."\n";                          $mps .= "H ".c_852_iso($headline)."\n";
534                  } else {                  } else {
535                          $mps .= "H nepoznato\n";                          $mps .= "H nepoznato\n";
# Line 573  foreach my $isis_db (@isis_dbs) { Line 544  foreach my $isis_db (@isis_dbs) {
544  #}  #}
545    
546                  print R c_852_iso($bib);                  print R c_852_iso($bib);
547                  print R "%perl ".Dumper($row)."\n";  
548                    # check if all fields are defined
549                    foreach (split(/\n/,$bib)) {
550                            if (/^%(\w+)\s/ && !$default::FieldNames{$1}) {
551                                    die "field $1 used but not in FieldNames";
552                            }
553                    }
554    
555    #               print R "%perl ".Dumper($row)."\n";
556    
557                  $mps .= "T document text/plain ".(tell(R) - $last_tell)." $dir/bib $last_tell ".tell(R)."\n";                  $mps .= "T document text/plain ".(tell(R) - $last_tell)." $dir/bib $last_tell ".tell(R)."\n";
558                  $last_tell=tell(R);                  $last_tell=tell(R);

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.14

  ViewVC Help
Powered by ViewVC 1.1.26