# this version of locles processes not only all required .pl files
# but also all parse_html_templated files.
+use utf8;
use strict;
use Data::Dumper;
my $basedir = "../..";
my $locales_dir = ".";
my $bindir = "$basedir/bin/mozilla";
+my @progdirs = ( "$basedir/SL" );
my $dbupdir = "$basedir/sql/Pg-upgrade";
my $dbupdir2 = "$basedir/sql/Pg-upgrade2";
my $menufile = "menu.ini";
init();
-opendir DIR, "$bindir" or die "$!";
-my @progfiles = grep { /\.pl$/ && !/(_custom|^\.)/ } readdir DIR;
-seekdir DIR, 0;
-my @customfiles = grep /_custom/, readdir DIR;
-closedir DIR;
+sub find_files {
+ my ($dir_name, $files) = @_;
+
+ $files ||= [];
+
+ my @dirs_to_check;
+
+ opendir my $dir, $dir_name or die "$! $dir_name";
+
+ foreach my $name (readdir $dir) {
+ next if $name eq '.' || $name eq '..';
+
+ my $full_name = "${dir_name}/${name}";
+ if (-d $full_name) {
+ push @dirs_to_check, $full_name;
+ } else {
+ push @{ $files }, $full_name;
+ }
+ }
+
+ closedir $dir;
+
+ map { find_files($_, $files) } @dirs_to_check;
+
+ return @{ $files };
+}
+
+my @bindir_files = find_files($bindir);
+my @progfiles = map { m:^(.+)/([^/]+)$:; [ $2, $1 ] } grep { /\.pl$/ && !/_custom/ } @bindir_files;
+my @customfiles = grep /_custom/, @bindir_files;
+
+push @progfiles, map { m:^(.+)/([^/]+)$:; [ $2, $1 ] } grep { /\.pm$/ } map { find_files($_) } @progdirs;
# put customized files into @customfiles
my @menufiles;
unlink "$locales_dir/lost";
}
+my $charset = slurp("$locales_dir/charset") || 'utf-8';
+chomp $charset;
+
my %old_texts = %{ $self->{texts} || {} };
-map({ handle_file($_, $bindir); } @progfiles);
+map({ handle_file(@{ $_ }); } @progfiles);
map({ handle_file($_, $dbupdir); } @dbplfiles);
map({ handle_file($_, $dbupdir2); } @dbplfiles2);
# add the missing texts and run locales.pl to rebuild
EOL
$LOST_HEADER = <<EOL;
-# The last 50 texts that have been removed.
-# This file will be auto-generated by locales.pl. Do not edit it.
+# The last 50 text strings, that have been removed.
+# This file has been auto-generated by locales.pl. Please don't edit!
EOL
}
} else {
if ($quote_next) {
+ $text .= '\\' unless $cur_char eq "'";
$text .= $cur_char;
$quote_next = 0;
} elsif ($cur_char eq '\\') {
- $text .= $cur_char;
$quote_next = 1;
} elsif ($cur_char eq $inside_string) {
my ($is_submit, $line_no, $sub_line_no) = (0, 0, 0);
while (<$fh>) {
+ last if /^\s*__END__/;
+
$line_no++;
# is this another file
}
# is this a template call?
- if (/parse_html_template2?\s*\(\s*[\"\']([\w\/]+)\s*[\"\']/) {
+ if (/(?:parse_html_template2?|render)\s*\(\s*[\"\']([\w\/]+)\s*[\"\']/) {
my $newfile = "$basedir/templates/webpages/$1.html";
if (/parse_html_template2/) {
print "E: " . strip_base($file) . " is still using 'parse_html_template2' for " . strip_base($newfile) . ".\n";
while ($line =~ m/\[\%[^\w]*(\w+)\.\w+\(/g) {
my $plugin = $1;
- $plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript MultiColumnIterator));
+ $plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript MultiColumnIterator L));
}
while ($line =~ m/(?: # Start von Variante 1: LxERP.t8('...'); ohne darumliegende [% ... %]-Tags
(LxERP\.t8)\( # LxERP.t8( ::Parameter $1::
- ([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $2::
- (.*?) # Der zu übersetzende String ::Parameter $3::
- (?<!\\)\2 # Ende des zu übersetzenden Strings
+ ([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $2::
+ (.*?) # Der zu übersetzende String ::Parameter $3::
+ (?<!\\)\2 # Ende des zu übersetzenden Strings
| # Start von Variante 2: [% '...' | $T8 %]
\[\% # Template-Start-Tag
- [\-~#]? # Whitespace-Unterdrückung
+ [\-~#]? # Whitespace-Unterdrückung
\s* # Optional beliebig viele Whitespace
- ([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $4::
- (.*?) # Der zu übersetzende String ::Parameter $5::
- (?<!\\)\4 # Ende des zu übersetzenden Strings
+ ([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $4::
+ (.*?) # Der zu übersetzende String ::Parameter $5::
+ (?<!\\)\4 # Ende des zu übersetzenden Strings
\s*\|\s* # Pipe-Zeichen mit optionalen Whitespace davor und danach
(\$T8) # Filteraufruf ::Parameter $6::
- .*? # Optionale Argumente für den Filter
+ .*? # Optionale Argumente für den Filter
\s* # Whitespaces
- [\-~#]? # Whitespace-Unterdrückung
+ [\-~#]? # Whitespace-Unterdrückung
\%\] # Template-Ende-Tag
)
/ix) {
}
while ($line =~ m/\[\% # Template-Start-Tag
- [\-~#]? # Whitespace-Unterdrückung
+ [\-~#]? # Whitespace-Unterdrückung
\s* # Optional beliebig viele Whitespace
(?: # Die erkannten Template-Direktiven
PROCESS
sub _single_quote {
my $val = shift;
- $val =~ s/('|\\$)/\\$1/g;
+ $val =~ s/(\'|\\$)/\\$1/g;
return "'" . $val . "'";
}
my $data_name = $params{data_name};
my @delim = split //, ($params{delim} || '{}');
- open my $fh, '>', $file or die "$! : $file";
+ open my $fh, '>:encoding(utf8)', $file or die "$! : $file";
+
+ $charset =~ s/\r?\n//g;
+ my $emacs_charset = lc $charset;
- print $fh "#!/usr/bin/perl\n\n";
+ print $fh "#!/usr/bin/perl\n# -*- coding: $emacs_charset; -*-\n# vim: fenc=$charset\n\nuse utf8;\n\n";
print $fh $header, "\n" if $header;
print $fh "$data_name = $delim[0]\n" if $data_name;
close $fh;
}
+sub slurp {
+ my $file = shift;
+ do { local ( @ARGV, $/ ) = $file; <> }
+}
+
__END__
=head1 NAME