[CVS] scripts/di-docs xml2pot.pl,NONE,1.1
Update of /cvsroot/l10n-russian/scripts/di-docs
In directory quantz:/tmp/cvs-serv20277
Added Files:
xml2pot.pl
Log Message:
xml2po-perl :). v0.1
--- NEW FILE: xml2pot.pl ---
#!/usr/bin/perl
use POSIX qw(strftime);
@no_parse_further = (
"para",
"author"
);
%msgids = {};
$fname = @ARGV[0];
$basename = `basename $fname`;
open(FILE, "<$fname") or die "Couldn't open file!";
$file = join "", <FILE>;
$now_string = strftime "%Y-%m-%d %R%z", localtime;
print <<END
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR Free Software Foundation, Inc.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#"
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\\n"
"POT-Creation-Date: $now_string\\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\\n"
"Language-Team: LANGUAGE <LL@li.org>\\n"
"MIME-Version: 1.0\\n"
"Content-Type: application/x-xml2pot; charset=UTF-8\\n"
"Content-Transfer-Encoding: ENCODING\\n"
END
;
parse_tag($file, "");
sub add_msgid
{
my $msgid = shift(@_);
my $tag = shift(@_);
my $line;
my $before;
if ($msgid =~ /[:alpha:]/) {
$before = substr($file, 0, index($file, $msgid));
$line = ($before =~ s/\n/\n/g) + 1;
$msgid =~ s/^(\n|\s)+//s;
$msgid =~ s/(\n|\s)+$//s;
chomp $msgid;
$msgid =~ s/\n/ \"\n\"/sg;
if ($msgids{$msgid} ne "dup") {
$msgids{$msgid} = "dup";
print "#: $basename:$line\n#, no-c-format\n#. Tag: $tag\nmsgid=\"$msgid\"\nmsgstr=\"\"\n\n";
}
}
}
sub parse_tag
{
my $full_tag = "";
my $tag = "";
my $before_tag = "";
my $inside_tag = "";
my $after_tag = "";
my $do_skip = 0;
my @attrs;
my $to_parse = shift(@_);
my $in_tag = shift(@_);
if (!$to_parse) {
return;
}
if ($to_parse =~ /<(.*?)>/s) {
$full_tag = $1;
if (($full_tag =~ /^\!/s) # Comment -- not interesting
|| ($full_tag =~ /\/$/s)) # Closed tag -- the same
{
($before_tag, $after_tag) = ($to_parse =~ /(.*?)<.*?>(.*)/s);
parse_tag($before_tag, $in_tag);
parse_tag($after_tag, $in_tag);
return;
}
($tag, @attrs) = split " ", $full_tag;
foreach $skip_tag (@no_parse_further) {
if ($tag eq $skip_tag) {
$do_skip = 1;
}
}
($before_tag, $inside_tag, $after_tag) = ($to_parse =~ /(.*?)<$full_tag>(.*?)<\/$tag>(.*)/s);
parse_tag($before_tag, $in_tag);
if ($do_skip) {
add_msgid($inside_tag, $tag);
} else {
parse_tag($inside_tag, $tag);
}
parse_tag($after_tag, $in_tag);
} else {
add_msgid($to_parse, $in_tag);
}
}
Reply to: