Current File : //bin/intltool-prepare
#!/usr/bin/perl -w
# -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4  -*-

#  Intltool .desktop, .directory Prepare Tool
#
#  Copyright (C) 2001 Free Software Foundation.
#
#  Intltool 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.
#
#  Intltool 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 program; if not, write to the Free Software
#  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#  Author(s): Gediminas Paulauskas <[email protected]>
#	      Kenneth Christiansen <[email protected]>

## Release information
my $PROGRAM      = "intltool-prepare";
my $PACKAGE      = "intltool";
my $VERSION      = "0.50.2";

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

## Scalars used by the option stuff
my $HELP_ARG    = "0";
my $VERSION_ARG = "0";
my $VERBOSE     = "0";

my @languages;
my @desktop_files;
my $new;
my $file;

my $desktop_extension = "(desktop|soundlist|keys|directory)";

my $keywords = "Name|Comment|GenericName|SwallowTitle|description";

## Always print as the first thing
$| = 1;

## Handle options
GetOptions (
            "help|h"            => \$HELP_ARG,
            "version|v"         => \$VERSION_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;

    } else {
        &main;
    }
}

&split_on_argument;

sub main
{
    print "Working, please wait...\n" if (! $VERBOSE);
    &find_desktop_files;
    &append_keywords;
    &add_to_potfiles;
    &perform_rescue;
    &add_to_cvsignore;
    &fix_makefiles;
    &generate_empty;
}

sub version {
    print <<_EOF_;
${PROGRAM} ${PACKAGE} $VERSION
Written by Gediminas Paulauskas <menesis\@delfi.lt>, 2000.

Copyright (C) 2000 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
_EOF_
    exit;
}

sub help
{
    print <<_EOF_;
Usage: ${PROGRAM} [OPTION] KEYWORD...
Automates preparation steps before software make use of intltool.
KEYWORD is a list of additional key other than "Name", "Comment"
and "description".

  -h, --help                 shows this help page
  -v, --version              shows the version
  -x, --verbose              show lots of feedback

Report bugs to http://bugs.launchpad.net/intltool
_EOF_
    exit;
}

sub invalid_option
{
    ## Handle invalid arguments
    ## my $opt = $ARGV[0];
    ## print "$PROGRAM: invalid option -- $opt\n";
    print STDERR "Try `$PROGRAM --help' for more information.\n";
    exit 1;
}

sub append_keywords
{
    my $arg;
    foreach $arg (@ARGV) {
        $keywords .= "|$arg";
    }
}

sub add_to_potfiles
{
    open FILE, ">>po/POTFILES.in";
    my $intro = 0;
    foreach my $desktop (@desktop_files) {
        next if contains("po/POTFILES.in", "$desktop.in");
    # Print explanation comment only once
        unless ($intro) {
           print FILE "# files added by intltool-prepare\n";
           $intro = 1;
        }
        print FILE "$desktop.in\n";
    }
    close FILE;
}

sub perform_rescue
{
    foreach $file (@desktop_files) {
        &rescue_file($file);
    }
}

sub rescue_file
{
    my ($filename) = @_;
    my ($msgid, $line, $lang);

    print "Rescuing translations from $filename ...\n" if $VERBOSE;

    open ORIG, "<$filename";
    $line = 1;
ENTRY: while (<ORIG>) {
        chomp;
        $line++;
	    my $entry = $_;
        if (($entry =~ /^($keywords)=(.*)$/) ||
            ($entry =~ /^(\s*description)=(.*)$/)) {
            $msgid = $2;
            $msgid =~ s/\\/\\\\/g;
	    $msgid =~ s/\"/\\"/g;
        } elsif (($entry =~ /^($keywords)\[(.*?)\]=(.*)$/) ||
                 ($entry =~ /^(\s*\[)(.*?)\]description=(.*)$/)) {
            $lang = $2;

            my $msgstr = $3;
            $msgstr =~ s/\\/\\\\/g;
            $msgstr =~ s/"/\\"/g;
	    
            $line--;
            if ((-s "po/$lang.po") && 
                (contains("po/$lang.po", "msgid \"$msgid\""))) {
                next ENTRY;
            }
            
            open POFILE, ">>po/$lang.po";

            print POFILE "\n#: $filename.in:$line\n";
            print POFILE "msgid \"$msgid\"\n";
            print POFILE "msgstr \"$msgstr\"\n";

            close POFILE;
        }
    }
}

sub generate_empty
{
    my $all = ' ';
    foreach my $full (@desktop_files) {
        $new = "$full.in";
        $all .= "$new ";
	    print "Generating empty $new ...\n" if $VERBOSE;
        open FULL, "<$full";
        open NEW, ">$new";

        while (<FULL>) {
            unless (
		            (/^($keywords)\[.*?\]=.*$/) ||
        	        (/^\s*\[(.*?)\]description=.*$/)
		           ) {
                if (/^($keywords)=.*$/) {
                    print NEW "_$_";
                } elsif (/^(\s*)(description=.*)$/) {
                    print NEW "$1_$2\n";
                } else {
                    print NEW;
                }
	        }
        }

        close NEW;
    }
    unless ($all eq ' ') {
        print "*** Please add these files to CVS by following command: ***\n"
            . "cvs add$all\n";
    }
}

sub add_to_cvsignore
{
    my $all = ' ';
    my $ign;
    foreach $file (@desktop_files) {
        $file =~ /^(.*\/)?(.+?\.$desktop_extension$)$/;
        if ($1) {
            $ign = "$1.cvsignore";
        } else {
            $ign = ".cvsignore";
        }
        my $basename = $2;

        next if contains($ign, $basename);
	    
        print "Appending $basename to $ign\n" if $VERBOSE;
        open FILE, ">>$ign";
        print FILE "$basename\n";
        $all .= "$file ";
    }
    close FILE;
    unless ($all eq ' ') {
        print "*** Please remove files from CVS by following command: ***\n"
            . "cvs remove -f$all\n";
    }
}

sub fix_makefiles
{
    my $file;
    foreach $file (@desktop_files) {
        my ($makefile, $line);

        $file =~ /^(.*\/)?(.+?\.$desktop_extension$)$/;
        if ($1) {
            $makefile = "$1Makefile.am";
        } else {
            $makefile = "Makefile.am";
        }
        my $basename = $2;
        print "Fixing $basename entry in $makefile\n" if $VERBOSE;

        open MAKE, $makefile;
        open NEWMAKE, ">$makefile.new";
        my $extra = 0;
        while ($line = <MAKE>) {
            $extra = 1 if $line =~ /^EXTRA_DIST/;
            if ($extra) {
                if (($line =~ /$basename/) &&
                    !($line =~ /$basename\.in/)) {
                    $line =~ s/$basename/$basename\.in/;
                }
                $extra = 0 unless $line =~ /\\\s*$/
            } else {
                if ($line =~ /^(\w+)_DATA\s*=\s*$basename\s*$/) {
                    my $name = $1;
                    $line =~ s/^$name\_DATA/$name\_in_files/;
                    $line =~ s/$basename/$basename\.in/;
                    $basename =~ /\.($desktop_extension)$/;
                    my $ext = $1;
                    $line .= "$name\_DATA = \$($name\_in_files:.$ext.in=.$ext)\n";
                    $ext =~ tr/a-z/A-Z/;
                    if (!contains($makefile, "\@INTLTOOL_$ext\_RULE\@")) {
                        $line .= "\@INTLTOOL_$ext\_RULE\@\n";
                    }
                }
            }
            print NEWMAKE $line;
        }
        close NEWMAKE;
        rename "$makefile.new", $makefile;
    }
}

sub contains
{
    my ($name, $str) = @_;
    open CONT, "<$name";
    while (<CONT>) {
         chomp;
         return 1 if $_ eq $str;
    }
    return 0;
}

sub find_desktop_files
{
    if ($VERBOSE) {
        print "Found these interesting files:\n";
    } else {
        print "Finding interesting files...";
    }
    find (\&wanted, '.');
    print "done\n" unless $VERBOSE;
}

sub wanted
{
    if (/\.$desktop_extension$/) {
        my $file = $File::Find::name;
        $file =~ s/\.\///;
        push @desktop_files, $file;
        print "$file\n" if $VERBOSE;
    }
}

# vim: ts=4 sw=4 expandtab
blog

blog

1win официальный сайт букмекера — Обзор и зеркало для входа.793

1win официальный сайт букмекера — Обзор и зеркало для входа ▶️ ИГРАТЬ Содержимое 1вин: Официальный сайт букмекера – Обзор и зеркало для входа Официальный сайт 1вин Преимущества официального сайта 1вин Зеркало для входа 1win Официальный Сайт Букмекера Обзор и Зеркало для Входа Преимущества 1вин Зеркало для входа Преимущества и Недостатки …

Read More »

1Win официальный сайт букмекера — 1Вин ставки на спорт.5124

1Win официальный сайт букмекера — 1Вин ставки на спорт ▶️ ИГРАТЬ Содержимое 1Win – Официальный Сайт Букмекера Преимущества и Функции 1Win Как сделать Ставку на Спорт Шаг 2: Выберите Матч Бонусы и Акции 1Вин Отзывы и Рейтинг Преимущества 1вин В мире ставок на спорт есть много букмекеров, но не все …

Read More »

1win — букмекерская контора 1вин.4455

1win — букмекерская контора 1вин ▶️ ИГРАТЬ Содержимое 1win – Букмекерская контора 1вин Преимущества 1win О компании 1win Преимущества для игроков Удобство и доступность Большой выбор ставок на спорт Выгодные условия для игроков Виды ставок и коэффициенты Основные виды ставок Коэффициенты в 1win Бонусы и акции 1win Отзывы и оценки …

Read More »

1win официальный сайт букмекера — Обзор и зеркало для входа.946

1win официальный сайт букмекера — Обзор и зеркало для входа ▶️ ИГРАТЬ Содержимое 1win Официальный Сайт Букмекера Обзор и Зеркало для Входа Преимущества и Функции 1win Функции 1win: Как Зарегистрироваться и Начать Играть на 1win Безопасность и Надежность В мире ставок и азарта 1win является одним из самых популярных букмекеров, …

Read More »

1win — скачать приложение букмекерской конторы.1701

1win — скачать приложение букмекерской конторы ▶️ ИГРАТЬ Содержимое Установка и регистрация 1win apk Регистрация на 1win Основные функции и преимущества 1win В мире ставок и азарта 1win является одним из самых популярных букмекеров. Компания была основана в 2018 году и с тех пор стала одним из лидеров на рынке. …

Read More »

1win — официальный сайт букмекерской конторы 1вин.4184 (2)

1win — официальный сайт букмекерской конторы 1вин ▶️ ИГРАТЬ Содержимое 1win – Официальный Сайт Букмекерской Конторы 1вин Оформление и Дизайн 1win Функциональность и Инструменты 1win Анализ игроков и команд Бонусы и Промокоды 1вин Промокоды для постоянных клиентов Безопасность и Надежность Отзывы и Рейтинг В мире ставок и азарта 1win – …

Read More »

1win официальный сайт букмекера — Обзор и зеркало для входа.450

1win официальный сайт букмекера — Обзор и зеркало для входа ▶️ ИГРАТЬ Содержимое 1win Официальный Сайт Букмекера Преимущества Официального Сайта 1вин Зеркало для входа Обзор и Зеркало для Входа Преимущества 1win Зеркало для Входа Преимущества и Функции 1win Удобство и доступность В мире ставок и азарта 1win является одним из …

Read More »

1win официальный сайт букмекера — Обзор и зеркало для входа.477

1win официальный сайт букмекера — Обзор и зеркало для входа ▶️ ИГРАТЬ Содержимое 1win Официальный Сайт Букмекера Преимущества 1win Обзор и Зеркало для Входа Преимущества 1вин Зеркало для Входа В мире ставок и азарта 1вин является одним из самых популярных букмекеров, предлагающих широкий спектр услуг для игроков. В этой статье …

Read More »

1win — официальный сайт букмекерской конторы 1вин.3301

1win — официальный сайт букмекерской конторы 1вин ▶️ ИГРАТЬ Содержимое Официальный сайт букмекерской конторы 1вин Быстрый доступ к ставкам и линиям Преимущества быстрого доступа Преимущества и функции официального сайта 1вин Функции официального сайта 1вин: В мире ставок и азарта 1вин – это имя, которое ассоциируется с надежностью, быстротой и комфортом. …

Read More »

1win — скачать приложение букмекерской конторы.534

1win — скачать приложение букмекерской конторы ▶️ ИГРАТЬ Содержимое Установка приложения 1win Функциональность приложения 1win Главные функции Преимущества использования приложения 1win Как скачать приложение 1win Шаг 1: Установка 1win apk Шаг 2: Установка 1win на ваше устройство Шаг 3: Регистрация и вход в приложение 1win В мире ставок и азарта …

Read More »