diff options
Diffstat (limited to 'debian/examples/compare-msgids.pl')
-rwxr-xr-x | debian/examples/compare-msgids.pl | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/debian/examples/compare-msgids.pl b/debian/examples/compare-msgids.pl new file mode 100755 index 0000000..67e6469 --- /dev/null +++ b/debian/examples/compare-msgids.pl @@ -0,0 +1,91 @@ +#!/usr/bin/perl -w +use strict; +use warnings; + +# Copyright 2009 by Javier Fernández-Sanguino Peña <jfs@debian.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + + +# Quick and dirty script to compare two msgids (when using PO files +# generated with --previous) with wdiff to find the differences between +# them. +# Usage: perl compare-msgids.pl < XX.po + + +use File::Temp; + +my $DIFF1 = new File::Temp(TEMPLATE => "compare-msgids.XXXXXX"); +my $DIFF2 = new File::Temp(TEMPLATE => "compare-msgids.XXXXXX"); + +my $fileh=""; + +my $diffblock = 0; # Does the current block has a --previous string? +my $nowrap = 0; # Can the current be rewrapped? +my $ref = ""; # Line reference for the current block + +while (my $line = <STDIN>) { + $fileh=""; + chomp $line; + + $ref .= $line."\n" if $line =~ /^#: /; + $ref = "" if ($line eq ""); + + if ( $diffblock and $line =~ /^msgstr/ ) { + $diffblock = 0; + $nowrap = 0; + print $DIFF1 "\n\n"; + print $DIFF2 "\n\n"; + } + $diffblock = 1 if ( $line =~ /^\#\| msgid/ ) ; + $nowrap = 1 if ( $line =~ /^#,.*no-wrap/ ) ; + + if ($diffblock) { + if (length $ref) { + print $DIFF1 $ref."\n"; + print $DIFF1 $ref."\n"; + print $DIFF2 $ref."\n"; + $ref = ""; + } + $fileh = $DIFF1 if ( $line =~ /^\#\| msgid/ ) ; + $fileh = $DIFF1 if ( $line =~ /^\#\| "/ ) ; + $fileh = $DIFF2 if ( $line =~ /^msgid/ ) ; + $fileh = $DIFF2 if ( $line =~ /^"/ ) ; + + if ($fileh ne "") { + $line =~ s/^\#\| //; + + print $fileh "\n" if ( $line =~ /^msgid_plural "/); + + $line =~ s/^"//; + $line =~ s/^msgid "//; + $line =~ s/^msgid_plural "//; + $line =~ s/"$//; + + print $fileh $line; + print $fileh "\n" if ($nowrap and $line =~ m/\\n$/); + } + } +} + +close $DIFF1; close $DIFF2; + +system ("wdiff", "-3", $DIFF1->filename, $DIFF2->filename) + or die "Failed to run wdiff."; + + +exit; |