| #! /usr/bin/perl | |
| # A script to scan PCRE2'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>) | |
| { | |
| $count = 0; | |
| $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*$| | |
| ^\.br\s*$| | |
| ^\.rs\s*$| | |
| ^\.sp\s*$| | |
| ^\.nf\s*$| | |
| ^\.fi\s*$| | |
| ^\.P\s*$| | |
| ^\.PP\s*$| | |
| ^\.\\"(?:\ HREF)?\s*$| | |
| ^\.\\"\sDEFINE\s\w+$| | |
| ^\.\\"\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; | |
| } | |
| } | |
| elsif (/\\[^ef&]|\\f[^IBP]/) | |
| { | |
| printf "Bad backslash in line $line of $file\n"; | |
| $yield = 1; | |
| } | |
| while (/\\f[BI]/g) | |
| { | |
| $count++; | |
| } | |
| while (/\\fP/g) | |
| { | |
| $count--; | |
| } | |
| if ($count != 0) | |
| { | |
| printf "Mismatching formatting in line $line of $file\n"; | |
| $yield = 1; | |
| } | |
| } | |
| close(IN); | |
| } | |
| exit $yield; | |
| # End | |