# -n do not include custom_ scripts
+# this version of locles processes not only all required .pl files
+# but also all parse_html_templated files.
+
+use POSIX;
use FileHandle;
+use Data::Dumper;
$basedir = "../..";
$bindir = "$basedir/bin/mozilla";
$menufile = "menu.ini";
+$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;
require "all";
}
+# Read HTML templates.
+#%htmllocale = ();
+#@htmltemplates = <../../templates/webpages/*/*_master.html>;
+#foreach $file (@htmltemplates) {
+# scanhtmlfile($file);
+#}
+
foreach $file (@progfiles) {
%locale = ();
unlink 'missing';
foreach $text (keys %$missing) {
- if ($locale{$text}) {
+ if ($locale{$text} || $htmllocale{$text}) {
unless ($self{texts}{$text}) {
$self{texts}{$text} = $missing->{$text};
}
close FH;
}
+foreach $file (@htmltemplates) {
+ converthtmlfile($file);
+}
+
# now print out all
open FH, ">all" or die "$! : all";
# eom
+sub extract_text_between_parenthesis {
+ my ($fh, $line) = @_;
+ my ($inside_string, $pos, $text, $quote_next) = (undef, 0, "", 0);
+
+ while (1) {
+ if (length($line) <= $pos) {
+ $line = <$fh>;
+ return ($text, "") unless ($line);
+ $pos = 0;
+ }
+
+ my $cur_char = substr($line, $pos, 1);
+
+ if (!$inside_string) {
+ if ((length($line) >= ($pos + 3)) && (substr($line, $pos, 2)) eq "qq") {
+ $inside_string = substr($line, $pos + 2, 1);
+ $pos += 2;
+
+ } elsif ((length($line) >= ($pos + 2)) &&
+ (substr($line, $pos, 1) eq "q")) {
+ $inside_string = substr($line, $pos + 1, 1);
+ $pos++;
+
+ } elsif (($cur_char eq '"') || ($cur_char eq '\'')) {
+ $inside_string = $cur_char;
+
+ } elsif ($cur_char eq ")") {
+ return ($text, substr($line, $pos + 1));
+ }
+
+ } else {
+ if ($quote_next) {
+ $text .= $cur_char;
+ $quote_next = 0;
+
+ } elsif ($cur_char eq '\\') {
+ $text .= $cur_char;
+ $quote_next = 1;
+
+ } elsif ($cur_char eq $inside_string) {
+ undef($inside_string);
+
+ } else {
+ $text .= $cur_char;
+
+ }
+ }
+ $pos++;
+ }
+}
+
sub scanfile {
my $file = shift;
&scanfile("$bindir/$newfile");
}
+ # 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 a sub ?
if (/^sub /) {
($null, $subrt) = split / +/;
my $postmatch = "";
# is it a submit button before $locale->
- if (/type\s*=\s*submit/i) {
+ if (/$submitsearch/) {
$postmatch = $';
if ($` !~ /\$locale->text/) {
$is_submit = 1;
}
}
- my ($found) = /\$locale->text.*?\W\)/;
+ my ($found) = /\$locale->text.*?\(/;
my $postmatch = $';
if ($found) {
- my $string = $&;
- $string =~ s/\$locale->text\(\s*[\'\"(q|qq)][\'\/\\\|~]*//;
- $string =~ s/\W\)+.*$//;
+ my $string;
+ ($string, $_) = extract_text_between_parenthesis($fh, $postmatch);
+ $postmatch = $_;
# if there is no $ in the string record it
- unless ($string =~ /\$\D.*/) {
+ unless (($string =~ /\$\D.*/) || ("" eq $string)) {
# this guarantees one instance of string
$locale{$string} = 1;
}
+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
+ }
+ 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 = "";
+ }
+ }
+ }
+ }
+
+ close(IN);
+}
+
+sub converthtmlfile {
+ local *IN;
+ local *OUT;
+
+ my $file = shift;
+
+ open(IN, $file) || die;
+
+ my $langcode = (split("/", getcwd()))[-1];
+ $file =~ s/_master.html$/_${langcode}.html/;
+
+ open(OUT, ">$file") || die;
+
+ my $copying = 0;
+ my $text = "";
+ while (my $line = <IN>) {
+ chomp($line);
+ if ("" eq $line) {
+ print(OUT "\n");
+ next;
+ }
+
+ while ("" ne $line) {
+ if (!$copying) {
+ if ($line =~ m|<translate>|i) {
+ print(OUT $`);
+ substr($line, 0, $+[0]) = "";
+ $copying = 1;
+ print(OUT "\n") if ("" eq $line);
+
+ } else {
+ print(OUT "${line}\n");
+ $line = "";
+ }
+
+ } else {
+ if ($line =~ m|</translate>|i) {
+ $text .= $`;
+ substr($line, 0, $+[0]) = "";
+ $copying = 0;
+ $alllocales{$text} = 1;
+ $htmllocale{$text} = 1;
+ print(OUT $self{"texts"}{$text});
+ print(OUT "\n") if ("" eq $line);
+ $text = "";
+
+ } else {
+ $text .= $line;
+ $line = "";
+ }
+ }
+ }
+ }
+
+ close(IN);
+ close(OUT);
+}