--- trunk/all2xml.pl 2003/12/21 03:27:02 197 +++ trunk/all2xml.pl 2004/01/31 21:03:06 207 @@ -210,10 +210,23 @@ # placeholder for all repeatable entries for index + sub chk_eval($) { + my $data = shift; + if ($data =~ s/eval{([^}]+)}//) { + if (eval "$1") { + return $data; + } else { + return undef; + } + } else { + return $data; + } + } + sub mkformat($$) { my $x = shift || die "mkformat needs tag reference"; my $data = shift || return; - my $format_name = x($x->{format_name}) || return $data; + my $format_name = x($x->{format_name}) || return chk_eval($data); my $fmt = x($config->{format}->{$format_name}->{content}) || die " is not defined!"; my $format_delimiter = x($x->{format_delimiter}); my @data; @@ -226,10 +239,10 @@ if ($fmt) { my $nr = scalar $fmt =~ s/%s/%s/g; if (($#data+1) == $nr) { - return sprintf($fmt,@data); + return chk_eval(sprintf($fmt,@data)); } else { - print STDERR "mkformat: [$data] can't be split on [$format_delimiter] to $nr fields!\n"; - return $data; + #print STDERR "mkformat: [$data] can't be split on [$format_delimiter] to $nr fields!\n"; + return chk_eval($data); } } else { print STDERR "usage of link '$format_name' without defined format ( tag)\n"; @@ -292,22 +305,23 @@ # type="display" ; field for display if ($d && $display) { + my $ldel = $delimiter; if ($line_delimiter && $display_data) { - $display_data .= $line_delimiter; + $ldel = $line_delimiter; } if ($filter) { no strict 'refs'; - if ($display_data) { - $display_data .= $delimiter.join($delimiter,mkformat($x,&$filter($display))); - } else { - $display_data = join($delimiter,mkformat($x,&$filter($display))); + my @arr; + foreach my $tmp (&$filter($display)) { + my $tmp2 = mkformat($x,$tmp); + push @arr,$tmp2 if ($tmp2); } + $display_data .= $ldel if ($display_data && @arr); + $display_data .= join($delimiter,@arr); } else { - if ($display_data) { - $display_data .= $delimiter.mkformat($x,$display); - } else { - $display_data = mkformat($x,$display); - } + $display_data .= $ldel if ($display_data); + my $tmp = mkformat($x,$display); + $display_data = $tmp if ($tmp); } } @@ -451,7 +465,8 @@ for (my $page=0; $page <= $nr_pages; $page++) { my $display_data; if ($cache->{format}->{$field}) { - $display_data=mkformat($cache->{format}->{$field},$cache->{display_data}->{$field}->[$page]); + my $tmp = mkformat($cache->{format}->{$field},$cache->{display_data}->{$field}->[$page]); + $display_data=$tmp if ($tmp); } else { $display_data = $cache->{display_data}->{$field}->[$page]; }