chiark / gitweb /
i18n: i18n-diff-auditor: bugfixes
[dgit.git] / i18n-diff-auditor
index ce2034f600c64edc6716422f1058e12ca001946e..61d7330f21d03c135355ef157b885e6b08303a71 100755 (executable)
@@ -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{^ (["'])( (?: [^\\'"]
                                | \\ [^"']
@@ -217,7 +217,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;
@@ -267,6 +275,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)');