aboutsummaryrefslogblamecommitdiffstats
path: root/help/update_po.pl
blob: 7fa054e721767210305bce4100b3115d780aa15a (plain) (tree)








































                                                                     

                                                   

                                                
 























                                                                           







                                                                                                                             





































































































































                                                                          
#!/usr/bin/perl -w 
#
#  Script for translators that extract .sgml files into .sgml.po ones
#
#  Copyright (C) 2001 Héctor García Álvarez.
#
#  This library 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 script 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 library; if not, write to the Free Software
#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
#  Authors: Héctor García Álvarez <hector@scouts-es.org>

## Loaded modules
use strict; 
use File::Basename;
use Getopt::Long;

my $LANG = $ARGV[0];
#my $OUTFILE = "./tmp/$FILE.h";

my %string = ();
my @elements;
my @items;
my $n=0;

if (! $LANG){
        print "Usage: update_po.pl LANGCODE\n";
    exit;
} else { $LANG .=".po"; }

if ( !(-d "./$LANG") ){ mkdir ("./$LANG", 0755) ; }

chdir ("./C");
if ( !(-d "./tmp") ) { mkdir ("./tmp", 0755) ; }

my $comand="";

open FILES, "<POTFILES.in" ;
#open POTFILE, ">POTFILES.in.h"; 
while (<FILES>) {
    undef (%string);
        s/\n//g;
    my $Original_file = $_ ;
    s/.\///g;
    my $Converted_file = "./tmp/".$_.".h";
    #       print $Original_file."\n";
    #       print $Translated_file."\n";
    print "Converting ".$Original_file."\n" ;
    system "rm -f $Converted_file";
    &Convert ($Original_file);
    open OUT, ">>$Converted_file";
    &addMessages;
    close OUT;
    $comand = "xgettext --default-domain=$Original_file ";
    $comand .="--directory=. --add-comments --keyword=_ --keyword=N_ ";
    $comand .="$Converted_file ";
    system ( $comand );
    print ("Updating $Original_file.po\n");
    system ("mv $Original_file.po ../$LANG/$Original_file.pot");

    if ( -f "../$LANG/$Original_file.po") {
        system ("cp ../$LANG/$Original_file.po ../$LANG/$Original_file.po.old");
        system ("msgmerge ../$LANG/$Original_file.po.old ../$LANG/$Original_file.pot -o ../$LANG/$Original_file.po");
    } else {
        system ("mv ../$LANG/$Original_file.pot ../$LANG/$Original_file.po");
    }
    
    system ("msgfmt --statistics ../$LANG/$Original_file.po");
    system ("rm -f ../$LANG/$Original_file.pot");
#   print POTFILE $Converted_file."\n";
    print ".\n";
}
close FILES;

system ("rm -rf ./tmp ");
exit 0;


sub Convert() {

    ## Reading the file
  open (IN, "<$_[0]") || die "can't open $_[0]: $!";
 
        ### For translatable Sgml files ###
  while (<IN>) {
    if ( /<!--/ ) {
        my $Salida =  $_ ;
        if ( (/-->/) ) {
            $string{$Salida} = [];
        } else {
            while (<IN>) {
                $Salida .=  $_ ;
                if ( /-->/ ) { last ; }
            }
            $string{$Salida} = [];
        }
    }
    elsif ( /<para>/ ) {
        my $number_of_para = 1;
        my $Salida =  $_ ;
        if ( /<\/para>/ ) {
            $string{$Salida} = [];
        } else {
            while (<IN>) {
                if ( /<para>/ ) { $number_of_para++; }
                $Salida .=  $_ ;
                if ( /<\/para>/ ) { 
                    $number_of_para--;
                    if ( $number_of_para==0) {last ; }
                }
            }
            $string{$Salida} = [];
        }
    }
        elsif ( /<title>/ ) {
        my $Salida =  $_ ;
        if ( /<\/title>/ ) {
            $string{$Salida} = [];
        } else {
            while (<IN>) {
                $Salida .=  $_ ;
                if ( /<\/title>/ ) { last ; }
            }
            $string{$Salida} = [];
        }
    }
    elsif ( /<glossterm>/ ) {
        my $Salida =  $_ ;
        if ( /<\/glossterm>/ ) {
            $string{$Salida} = [];
        } else {
            while (<IN>) {
                $Salida .=  $_ ;
                if ( /<\/glossterm>/ ) { last ; }
            }
            $string{$Salida} = [];
        }
    }
    elsif ( /<guilabel>/ ) {
        my $Salida =  $_ ;
        if ( /<\/guilabel>/ ) {
            $string{$Salida} = [];
        } else {
            while (<IN>) {
                $Salida .=  $_ ;
                if ( /<\/guilabel>/ ) { last ; }
            }
            $string{$Salida} = [];
        }
    }
  }
  close (IN);
}

sub addMessages{

    foreach my $theMessage (sort keys %string) { 
    
    my ($tag) = $string{$theMessage} ;

    # Replace XML codes for special chars to
    # geniune gettext syntax
    #---------------------------------------
    $theMessage =~ s/"/\\"/mg;
    $theMessage =~ s/\n/\\n\n/mg;
    
#    $theMessage =~ s/&lt;/</mg;
#    $theMessage =~ s/&gt;/>/mg;

    if ($theMessage =~ /\n/) {
        #if ($tag) { print OUT "/* $tag */\n"; } 
        @elements =  split (/\n/, $theMessage);
        for ($n = 0; $n < @elements; $n++) {
           
           if ($n == 0) {
           print OUT "gchar *s = N_"; 
               print OUT "(\"$elements[$n]\"";
           if ($n == @elements - 1) { print OUT ");\n"; }
           print OUT "\n"; 
           }

           elsif ($n == @elements - 1) { 
           print OUT "             ";
               print OUT "\"$elements[$n]\");\n\n";
           }

           elsif ($n > 0)  {    
           print OUT "             ";
               print OUT "\"$elements[$n]\"\n";
           }
        }

    } else {
        
#   if ($tag) { print OUT "/* $tag */\n"; }     
    print OUT "gchar *s = N_(\"$theMessage\");\n";
    }
        
    }
}