⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intltool-extract.in

📁 PSlib是一个用来生成PostScript文件的类库。提供了一个生成PostScript文件的简单方法。
💻 IN
📖 第 1 页 / 共 2 页
字号:
#!@INTLTOOL_PERL@ -w # -*- Mode: perl; indent-tabs-mode: nil; c-basic-offset: 4  -*-##  The Intltool Message Extractor##  Copyright (C) 2000-2001, 2003 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.##  As a special exception to the GNU General Public License, if you#  distribute this file as part of a program that contains a#  configuration script generated by Autoconf, you may include it under#  the same distribution terms that you use for the rest of that program.##  Authors: Kenneth Christiansen <kenneth@gnu.org>#           Darin Adler <darin@bentspoon.com>### Release informationmy $PROGRAM      = "intltool-extract";my $PACKAGE      = "intltool";my $VERSION      = "0.36.2";## Loaded modulesuse strict; use File::Basename;use Getopt::Long;## Scalars used by the option stuffmy $TYPE_ARG	= "0";my $LOCAL_ARG	= "0";my $HELP_ARG 	= "0";my $VERSION_ARG = "0";my $UPDATE_ARG  = "0";my $QUIET_ARG   = "0";my $SRCDIR_ARG	= ".";my $FILE;my $OUTFILE;my $gettext_type = "";my $input;my %messages = ();my %loc = ();my %count = ();my %comments = ();my $strcount = 0;my $XMLCOMMENT = "";## Use this instead of \w for XML files to handle more possible characters.my $w = "[-A-Za-z0-9._:]";## Always print first$| = 1;## Handle optionsGetOptions (	    "type=s"     => \$TYPE_ARG,            "local|l"    => \$LOCAL_ARG,            "help|h"     => \$HELP_ARG,            "version|v"  => \$VERSION_ARG,            "update"     => \$UPDATE_ARG,	    "quiet|q"    => \$QUIET_ARG,	    "srcdir=s"	 => \$SRCDIR_ARG,            ) or &error;&split_on_argument;## Check for options. ## This section will check for the different options.sub split_on_argument {    if ($VERSION_ARG) {        &version;    } elsif ($HELP_ARG) {	&help;            } elsif ($LOCAL_ARG) {        &place_local;        &extract;    } elsif ($UPDATE_ARG) {	&place_normal;	&extract;    } elsif (@ARGV > 0) {	&place_normal;	&message;	&extract;    } else {	&help;    }  }    sub place_normal {    $FILE	 = $ARGV[0];    $OUTFILE     = "$FILE.h";    my $dirname = dirname ($OUTFILE);    if (! -d "$dirname" && $dirname ne "") {        system ("mkdir -p $dirname");    }}   sub place_local {    $FILE	 = $ARGV[0];    $OUTFILE     = fileparse($FILE, ());    if (!-e "tmp/") {         system("mkdir tmp/");     }    $OUTFILE     = "./tmp/$OUTFILE.h"}sub determine_type {   if ($TYPE_ARG =~ /^gettext\/(.*)/) {	$gettext_type=$1   }}## Sub for printing release informationsub version{    print <<_EOF_;${PROGRAM} (${PACKAGE}) $VERSIONCopyright (C) 2000, 2003 Free Software Foundation, Inc.Written by Kenneth Christiansen, 2000.This is free software; see the source for copying conditions.  There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE._EOF_    exit;}## Sub for printing usage informationsub help {    print <<_EOF_;Usage: ${PROGRAM} [OPTION]... [FILENAME]Generates a header file from an XML source file.It grabs all strings between <_translatable_node> and its end tag inXML files. Read manpage (man ${PROGRAM}) for more info.      --type=TYPE   Specify the file type of FILENAME. Currently supports:                    "gettext/glade", "gettext/ini", "gettext/keys"                    "gettext/rfc822deb", "gettext/schemas",                    "gettext/scheme", "gettext/xml", "gettext/quoted"  -l, --local       Writes output into current working directory                    (conflicts with --update)      --update      Writes output into the same directory the source file                     reside (conflicts with --local)      --srcdir      Root of the source tree  -v, --version     Output version information and exit  -h, --help        Display this help and exit  -q, --quiet       Quiet modeReport bugs to http://bugzilla.gnome.org/ (product name "$PACKAGE")or send email to <xml-i18n-tools\@gnome.org>._EOF_    exit;}## Sub for printing error messagessub error{    print STDERR "Try `${PROGRAM} --help' for more information.\n";    exit;}sub message {    print "Generating C format header file for translation.\n" unless $QUIET_ARG;}sub extract {    &determine_type;    &convert;    open OUT, ">$OUTFILE";    binmode (OUT) if $^O eq 'MSWin32';    &msg_write;    close OUT;    print "Wrote $OUTFILE\n" unless $QUIET_ARG;}sub convert {    ## Reading the file    {	local (*IN);	local $/; #slurp mode	open (IN, "<$SRCDIR_ARG/$FILE") || die "can't open $SRCDIR_ARG/$FILE: $!";	$input = <IN>;    }    &type_ini if $gettext_type eq "ini";    &type_keys if $gettext_type eq "keys";    &type_xml if $gettext_type eq "xml";    &type_glade if $gettext_type eq "glade";    &type_scheme if $gettext_type eq "scheme";    &type_schemas  if $gettext_type eq "schemas";    &type_rfc822deb  if $gettext_type eq "rfc822deb";    &type_quoted if $gettext_type eq "quoted";}sub entity_decode_minimal{    local ($_) = @_;    s/&apos;/'/g; # '    s/&quot;/"/g; # "    s/&amp;/&/g;    return $_;}sub entity_decode{    local ($_) = @_;    s/&apos;/'/g; # '    s/&quot;/"/g; # "    s/&lt;/</g;    s/&gt;/>/g;    s/&amp;/&/g;    return $_;}sub escape_char{    return '\"' if $_ eq '"';    return '\n' if $_ eq "\n";    return '\\\\' if $_ eq '\\';    return $_;}sub escape{    my ($string) = @_;    return join "", map &escape_char, split //, $string;}sub type_ini {    ### For generic translatable desktop files ###    while ($input =~ /^(#(.+)\n)?^_.*=(.*)$/mg) {        if (defined($2))  {            $comments{$3} = $2;        }        $messages{$3} = [];    }}sub type_keys {    ### For generic translatable mime/keys files ###    while ($input =~ /^\s*_\w+=(.*)$/mg) {        $messages{$1} = [];    }}sub type_xml {    ### For generic translatable XML files ###    my $tree = readXml($input);    parseTree(0, $tree);}sub print_var {    my $var = shift;    my $vartype = ref $var;        if ($vartype =~ /ARRAY/) {        my @arr = @{$var};        print "[ ";        foreach my $el (@arr) {            print_var($el);            print ", ";        }        print "] ";    } elsif ($vartype =~ /HASH/) {        my %hash = %{$var};        print "{ ";        foreach my $key (keys %hash) {            print "$key => ";            print_var($hash{$key});            print ", ";        }        print "} ";    } else {        print $var;    }}# Same syntax as getAttributeString in intltool-merge.in.in, similar logic (look for ## differences comment)sub getAttributeString{    my $sub = shift;    my $do_translate = shift || 1;    my $language = shift || "";    my $translate = shift;    my $result = "";    foreach my $e (reverse(sort(keys %{ $sub }))) {	my $key    = $e;	my $string = $sub->{$e};	my $quote = '"';		$string =~ s/^[\s]+//;	$string =~ s/[\s]+$//;		if ($string =~ /^'.*'$/)	{	    $quote = "'";	}	$string =~ s/^['"]//g;	$string =~ s/['"]$//g;        ## differences from intltool-merge.in.in	if ($key =~ /^_/) {            $comments{entity_decode($string)} = $XMLCOMMENT if $XMLCOMMENT;            $messages{entity_decode($string)} = [];            $$translate = 2;	}        ## differences end here from intltool-merge.in.in	$result .= " $key=$quote$string$quote";    }    return $result;}# Verbatim copy from intltool-merge.in.insub getXMLstring{    my $ref = shift;    my $spacepreserve = shift || 0;    my @list = @{ $ref };    my $result = "";    my $count = scalar(@list);    my $attrs = $list[0];    my $index = 1;    $spacepreserve = 1 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?preserve["']?$/));    $spacepreserve = 0 if ((exists $attrs->{"xml:space"}) && ($attrs->{"xml:space"} =~ /^["']?default["']?$/));    while ($index < $count) {	my $type = $list[$index];	my $content = $list[$index+1];        if (! $type ) {	    # We've got CDATA	    if ($content) {		# lets strip the whitespace here, and *ONLY* here                $content =~ s/\s+/ /gs if (!$spacepreserve);		$result .= $content;	    }	} elsif ( "$type" ne "1" ) {	    # We've got another element	    $result .= "<$type";	    $result .= getAttributeString(@{$content}[0], 0); # no nested translatable elements	    if ($content) {		my $subresult = getXMLstring($content, $spacepreserve);		if ($subresult) {		    $result .= ">".$subresult . "</$type>";		} else {		    $result .= "/>";		}	    } else {		$result .= "/>";	    }	}	$index += 2;    }    return $result;}# Verbatim copy from intltool-merge.in.in, except for MULTIPLE_OUTPUT handling removed# Translate list of nodes if necessarysub translate_subnodes{    my $fh = shift;    my $content = shift;    my $language = shift || "";    my $singlelang = shift || 0;    my $spacepreserve = shift || 0;    my @nodes = @{ $content };    my $count = scalar(@nodes);    my $index = 0;    while ($index < $count) {        my $type = $nodes[$index];        my $rest = $nodes[$index+1];        traverse($fh, $type, $rest, $language, $spacepreserve);        $index += 2;    }}# Based on traverse() in intltool-merge.in.insub traverse{    my $fh = shift; # unused, to allow us to sync code between -merge and -extract    my $nodename = shift;    my $content = shift;    my $language = shift || "";    my $spacepreserve = shift || 0;    if ($nodename && "$nodename" eq "1") {        $XMLCOMMENT = $content;    } elsif ($nodename) {	# element	my @all = @{ $content };	my $attrs = shift @all;	my $translate = 0;	my $outattr = getAttributeString($attrs, 1, $language, \$translate);	if ($nodename =~ /^_/) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -