#!/usr/bin/perl -w # # Guillaume Cottenceau (gc@mandrakesoft.com) # # Copyright 2000 MandrakeSoft # # This software may be freely redistributed under the terms of the GNU # public license. # # 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., 675 Mass Ave, Cambridge, MA 02139, USA. # # Tool to avoid common grammar errors in po files. sub get_file($) { local *FIL; open FIL, "$_[0]" or die "Can't open $_[0]"; my @file_content = <FIL>; close FIL; my @out; my $msgstr = 0; my $line_number = 0; foreach (@file_content) { $line_number++; /msgid/ and $msgstr = 0; /msgstr/ and $msgstr = 1; $msgstr and push @out, sprintf("%4d ", $line_number).$_; } @out; } my $line_number = 0; # --- Problems potentially common to multiple languages sub mixed_case($) { (/[\^ ][A-Z][A-Z][a-z]/ && !/XFree/ || /[\^ ][a-z][A-Z]/) and print("**.po possible-mixed-case $_"); } sub uppercase_after_comma($) { /, [A-Z]/ and print("**.po uppercase-after-comma $_"); } sub lowercase_after_dot($) { /\. [a-z]/ and print("**.po lowercase-after-dot $_"); } sub no_space_after_simple_ponct($) { /[a-zA-Z\.]+@[a-zA-Z]/ and return; /[,\.][a-zA-Z]/ and print("**.po no-space-after-simple-ponct $_"); } sub space_before_simple_ponct($) { / \.\./ and return; / [,\.]/ and print("**.po space-before-simple-ponct $_"); } # --- fr.po foreach (get_file("fr.po")) { /\s*#/ and next; /ez [^ ]+ez/ and print("fr.po infinitive-form-with-ez $_"); /�[ \.,;:]/ and print("fr.po grave-accent-at-end-of-word $_"); (/[���][���]/ && !/cr��/) and print("fr.po strange-accents-succession $_"); /G[nN][uU]\/[lL]inux/ and print("fr.po GNU-slash-Linux-found $_"); mixed_case($_); uppercase_after_comma($_); lowercase_after_dot($_); no_space_after_simple_ponct($_); space_before_simple_ponct($_); }