From 6b4785ca4c2451853f9d87dbe64e8b230c67d5d7 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 30 Sep 2018 23:27:33 +0100 Subject: [PATCH] i18n: i18n-diff-auditor: fixes and minor improvements Signed-off-by: Ian Jackson --- i18n-diff-auditor | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/i18n-diff-auditor b/i18n-diff-auditor index 61f877ed..b4fc5968 100755 --- a/i18n-diff-auditor +++ b/i18n-diff-auditor @@ -139,7 +139,7 @@ sub semiparse ($) { )* ) \1 }{}x) { my ($q,$v) = ($1,$2); - push @o, { T => 'string', E => $&, P => "$q-string", + push @o, { T => 'string', E => $&, P => "$q$q", Q => $q, V => $v}; } elsif (s{^$perlop_re|^\;}{}) { push @o, { T => 'op', E => $&, P => $& }; @@ -197,11 +197,25 @@ sub analyse_chunk_core () { my ($x,$y); my $next_x = sub { $next_something->(\@xs, \@analysed_x, \$x, 'before'); }; my $next_y = sub { $next_something->(\@ys, \@analysed_y, \$y, 'after' ); }; + our @y_expect_suffix = (); for (;;) { + while (my $e = shift @y_expect_suffix) { + $next_y->(); + $y->{E} eq $e + or die "suffix mismatch, expected $e got $y->{E}\n"; + } last unless @xs or @ys; $next_x->(); $next_y->(); next if $x->{E} eq $y->{E}; + if ($y->{E} eq '+' + and @ys >= 3 + and $ys[0]{E} eq '(' + and ($ys[1]{E} eq '__' or $ys[2]{E} eq 'f_')) { + $next_y->(); # ( + $next_y->(); # __ f_ + @y_expect_suffix = ')'; + } my $string_changed; my $ye = $y->{E}; if ($ye eq '__' or $ye eq 'f_') { @@ -267,7 +281,9 @@ sub analyse_chunk_core () { } $next_y->(); if (!$bras and - (grep { $y->{E} eq $_ } qw( or xor and not ; : , ) + (grep { $y->{E} eq $_ } qw( or xor and not ; : + if unless while when ) + or $y->{E} eq ',' or $y->{T} eq 'ket' )) { # lookahead shows close of containing scope @@ -276,7 +292,6 @@ sub analyse_chunk_core () { last; } $xs =~ s{^\s+}{}; - #debug $ichunkstart, "TOKEN $y->{P}\n"; $exactly->($y->{E}, $y->{P}); if ($y->{T} eq 'bra' or $y->{E} eq '?') { $bras++; -- 2.30.2