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