summaryrefslogtreecommitdiff
path: root/CheckMan
blob: 480d735481e0541493f6ed26ba594b37e3241dc3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#! /usr/bin/perl

# A script to scan PCRE's man pages to check for typos in the control
# sequences. I use only a small set of the available repertoire, so it is 
# straightforward to check that nothing else has slipped in by mistake. This
# script should be called in the doc directory.

$yield = 0;

while (scalar(@ARGV) > 0)
  {
  $line = 0; 
  $file = shift @ARGV;
    
  open (IN, $file) || die "Failed to open $file\n";
  
  while (<IN>)
    {  
    $line++; 
    if (/^\s*$/)
      {
      printf "Empty line $line of $file\n";
      $yield = 1;  
      }   
    elsif (/^\./)
      {
      if (!/^\.\s*$|
            ^\.B\s+\S| 
            ^\.TH\s\S|
            ^\.SH\s\S|
            ^\.SS\s\S|
            ^\.TP(?:\s?\d+)?\s*$|
            ^\.SM\s*$|
            ^\.br\s*$| 
            ^\.rs\s*$| 
            ^\.sp\s*$| 
            ^\.nf\s*$| 
            ^\.fi\s*$| 
            ^\.P\s*$| 
            ^\.PP\s*$| 
            ^\.\\"(?:\ HREF)?\s*$|
            ^\.\\"\sHTML\s<a\shref="[^"]+?">\s*$|
            ^\.\\"\sHTML\s<a\sname="[^"]+?"><\/a>\s*$|
            ^\.\\"\s<\/a>\s*$|
            ^\.\\"\sJOINSH\s*$|
            ^\.\\"\sJOIN\s*$/x  
         )
        {
        printf "Bad control line $line of $file\n";
        $yield = 1;
        }
      }
    else
      {
      if (/\\[^ef]|\\f[^IBP]/)
        {
        printf "Bad backslash in line $line of $file\n";  
        $yield = 1; 
        } 
      }   
    }
     
  close(IN);   
  }
  
exit $yield;
# End