Revision ea974a5a
Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt
scripts/locales.pl | ||
---|---|---|
519 | 519 |
|
520 | 520 |
my $file = shift; |
521 | 521 |
|
522 |
if (!defined $cached{$file}) { |
|
523 |
my %plugins = ( 'loaded' => { }, 'needed' => { } ); |
|
524 |
|
|
525 |
open(IN, $file) || die $file; |
|
522 |
return if defined $cached{$file}; |
|
526 | 523 |
|
527 |
my $copying = 0; |
|
528 |
my $issubmit = 0; |
|
529 |
my $text = ""; |
|
530 |
while (my $line = <IN>) { |
|
531 |
chomp($line); |
|
524 |
my %plugins = ( 'loaded' => { }, 'needed' => { } ); |
|
532 | 525 |
|
533 |
while ($line =~ m/\[\%[^\w]*use[^\w]+(\w+)[^\w]*?\%\]/gi) { |
|
534 |
$plugins{loaded}->{$1} = 1; |
|
535 |
} |
|
526 |
if (!open(IN, $file)) { |
|
527 |
print "E: template file '$file' not found\n"; |
|
528 |
return; |
|
529 |
} |
|
536 | 530 |
|
537 |
while ($line =~ m/\[\%[^\w]*(\w+)\.\w+\(/g) { |
|
538 |
my $plugin = $1; |
|
539 |
$plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript JSON L P)); |
|
540 |
} |
|
531 |
my $copying = 0; |
|
532 |
my $issubmit = 0; |
|
533 |
my $text = ""; |
|
534 |
while (my $line = <IN>) { |
|
535 |
chomp($line); |
|
541 | 536 |
|
542 |
$plugins{needed}->{T8} = 1 if $line =~ m/\[\%.*\|.*\$T8/; |
|
543 |
|
|
544 |
while ($line =~ m/(?: # Start von Variante 1: LxERP.t8('...'); ohne darumliegende [% ... %]-Tags |
|
545 |
(LxERP\.t8)\( # LxERP.t8( ::Parameter $1:: |
|
546 |
([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $2:: |
|
547 |
(.*?) # Der zu übersetzende String ::Parameter $3:: |
|
548 |
(?<!\\)\2 # Ende des zu übersetzenden Strings |
|
549 |
| # Start von Variante 2: [% '...' | $T8 %] |
|
550 |
\[\% # Template-Start-Tag |
|
551 |
[\-~#]? # Whitespace-Unterdrückung |
|
552 |
\s* # Optional beliebig viele Whitespace |
|
553 |
([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $4:: |
|
554 |
(.*?) # Der zu übersetzende String ::Parameter $5:: |
|
555 |
(?<!\\)\4 # Ende des zu übersetzenden Strings |
|
556 |
\s*\|\s* # Pipe-Zeichen mit optionalen Whitespace davor und danach |
|
557 |
(\$T8) # Filteraufruf ::Parameter $6:: |
|
558 |
.*? # Optionale Argumente für den Filter |
|
559 |
\s* # Whitespaces |
|
560 |
[\-~#]? # Whitespace-Unterdrückung |
|
561 |
\%\] # Template-Ende-Tag |
|
562 |
) |
|
563 |
/ix) { |
|
564 |
my $module = $1 || $6; |
|
565 |
my $string = $3 || $5; |
|
566 |
print "Found filter >>>$string<<<\n" if $debug; |
|
567 |
substr $line, $LAST_MATCH_START[1], $LAST_MATCH_END[0] - $LAST_MATCH_START[0], ''; |
|
568 |
|
|
569 |
$string = unescape_template_string($string); |
|
570 |
$cached{$file}{all}{$string} = 1; |
|
571 |
$cached{$file}{html}{$string} = 1; |
|
572 |
$cached{$file}{submit}{$string} = 1 if $PREMATCH =~ /$submitsearch/; |
|
573 |
$plugins{needed}->{T8} = 1 if $module eq '$T8'; |
|
574 |
$plugins{needed}->{LxERP} = 1 if $module eq 'LxERP.t8'; |
|
575 |
} |
|
537 |
while ($line =~ m/\[\%[^\w]*use[^\w]+(\w+)[^\w]*?\%\]/gi) { |
|
538 |
$plugins{loaded}->{$1} = 1; |
|
539 |
} |
|
576 | 540 |
|
577 |
while ($line =~ m/\[\% # Template-Start-Tag |
|
578 |
[\-~#]? # Whitespace-Unterdrückung |
|
579 |
\s* # Optional beliebig viele Whitespace |
|
580 |
(?: # Die erkannten Template-Direktiven |
|
581 |
PROCESS |
|
582 |
| |
|
583 |
INCLUDE |
|
584 |
) |
|
585 |
\s+ # Mindestens ein Whitespace |
|
586 |
[\'\"]? # Anfang des Dateinamens |
|
587 |
([^\s]+) # Beliebig viele Nicht-Whitespaces -- Dateiname |
|
588 |
\.html # Endung ".html", ansonsten kann es der Name eines Blocks sein |
|
589 |
/ix) { |
|
590 |
my $new_file_name = "$basedir/templates/webpages/$1.html"; |
|
591 |
$cached{$file}{scanh}{$new_file_name} = 1; |
|
592 |
substr $line, $LAST_MATCH_START[1], $LAST_MATCH_END[0] - $LAST_MATCH_START[0], ''; |
|
593 |
} |
|
541 |
while ($line =~ m/\[\%[^\w]*(\w+)\.\w+\(/g) { |
|
542 |
my $plugin = $1; |
|
543 |
$plugins{needed}->{$plugin} = 1 if (first { $_ eq $plugin } qw(HTML LxERP JavaScript JSON L P)); |
|
594 | 544 |
} |
595 | 545 |
|
596 |
close(IN); |
|
546 |
$plugins{needed}->{T8} = 1 if $line =~ m/\[\%.*\|.*\$T8/; |
|
547 |
|
|
548 |
while ($line =~ m/(?: # Start von Variante 1: LxERP.t8('...'); ohne darumliegende [% ... %]-Tags |
|
549 |
(LxERP\.t8)\( # LxERP.t8( ::Parameter $1:: |
|
550 |
([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $2:: |
|
551 |
(.*?) # Der zu übersetzende String ::Parameter $3:: |
|
552 |
(?<!\\)\2 # Ende des zu übersetzenden Strings |
|
553 |
| # Start von Variante 2: [% '...' | $T8 %] |
|
554 |
\[\% # Template-Start-Tag |
|
555 |
[\-~#]? # Whitespace-Unterdrückung |
|
556 |
\s* # Optional beliebig viele Whitespace |
|
557 |
([\'\"]) # Anfang des zu übersetzenden Strings ::Parameter $4:: |
|
558 |
(.*?) # Der zu übersetzende String ::Parameter $5:: |
|
559 |
(?<!\\)\4 # Ende des zu übersetzenden Strings |
|
560 |
\s*\|\s* # Pipe-Zeichen mit optionalen Whitespace davor und danach |
|
561 |
(\$T8) # Filteraufruf ::Parameter $6:: |
|
562 |
.*? # Optionale Argumente für den Filter |
|
563 |
\s* # Whitespaces |
|
564 |
[\-~#]? # Whitespace-Unterdrückung |
|
565 |
\%\] # Template-Ende-Tag |
|
566 |
) |
|
567 |
/ix) { |
|
568 |
my $module = $1 || $6; |
|
569 |
my $string = $3 || $5; |
|
570 |
print "Found filter >>>$string<<<\n" if $debug; |
|
571 |
substr $line, $LAST_MATCH_START[1], $LAST_MATCH_END[0] - $LAST_MATCH_START[0], ''; |
|
572 |
|
|
573 |
$string = unescape_template_string($string); |
|
574 |
$cached{$file}{all}{$string} = 1; |
|
575 |
$cached{$file}{html}{$string} = 1; |
|
576 |
$cached{$file}{submit}{$string} = 1 if $PREMATCH =~ /$submitsearch/; |
|
577 |
$plugins{needed}->{T8} = 1 if $module eq '$T8'; |
|
578 |
$plugins{needed}->{LxERP} = 1 if $module eq 'LxERP.t8'; |
|
579 |
} |
|
597 | 580 |
|
598 |
foreach my $plugin (keys %{ $plugins{needed} }) { |
|
599 |
next if ($plugins{loaded}->{$plugin}); |
|
600 |
print "E: " . strip_base($file) . " requires the Template plugin '$plugin', but is not loaded with '[\% USE $plugin \%]'.\n"; |
|
581 |
while ($line =~ m/\[\% # Template-Start-Tag |
|
582 |
[\-~#]? # Whitespace-Unterdrückung |
|
583 |
\s* # Optional beliebig viele Whitespace |
|
584 |
(?: # Die erkannten Template-Direktiven |
|
585 |
PROCESS |
|
586 |
| |
|
587 |
INCLUDE |
|
588 |
) |
|
589 |
\s+ # Mindestens ein Whitespace |
|
590 |
[\'\"]? # Anfang des Dateinamens |
|
591 |
([^\s]+) # Beliebig viele Nicht-Whitespaces -- Dateiname |
|
592 |
\.html # Endung ".html", ansonsten kann es der Name eines Blocks sein |
|
593 |
/ix) { |
|
594 |
my $new_file_name = "$basedir/templates/webpages/$1.html"; |
|
595 |
$cached{$file}{scanh}{$new_file_name} = 1; |
|
596 |
substr $line, $LAST_MATCH_START[1], $LAST_MATCH_END[0] - $LAST_MATCH_START[0], ''; |
|
601 | 597 |
} |
602 | 598 |
} |
603 | 599 |
|
600 |
close(IN); |
|
601 |
|
|
602 |
foreach my $plugin (keys %{ $plugins{needed} }) { |
|
603 |
next if ($plugins{loaded}->{$plugin}); |
|
604 |
print "E: " . strip_base($file) . " requires the Template plugin '$plugin', but is not loaded with '[\% USE $plugin \%]'.\n"; |
|
605 |
} |
|
606 |
|
|
604 | 607 |
# copy back into global arrays |
605 | 608 |
$alllocales{$_} = 1 for keys %{$cached{$file}{all}}; |
606 | 609 |
$locale{$_} = 1 for keys %{$cached{$file}{html}}; |
Auch abrufbar als: Unified diff
locales.pl: Endloses rekursives Scannen derselben Datei verhindern
Conflicts:
scripts/locales.pl