79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
#! /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*$|
 | 
						|
            ^\.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;
 | 
						|
        }
 | 
						|
      }
 | 
						|
    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  
 |