don't repeat field name if same as last, support format_name and
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 14 Dec 2003 20:50:03 +0000 (20:50 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 14 Dec 2003 20:50:03 +0000 (20:50 +0000)
format_delimiter on field level if using iterate_by_page (without this, it's
really hard to get useful formating when using iterate_by_page), don't warn
on rare occasion (which is faulty import_xml definition, but anyway...) when
using append="1"

git-svn-id: file:///home/dpavlin/private/svn/webpac/trunk@195 13eb9ef6-21d5-0310-b721-a9d68796d827

all2xml.pl

index b125adb..175abc2 100755 (executable)
@@ -72,6 +72,8 @@ my %lhash;
 # if you are tight on memory, turn this off
 my $use_lhash_cache = 1;
 
+my $last_field_name;   # cache to prevent repeated fields
+
 sub data2xml {
 
        use xmlify;
@@ -138,7 +140,13 @@ sub data2xml {
                        print STDERR "WARNING: field '$field' doesn't have 'name' attribute!";
                }
                if ($field_name) {
-                       return x($field_name);
+                       if (! $last_field_name) {
+                               $last_field_name = x($field_name);
+                               return $last_field_name;
+                       } elsif ($field_name ne $last_field_name) {
+                               $last_field_name = x($field_name);
+                               return $last_field_name;
+                       }
                }
        }
 
@@ -167,6 +175,13 @@ sub data2xml {
                my $page_line_delimiter = $config->{indexer}->{$field}->{page_line_delimiter} || '<br/>';
                $cache->{index_delimiter}->{$field} = $config->{indexer}->{$field}->{index_delimiter};
 
+               my $format_name = $config->{indexer}->{$field}->{format_name};
+               my $format_delimiter = $config->{indexer}->{$field}->{format_delimiter};
+               if ($format_name && $format_delimiter) {
+                       $cache->{format}->{$field}->{format_name} = $format_name;
+                       $cache->{format}->{$field}->{format_delimiter} = $format_delimiter;
+               }
+
                foreach my $x (@{$config->{indexer}->{$field}->{$tag}}) {
 
                        my $format = x($x->{content});
@@ -195,7 +210,7 @@ sub data2xml {
 
                        # placeholder for all repeatable entries for index
 
-                       sub mkformat {
+                       sub mkformat($$) {
                                my $x = shift || die "mkformat needs tag reference";
                                my $data = shift || return;
                                my $format_name = x($x->{format_name}) || return $data;
@@ -362,7 +377,11 @@ sub data2xml {
                                                        @index_data = @{$cache->{index_data}->{$field}->[$page]};
                                                }
                                                if ($x->{append}) {
-                                                       $index_data[$#index_data] .= $idisplay;
+                                                       if (@index_data) {
+                                                               $index_data[$#index_data] .= $idisplay;
+                                                       } else {
+                                                               push @index_data, $idisplay;
+                                                       }
                                                } else {
                                                        push @index_data, $idisplay;
                                                }
@@ -430,8 +449,12 @@ sub data2xml {
 #print STDERR "field '$field' iterate over ",($nr_pages || 0)," pages...\n";
 #print STDERR Dumper($cache->{display_data});
                        for (my $page=0; $page <= $nr_pages; $page++) {
-
-                               my $display_data = $cache->{display_data}->{$field}->[$page];
+                               my $display_data;
+                               if ($cache->{format}->{$field}) {
+                                       $display_data=mkformat($cache->{format}->{$field},$cache->{display_data}->{$field}->[$page]);
+                               } else {
+                                       $display_data = $cache->{display_data}->{$field}->[$page];
+                               }
                                if ($display_data) { # default
                                        if ($field eq "headline") {
                                                $xml .= xmlify("headline", $display_data);