#! /usr/local/bin/perl # -*- Perl -*- # Copyright (C) 2000 Motoyuki Kasahara # # 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, 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. use FileHandle; if (@ARGV != 2) { die "Usage: $0 old-po-file new-po-file\n"; } $old_file_name = $ARGV[0]; $new_file_name = $ARGV[1]; # # Read the old PO file. # if (!open(OLD_FILE, $old_file_name)) { die "$0: failed to open the file, $!: $old_file_name\n"; } $msgid = ''; while () { next if /^\#/; chop if /\n/; if (/^msgid:(.*)/) { $msgid = $1; if ($msgid eq '') { warn "$old_file_name:$.: msgid is empty\n"; next; } elsif (defined($old_messages{$msgid})) { warn "$old_file_name:$.: msgid redefined: $msgid"; next; } $old_messages{$msgid} = ''; } elsif (/^msgstr:(.*)/) { $msgstr = $1; if ($msgid eq '') { warn "$old_file_name:$.: msgid is empty\n"; next; } elsif ($msgstr eq '') { warn "$old_file_name:$.: msgstr is empty\n"; next; } $old_messages{$msgid} = $msgstr; } } close(OLD_FILE); # # Read the current PO file. # if (!open(NEW_FILE, $new_file_name)) { die "$0: failed to open the file, $!: $new_file_name\n"; } $msgid = ''; while () { next if /^\#/; chop if /\n/; if (/^msgid:(.*)/) { $msgid = $1; if ($msgid eq '') { warn "$new_file_name:$.: msgid is empty\n"; next; } elsif (defined($new_messages{$msgid})) { warn "$new_file_name:$.: msgid redefined: $msgid"; next; } $new_messages{$msgid} = ''; } elsif (/^msgstr:(.*)/) { $msgstr = $1; if ($msgid eq '') { warn "$new_file_name:$.: msgid is empty\n"; next; } elsif ($msgstr ne '') { warn "$new_file_name:$.: msgstr is not empty\n"; next; } if (defined($old_messages{$msgid})) { $new_messages{$msgid} = $old_messages{$msgid}; } else { warn "$new_file_name:$.: no such msgid in $old_file_name: $msgid\n"; $new_messages{$msgid} = ''; } print "msgid:", $msgid, "\n"; print "msgstr:", $new_messages{$msgid}, "\n\n"; } } close(NEW_FILE); # # Output removed entries as comment. # foreach $msgid (keys(%old_messages)) { if (!defined($new_messages{$msgid})) { print "#msgid:", $msgid, "\n"; print "#msgstr:", $old_messages{$msgid}, "\n\n"; } }