--- isis2stream.pl 2002/06/16 18:11:14 1.7
+++ isis2stream.pl 2002/06/16 19:55:19 1.9
@@ -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);
@@ -529,25 +459,30 @@
$bib .= isis_to_bib($row,'991','%991');
$mps .= isis_to_mps($row,'991',12);
- sub store_isn {
- if (my $isn = shift @_) {
- my $nr = shift @_;
- my $tag = shift @_;
+ sub isis_isn_to_mps {
+ my $row = shift @_ || die;
+ my $isis_id = shift @_ || die;
+ my $nr = shift @_ || die;
+ my $i=0;
+ my $mps='';
+ while (my $isn=$row->{$isis_id}->[$i]) {
$isn =~ s/ +//g; # remove spaces
$mps .= "W $isn $nr\n";
- $bib .= "$tag $isn\n";
if ($isn =~ s/-//g) {
$mps .= "W $isn $nr\n";
}
+ $i++;
}
+ return $mps;
}
# ISBN
- store_isn($row->{10}->[0],13,'%ISBN');
- $mps .= isis_to_mps($row,'290',13);
- $mps .= isis_to_mps($row,'291',13);
- $mps .= isis_to_mps($row,'292',13);
- $mps .= isis_to_mps($row,'293',13);
+ $bib .= isis_to_bib($row,'10','%ISBN');
+ $mps .= isis_isn_to_mps($row,'10',13);
+ $mps .= isis_isn_to_mps($row,'290',13);
+ $mps .= isis_isn_to_mps($row,'291',13);
+ $mps .= isis_isn_to_mps($row,'292',13);
+ $mps .= isis_isn_to_mps($row,'293',13);
# ISSN
#store_isn($row->{11}->[0],14,'%ISSN');
@@ -559,6 +494,9 @@
# headline
if ($headline) {
$headline .= " [".$row->{mfn}."]"; ## debug MFN!
+ $headline =~ s/&/∧/g;
+ $headline =~ s/</g;
+ $headline =~ s/>/>/g;
$mps .= "H ".c_852_iso($headline)."\n";
} else {
$mps .= "H nepoznato\n";
@@ -573,7 +511,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);