aboutsummaryrefslogtreecommitdiffstats
path: root/xml-i18n-update.in
diff options
context:
space:
mode:
authorDavid Baudens <baudens@mandriva.com>2002-07-31 14:02:53 +0000
committerDavid Baudens <baudens@mandriva.com>2002-07-31 14:02:53 +0000
commitc72f3b64d63de9eee51b7032a21e366450210fab (patch)
treed1878c15d783a83fa7b872a30b03437a0b80473b /xml-i18n-update.in
parent08a39e46c9757ad769978defb8535086bbb8b721 (diff)
downloadcommon-data-c72f3b64d63de9eee51b7032a21e366450210fab.tar
common-data-c72f3b64d63de9eee51b7032a21e366450210fab.tar.gz
common-data-c72f3b64d63de9eee51b7032a21e366450210fab.tar.bz2
common-data-c72f3b64d63de9eee51b7032a21e366450210fab.tar.xz
common-data-c72f3b64d63de9eee51b7032a21e366450210fab.zip
Remove old xml-i18n stuff
Diffstat (limited to 'xml-i18n-update.in')
-rw-r--r--xml-i18n-update.in513
1 files changed, 0 insertions, 513 deletions
diff --git a/xml-i18n-update.in b/xml-i18n-update.in
deleted file mode 100644
index 374741b..0000000
--- a/xml-i18n-update.in
+++ /dev/null
@@ -1,513 +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.8.2";
-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|ui|glade|desktop\.in|directory\.in|"
- ."soundlist\.in|keys\.in|kdelnk\.in|oaf(\.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 {
- &not_existing;
- }
-}
-
-sub determine_type($) {
- my $type = $_;
-
- my $gettext_type;
-
- if ($type =~ /\[type: (gettext\/[^\]].*)]/) {
- $gettext_type=$1;
- }
- elsif ($type =~ /(xml|ui|oaf(\.in)+)$/) {
- $gettext_type="gettext\/xml";
- }
- elsif ($type =~ /glade$/) {
- $gettext_type="gettext\/glade";
- }
- elsif ($type =~ /desktop(\.in)+$/) {
- $gettext_type="gettext\/ini";
- }
- elsif ($type =~ /directory(\.in)+$/) {
- $gettext_type="gettext\/ini";
- }
- elsif ($type =~ /kdelnk(\.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 <kenneth\@gnome.org>, 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 <kenneth\@gnome.org>.\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 = <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 (<FILE>) {
- 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 (<FILE>) {
- 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 (<FILE>) {
- 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, "<POTFILES.in";
- while (<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.old";
- open OUTFILE, ">POTFILES.in";
- while (<INFILE>) {
- 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, "<POTFILES.in";
- while (<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, "<Makefile") || die "can't open Makefile: $!";
-
- while (<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 = <IN>;
- }
-
- 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;
-}