a lot of hidra-specific branches
[webpac] / all2xml.pl
index 976136e..bc764df 100755 (executable)
@@ -212,7 +212,8 @@ sub data2xml {
 
                        sub chk_eval($) {
                                my $data = shift;
-                               if ($data =~ s/eval{([^}]+)}//) {
+                               return if (! defined($data));
+                               if ($data && $data =~ s/\s*eval{([^}]+)}\s*//) {
                                        if (eval "$1") {
                                                return $data;
                                        } else {
@@ -270,7 +271,7 @@ sub data2xml {
                                                                $display = $new_display;
                                                                $cache->{lhash}->{$display} = $new_display;
                                                        } else {
-                                                               print STDERR "WARNING: lookup for '$display' didn't find anything.\n";
+#                                                              print STDERR "WARNING: lookup for '$display' didn't find anything.\n";
                                                                $display = "";
                                                                $cache->{lhash}->{$display} = $null;
                                                        }
@@ -301,6 +302,10 @@ sub data2xml {
                                                $swish_data .= $swish if ($s);
                                                $swish_exact_data .= "xxbxx $swish xxexx " if ($se && $swish ne "");
                                        }
+
+                                       $tmp = chk_eval($tmp);
+                                       $swish_data .= $tmp if ($s && $tmp);
+                                       $swish_exact_data .= "xxbxx $tmp xxexx " if ($se && $tmp ne "");
                                }
 
                                # type="display" ; field for display
@@ -321,7 +326,7 @@ sub data2xml {
                                        } else {
                                                $display_data .= $ldel if ($display_data);
                                                my $tmp = mkformat($x,$display);
-                                               $display_data = $tmp if ($tmp);
+                                               $display_data .= $tmp if ($tmp);
                                        }
                                }
                                                
@@ -333,7 +338,8 @@ sub data2xml {
                                                no strict 'refs';
                                                $idisplay = &$filter($idisplay);
                                        }
-                                       push @index_data, $idisplay if (! $iterate_by_page);
+                                       $idisplay = chk_eval($idisplay);
+                                       push @index_data, $idisplay if ($idisplay && !$iterate_by_page);
                                }
 
                                # store fields in lookup
@@ -342,11 +348,21 @@ sub data2xml {
                                                if ($lookup_key) {
                                                        print STDERR "WARNING: try to redefine lookup_key (keys shouldn't be repeatable fields!)";
                                                } else {
-                                                       $lookup_key = $display;
+                                                       if ($filter) {
+                                                               no strict 'refs';
+                                                               $lookup_key = &$filter($display);
+                                                       } else {
+                                                               $lookup_key = $display;
+                                                       }
                                                }
                                        } elsif (lc($x->{type}) eq "lookup_val") {
                                                if ($lookup_key) {
-                                                       $lhash{$lookup_key} = $display;
+                                                       if ($filter) {
+                                                               no strict 'refs';
+                                                               $lhash{$lookup_key} = &$filter($display);
+                                                       } else {
+                                                               $lhash{$lookup_key} = $display;
+                                                       }
                                                } else {
                                                        print STDERR "WARNING: no lookup_key defined for  '$display'?";
                                                }
@@ -592,6 +608,8 @@ foreach my $database ($cfg->Sections) {
                #tie %lhash, 'GDBM_File', $lookup_file, &GDBM_NEWDB, 0644;
                tie %lhash, 'TDB_File', $lookup_file, TDB_CLEAR_IF_FIRST, O_RDWR, 0644;
                print STDERR "creating lookup file '$lookup_file'\n";
+               # delete memory cache for lookup file
+               delete $cache->{lhash};
        }
 
        # open existing lookup file
@@ -728,8 +746,9 @@ print STDERR "using: $type...\n";
                print STDERR "\n";
 
        } elsif ($type_base eq "excel") {
-               use Spreadsheet::ParseExcel;
-               use Spreadsheet::ParseExcel::Utility qw(int2col);
+               require Spreadsheet::ParseExcel;
+               require Spreadsheet::ParseExcel::Utility;
+               import Spreadsheet::ParseExcel::Utility qw(int2col);
                
                $import2cp = Text::Iconv->new($config->{excel_codepage},$codepage);
                my $excel_file = $cfg -> val($database, 'excel_file') || die "$database doesn't have 'excel_file' defined!";
@@ -783,7 +802,7 @@ print STDERR "using: $type...\n";
                }
        } elsif ($type_base eq "marc") {
 
-               use MARC;
+               require MARC;
                
                $import2cp = Text::Iconv->new($config->{marc_codepage},$codepage);
                my $marc_file = $cfg -> val($database, 'marc_file') || die "$database doesn't have 'marc_file' defined!";