X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=i18n-diff-auditor;h=a92db5e1172ed3822210351bfdf3d9863fa86b7c;hp=ce2034f600c64edc6716422f1058e12ca001946e;hb=21600a2e332fd1074540b6529ea9e1a53f34a6df;hpb=14074b0d336fcf80dc229ada4727345ec642222f diff --git a/i18n-diff-auditor b/i18n-diff-auditor index ce2034f6..a92db5e1 100755 --- a/i18n-diff-auditor +++ b/i18n-diff-auditor @@ -132,7 +132,7 @@ sub semiparse ($) { ( .* \n ) ( (?: (?! $d) .* \n )* ) $d \n - }{ $1 }x or die "missing end of here doc $d\n"; + }{ $1 }xe or die "missing end of here doc $d\n"; $o[$#o]{V} = $2; } elsif (s{^ (["'])( (?: [^\\'"] | \\ [^"'] @@ -177,6 +177,7 @@ sub semiparse ($) { $i--; # counteracts $i++ } debug $ichunkstart, "semiparsed: ".join ' ', map { $_->{P} } @o; + # debug $ichunkstart, "semiparsed V: ".join ' ', map { defined $_->{V} ? ">$_->{V}<" : '-' } @o; return @o; } @@ -217,7 +218,15 @@ sub analyse_chunk_core () { and $ys[0]{E} eq '(' and is_trans($ys[1])) { $next_y->(); # ( - $next_y->(); # __ f_ + $next_y->(); # __ f_ i_ + @y_expect_suffix = ')'; + } elsif ($y->{E} eq '(' + and @ys > 2 + and is_trans($ys[0]) + and @analysed_y + and (grep { $_ eq $analysed_y[-1] } (qw( => [ { ? : . ), + '(', ',') )) { + $next_y->(); # __ f_ i_ @y_expect_suffix = ')'; } my $string_changed; @@ -256,8 +265,10 @@ sub analyse_chunk_core () { my ($lit, $what) = @_; my $xl = substr($xs, 0, length($lit)); if ($xl ne $lit) { - debug $ichunkstart, "not exactly x: \"..$xs\""; - debug $ichunkstart, "not exactly y: $lit"; + my $xsp = $xs; $xsp =~ s/\n/\\n/g; + my $litp = $lit; $litp =~ s/\n/\\n/g; + debug $ichunkstart, "not exactly x: ..\"$xsp\""; + debug $ichunkstart, "not exactly y: '$litp'"; my $next = @ys ? $ys[0]{P} : '(end)'; die "string contents mismatch near $what before $next\n"; } @@ -267,6 +278,7 @@ sub analyse_chunk_core () { if ($fmt !~ m{\%[^\%]}) { $exactly->($fmt, '(tail)'); $fmt = ''; + die "text deleted from end of string\n" if length $xs; last; } $exactly->($`, '(literal)');