aboutsummaryrefslogtreecommitdiff
path: root/tests/nroff-scan.pl
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2016-05-01 16:41:35 +0200
committerDaniel Stenberg <daniel@haxx.se>2016-05-01 16:41:35 +0200
commit100c7b478fd17fd0c3ffacda7d6aa4b536bc7c6e (patch)
tree1765930aa0b388777d7e6044ab34f6e26f3feae0 /tests/nroff-scan.pl
parentaba47275330b5d7a46daca5298798a69bb5cbe7d (diff)
nroff-scan.pl: verifies nroff pages
... not used by any test yet but can be used stand-alone.
Diffstat (limited to 'tests/nroff-scan.pl')
-rw-r--r--tests/nroff-scan.pl79
1 files changed, 79 insertions, 0 deletions
diff --git a/tests/nroff-scan.pl b/tests/nroff-scan.pl
new file mode 100644
index 000000000..55ff24897
--- /dev/null
+++ b/tests/nroff-scan.pl
@@ -0,0 +1,79 @@
+#!/usr/bin/env perl
+#***************************************************************************
+# _ _ ____ _
+# Project ___| | | | _ \| |
+# / __| | | | |_) | |
+# | (__| |_| | _ <| |___
+# \___|\___/|_| \_\_____|
+#
+# Copyright (C) 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# This software is licensed as described in the file COPYING, which
+# you should have received as part of this distribution. The terms
+# are also available at https://curl.haxx.se/docs/copyright.html.
+#
+# You may opt to use, copy, modify, merge, publish, distribute and/or sell
+# copies of the Software, and permit persons to whom the Software is
+# furnished to do so, under the terms of the COPYING file.
+#
+# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+# KIND, either express or implied.
+#
+###########################################################################
+#
+# scan nroff pages to find basic syntactic problems such as unbalanced \f
+# codes
+
+my $docsroot = $ARGV[0];
+
+if(!$docsroot || ($docsroot eq "-g")) {
+ print "Usage: nroff-scan.pl <docs root dir> [nroff files]\n";
+ exit;
+}
+
+
+shift @ARGV;
+
+my @f = @ARGV;
+
+my %manp;
+
+sub file {
+ my ($f) = @_;
+ open(F, "<$f") ||
+ die "no file";
+ my $line = 1;
+ while(<F>) {
+ chomp;
+ my $l = $_;
+ while($l =~ s/\\f(.)([^ ]*)\\f(.)//) {
+ my ($pre, $str, $post)=($1, $2, $3);
+ if($post ne "P") {
+ print STDERR "error: $f:$line: missing \\fP after $str\n";
+ }
+ if($str =~ /(curl([^ ]*))\(3\)/i) {
+ my $man = "$1.3";
+ if($manp{$man}) {
+ ;
+ }
+ elsif(-r "$docsroot/$man" ||
+ -r "$docsroot/libcurl/$man" ||
+ -r "$docsroot/libcurl/opts/$man") {
+ $manp{$man}=1;
+ }
+ else {
+ print STDERR "error: $f:$line: refering to non-existing man page $man\n";
+ }
+ }
+ }
+ if($l =~ /(curl([^ ]*)\(3\))/i) {
+ print STDERR "error: $f:$line: non-referencing $1\n";
+ }
+ $line++;
+ }
+ close(F);
+}
+
+foreach my $f (@f) {
+ file($f);
+}