X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=i18n-diff-auditor;h=e8914c004e0d20e0de81675d913430d2ac0d924f;hb=c9cee6bd30b9f24677896da40c17f28fe81fb495;hp=b4fc5968ad66bde2bae169b9457c9dc831b4b3bb;hpb=6b4785ca4c2451853f9d87dbe64e8b230c67d5d7;p=dgit.git diff --git a/i18n-diff-auditor b/i18n-diff-auditor index b4fc5968..e8914c00 100755 --- a/i18n-diff-auditor +++ b/i18n-diff-auditor @@ -107,7 +107,8 @@ our ($ihunkhead, $ihunkend); our ($ichunkstart, $ichunkend); our ($before, $after); -sub is_string ($) { $_[0]{T} =~ m/heredoc|string/; }; +sub is_string ($) { $_[0]{T} =~ m/heredoc|string/; } +sub is_trans ($) { grep { $_[0]{E} eq $_ } qw(__ f_ i_); } sub semiparse ($) { ($_) = @_; @@ -159,9 +160,10 @@ sub semiparse ($) { die "cannot tokenise \`$&'"; } } - for (my $i=@o-2; $i>0; --$i) { + for (my $i=0; $i+2 < @o; $i++) { next unless $o[$i+1]{E} eq '.'; my @inputs = @o[$i, $i+2]; + #print STDERR Dumper(\@inputs); next if grep { !is_string($_) } @inputs; my $q = $inputs[0]{Q}; next if grep { $_->{Q} ne $q } @inputs; @@ -172,7 +174,7 @@ sub semiparse ($) { Q => $q, }; @o = (@o[0..$i-1], $new, @o[$i+3..$#o]); - print STDERR Dumper(\@o); + $i--; # counteracts $i++ } debug $ichunkstart, "semiparsed: ".join ' ', map { $_->{P} } @o; return @o; @@ -211,14 +213,14 @@ sub analyse_chunk_core () { if ($y->{E} eq '+' and @ys >= 3 and $ys[0]{E} eq '(' - and ($ys[1]{E} eq '__' or $ys[2]{E} eq 'f_')) { + and is_trans($ys[1])) { $next_y->(); # ( $next_y->(); # __ f_ @y_expect_suffix = ')'; } my $string_changed; my $ye = $y->{E}; - if ($ye eq '__' or $ye eq 'f_') { + if (is_trans($y)) { $next_y->(); die "__ on non-string $y->{P}\n" unless is_string($y); die "__ on was non-string $y->{P}\n" unless is_string($x); @@ -238,6 +240,10 @@ sub analyse_chunk_core () { die $string_changed if length $string_changed; next; } + if ($ye eq 'i_') { + die $string_changed if length $string_changed; + next; + } if ($ye eq 'f_') { my $fmt = $y->{V}; die "no percent in _f string\n" unless $fmt =~ m{\%}; @@ -248,8 +254,8 @@ 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"; + debug $ichunkstart, "not exactly x: ..\"$xs\""; + debug $ichunkstart, "not exactly y: $lit"; my $next = @ys ? $ys[0]{P} : '(end)'; die "string contents mismatch near $what before $next\n"; } @@ -289,6 +295,7 @@ sub analyse_chunk_core () { # lookahead shows close of containing scope # or lower precedence operator unshift @ys, $y; + pop @analysed_y; last; } $xs =~ s{^\s+}{};