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