X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcer%2Fxml-i18n-update.in;fp=apps%2Fsilcer%2Fxml-i18n-update.in;h=0000000000000000000000000000000000000000;hb=72c2de619079457f7a68100eb13385275a424a23;hp=9e5b09a0d10f705b2b7578a7720c56ce7750101c;hpb=e7b6c157b80152bf9fb9266e6bdd93f9fb0db776;p=runtime.git diff --git a/apps/silcer/xml-i18n-update.in b/apps/silcer/xml-i18n-update.in deleted file mode 100644 index 9e5b09a0..00000000 --- a/apps/silcer/xml-i18n-update.in +++ /dev/null @@ -1,516 +0,0 @@ -#!@XML_I18N_TOOLS_PERL@ -w - -# The GNOME Translation Update Tool -# -# Copyright (C) 2000 Free Software Foundation. -# -# 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. -# -# Author(s): Kenneth Christiansen - -## Release information -my $PROGRAM = "xml-i18n-update"; -my $VERSION = "0.9"; -my $_PACKAGE = "xml-i18n-tools"; - -## Loaded modules -use strict; -use Getopt::Long; -use Cwd; -use File::Copy; -use File::Find; - -## Scalars used by the option stuff -my $LANG = $ARGV[0]; -my $HELP_ARG = "0"; -my $VERSION_ARG = "0"; -my $DIST_ARG = "0"; -my $POT_ARG = "0"; -my $HEADERS_ARG = "0"; -my $MAINTAIN_ARG = "0"; -my $REPORT_ARG = "0"; -my $VERBOSE = "0"; - -my @languages; -my %po_files_by_lang = (); - -my $xml_extension = -"xml(\.in)*|". # .in is not required -"ui|". -"glade(\.in)*|". # .in is not required -"desktop(\.in)+|". -"directory(\.in)+|". -"soundlist(\.in)+|". -"keys(\.in)+|". -"oaf(\.in)+|". -"server(\.in)+|". -"etspec|". -"pong(\.in)+"; - -my $PACKAGE = &find_package_name; - -## Always print as the first thing -$| = 1; - -## Give error if script is run without an argument -if (! $LANG){ - print "${PROGRAM}: missing file arguments\n"; - print "Try `${PROGRAM} --help' for more information.\n"; - exit; -} - -## Handle options -GetOptions ( - "help|h|?" => \$HELP_ARG, - "version|v" => \$VERSION_ARG, - "dist|d" => \$DIST_ARG, - "pot|p" => \$POT_ARG, - "headers|s" => \$HEADERS_ARG, - "maintain|m" => \$MAINTAIN_ARG, - "report|r" => \$REPORT_ARG, - "verbose|x" => \$VERBOSE - ) or &invalid_option; - - -## Use the supplied arguments -## Check for options. -## This section will check for the different options. - -sub split_on_argument { - - if ($VERSION_ARG) { - &version; - - } elsif ($HELP_ARG) { - &help; - - } elsif ($DIST_ARG) { - &merging; - &status; - - } elsif ($POT_ARG) { - &gen_headers; - &generate_pot; - - } elsif ($HEADERS_ARG) { - &gen_headers; - exit; - - } elsif ($MAINTAIN_ARG) { - &maintain; - - } elsif ($REPORT_ARG) { - &show_status; - - } elsif ($LANG) { - if ($LANG =~ /^-/){ ## not an option - &help; - } else { - &main; - } - - } else { - &help; - } -} - -&split_on_argument; - -sub main -{ - if(-s "$LANG.po"){ - print "Working, please wait..." unless $VERBOSE; - &gen_headers; - &generate_pot; - &merging; - &status; - } - - ## Report error if the language file supplied - ## to the command line is non-existent - else { - ¬_existing; - } -} - -sub determine_type($) { - my $type = $_; - - my $gettext_type; - - if ($type =~ /\[type: (gettext\/[^\]].*)]/) { - $gettext_type=$1; - } - elsif ($type =~ /(?:xml(\.in)*|ui|oaf(?:\.in)+|pong(?:\.in)+|etspec)$/) { - $gettext_type="gettext\/xml"; - } - elsif ($type =~ /glade(\.in)*$/) { - $gettext_type="gettext\/glade"; - } - elsif ($type =~ /(?:desktop(?:\.in)+|directory(?:\.in)+|soundlist(?:\.in)+)$/) { - $gettext_type="gettext\/ini"; - } - elsif ($type =~ /keys(\.in)+$/) { - $gettext_type="gettext\/keys"; - } - else { $gettext_type=""; } - - return $gettext_type; -} - -sub version{ - - ## Print version information - print "${PROGRAM} (${_PACKAGE}) $VERSION\n"; - print "Written by Kenneth Christiansen , 2000.\n\n"; - print "Copyright (C) 2000 Free Software Foundation, Inc.\n"; - print "This is free software; see the source for copying conditions. There is NO\n"; - print "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"; - exit; -} - -sub help -{ - ## Print usage information - print "Usage: ./${PROGRAM} [OPTIONS] ...LANGCODE\n"; - print "Updates pot files and merge them with the translations.\n\n"; - print " -H, --help shows this help page\n"; - print " -P, --pot generate the pot file only\n"; - print " -S, --headers generate the XML headerfiles in POTFILES.in\n"; - print " -M, --maintain search for missing files in POTFILES.in\n"; - print " -R, --report creates a status report for the module.\n"; - print " -X, --verbose show lots of feedback\n"; - print " -V, --version shows the version\n"; - print "\nExamples of use:\n"; - print "${PROGRAM} --pot just creates a new pot file from the source\n"; - print "${PROGRAM} da created new pot file and updated the da.po file\n\n"; - print "Report bugs to .\n"; - exit; -} - -sub maintain -{ - my (@buf_i18n_plain, - @buf_i18n_xml, - @buf_potfiles, - @buf_potfiles_ignore, - @buf_allfiles, - @buf_allfiles_sorted, - @buf_potfiles_sorted - ); - - ## Search and find all translatable files - find sub { push @buf_i18n_plain, "$File::Find::name" if /\.(c|y|cc|c\+\+|h|gob)$/ }, ".."; - find sub { push @buf_i18n_xml, "$File::Find::name" if /\.($xml_extension)$/ }, ".."; - - open(POTFILES, "POTFILES.in") || die "$PROGRAM: there's no POTFILES.in!!!\n"; - @buf_potfiles = ; - - print "Searching for missing translatable files...\n"; - - ## Check if we should ignore some found files, when - ## comparing with POTFILES.in - if (-s "POTFILES.skip"){ - open FILE, "POTFILES.skip"; - while () { - if (/^[^#]/){ - push @buf_potfiles_ignore, $_; - } - } - print "Found POTFILES.skip: Ignoring files...\n"; - @buf_potfiles = (@buf_potfiles_ignore, @buf_potfiles); - } - - foreach my $file (@buf_i18n_plain){ - open FILE, "<$file"; - while () { - if (/_\(\"/){ - ## Remove the first 3 chars and add newline - push @buf_allfiles, unpack("x3 A*", $file) . "\n"; - last; - } - } - } - - foreach my $file (@buf_i18n_xml){ - open FILE, "<$file"; - while () { - if (/\s_(.*)=\"/){ - ## Remove the first 3 chars and add newline - push @buf_allfiles, unpack("x3 A*", $file) . "\n"; - last; - } - } - } - - @buf_allfiles_sorted = sort (@buf_allfiles); - @buf_potfiles_sorted = sort (@buf_potfiles); - - my %in2; - foreach (@buf_potfiles_sorted) { - $in2{$_} = 1; - } - - my @result; - - foreach (@buf_allfiles_sorted){ - if (!exists($in2{$_})){ - push @result, $_ - } - } - - ## Save file with information about the files missing - ## if any, and give information about this proceedier - if(@result){ - open OUT, ">missing"; - print OUT @result; - print "\nHere is the result:\n\n", @result, "\n"; - print "The file \"missing\" has been placed in the current directory.\n"; - print "Files supposed to be ignored should be placed in \"POTFILES.skip\"\n"; - } - - ## If there is nothing to complain about, notice the user - else{ - print "\nWell, it's all perfect! Congratulation!\n"; - } -} - -sub invalid_option -{ - ## Handle invalid arguments - print "${PROGRAM}: invalid option -- $LANG\n"; - print "Try `${PROGRAM} --help' for more information.\n"; - exit 1; -} - -sub gen_headers -{ - my $XML_I18N_EXTRACT = `which xml-i18n-extract 2>/dev/null`; - chomp $XML_I18N_EXTRACT; - - $XML_I18N_EXTRACT = $ENV{"XML_I18N_EXTRACT"} if $ENV{"XML_I18N_EXTRACT"}; - - ## Generate the .h header files, so we can allow glade and - ## xml translation support - if (! -s $XML_I18N_EXTRACT) - { - print "\n *** The xml-i18n-extract script wasn't found!" - ."\n *** Without this xml-i18n-update can not generate files.\n"; - exit; - } - else - { - open FILE, ") { - chomp; - - ## Find xml files in POTFILES.in and generate the - ## files with help from the xml-i18n-extract script - - my $gettext_type=&determine_type($1); - - if (/\.($xml_extension)$/ || /^\[/){ - $_ =~ s/^\[[^\[].*]\s*//; - my $filename = "../$_"; - - if ($VERBOSE){ - system($XML_I18N_EXTRACT, "--update", "--type=$gettext_type", $filename); - } else { - system($XML_I18N_EXTRACT, "--update", "--type=$gettext_type", "--quiet", $filename); - } - } - } - close FILE; - } -} - -sub generate_pot -{ - ## Generate the potfiles from the POTFILES.in file - - print "Building the $PACKAGE.pot...\n" if $VERBOSE; - - move("POTFILES.in", "POTFILES.in.old"); - - open INFILE, "POTFILES.in"; - while () { - s/\.($xml_extension)$/$&.h/; - s/^\[.*]\s*(.*)/$1.h/; - print OUTFILE $_; - } - close OUTFILE; - close INFILE; - - my $gettext_test ="test \! -f $PACKAGE\.po \|\| \( rm -f \.\/$PACKAGE\.pot " - ."&& mv $PACKAGE\.po \.\/$PACKAGE\.pot \)"; - - system("xgettext", "--default-domain\=$PACKAGE", "--directory\=\.\.", - "--add-comments", "--keyword\=\_", "--keyword\=N\_", - "--files-from\=\.\/POTFILES\.in"); - - system($gettext_test); - - print "Wrote $PACKAGE.pot\n" if $VERBOSE; - - move("POTFILES.in.old", "POTFILES.in"); - - print "Removing generated header (.h) files..." if $VERBOSE; - - open FILE, ") - { - chomp; - unlink "../$_.h" if /\.($xml_extension)$/; - } - close FILE; - print "done\n" if $VERBOSE; -} - -sub merging -{ - if ($ARGV[1]){ - $LANG = $ARGV[1]; - } else { - $LANG = $ARGV[0]; - } - - if ($ARGV[0] ne "--dist" && $ARGV[0] ne "-D") { - print "Merging $LANG.po with $PACKAGE.pot..." if $VERBOSE; - } - - &perform_merge($LANG); - ## Remove the "messages" trash file generated by gettext - unlink "messages"; -} - -sub perform_merge -{ - my ($LANG) = @_; - - copy("$LANG.po", "$LANG.po.old") || die "copy failed: $!"; - - ## Preform merge - system("msgmerge", "$LANG.po.old", "$PACKAGE.pot", "-o", "$LANG.po"); - - ## Remove the backup file - unlink "$LANG.po.old"; -} - -sub not_existing -{ - ## Report error if supplied language file is non-existing - print "$PROGRAM: sorry, $LANG.po does not exist!\n"; - print "Try `$PROGRAM --help' for more information.\n"; - exit; -} - -sub gather_po_files -{ - my @po_files = glob("./*.po"); - - @languages = map (&po_file2lang, @po_files); - - foreach my $lang (@languages) { - $po_files_by_lang{$lang} = shift (@po_files); - } -} - -sub po_file2lang -{ - my $tmp = $_; - $tmp =~ s/^.*\/(.*)\.po$/$1/; - return $tmp; -} - -sub status -{ - ## Print statistics - system("msgfmt", "--statistics", "$LANG.po"); - print "\n"; -} - -sub show_status -{ - &gen_headers; - &generate_pot; - &gather_po_files; - - foreach my $lang (@languages){ - print "$lang: "; - &perform_merge($lang); - } - - print "\n\n * Current translation support in $PACKAGE \n\n"; - - foreach my $lang (@languages){ - print "$lang: "; - ## Print statistics - system("msgfmt", "--statistics", "$lang.po"); - } -} - -sub find_package_name -{ - my $base_dirname = getcwd(); - $base_dirname =~ s@.*/@@; - - my ($conf_in, $src_dir); - - if ($base_dirname eq "po") { - if (-f "../configure.in") { - $conf_in = "../configure.in"; - } else { - my $makefile_source; - local (*IN); - open (IN, ") { - if (/^top_srcdir[ \t]*=/) { - $src_dir = $_; - # print "${src_dir}\n"; - - $src_dir =~ s/^top_srcdir[ \t]*=[ \t]*([^ \t\n\r]*)/$1/; - # print "${src_dir}\n"; - chomp $src_dir; - $conf_in = "$src_dir" . "/configure.in" . "\n"; - last; - } - } - $conf_in || die "Cannot find top_srcdir in Makefile." - } - - my $conf_source; { - local (*IN); - local $/; # slurp mode - open (IN, "<$conf_in") || die "can't open $conf_in: $!"; - $conf_source = ; - } - - if ($conf_source =~ /AM_INIT_AUTOMAKE\(([^,]*),(.*)/) { - my $package_name = $1; - if ($package_name =~ /^[\$](.*)/){ - if ($conf_source =~ /$1=(.*)/) { - $package_name = $1; - } - } - return $package_name; - } - } - - print "$PROGRAM: Unable to determine package name.\n" . - "Make sure to run this script inside the po directory.\n"; - exit; -}