summaryrefslogtreecommitdiff
path: root/i18n-diff-auditor
diff options
context:
space:
mode:
authorIan Jackson <ijackson@chiark.greenend.org.uk>2018-09-30 23:27:33 +0100
committerIan Jackson <ijackson@chiark.greenend.org.uk>2018-10-01 00:54:38 +0100
commit6b4785ca4c2451853f9d87dbe64e8b230c67d5d7 (patch)
tree8f1b9bad4760d919957f901a6012b09957d62f19 /i18n-diff-auditor
parent2a2b0931f9b29bf372136451d317eb81649424e2 (diff)
i18n: i18n-diff-auditor: fixes and minor improvements
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Diffstat (limited to 'i18n-diff-auditor')
-rwxr-xr-xi18n-diff-auditor21
1 files changed, 18 insertions, 3 deletions
diff --git a/i18n-diff-auditor b/i18n-diff-auditor
index 61f877e..b4fc596 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++;