@@ -, +, @@ strings 1750 END 1429 IF 647 ELSE 263 ELSIF 252 INCLUDE 32 total 22 searchfield 20 bibliotitle 19 surname 19 OPACBaseURL grep -E '^#\. %[0-9]+\$s: ' po/xx-YY-*.po | cut -d':' -f 3- | sed -e 's/^ *\(IF\|ELSIF\|CASE\|SWITCH\|INCLUDE\|USE\|SET\|PROCESS\|BLOCK\|FOREACH\|UNLESS\) *.*$/ \1 /g' | sort | uniq -c | sort -rn --- misc/translator/TmplTokenizer.pm | 58 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) --- a/misc/translator/TmplTokenizer.pm +++ a/misc/translator/TmplTokenizer.pm @@ -303,6 +303,56 @@ sub _parametrize_internal{ return $t; } +sub trimmable_string { + my $s = shift; + + # Remove TT start and end tag + $s =~ s/^\[%[-+]?\s+//; + $s =~ s/\s+[-+]?%\]$//; + + return 1 if ($s =~ /^#/); # comment + + # semicolon or newline is a TT directive separator. + if ($s =~ /[;\n]/) { + my @parts = split(/[;\n]/, $s); + foreach my $tmps (@parts) { + return 0 if (!trimmable_string($tmps)); + } + return 1; + } + + # trim away spaces + $s =~ s/^\s+//; + $s =~ s/\s+$//; + + if ($s =~ /^IF / || + $s =~ /^ELSIF / || + $s =~ /^ELSE\b/ || + $s =~ /^END\b/ || + $s =~ /^INCLUDE / || + $s =~ /^PROCESS / || + $s =~ /^BLOCK / || + $s =~ /^SWITCH / || + $s =~ /^CASE\b/ || + $s =~ /^SET / || + $s =~ /^FILTER / || + $s =~ /^FOREACH / || + $s =~ /^FOR / || + $s =~ /^USE / || + $s =~ /^UNLESS / || + $s =~ /^\S+ *= *\S/ # variable = value + ) { + return 1; + } + return 0; +} + +sub trimmable { + my $t = shift; + return 0 if (!$t || $t->type != C4::TmplTokenType::DIRECTIVE); + return trimmable_string($t->string); +} + sub next_token { my $self = shift; my $next; @@ -326,7 +376,13 @@ sub next_token { } # elsif( $next->type == C4::TmplTokenType::DIRECTIVE && $next->string =~ m/\[%\s*\w+\s*%\]/ ){ elsif( $next->type == C4::TmplTokenType::DIRECTIVE ){ - push @parts, $next; + if (trimmable($next)) { + return $next unless @parts; + $self->{_parser}->unshift_token($next); + return $self->_parametrize_internal(@parts); + } else { + push @parts, $next; + } } elsif ( $next->type == C4::TmplTokenType::CDATA){ $self->_set_js_mode(1); --