blob: de013347214d495547e6ef3bf64f2e34c47234db [file] [log] [blame]
Tristan Matthews04616462013-11-14 16:09:34 -05001#! /usr/bin/perl
2
3# A script to scan PCRE's man pages to check for typos in the control
4# sequences. I use only a small set of the available repertoire, so it is
5# straightforward to check that nothing else has slipped in by mistake. This
6# script should be called in the doc directory.
7
8$yield = 0;
9
10while (scalar(@ARGV) > 0)
11 {
12 $line = 0;
13 $file = shift @ARGV;
14
15 open (IN, $file) || die "Failed to open $file\n";
16
17 while (<IN>)
18 {
19 $line++;
20 if (/^\s*$/)
21 {
22 printf "Empty line $line of $file\n";
23 $yield = 1;
24 }
25 elsif (/^\./)
26 {
27 if (!/^\.\s*$|
28 ^\.B\s+\S|
29 ^\.TH\s\S|
30 ^\.SH\s\S|
31 ^\.SS\s\S|
32 ^\.TP(?:\s\d+)?\s*$|
33 ^\.ti\s\S|
34 ^\.SM\s*$|
35 ^\.rs\s*$|
36 ^\.sp\s*$|
37 ^\.nf\s*$|
38 ^\.fi\s*$|
39 ^\.P\s*$|
40 ^\.PP\s*$|
41 ^\.\\"(?:\ HREF)?\s*$|
42 ^\.\\"\sHTML\s<a\shref="[^"]+?">\s*$|
43 ^\.\\"\sHTML\s<a\sname="[^"]+?"><\/a>\s*$|
44 ^\.\\"\s<\/a>\s*$|
45 ^\.\\"\sJOINSH\s*$|
46 ^\.\\"\sJOIN\s*$/x
47 )
48 {
49 printf "Bad control line $line of $file\n";
50 $yield = 1;
51 }
52 }
53 else
54 {
55 if (/\\[^ef]|\\f[^IBP]/)
56 {
57 printf "Bad backslash in line $line of $file\n";
58 $yield = 1;
59 }
60 }
61 }
62
63 close(IN);
64 }
65
66exit $yield;
67# End