79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#! /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  
							 |