--- trunk2/lib/WebPAC.pm 2004/09/13 14:55:13 436 +++ trunk2/lib/WebPAC.pm 2004/09/13 23:13:54 439 @@ -34,8 +34,8 @@ my $webpac = new WebPAC( config_file => 'name.conf', - [code_page => 'ISO-8859-2',] - [low_mem => 1,] + code_page => 'ISO-8859-2', + low_mem => 1, ); Default C is C. @@ -810,6 +810,18 @@ } next if (! @v); + if ($tag->{'sort'}) { + # very special sort, ignoring case and + # html + @v = sort { + $a =~ s#<[^>]+/*>##; + $b =~ s#<[^>]+/*>##; + lc($b) cmp lc($a) + } @v; + $log->warn("sort within tag is usually not what you want!"); + $log->debug("sorted values: ",sub { join(", ",@v) }); + } + # use format? if ($tag->{'format_name'}) { @v = map { $self->apply_format($tag->{'format_name'},$tag->{'format_delimiter'},$_) } @v; @@ -824,12 +836,35 @@ next; # don't return headline in data_structure! } - # does tag have type? - if ($tag->{'type'}) { - push @{$row->{$tag->{'type'}}}, @v; - } else { - push @{$row->{'display'}}, @v; - push @{$row->{'swish'}}, @v; + # delimiter will join repeatable fields + if ($tag->{'delimiter'}) { + @v = ( join($tag->{'delimiter'}, @v) ); + } + + # default types + my @types = qw(display swish); + # override by type attribute + @types = ( $tag->{'type'} ) if ($tag->{'type'}); + + foreach my $type (@types) { + # append to previous line? + $log->debug("type: $type ",sub { join(" ",@v) }, $row->{'append'} || 'no append'); + if ($tag->{'append'}) { + + # I will delimit appended part with + # delimiter (or ,) + my $d = $tag->{'delimiter'}; + # default delimiter + $d ||= ", "; + + my $last = pop @{$row->{$type}}; + $d = "" if (! $last); + $last .= $d . join($d, @v); + push @{$row->{$type}}, $last; + + } else { + push @{$row->{$type}}, @v; + } } @@ -842,6 +877,12 @@ my $name = $self->{'import_xml'}->{'indexer'}->{$field}->{'name'}; $row->{'name'} = $name ? $self->_x($name) : $field; + # post-sort all values in field + if ($self->{'import_xml'}->{'indexer'}->{$field}->{'sort'}) { + $log->warn("sort at field tag not implemented"); + + } + push @ds, $row; $log->debug("row $field: ",sub { Dumper($row) });