Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision ea974a5a

Von Moritz Bunkus vor mehr als 11 Jahren hinzugefügt

locales.pl: Endloses rekursives Scannen derselben Datei verhindern

Conflicts:
scripts/locales.pl

Unterschiede anzeigen:

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