chiark / gitweb /
i18n: i18n-diff-auditor: bugfixes
[dgit.git] / i18n-diff-auditor
index b85b853687e3ad95065615bc8f702d49f3ddab2b..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;
@@ -225,7 +233,7 @@ sub analyse_chunk_core () {
        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);
+           die "__ on was non-string $x->{P}\n" unless is_string($x);
            if ($y->{Q} ne "'") {
                die "var subst in new string\n"
                    if $y->{V} =~ m{(?<!\\) [\$\@]};
@@ -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)');