--- isis2stream.pl 2002/06/16 18:11:14 1.7 +++ isis2stream.pl 2002/06/16 19:39:42 1.8 @@ -28,12 +28,26 @@ print S $common::mps_header; print MPS $common::mps_header; +#-------------------------------------------------------------------- +# init array in_mps_header for config checks later + +my %in_mps_header; +foreach (split(/\n/,$common::mps_header)) { + if (/^F /) { + my (undef,$isis,$mps,undef) = split(/ /,$_,4); + $in_mps_header{$mps}=$isis; + } +} +require "./search/config.pm"; + +#-------------------------------------------------------------------- # # expand(nr,"space separated string"); # sub expand { my $nr = shift @_; + die "$nr is not in mps_header" if (!$in_mps_header{$nr}); my $out = ""; while (my $fld = c_852_iso(shift @_)) { my @words=split(/\s+/,$fld); @@ -50,97 +64,6 @@ #-------------------------------------------------------------------- -################### 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; -} - -#-------------------------------------------------------------------- - sub c_852_iso { my $tmp = $_[0]; $tmp =~ tr//ܫꔼȺ̪㍐슂ٝ/ if ($tmp); @@ -157,7 +80,7 @@ #-------------------------------------------------------------------- -# $mps .= sf_to_mps($subfiled_hash,"subfields",mps_id); +# $mps .= sf_to_mps("subfields",$subfiled_hash) # # subfields options: # * - all (no sort) @@ -188,6 +111,7 @@ sub sf_to_mps { my ($sf_hash,$subfields,$mps_id) = @_; + die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id}); my $out=""; my @sf_arr = subfields_str_2_arr($subfields,$sf_hash); @@ -207,6 +131,8 @@ my $mps_id = shift @_ || die; my $subfields = shift @_; + die "$mps_id is not in mps_header" if (!$in_mps_header{$mps_id}); + my $i=0; my $out = ""; @@ -250,6 +176,9 @@ my $group_sort = shift @_ || ''; my $sep = shift @_ || ' '; + my $fld = $bib_id; $fld =~ s/^%//; + die "$fld is not in FieldNames" if (!$default::FieldNames{$fld}); + my $i=0; my $bib=""; @@ -342,8 +271,6 @@ } #-------------------------------------------------------------------- -#-------------------------------------------------------------------- - my $last_tell=0; @@ -420,7 +347,7 @@ $book .= ". ".$sf->{c} if ($sf->{c}); $book .= " / ".$sf->{x} if ($sf->{x}); $book .= " ; ".$sf->{y} if ($sf->{y}); - $bib .= "%200 $book\n" if ($book); + $bib .= "%200+ $book\n" if ($book); $mps .= isis_to_mps($row,'200',2,"akcde"); $mps .= isis_to_mps($row,'532',2); @@ -432,30 +359,33 @@ $mps .= isis_to_mps($row,'233',2,"ae"); - $bib .= "%sv ".isis_sf($row,'230','v'). + my $tmp; + $tmp = isis_sf($row,'230','v'). isis_sf($row,'230','a',' : '). isis_sf($row,'250',undef,'. - '). isis_sf($row,'260',undef,'. - '). - isis_sf($row,'290',undef,'
ISBN '). - "\n"; - $bib .= "%sv ".isis_sf($row,'231','v','
'). + isis_sf($row,'290',undef,'
ISBN '); + $bib .= "%sv $tmp\n" if ($tmp); + + $tmp = isis_sf($row,'231','v','
'). isis_sf($row,'231','a',' : '). isis_sf($row,'251',undef,'. - '). isis_sf($row,'261',undef,'. - '). - isis_sf($row,'291',undef,'
ISBN '). - "\n"; - $bib .= "%sv ".isis_sf($row,'232','v','
'). + isis_sf($row,'291',undef,'
ISBN '); + $bib .= "%sv $tmp\n" if ($tmp); + + $tmp = isis_sf($row,'232','v','
'). isis_sf($row,'232','a',' : '). isis_sf($row,'252',undef,'. - '). isis_sf($row,'262',undef,'. - '). - isis_sf($row,'292',undef,'
ISBN '). - "\n"; - $bib .= "%sv ".isis_sf($row,'233','v','
'). + isis_sf($row,'292',undef,'
ISBN '); + $bib .= "%sv $tmp\n" if ($tmp); + + $tmp = isis_sf($row,'233','v','
'). isis_sf($row,'233','a',' : '). isis_sf($row,'253',undef,'. - '). isis_sf($row,'263',undef,'. - '). - isis_sf($row,'293',undef,'
ISBN '). - "\n"; + isis_sf($row,'293',undef,'
ISBN '); $mps .= isis_to_mps($row,'270',2); $mps .= isis_to_mps($row,'271',2); @@ -559,6 +489,9 @@ # headline if ($headline) { $headline .= " [".$row->{mfn}."]"; ## debug MFN! + $headline =~ s/&/∧/g; + $headline =~ s//>/g; $mps .= "H ".c_852_iso($headline)."\n"; } else { $mps .= "H nepoznato\n"; @@ -573,7 +506,15 @@ #} print R c_852_iso($bib); - print R "%perl ".Dumper($row)."\n"; + + # check if all fields are defined + foreach (split(/\n/,$bib)) { + if (/^%(\w+)\s/ && !$default::FieldNames{$1}) { + die "field $1 used but not in FieldNames"; + } + } + +# print R "%perl ".Dumper($row)."\n"; $mps .= "T document text/plain ".(tell(R) - $last_tell)." $dir/bib $last_tell ".tell(R)."\n"; $last_tell=tell(R);