/[webpac]/branches/ffzg/all2xml.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 /branches/ffzg/all2xml.pl

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

revision 106 by dpavlin, Mon Jul 14 17:09:36 2003 UTC revision 164 by dpavlin, Sat Nov 22 22:04:05 2003 UTC
# Line 96  sub data2xml { Line 96  sub data2xml {
96                  $field_usage{$field}++;                  $field_usage{$field}++;
97    
98                  my $swish_data = "";                  my $swish_data = "";
99                    my $swish_exact_data = "";
100                  my $display_data = "";                  my $display_data = "";
101                  my $line_delimiter;                  my $line_delimiter;
102    
# Line 109  sub data2xml { Line 110  sub data2xml {
110    
111                          my $repeat_off = 0;             # repeatable offset                          my $repeat_off = 0;             # repeatable offset
112    
113                          my ($s,$d,$i) = (1,1,0);        # swish, display default                          my ($s,$se,$d,$i) = (1,0,1,0);  # swish, display default
114                          $s = 0 if (lc($x->{type}) eq "display");                          $s = 0 if (lc($x->{type}) eq "display");
115                          $d = 0 if (lc($x->{type}) eq "swish");                          $d = 0 if (lc($x->{type}) eq "swish");
116                            $se = 1 if (lc($x->{type}) eq "swish_exact");
117                          ($s,$d,$i) = (0,0,1) if (lc($x->{type}) eq "index");                          ($s,$d,$i) = (0,0,1) if (lc($x->{type}) eq "index");
118    
119                          # what will separate last line from this one?                          # what will separate last line from this one?
# Line 128  sub data2xml { Line 130  sub data2xml {
130                          my @index_data;                          my @index_data;
131                          my $index_filter;                          my $index_filter;
132    
133                            sub mkformat {
134                                    my $x = shift || die "mkformat needs tag reference";
135                                    my $data = shift || return;
136                                    my $format_name = x($x->{format_name}) || return $data;
137                                    my $fmt = x($config->{format}->{$format_name}->{content}) || die "<format name=\"$format_name\"> is not defined!";
138                                    my $format_delimiter = x($x->{format_delimiter});
139                                    my @data;
140                                    if ($format_delimiter) {
141                                            @data = split(/$format_delimiter/,$data);
142                                    } else {
143                                            push @data,$data;
144                                    }
145    
146                                    if ($fmt) {
147                                            my $nr = scalar $fmt =~ s/%s/%s/g;
148                                            if (($#data+1) == $nr) {
149                                                    return sprintf($fmt,@data);
150                                            } else {
151                                                    print STDERR "mkformat: [$data] can't be split on [$format_delimiter] to $nr fields!\n";
152                                                    return $data;
153                                            }
154                                    } else {
155                                            print STDERR "usage of link '$format_name' without defined format (<link> tag)\n";
156                                    }
157                            }
158    
159                          # while because of repeatable fields                          # while because of repeatable fields
160                          while ($swish || $display) {                          while ($swish || $display) {
161                                  ($swish,$display) = parse_format($type, $format,$row,$repeat_off++,$import2cp);                                  ($swish,$display) = parse_format($type, $format,$row,$repeat_off++,$import2cp);
# Line 143  sub data2xml { Line 171  sub data2xml {
171                                          require "filter/".$filter.".pm";                                          require "filter/".$filter.".pm";
172                                  }                                  }
173                                  # type="swish" ; field for swish                                  # type="swish" ; field for swish
174                                  if ($s && $swish) {                                  if ($swish) {
175                                          if ($filter) {                                          if ($filter && ($s || $se)) {
176                                                  no strict 'refs';                                                  no strict 'refs';
177                                                  $swish_data .= join(" ",&$filter($swish));                                                  my $tmp = join(" ",&$filter($swish)) if ($s || $se);
178                                                    $swish_data .= $tmp if ($s);
179                                                    $swish_exact_data .= $tmp if ($se);
180    
181                                          } else {                                          } else {
182                                                  $swish_data .= $swish;                                                  $swish_data .= $swish if ($s);
183                                                    $swish_exact_data .= $swish if ($se);
184                                          }                                          }
185                                  }                                  }
186    
# Line 160  sub data2xml { Line 192  sub data2xml {
192                                          }                                          }
193                                          if ($filter) {                                          if ($filter) {
194                                                  no strict 'refs';                                                  no strict 'refs';
195                                                  $display_data .= join($delimiter,&$filter($display));                                                  if ($display_data) {
196                                                            $display_data .= $delimiter.join($delimiter,mkformat($x,&$filter($display)));
197                                                    } else {
198                                                            $display_data = join($delimiter,mkformat($x,&$filter($display)));
199                                                    }
200                                          } else {                                          } else {
201                                                  if ($display_data) {                                                  if ($display_data) {
202                                                          $display_data .= $delimiter.$display;                                                          $display_data .= $delimiter.mkformat($x,$display);
203                                                  } else {                                                  } else {
204                                                          $display_data .= $display;                                                          $display_data = mkformat($x,$display);
205                                                  }                                                  }
206                                          }                                          }
207                                  }                                  }
# Line 181  sub data2xml { Line 217  sub data2xml {
217                          if (@index_data) {                          if (@index_data) {
218                                  if ($index_filter) {                                  if ($index_filter) {
219                                          no strict 'refs';                                          no strict 'refs';
220                                          foreach my $d (&$index_filter(@index_data)) {                                          foreach my $d (@index_data) {
221                                                  $index->insert($field, $d, $path);                                                  $index->insert($field, &$index_filter($d), $path);
222                                          }                                          }
223                                  } else {                                  } else {
224                                          foreach my $d (@index_data) {                                          foreach my $d (@index_data) {
# Line 201  sub data2xml { Line 237  sub data2xml {
237                          my ($s,$d,$i) = (1,1,0);        # swish, display default                          my ($s,$d,$i) = (1,1,0);        # swish, display default
238                          $s = 0 if (lc($x->{type}) eq "display");                          $s = 0 if (lc($x->{type}) eq "display");
239                          $d = 0 if (lc($x->{type}) eq "swish");                          $d = 0 if (lc($x->{type}) eq "swish");
240                            # no support for swish exact in config.
241                            # IMHO, it's useless
242                          ($s,$d,$i) = (0,0,1) if (lc($x->{type}) eq "index");                          ($s,$d,$i) = (0,0,1) if (lc($x->{type}) eq "index");
243    
244                          if ($val) {                          if ($val) {
# Line 243  sub data2xml { Line 281  sub data2xml {
281                          $xml .= xmlify($field."_swish", unac_string($codepage,$swish_data));                          $xml .= xmlify($field."_swish", unac_string($codepage,$swish_data));
282                  }                  }
283    
284                    if ($swish_exact_data) {
285                            $swish_exact_data =~ s/ +/ /g;
286                            $swish_exact_data =~ s/ +$//g;
287    
288                            # add delimiters before and after word.
289                            # That is required to produce exact match
290                            $xml .= xmlify($field."_swish_exact", unac_string($codepage,'xxbxx '.$swish_exact_data.' xxexx'));
291                    }
292    
293    
294          }          }
295    
# Line 278  $index = new index_DBI( Line 325  $index = new index_DBI(
325    
326  my $show_progress = $cfg_global->val('global', 'show_progress');  my $show_progress = $cfg_global->val('global', 'show_progress');
327    
328    my $unac_filter = $cfg_global->val('global', 'unac_filter');
329    if ($unac_filter) {
330            require $unac_filter;
331    }
332    
333  foreach my $database ($cfg->Sections) {  foreach my $database ($cfg->Sections) {
334    
335          my $type = lc($cfg -> val($database, 'type')) || die "$database doesn't have 'type' defined";          my $type = lc($cfg -> val($database, 'type')) || die "$database doesn't have 'type' defined";
# Line 289  print STDERR "reading ./import_xml/$type Line 341  print STDERR "reading ./import_xml/$type
341          my $type_base = $type;          my $type_base = $type;
342          $type_base =~ s/_.+$//g;          $type_base =~ s/_.+$//g;
343    
344          $config=XMLin("./import_xml/$type.xml", forcearray => [ $type2tag{$type_base}, 'config' ], forcecontent => 1);          $config=XMLin("./import_xml/$type.xml", forcearray => [ $type2tag{$type_base}, 'config', 'format' ], forcecontent => 1);
345    
346          # output current progress indicator          # output current progress indicator
347          my $last_p = 0;          my $last_p = 0;
# Line 332  print STDERR "using: $type...\n"; Line 384  print STDERR "using: $type...\n";
384                  # if so, erase it and re-open database                  # if so, erase it and re-open database
385                  sub check_txt_db {                  sub check_txt_db {
386                          my $isis_db = shift || die "need isis database name";                          my $isis_db = shift || die "need isis database name";
387                            my $reopen = 0;
388    
389                          if (-e $isis_db.".TXT") {                          if (-e $isis_db.".TXT") {
390                                  print STDERR "WARNING: removing .txt OpenIsis database...\n";                                  print STDERR "WARNING: removing $isis_db.TXT OpenIsis database...\n";
391                                  unlink $isis_db.".TXT" || warn "unlink error on '$isis_db.TXT': $!";                                  unlink $isis_db.".TXT" || warn "FATAL: unlink error on '$isis_db.TXT': $!";
392                                  my $db = OpenIsis::open( $isis_db );                                  $reopen++;
393                                  return $db;                          }
394                            if (-e $isis_db.".PTR") {
395                                    print STDERR "WARNING: removing $isis_db.PTR OpenIsis database...\n";
396                                    unlink $isis_db.".PTR" || warn "FATAL: unlink error on '$isis_db.PTR': $!";
397                                    $reopen++;
398                          }                          }
399                            return OpenIsis::open( $isis_db ) if ($reopen);
400                  }                  }
401    
402                  # EOF error                  # EOF error
403                  if ($db == -1) {                  if ($db == -1) {
404                          $db = check_txt_db($isis_db);                          $db = check_txt_db($isis_db);
405                          if (! $db) {                          if ($db == -1) {
406                                  print STDERR "FATAL: OpenIsis can't open zero size file $isis_db\n";                                  print STDERR "FATAL: OpenIsis can't open zero size file $isis_db\n";
407                                  next;                                  next;
408                          }                          }
# Line 392  print STDERR "using: $type...\n"; Line 451  print STDERR "using: $type...\n";
451                                  }                                  }
452                          }                          }
453                  }                  }
454                    # for this to work with current version of OpenIsis (0.9.0)
455                    # you might need my patch from
456                    # http://www.rot13.org/~dpavlin/projects/openisis-0.9.0-perl_close.diff
457                    OpenIsis::close($db);
458                  print STDERR "\n";                  print STDERR "\n";
459    
460          } elsif ($type_base eq "excel") {          } elsif ($type_base eq "excel") {

Legend:
Removed from v.106  
changed lines
  Added in v.164

  ViewVC Help
Powered by ViewVC 1.1.26