X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=dgit.git;a=blobdiff_plain;f=i18n-diff-auditor;h=a92db5e1172ed3822210351bfdf3d9863fa86b7c;hp=43e1c10953eda12dbfe457c2635b1979738582f1;hb=21600a2e332fd1074540b6529ea9e1a53f34a6df;hpb=61e45b33282a021e491082470152c97371a3903f diff --git a/i18n-diff-auditor b/i18n-diff-auditor index 43e1c109..a92db5e1 100755 --- a/i18n-diff-auditor +++ b/i18n-diff-auditor @@ -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{^ (["'])( (?: [^\\'"] | \\ [^"'] @@ -144,9 +144,9 @@ sub semiparse ($) { Q => $q, V => $v}; } elsif (s{^$perlop_re|^\;}{}) { push @o, { T => 'op', E => $&, P => $& }; - } elsif (s/[[{(]//) { + } elsif (s/^[[{(]//) { push @o, { T => 'bra', E => $&, P => $& }; - } elsif (s/[]})]//) { + } elsif (s/^[]})]//) { push @o, { T => 'ket', E => $&, P => $& }; } elsif (s/^( [\$\@\%] )( \{ )//x) { push @o, { T => 'deref', E => $1, P => $1 }, @@ -177,6 +177,7 @@ sub semiparse ($) { $i--; # counteracts $i++ } debug $ichunkstart, "semiparsed: ".join ' ', map { $_->{P} } @o; + # debug $ichunkstart, "semiparsed V: ".join ' ', map { defined $_->{V} ? ">$_->{V}<" : '-' } @o; return @o; } @@ -217,7 +218,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 +234,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{(?($fmt, '(tail)'); $fmt = ''; + die "text deleted from end of string\n" if length $xs; last; } $exactly->($`, '(literal)'); @@ -310,6 +322,10 @@ sub analyse_chunk_core () { last; } $xs =~ s{^\s+}{} if $bras; + if (is_string($y) and $y->{Q} eq '"') { + $exactly->($y->{V}, $y->{P}); + next; + } $exactly->($y->{E}, $y->{P}); if ($y->{T} eq 'bra' or $y->{E} eq '?') { $bras++;