Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 2ea67805

Von Moritz Bunkus vor mehr als 18 Jahren hinzugefügt

  • ID 2ea678058cc4890be367512f809b75872ecd9726
  • Vorgänger 10071315
  • Nachfolger e7530c83

Auch die Module in SL/ auf Vorkommen von $main::locale->text() scannen, aber die subs ignorieren. Diese Version parst jede Datei die mit scanfile und scanhtmlfile aufgerufen wird nur einmal und cached die Ergebnisse. Wenn Uebersetzung nicht vorhanden, dann originaltext verwenden.

Unterschiede anzeigen:

locale/de/locales.pl
#!/usr/bin/perl
# -n do not include custom_ scripts
# -v verbose mode, shows progress stuff
# this version of locles processes not only all required .pl files
# but also all parse_html_templated files.
......
use FileHandle;
use Data::Dumper;
$| = 1;
$basedir = "../..";
$bindir = "$basedir/bin/mozilla";
$menufile = "menu.ini";
$submitsearch = qr/type\s*=\s*["']?submit/i;
$submitsearch = qr/type\s*=\s*[\"\']?submit/i;
foreach $item (@ARGV) {
$item =~ s/-//g;
......
}
opendir DIR, "$bindir" or die "$!";
@progfiles = grep { /\.pl$/ && !/(_|^\.)/ } readdir DIR;
@progfiles = grep { /\.pl/; !/(_|^\.)/ } readdir DIR;
seekdir DIR, 0;
@customfiles = grep /_/, readdir DIR;
closedir DIR;
......
foreach $file (@progfiles) {
print "\n$file" if $arg{v};
%locale = ();
%submit = ();
%subrt = ();
......
if ($file eq 'menunew.pl') {
foreach $item (@menufiles) {
&scanmenu("$basedir/$item");
print "." if $arg{v};
}
}
......
|;
close FH;
}
foreach $file (@htmltemplates) {
converthtmlfile($file);
}
#foreach $file (@htmltemplates) {
# converthtmlfile($file);
#}
# now print out all
open FH, ">all" or die "$! : all";
......
chomp $trlanguage;
$per = sprintf("%.1f", ($count - $notext) / $count * 100);
print "\n$trlanguage - ${per}%\n";
print "\n$trlanguage - ${per}%";
print " - $notext missing" if $notext;
print "\n";
exit;
......
sub scanfile {
my $file = shift;
my $dont_include_subs = shift;
my $scanned_files = shift;
return unless (-f "$file");
$scanned_files = {} unless ($scanned_files);
return if ($scanned_files->{$file});
$scanned_files->{$file} = 1;
my $fh = new FileHandle;
open $fh, "$file" or die "$! : $file";
if (!defined $cached{$file}) {
my ($is_submit, $line_no, $sub_line_no) = (0, 0, 0);
return unless (-f "$file");
while (<$fh>) {
$line_no++;
my $fh = new FileHandle;
open $fh, "$file" or die "$! : $file";
# is this another file
if (/require\s+\W.*\.pl/) {
my $newfile = $&;
$newfile =~ s/require\s+\W//;
$newfile =~ s/\$form->{path}\///;
&scanfile("$bindir/$newfile");
}
my ($is_submit, $line_no, $sub_line_no) = (0, 0, 0);
while (<$fh>) {
$line_no++;
# is this a template call?
if (/parse_html_template\s*\(\s*["']([\w\/]+)/) {
my $newfile = "$basedir/templates/webpages/$1_master.html";
if (-f $newfile) {
&scanhtmlfile($newfile);
&converthtmlfile($newfile);
# is this another file
if (/require\s+\W.*\.pl/) {
my $newfile = $&;
$newfile =~ s/require\s+\W//;
$newfile =~ s/\$form->{path}\///;
# &scanfile("$bindir/$newfile", 0, $scanned_files);
$cached{$file}{scan}{"$bindir/$newfile"} = 1;
} elsif (/use\s+SL::(.*?);/) {
# &scanfile("../../SL/${1}.pm", 1, $scanned_files);
$cached{$file}{scannosubs}{"../../SL/${1}.pm"} = 1;
}
}
# is this a sub ?
if (/^sub /) {
($null, $subrt) = split / +/;
$subrt{$subrt} = 1;
next;
}
# is this a template call?
if (/parse_html_template\s*\(\s*[\"\']([\w\/]+)/) {
my $newfile = "$basedir/templates/webpages/$1_master.html";
if (-f $newfile) {
# &scanhtmlfile($newfile);
# &converthtmlfile($newfile);
$cached{$file}{scanh}{$newfile} = 1;
print "." if $arg{v};
}
}
my $rc = 1;
# is this a sub ?
if (/^sub /) {
next if ($dont_include_subs);
($null, $subrt) = split / +/;
# $subrt{$subrt} = 1;
$cached{$file}{subr}{$subrt} = 1;
next;
}
my $rc = 1;
while ($rc) {
if (/Locale/) {
unless (/^use /) {
my ($null, $country) = split /,/;
$country =~ s/^ +[\"\']//;
$country =~ s/[\"\'].*//;
while ($rc) {
if (/Locale/) {
unless (/^use /) {
my ($null, $country) = split /,/;
$country =~ s/^ +[\"\']//;
$country =~ s/[\"\'].*//;
}
}
}
my $postmatch = "";
my $postmatch = "";
# is it a submit button before $locale->
if (/$submitsearch/) {
$postmatch = $';
if ($` !~ /\$locale->text/) {
$is_submit = 1;
$sub_line_no = $line_no;
# is it a submit button before $locale->
if (/$submitsearch/) {
$postmatch = "$'";
if ($` !~ /locale->text/) {
$is_submit = 1;
$sub_line_no = $line_no;
}
}
}
my ($found) = /\$locale->text.*?\(/;
my $postmatch = $';
my ($found) = /locale->text.*?\(/;
my $postmatch = "$'";
if ($found) {
my $string;
($string, $_) = extract_text_between_parenthesis($fh, $postmatch);
$postmatch = $_;
if ($found) {
my $string;
($string, $_) = extract_text_between_parenthesis($fh, $postmatch);
$postmatch = $_;
# if there is no $ in the string record it
unless (($string =~ /\$\D.*/) || ("" eq $string)) {
# if there is no $ in the string record it
unless (($string =~ /\$\D.*/) || ("" eq $string)) {
# this guarantees one instance of string
$locale{$string} = 1;
# this guarantees one instance of string
# $locale{$string} = 1;
$cached{$file}{locale}{$string} = 1;
# this one is for all the locales
$alllocales{$string} = 1;
# this one is for all the locales
# $alllocales{$string} = 1;
$cached{$file}{all}{$string} = 1;
# is it a submit button before $locale->
if ($is_submit) {
$submit{$string} = 1;
# is it a submit button before $locale->
if ($is_submit) {
# $submit{$string} = 1;
$cached{$file}{submit}{$string} = 1;
}
}
} elsif ($postmatch =~ />/) {
$is_submit = 0;
}
} elsif ($postmatch =~ />/) {
$is_submit = 0;
}
# exit loop if there are no more locales on this line
($rc) = ($postmatch =~ /\$locale->text/);
# exit loop if there are no more locales on this line
($rc) = ($postmatch =~ /locale->text/);
# strip text
s/^.*?\$locale->text.*?\)//;
if ( ($postmatch =~ />/)
|| (!$found && ($sub_line_no != $line_no) && />/)) {
$is_submit = 0;
if ( ($postmatch =~ />/)
|| (!$found && ($sub_line_no != $line_no) && />/)) {
$is_submit = 0;
}
}
}
}
close($fh);
close($fh);
}
map { $alllocales{$_} = 1 } keys %{$cached{$file}{all}};
map { $locale{$_} = 1 } keys %{$cached{$file}{locale}};
map { $submit{$_} = 1 } keys %{$cached{$file}{submit}};
map { $subrt{$_} = 1 } keys %{$cached{$file}{subr}};
map { &scanfile($_, 0, $scanned_files) } keys %{$cached{$file}{scan}};
map { &scanfile($_, 1, $scanned_files) } keys %{$cached{$file}{scannosubs}};
map { &scanhtmlfile($_) } keys %{$cached{$file}{scanh}};
}
sub scanmenu {
......
sub scanhtmlfile {
local *IN;
open(IN, $_[0]) || die $_[0];
my $copying = 0;
my $issubmit = 0;
my $text = "";
while (my $line = <IN>) {
chomp($line);
while ("" ne $line) {
if (!$copying) {
if ($line =~ m|<translate>|i) {
my $eom = $+[0];
if ($` =~ /$submitsearch/) {
$issubmit = 1
if (!defined $cached{$_[0]}) {
open(IN, $_[0]) || die $_[0];
my $copying = 0;
my $issubmit = 0;
my $text = "";
while (my $line = <IN>) {
chomp($line);
while ("" ne $line) {
if (!$copying) {
if ($line =~ m|<translate>|i) {
my $eom = $+[0];
if ($` =~ /$submitsearch/) {
$issubmit = 1
}
substr($line, 0, $eom) = "";
$copying = 1;
} else {
$line = "";
}
substr($line, 0, $eom) = "";
$copying = 1;
} else {
$line = "";
}
} else {
if ($line =~ m|</translate>|i) {
$text .= $`;
substr($line, 0, $+[0]) = "";
$copying = 0;
if ($issubmit) {
$submit{$text} = 1;
$issubmit = 0;
}
$alllocales{$text} = 1;
$htmllocale{$text} = 1;
$text = "";
} else {
$text .= $line;
$line = "";
if ($line =~ m|</translate>|i) {
$text .= $`;
substr($line, 0, $+[0]) = "";
$copying = 0;
if ($issubmit) {
# $submit{$text} = 1;
$cached{$_[0]}{submit}{$text} = 1;
$issubmit = 0;
}
# $alllocales{$text} = 1;
$cached{$_[0]}{all}{$text} = 1;
# $htmllocale{$text} = 1;
$cached{$_[0]}{html}{$text} = 1;
$text = "";
} else {
$text .= $line;
$line = "";
}
}
}
}
close(IN);
&converthtmlfile($_[0]);
}
close(IN);
# copy back into global arrays
map { $alllocales{$_} = 1 } keys %{$cached{$_[0]}{all}};
map { $htmllocales{$_} = 1 } keys %{$cached{$_[0]}{html}};
map { $submit{$_} = 1 } keys %{$cached{$_[0]}{submit}};
}
sub converthtmlfile {
......
$copying = 0;
$alllocales{$text} = 1;
$htmllocale{$text} = 1;
print(OUT $self{"texts"}{$text});
print(OUT $self{"texts"}{$text} || $text);
print(OUT "\n") if ("" eq $line);
$text = "";

Auch abrufbar als: Unified diff