/[local]/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.1.1.1 by dpavlin, Thu Jun 13 15:32:10 2002 UTC revision 1.22 by dpavlin, Thu Oct 24 16:32:00 2002 UTC
# Line 3  Line 3 
3  use strict;  use strict;
4  use OpenIsis;  use OpenIsis;
5  use Getopt::Std;  use Getopt::Std;
6  #use Data::Dumper;  use Data::Dumper;
7    use common;
 my $install_dir="/local/index";  
 my $mpsindex="/local/mps-5.3/bin/mpsindex -l 9 -b";  
 my $isis_data="/var/autofs/misc/isis_data/";  
 #my $isis_data="/mnt/20020606/Isis/Data/";      # doma  
8    
9  my %opts;  my %opts;
10    
11  getopt('dD', \%opts);  getopts('d:m:q', \%opts);
12    
13  die "usage: $0 -d [database_dir] " if (! $opts{d});  die "usage: $0 -d [database_dir] -m [database1,database2] " if (! %opts);
14    
15  my $db_dir = $opts{d};  my $db_dir = $opts{d};
16    
17  mkdir "$install_dir/$db_dir" if (!-e "$install_dir/$db_dir");  my $dir = open_data_files($db_dir);
 mkdir "$install_dir/$db_dir/data" if (!-e "$install_dir/$db_dir/data");  
   
 my $dir="$install_dir/$db_dir/data";  
18    
19    #--------------------------------------------------------------------
20    # init array in_mps_header for config checks later
21    
22  open(S,"> $dir/stream") || die "can't open output $dir/stram: $!";  my %in_mps_header;
23  open(R,"> $dir/bib") || die "can't open output $dir/bib: $!";  foreach (split(/\n/,$common::mps_header)) {
24  open(MPS,"| $mpsindex -d $install_dir/$db_dir -autokey") || die "can't start MPS indexer $mpsindex: $!";          if (/^F /) {
25  #open(MPS,"> /tmp/mpsindex") || die "mps: $!";                  my (undef,$isis,$mps,undef) = split(/ /,$_,4);
26                    $in_mps_header{$mps}=$isis;
27  my $s="V 5 3          }
28  L hr-HR  }
29  F 700+ 1 Autor  require "./search/config.pm";
 F 200+ 2 Naslov  
 F 210 3 Izdavanje  
 F 225 4 Nakladnika cjelina  
 F 300+ 5 Napomene  
 F 330 6 Sadraj  
 F 464 7 Analitiki radovi  
 F 610 8 Kljune rijei  
 F 675 9 UDK  
 F 686 10 CC  
 F 990 11 Signatura  
 F 991 12 Inventarni broj  
 F 10 13 ISBN  
 ";  
30    
31  print S $s;  #--------------------------------------------------------------------
32  print MPS $s;  # read database configuration, store database names
33    open(CF,$common::database_cf) || die "$common::database_cf: $!";
34    my %DatabaseDescriptions;
35    while(<CF>) {
36            chomp;
37            if (/^database-name:([^=]+)=(.*)$/) {
38                    my ($db_name,$db_desc) = ($1,$2);
39                    $db_desc=~s/^##\w+##//g;
40                    # c_iso_852 is a cludge so that output format would be
41                    # correct 8859-2 again...
42                    $DatabaseDescriptions{$db_name}=c_iso_852($db_desc);
43            }
44    }
45    close(CF);
46    
47    #--------------------------------------------------------------------
48  #  #
49  # expand(nr,"space separated string");  # expand(nr,"space separated string");
50  #  #
51    
52  sub expand {  sub expand {
53          my $nr = shift @_;          my $nr = shift @_;
54            die "$nr is not in mps_header" if (!$in_mps_header{$nr});
55          my $out = "";          my $out = "";
56          while (my $fld = c_852_iso(shift @_)) {          while (my $fld = c_852_iso(shift @_)) {
57                  my @words=split(/\s+/,$fld);                  my @words=split(/\s+/,$fld);
58                  foreach my $w (@words) {                  foreach my $w (@words) {
59                          # FIX: this should be replaced by stemmer!                          # FIX: this should be replaced by stemmer!
60                          #$w =~ tr/ƾ/sSdDcCcCzZ/;                          #$w =~ tr/ƾ/sSdDcCcCzZ/;
61                          $w =~ tr/ܫȺ̪/CueaauccleOoiZACELlooLlSsOUTtLcaiouAaZzEezCsAAESZzAadDDEdNIIeTUOoNnnSsRUrUyYt'-".'',"'Rr/;                          $w =~ tr/ܫȺ̪/CueaauccleOoiZACELlooLlSsOUTtLcaiouAaZzEezCsAAESZzAadDDEdNIIeTUOoNnnSsRUrUyYt'".'',"'Rr/;
62                          $w =~ s//ss/g;                          $w =~ s//ss/g;
63                          $out .= "W $w $nr\n";                          $out .= "W $w $nr\n";
64                  }                  }
# Line 71  sub expand { Line 68  sub expand {
68    
69  #--------------------------------------------------------------------  #--------------------------------------------------------------------
70    
 ################### 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;  
 }  
   
 #--------------------------------------------------------------------  
   
71  sub c_852_iso {  sub c_852_iso {
72          my $tmp = $_[0];          my $tmp = $_[0];
73          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/ if ($tmp);          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/ if ($tmp);
74          return $tmp;          return $tmp;
75  }  }
76    
77    sub c_iso_852 {
78            my $tmp = $_[0];
79            $tmp =~ tr/ܫꔼȺ̪㍐슂ٝ// if ($tmp);
80            return $tmp;
81    }
82    
83  sub c_852_czs {  sub c_852_czs {
84          my $tmp = $_[0];          my $tmp = $_[0];
85          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/;          $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/;
86          $tmp =~ tr/ܫȺ̪/CueaauccleOoiZACELlooLlSsOUTtLcaiouAaZzEezCsAAESZzAadDDEdNIIeTUOoNnnSsRUrUyYt'-".'',"'Rr/;          $tmp =~ tr/ܫȺ̪/CueaauccleOoiZACELlooLlSsOUTtLcaiouAaZzEezCsAAESZzAadDDEdNIIeTUOoNnnSsRUrUyYt'".'',"'Rr/;
87          $tmp =~ s//ss/g;          $tmp =~ s//ss/g;
88          return $tmp;          return $tmp;
89  }  }
90    
91  #--------------------------------------------------------------------  #--------------------------------------------------------------------
 #  
 # mps_expand(nr,"space separated string");  
 #  
92    
93  sub mps_expand {  # $mps .= sf_to_mps("subfields",$subfiled_hash)
         my $nr = shift @_;  
         my $out = "";  
         while (my $fld = shift @_) {  
                 if ($fld =~ m/\s+/) {  
                         foreach my $w (split(/\s+/,$fld)) {  
                                 # FIX: this should be replaced by stemmer!  
                                 $out .= "W $w $nr\n";  
                         }  
                 } else {  
                         $out .= "W $fld $nr\n";  
                 }  
         }  
         return c_852_czs($out);  
 }  
   
 #--------------------------------------------------------------------  
   
 # $mps .= sf_to_mps($subfiled_hash,"subfields",mps_id);  
94  #  #
95  # subfields options:  # subfields options:
96  #       * - all (no sort)  #       * - all (no sort)
# Line 230  sub subfields_str_2_arr { Line 121  sub subfields_str_2_arr {
121    
122  sub sf_to_mps {  sub sf_to_mps {
123          my ($sf_hash,$subfields,$mps_id) = @_;          my ($sf_hash,$subfields,$mps_id) = @_;
124            die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id});
125          my $out="";          my $out="";
126          my @sf_arr = subfields_str_2_arr($subfields,$sf_hash);          my @sf_arr = subfields_str_2_arr($subfields,$sf_hash);
127    
128          foreach (@sf_arr) {          foreach (@sf_arr) {
129                  $out.=mps_expand($mps_id,$sf_hash->{$_});                  $out.=mps_expand($mps_id,c_852_iso($sf_hash->{$_}));
130          }          }
131          return $out;          return $out;
132  }  }
# Line 249  sub isis_to_mps { Line 141  sub isis_to_mps {
141          my $mps_id = shift @_ || die;          my $mps_id = shift @_ || die;
142          my $subfields = shift @_;          my $subfields = shift @_;
143    
144            die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id});
145    
146          my $i=0;          my $i=0;
147          my $out = "";          my $out = "";
148    
# Line 258  sub isis_to_mps { Line 152  sub isis_to_mps {
152                  if (scalar keys %{$sf_hash} > 0) {                  if (scalar keys %{$sf_hash} > 0) {
153                          if ($subfields) {                          if ($subfields) {
154                                  foreach (split(//,$subfields)) {                                  foreach (split(//,$subfields)) {
155                                          $out.=mps_expand($mps_id,$sf_hash->{$_});                                          $out.=mps_expand($mps_id,c_852_iso($sf_hash->{$_}));
156                                  }                                  }
157                          } else {                          } else {
158                                  foreach (keys %{$sf_hash}) {                                  foreach (keys %{$sf_hash}) {
159                                          $out.=mps_expand($mps_id,$sf_hash->{$_});                                          $out.=mps_expand($mps_id,c_852_iso($sf_hash->{$_}));
160                                  }                                  }
161                          }                          }
162                  } else {                  } else {
163                          $out.=mps_expand($mps_id,$row->{$isis_id}->[$i]);                          $out.=mps_expand($mps_id,c_852_iso($row->{$isis_id}->[$i]));
164                  }                  }
165                  $i++;                  $i++;
166          }          }
# Line 292  sub isis_to_bib { Line 186  sub isis_to_bib {
186          my $group_sort = shift @_ || '';          my $group_sort = shift @_ || '';
187          my $sep = shift @_ || ' ';          my $sep = shift @_ || ' ';
188    
189            my $fld = $bib_id; $fld =~ s/^%//;
190            die "$fld is not in FieldNames" if (!$default::FieldNames{$fld});
191    
192          my $i=0;          my $i=0;
193    
194          my $bib="";          my $bib="";
# Line 349  sub isis_to_bib { Line 246  sub isis_to_bib {
246  sub isis_sf {  sub isis_sf {
247          my $row = shift @_;          my $row = shift @_;
248          my $isis_id = shift @_;          my $isis_id = shift @_;
249          my $subfield = shift @_ || 'a';          my $subfield = shift @_;
250          my $prefix = shift @_ || '';          my $prefix = shift @_ || '';
251          my $postfix = shift @_ || '';          my $postfix = shift @_ || '';
252    
# Line 357  sub isis_sf { Line 254  sub isis_sf {
254    
255          if ($row->{$isis_id}->[0]) {          if ($row->{$isis_id}->[0]) {
256                  my $sf = OpenIsis::subfields($row->{$isis_id}->[0]);                  my $sf = OpenIsis::subfields($row->{$isis_id}->[0]);
257                  if (length($subfield) == 1) {                  if (! defined $subfield || length($subfield) == 0) {
258                            # subfield list undef, empty or no defined subfields for this record
259                            return $prefix . $row->{$isis_id}->[0] . $postfix;
260                    } elsif (length($subfield) == 1) {
261                          if ($sf->{$subfield}) {                          if ($sf->{$subfield}) {
262                                  return $prefix . $sf->{$subfield} . $postfix;                                  return $prefix . $sf->{$subfield} . $postfix;
263                          } else {                          } else {
# Line 381  sub isis_sf { Line 281  sub isis_sf {
281  }  }
282    
283  #--------------------------------------------------------------------  #--------------------------------------------------------------------
 #--------------------------------------------------------------------  
   
284    
285  my $last_tell=0;  my $last_tell=0;
286    
287  my $db = OpenIsis::open( "$isis_data/$db_dir/LIBRI/LIBRI" );  my @isis_dirs = ( '.' );        # use dirname as database name
288    
289  my $max_rowid = OpenIsis::maxRowid( $db );  if ($opts{m}) {
290            @isis_dirs = split(/,/,$opts{m});
291    }
292    
293  my $last_pcnt = 0;  my @isis_dbs;
294    
295  for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) {  foreach (@isis_dirs) {
296            if (-e "$common::isis_data/$db_dir/$_/LIBRI") {
297                    push @isis_dbs,"$common::isis_data/$db_dir/$_/LIBRI/LIBRI";
298            }
299            if (-e "$common::isis_data/$db_dir/$_/PERI") {
300                    push @isis_dbs,"$common::isis_data/$db_dir/$_/PERI/PERI";
301            }
302            if (-e "$common::isis_data/$db_dir/$_/AMS") {
303                    push @isis_dbs,"$common::isis_data/$db_dir/$_/AMS/AMS";
304            }
305            if (-e "$common::isis_data/$db_dir/$_/ARTI") {
306    #               push @isis_dbs,"$common::isis_data/$db_dir/$_/ARTI/ARTI";
307            }
308    }
309    
310    foreach my $isis_db (@isis_dbs) {
311    
312      print MPS "M reading ISIS from '$isis_db'...\n";
313    
314      my $db = OpenIsis::open( "$isis_db" );
315    
316      if (! defined $db) {
317            die "can't open '$isis_db'";
318      }
319    
320      my $tip = $isis_db; $tip =~ s/^.+?\/([^\/]+)$/$1/;
321      if (defined $default::tip{$tip}) {
322            $tip=$default::tip{$tip};
323      } elsif ($tip eq "AMS") {
324            $tip=$default::tip{'LIBRI'};
325      } else {
326            die "can't find tip for database '$isis_db'";
327      }
328      $tip = c_iso_852($tip);
329    
330      my $max_rowid = OpenIsis::maxRowid( $db );
331    
332      my $last_pcnt = 0;
333    
334      for (my $row_id = 1; $row_id <= $max_rowid; $row_id++ ) {
335          my $row = OpenIsis::read( $db, $row_id );          my $row = OpenIsis::read( $db, $row_id );
336          if (my $tmp = $row->{'200'}->[0]) {          if (my $tmp = $row->{'200'}->[0]) {
337    
338                  my $bib = "%MFN $row->{mfn}\n";                  my $bib;
339                  my $mps;                  my $mps = "W $row->{mfn} 14\n";
340    
341                    # tip gradje
342                    $mps .= "W ".c_852_czs($tip)." 17\n";
343                    $bib .= "%tip $tip\n";
344    
345                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);                  my $pcnt = int($row->{mfn} * 100 / $max_rowid);
346                  if ($pcnt != $last_pcnt) {                  if ($pcnt != $last_pcnt) {
347                          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});
348                          $last_pcnt = $pcnt;                          $last_pcnt = $pcnt;
349                  }                  }
350    
351                  my $headline;                  my $headline;
352                  $headline .= isis_sf($row,'200','a',"'");                  $headline .= isis_sf($row,'200','a');
353                  $headline .= isis_sf($row,'200','e'," : ","'");                  $headline .= isis_sf($row,'200','e'," : ");
354                    $headline .= isis_sf($row,'200','f'," / ");
355                    $headline .= isis_sf($row,'210','d'," , ");
356    
357                    # remove newlines, compress spaces
358                    $headline =~ s/[\n\r]//g;
359                    $headline =~ s/^\s+//g;
360                    $headline =~ s/\s+$//g;
361    
362                  # author                  # author
363                  $bib .= isis_to_bib($row,'700','%700+','*',2,'<');                  $bib .= isis_to_bib($row,'700','%700+','ab',undef,'>',', ');
364                  $bib .= isis_to_bib($row,'701','%700+','*',2,'<');                  $bib .= isis_to_bib($row,'701','%700+','ab',undef,'>',', ');
365                  $bib .= isis_to_bib($row,'710','%700+','*',2,'<');                  $bib .= isis_to_bib($row,'701','%700+','cd',undef,'>',', ');
366                  $bib .= isis_to_bib($row,'711','%700+','*',2,'<');  
367                  $bib .= isis_to_bib($row,'503','%700+','*',2,'<');                  my $tmp;
368                    $tmp = isis_sf($row,'710','abc', '', '', (' : ',', '));
369                    $tmp .= isis_sf($row,'710','dfe', ' (', ')', ('', ' ; ',' ; '));
370                    $bib .= "%700+ $tmp\n" if ($tmp);
371    
372                    $tmp = isis_sf($row,'711','abc', '', '', (' : ',', '));
373                    $tmp .= isis_sf($row,'711','dfe', ' (', ')', ('', ' ; ',' ; '));
374                    $bib .= "%700+ $tmp\n" if ($tmp);
375    
376                    $bib .= isis_to_bib($row,'503','%700+','ab',undef,'>',', ');
377    
378                  $mps .= isis_to_mps($row,'700',1);                  $mps .= isis_to_mps($row,'700',1);
379                  $mps .= isis_to_mps($row,'701',1);                  $mps .= isis_to_mps($row,'701',1);
# Line 422  for (my $row_id = 1; $row_id <= $max_row Line 381  for (my $row_id = 1; $row_id <= $max_row
381                  $mps .= isis_to_mps($row,'711',1);                  $mps .= isis_to_mps($row,'711',1);
382                  $mps .= isis_to_mps($row,'503',1);                  $mps .= isis_to_mps($row,'503',1);
383                  $mps .= isis_to_mps($row,'702',1);                  $mps .= isis_to_mps($row,'702',1);
384                    $mps .= isis_to_mps($row,'200',1,"fg");
385    
386                  $bib .= isis_to_bib($row,'205','%205');                  $bib .= isis_to_bib($row,'205','%205');
387    
# Line 437  for (my $row_id = 1; $row_id <= $max_row Line 397  for (my $row_id = 1; $row_id <= $max_row
397                  $book .= ". ".$sf->{c} if ($sf->{c});                  $book .= ". ".$sf->{c} if ($sf->{c});
398                  $book .= " / ".$sf->{x} if ($sf->{x});                  $book .= " / ".$sf->{x} if ($sf->{x});
399                  $book .= " ; ".$sf->{y} if ($sf->{y});                  $book .= " ; ".$sf->{y} if ($sf->{y});
400                  $bib .= "%200 $book\n" if ($book);                  $bib .= "%200+ $book\n" if ($book);
401    
402                  $mps .= isis_to_mps($row,'200',2,"akcde");                  $mps .= isis_to_mps($row,'200',2,"akcde");
403                  $mps .= isis_to_mps($row,'532',2);                  $mps .= isis_to_mps($row,'532',2);
404                  $mps .= isis_to_mps($row,'424',2);                  $mps .= isis_to_mps($row,'424',2);
405    
406                  $headline .= isis_sf($row,'700','b'," ");                  $mps .= isis_to_mps($row,'230',2,"ae");
407                  $headline .= isis_sf($row,'700','a'," ");                  $mps .= isis_to_mps($row,'231',2,"ae");
408                    $mps .= isis_to_mps($row,'232',2,"ae");
409                    $mps .= isis_to_mps($row,'233',2,"ae");
410    
411    
412                    $tmp =  isis_sf($row,'230','v').
413                            isis_sf($row,'230','a',' : ').
414                            isis_sf($row,'250',undef,'. - ').
415                            isis_sf($row,'260',undef,'. - ').
416                            isis_sf($row,'290',undef,'<br>ISBN ');
417                    $bib .= "%sv $tmp\n" if ($tmp);
418            
419                    $tmp =  isis_sf($row,'231','v','<br>').
420                            isis_sf($row,'231','a',' : ').
421                            isis_sf($row,'251',undef,'. - ').
422                            isis_sf($row,'261',undef,'. - ').
423                            isis_sf($row,'291',undef,'<br>ISBN ');
424                    $bib .= "%sv $tmp\n" if ($tmp);
425                    
426                    $tmp =  isis_sf($row,'232','v','<br>').
427                            isis_sf($row,'232','a',' : ').
428                            isis_sf($row,'252',undef,'. - ').
429                            isis_sf($row,'262',undef,'. - ').
430                            isis_sf($row,'292',undef,'<br>ISBN ');
431                    $bib .= "%sv $tmp\n" if ($tmp);
432    
433                    $tmp =  isis_sf($row,'233','v','<br>').
434                            isis_sf($row,'233','a',' : ').
435                            isis_sf($row,'253',undef,'. - ').
436                            isis_sf($row,'263',undef,'. - ').
437                            isis_sf($row,'293',undef,'<br>ISBN ');
438    
439                    $mps .= isis_to_mps($row,'270',2);
440                    $mps .= isis_to_mps($row,'271',2);
441                    $mps .= isis_to_mps($row,'272',2);
442                    $mps .= isis_to_mps($row,'273',2);
443    
444                  # izdavac                  # izdavac
445                  $mps .= isis_to_mps($row,'210',3);                  $mps .= isis_to_mps($row,'210',3);
446                    $mps .= isis_to_mps($row,'250',3);
447                    $mps .= isis_to_mps($row,'251',3);
448                    $mps .= isis_to_mps($row,'252',3);
449                    $mps .= isis_to_mps($row,'253',3);
450  #               if (my $sf = OpenIsis::subfields($row->{'210'}->[0])) {  #               if (my $sf = OpenIsis::subfields($row->{'210'}->[0])) {
451  #                       my $tmp;  #                       my $tmp;
452  #                       $tmp .= $sf->{a} if ($sf->{a});  #                       $tmp .= $sf->{a} if ($sf->{a});
# Line 455  for (my $row_id = 1; $row_id <= $max_row Line 454  for (my $row_id = 1; $row_id <= $max_row
454  #                       $tmp .= ", ".$sf->{d} if ($sf->{d});  #                       $tmp .= ", ".$sf->{d} if ($sf->{d});
455  #                       $bib .= "%210 $tmp\n" if ($tmp);  #                       $bib .= "%210 $tmp\n" if ($tmp);
456  #               }  #               }
457                  $bib .= "%210 ".isis_sf($row,'210','acd', '','', ('',' : ',', ') )."\n";                  $bib .= "%210+ ".isis_sf($row,'210','acd', '','', ('',' : ',', ') )."\n";
458    
459                  if (my $year = isis_sf($row,'210','d')) {                  if (my $year = isis_sf($row,'210','d')) {
460                          $year =~ s/^\s*cop\.*\s*//i;                          $year =~ s/^\s*cop\.*\s*//i;
461                          $year =~ s/[\[\]]*//g;                          $year =~ s/[\[\]]*//g;
462                            $year =~ s/[\n\r]//g;   # remove cr
463                          $mps .= "D ${year}\n" if ($year !~ m/\?/ && $year =~ /\d{4}/);                          $mps .= "D ${year}\n" if ($year !~ m/\?/ && $year =~ /\d{4}/);
                         $headline .= " ($year)";  
464                  }                  }
465    
466                  $bib .= isis_to_bib($row,'215','%215', '*', undef, undef, ', ');                  $mps .= isis_to_mps($row,'215',15);
467                    $mps .= isis_to_mps($row,'260',15);
468                    $mps .= isis_to_mps($row,'261',15);
469                    $mps .= isis_to_mps($row,'262',15);
470                    $mps .= isis_to_mps($row,'263',15);
471                    $bib .= isis_to_bib($row,'215','%215+', '*', undef, undef, ', ');
472    
473  #               $bib .= isis_to_bib($row,'225','%225', 'aehivw');  #               $bib .= isis_to_bib($row,'225','%225', 'aehivw');
474                  $bib .= "%225 ".isis_sf($row,'225','aevhiw', '(',')', ('',' : ',' ; ','. ',', ',' ; '))."\n";                  $bib .= "%225 ".isis_sf($row,'225','aevhiw', '(',')', ('',' : ',' ; ','. ',', ',' ; '))."\n";
# Line 476  for (my $row_id = 1; $row_id <= $max_row Line 480  for (my $row_id = 1; $row_id <= $max_row
480                  $mps .= isis_to_mps($row,'300',5);                  $mps .= isis_to_mps($row,'300',5);
481                  $mps .= isis_to_mps($row,'320',5);                  $mps .= isis_to_mps($row,'320',5);
482                  $mps .= isis_to_mps($row,'327',5);                  $mps .= isis_to_mps($row,'327',5);
483                    $mps .= isis_to_mps($row,'280',5);
484                    $mps .= isis_to_mps($row,'281',5);
485                    $mps .= isis_to_mps($row,'282',5);
486                    $mps .= isis_to_mps($row,'283',5);
487    
488                  $bib .= isis_to_bib($row,'330','%330');                  $bib .= isis_to_bib($row,'330','%330');
489                  $mps .= isis_to_mps($row,'330',6);                  $mps .= isis_to_mps($row,'330',6);
# Line 486  for (my $row_id = 1; $row_id <= $max_row Line 494  for (my $row_id = 1; $row_id <= $max_row
494                  $bib .= isis_to_bib($row,'610','%610');                  $bib .= isis_to_bib($row,'610','%610');
495                  $mps .= isis_to_mps($row,'610',8);                  $mps .= isis_to_mps($row,'610',8);
496    
497                  $bib .= isis_to_bib($row,'675','%675+');                  $bib .= isis_to_bib($row,'675','%675+','a');
498                  $mps .= isis_to_mps($row,'675',9);                  $mps .= isis_to_mps($row,'675',9);
499                  $bib .= isis_to_bib($row,'686','%675+');                  $bib .= isis_to_bib($row,'686','%675+','a');
500                  $mps .= isis_to_mps($row,'686',10);                  $mps .= isis_to_mps($row,'686',10);
501    
502                  $bib .= isis_to_bib($row,'990','%990');                  $bib .= isis_to_bib($row,'990','%990');
# Line 497  for (my $row_id = 1; $row_id <= $max_row Line 505  for (my $row_id = 1; $row_id <= $max_row
505                  $bib .= isis_to_bib($row,'991','%991');                  $bib .= isis_to_bib($row,'991','%991');
506                  $mps .= isis_to_mps($row,'991',12);                  $mps .= isis_to_mps($row,'991',12);
507    
508                  # ISBN                  # Jezik
509                  if (my $isbn = $row->{10}->[0]) {                  $bib .= isis_to_bib($row,'101','%101');
510                          $isbn =~ s/ +//g;       # remove spaces                  $mps .= isis_to_mps($row,'101',16);
511                          $mps .= "W $isbn 13\n";                  # Pismo
512                          $bib .= "%ISBN $isbn\n";                  $bib .= isis_to_bib($row,'998','%101', 'a');
513                          $isbn =~ s/-//g;  
514                          $mps .= "W $isbn 13\n";                  sub isis_isn_to_mps {
515                            my $row = shift @_ || die;
516                            my $isis_id = shift @_ || die;
517                            my $nr = shift @_ || die;
518                            my $i=0;
519                            my $mps='';
520                            while (my $isn=$row->{$isis_id}->[$i]) {
521                                    $isn =~ s/ +//g;        # remove spaces
522                                    $isn =~ s/[\n\r]//g;    # remove cr
523                                    $mps .= "W $isn $nr\n";
524                                    if ($isn =~ s/-//g) {
525                                            $mps .= "W $isn $nr\n";
526                                    }
527                                    $i++;
528                            }
529                            return $mps;
530                  }                  }
531                  $mps .= isis_to_mps($row,'10',12);  
532                    # ISBN
533                    $bib .= isis_to_bib($row,'10','%ISBN');
534                    $mps .= isis_isn_to_mps($row,'10',13);
535                    $mps .= isis_isn_to_mps($row,'290',13);
536                    $mps .= isis_isn_to_mps($row,'291',13);
537                    $mps .= isis_isn_to_mps($row,'292',13);
538                    $mps .= isis_isn_to_mps($row,'293',13);
539    
540                    # ISSN
541                    $bib .= isis_to_bib($row,'11','%ISSN');
542                    $mps .= isis_isn_to_mps($row,'11',13);
543    
544                  $mps .= isis_to_mps($row,'532',1);                  $mps .= isis_to_mps($row,'532',1);
545    
546                  $bib .= isis_to_bib($row,'994','%994a','a');                  # Casopisi
547                    $tmp = isis_to_bib($row,'326','%326');
548                    $tmp =~ s/g1/godinjak/;
549                    $tmp =~ s/g6/dvomjesenik/;
550                    $tmp =~ s/10/godinje 10 brojeva/;
551                    $tmp =~ s/m1/mjesenik/;
552                    $tmp =~ s/m2/polumjesenik/;
553                    $tmp =~ s/nr/neredovito/;
554                    $tmp =~ s/g4/etiri puta godinje/;
555                    $bib .= c_iso_852($tmp);
556                    $bib .= isis_to_bib($row,'992','%992');
557    
558                    $bib .= '%knjiz '.$DatabaseDescriptions{$db_dir}.", ".$row->{mfn}."\n";
559                  # headline                  # headline
560                  if ($headline) {                  if ($headline) {
561                          $headline .= " [".$row->{mfn}."]";      ## debug MFN!                          $headline .= " <i>(".$DatabaseDescriptions{$db_dir}.", ".$row->{mfn}.")</i>";   ## debug MFN!
562                            $headline =~ s/&/&and;/g;
563                            $headline =~ s/</&lt;/g;
564                            $headline =~ s/>/&gt;/g;
565                          $mps .= "H ".c_852_iso($headline)."\n";                          $mps .= "H ".c_852_iso($headline)."\n";
566                  } else {                  } else {
567                          $mps .= "H nepoznato\n";                          $mps .= "H nepoznato\n";
# Line 529  for (my $row_id = 1; $row_id <= $max_row Line 577  for (my $row_id = 1; $row_id <= $max_row
577    
578                  print R c_852_iso($bib);                  print R c_852_iso($bib);
579    
580                    # check if all fields are defined
581                    foreach (split(/\n/,$bib)) {
582                            if (/^%(\w+)\s/ && !$default::FieldNames{$1}) {
583                                    die "field $1 used but not in FieldNames";
584                            }
585                    }
586    
587    #               print R "%perl ".Dumper($row)."\n";
588    
589                  $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";
590                  $last_tell=tell(R);                  $last_tell=tell(R);
591    
# Line 536  for (my $row_id = 1; $row_id <= $max_row Line 593  for (my $row_id = 1; $row_id <= $max_row
593    
594                  $mps .= "E\n";                  $mps .= "E\n";
595    
   
596                  print S $mps;                  print S $mps;
597                  print MPS $mps;                  print MPS $mps;
598          }          }
599      }
600  }  }
601  print S "M over and out\nX\n";  print S "M over and out\nX\n";
602  print MPS "M over and out\nX\n";  print MPS "M over and out\nX\n";

Legend:
Removed from v.1.1.1.1  
changed lines
  Added in v.1.22

  ViewVC Help
Powered by ViewVC 1.1.26