[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: