1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
#! /usr/bin/perl
# This file is a modified version of extractrc, with the only addition that it Title|Description in the textstring regexp.
#
# This script extracts messages from designer (.ui) and XMLGIU (.rc) files
# and writes on standard output (usually redirected to rc.cpp)
# the equivalent i18n() calls so that xgettext can parse them.
$filename = "";
@filenames = ();
sub writeoutstring($)
{
print STDOUT "i18n(\"@_[0]\"); // $filename \n";
}
while (defined ($ARGV[0]))
{
$_ = shift;
$filename = $_; # maybe check for options
if (! $filename) {
print STDERR "no file to open\n";
exit 1;
}
$string = "";
$intext = 0;
$linenr = 0;
$inskippedprop = 0;
open(FILE, $filename);
READING: while ( <FILE> ) {
$linenr++;
if ($linenr == 1 && ($_ !~ /^<!DOCTYPE/) && ($_ !~ /^<\?xml/)) {
last READING;
}
$string .= "\\n" . $_;
chomp($string);
$textstring = '([tT][eE][xX][tT]|[tT]itle|[dD]escription|string|whatsthis|tooltip)>';
# The 'database' property contains strings that shouldn't be translated
if ($inskippedprop == 0 && ($string =~ /<property name=\"database\"/)) {
$inskippedprop = 1;
} elsif ($inskippedprop == 1 && ($string =~ /<\/property/)) {
$inskippedprop = 0;
$string = "";
}
if ($inskippedprop == 0 && $intext == 0) {
if ($string =~ /<$textstring/) {
$string =~ s/^.*<$textstring//;
$intext = 1;
$starting_linenr = $linenr;
} else {
$string = "";
}
}
if (($intext == 1) && ($string =~ /<\/$textstring/)) {
my $text = $string;
$text =~ s/<\/$textstring.*$//;
$text =~ s/</</g;
$text =~ s/>/>/g;
$text =~ s/&/&/g;
$text =~ s/\"/\\\"/g;
writeoutstring($text);
$string =~ s/^.*<\/$textstring//;
$intext = 0;
# Text can be multiline in .ui files (possibly), but we warn about it in XMLGUI .rc files.
if ($linenr != $starting_linenr && $filename =~ m/\.rc$/) {
print STDERR "there is <text> floating $filename\n";
}
}
}
if ($intext == 1) {
print STDERR "parsing error in $filename $linenr\n";
exit 1;
}
}
|