]> git.lyx.org Git - lyx.git/blobdiff - development/checkurls/search_url.pl
Do not require an extra pit parameter when a row is available
[lyx.git] / development / checkurls / search_url.pl
index 8de23242d75d7d235375b16311db765b97ad3eb6..8bba11c1fc50ca3a6fdb0a996d0ddc632dca115c 100755 (executable)
@@ -39,16 +39,28 @@ BEGIN  {
 }
 
 use CheckURL;
+use Try::Tiny;
+use locale;
+use POSIX qw(locale_h);
 
-$ENV{LC_ALL} = "en_US.UTF-8";
-$ENV{LANG} = "en_US.UTF-8";
-$ENV{LANGUAGE} = "en_US.UTF-8";
+setlocale(LC_CTYPE, "");
+setlocale(LC_MESSAGES, "en_US.UTF-8");
+
+# Prototypes
+sub printNotUsedURLS($\%);
+sub replaceSpecialChar($);
+sub readUrls($\%);
+sub parse_file($ );
+sub handle_url($$$ );
+##########
 
 my %URLS = ();
 my %ignoredURLS = ();
 my %revertedURLS = ();
 my %extraURLS = ();
 my %selectedURLS = ();
+my %knownToRegisterURLS = ();
+my $summaryFile = undef;
 
 my $checkSelectedOnly = 0;
 for my $arg (@ARGV) {
@@ -59,23 +71,31 @@ for my $arg (@ARGV) {
     if (open(FLIST, $val)) {
       while (my $l = <FLIST>) {
        chomp($l);
-       &parse_file($l);
+       parse_file($l);
       }
       close(FLIST);
     }
   }
   elsif ($type eq "ignoredURLS") {
-    &readUrls($val, \%ignoredURLS);
+    readUrls($val, %ignoredURLS);
   }
   elsif ($type eq "revertedURLS") {
-    &readUrls($val, \%revertedURLS);
+    readUrls($val, %revertedURLS);
   }
   elsif ($type eq "extraURLS") {
-    &readUrls($val,  \%extraURLS);
+    readUrls($val, %extraURLS);
   }
   elsif ($type eq "selectedURLS") {
     $checkSelectedOnly = 1;
-    &readUrls($val,  \%selectedURLS);
+    readUrls($val, %selectedURLS);
+  }
+  elsif ($type eq "knownToRegisterURLS") {
+    readUrls($val, %knownToRegisterURLS);
+  }
+  elsif ($type eq "summaryFile") {
+    if (open(SFO, '>', "$val")) {
+      $summaryFile = $val;
+    }
   }
   else {
     die("Invalid argument \"$arg\"");
@@ -83,28 +103,51 @@ for my $arg (@ARGV) {
 }
 
 my @urls = sort keys %URLS, keys %extraURLS;
+# Tests
+#my @urls = ("ftp://ftp.edpsciences.org/pub/aa/readme.html", "ftp://ftp.springer.de/pub/tex/latex/compsc/proc/author");
 my $errorcount = 0;
 
 my $URLScount = 0;
 
 for my $u (@urls) {
-  if (defined($selectedURLS{$u})) {
-    ${selectedURLS}{$u}->{count} += 1;
-  }
   if (defined($ignoredURLS{$u})) {
     $ignoredURLS{$u}->{count} += 1;
     next;
   }
+  my $use_curl = 0;
+  if (defined($knownToRegisterURLS{$u})) {
+    if ($knownToRegisterURLS{$u}->{use_curl}) {
+      $use_curl = 1;
+    }
+    else {
+      next;
+    }
+  }
+  if (defined($selectedURLS{$u})) {
+    ${selectedURLS}{$u}->{count} += 1;
+  }
   next if ($checkSelectedOnly && ! defined($selectedURLS{$u}));
   $URLScount++;
-  print "Checking '$u'";
-  my $res = &check_url($u);
-  if ($res) {
-    print ": Failed\n";
-  }
-  else {
-    print ": OK\n";
+  print "Checking '$u': ";
+  my ($res, $prnt, $outSum);
+  try {
+    $res = check_url($u, $use_curl);
+    if ($res) {
+      print "Failed\n";
+      $prnt = "";
+      $outSum = 1;
+    }
+    else {
+      $prnt = "OK\n";
+      $outSum = 0;
+    }
   }
+  catch {
+    $prnt = "Failed, caught error: $_\n";
+    $outSum = 1;
+    $res = 700;
+  };
+  printx("$prnt", $outSum);
   my $printSourceFiles = 0;
   my $err_txt = "Error url:";
 
@@ -116,13 +159,13 @@ for my $u (@urls) {
   }
   $res = ! $res if (defined($revertedURLS{$u}));
   if ($res || $checkSelectedOnly) {
-    print "$err_txt \"$u\"\n";
+    printx("$err_txt \"$u\"\n", $outSum);
   }
   if ($printSourceFiles) {
     if (defined($URLS{$u})) {
       for my $f(sort keys %{$URLS{$u}}) {
        my $lines = ":" . join(',', @{$URLS{$u}->{$f}});
-       print "  $f$lines\n";
+       printx("  $f$lines\n", $outSum);
       }
     }
     if ($res ) {
@@ -132,17 +175,28 @@ for my $u (@urls) {
 }
 
 if (%URLS) {
-  &printNotUsedURLS("Ignored", \%ignoredURLS);
-  &printNotUsedURLS("Selected", \%selectedURLS);
-  &printNotUsedURLS("KnownInvalid", \%extraURLS);
+  printNotUsedURLS("Ignored", %ignoredURLS);
+  printNotUsedURLS("Selected", %selectedURLS);
+  printNotUsedURLS("KnownInvalid", %extraURLS);
 }
 
 print "\n$errorcount URL-tests failed out of $URLScount\n\n";
+if (defined($summaryFile)) {
+  close(SFO);
+}
 exit($errorcount);
 
 ###############################################################################
+sub printx($$)
+{
+  my ($txt, $outSum) = @_;
+  print "$txt";
+  if ($outSum && defined($summaryFile)) {
+    print SFO "$txt";
+  }
+}
 
-sub printNotUsedURLS($$)
+sub printNotUsedURLS($\%)
 {
   my ($txt, $rURLS) = @_;
   my @msg = ();
@@ -161,7 +215,14 @@ sub printNotUsedURLS($$)
   }
 }
 
-sub readUrls($$)
+sub replaceSpecialChar($)
+{
+  my ($l) = @_;
+  $l =~ s/\\SpecialChar(NoPassThru)?\s*(TeX|LaTeX|LyX)[\s]?/\2/;
+  return($l);
+}
+
+sub readUrls($\%)
 {
   my ($file, $rUrls) = @_;
 
@@ -171,9 +232,14 @@ sub readUrls($$)
     $line++;
     $l =~ s/[\r\n]+$//;                # remove eol
     $l =~ s/\s*\#.*$//;                # remove comment
+    $l = &replaceSpecialChar($l);
     next if ($l eq "");
+    my $use_curl = 0;
+    if ($l =~ s/^\s*UseCurl\s*//) {
+      $use_curl = 1;
+    }
     if (! defined($rUrls->{$l} )) {
-      $rUrls->{$l} = {$file => $line, count => 1};
+      $rUrls->{$l} = {$file => $line, count => 1, use_curl => $use_curl};
     }
   }
   close(ULIST);
@@ -202,7 +268,7 @@ sub parse_file($)
          # Outside of url, check also
          if ($l =~ /"((ftp|http|https):\/\/[^ ]+)"/) {
            my $url = $1;
-           &handle_url($url, $f, "x$line");
+           handle_url($url, $f, "x$line");
          }
        }
       }
@@ -214,14 +280,14 @@ sub parse_file($)
          if ($l =~ /\s*([a-z]+:\/\/.+)\s*$/) {
            my $url = $1;
            $status = "out";
-           &handle_url($url, $f, "u$line");
+           handle_url($url, $f, "u$line");
          }
        }
        elsif ($status eq "inHrefInset") {
          if ($l =~ /^target\s+"([a-z]+:\/\/[^ ]+)"$/) {
            my $url = $1;
            $status = "out";
-           &handle_url($url, $f, "h$line");
+           handle_url($url, $f, "h$line");
          }
        }
       }
@@ -234,8 +300,11 @@ sub handle_url($$$)
 {
   my($url, $f, $line) = @_;
 
+  $url = &replaceSpecialChar($url);
   if(!defined($URLS{$url})) {
     $URLS{$url} = {};
+  }
+  if(!defined($URLS{$url}->{$f})) {
     $URLS{$url}->{$f} = [];
   }
   push(@{$URLS{$url}->{$f}}, $line);