From 5f740f03fe8e8ee2b7f2e6a64ce9d50cc3cad25f Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Wed, 7 May 2014 09:49:01 +0300 Subject: [PATCH] Bug 12207: fix TTparser's handling of TT directives that contain "]" This piece of TT code: [% SWITCH lang %] [% CASE ['en', 'eng'] %]English [% CASE ['fr', 'fre'] %]French [% CASE ['it', 'ita'] %]Italian ... [% CASE %][% lang %] [% END %] is parsed by the TTparser.pm wrong. In the po-files, it shows up as: ... All the "CASE [ ... ]" codes are shown as "ERROR". This happens if any TT statement contains a ']' in it - the TTParser looks for anything that starts with [% and ends with ]. This patch fixes it so that it expects TT directives to end with '%]'. To test: 1) cd misc/translator/ 2) perl translate update xx-YY 3) for x in po/xx-YY-*.po; do cp "$x" "${x/.po/.po.bak}"; done 4) apply patch 5) perl translate update xx-YY 6) for x in po/xx-YY-*.po; do diff -Nurd "$x" "${x/.po/.po.bak}"; done the only changed lines should be those that apply to msgid's with ERROR-parameters. Signed-off-by: Bernardo Gonzalez Kriegel Work as described. No errors Signed-off-by: Jonathan Druart Signed-off-by: Galen Charlton --- C4/TTParser.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C4/TTParser.pm b/C4/TTParser.pm index 5058069e85..d27e412678 100644 --- a/C4/TTParser.pm +++ b/C4/TTParser.pm @@ -75,7 +75,7 @@ sub text{ my $is_cdata = shift; while($work){ # if there is a template_toolkit tag - if( $work =~ m/\[%.*?\]/ ){ + if( $work =~ m/\[%.*?%\]/ ){ #everything before this tag is text (or possibly CDATA), add a text token to tokens if $` if( $` ){ my $t = C4::TmplToken->new( $`, ($is_cdata? C4::TmplTokenType::CDATA : C4::TmplTokenType::TEXT), $line, $self->{filename} ); -- 2.11.0