#!/usr/bin/perl -w
# Script to check the FAQ source and make sure I have all the numbers
# in the right order without duplication. Also check the numbers of blank
# lines. It gives up on any error (other than bad blank line counts).
sub oops {
print "\nLine $line: $_[0]\n";
print;
exit 1;
}
sub poops {
print "\nLine $line: $_[0]\n";
print;
$precede_fail = 1;
}
$line = 0;
$section = -1;
$expect_answer = 0;
$precede_fail = 0;
while (<>)
{
$line++;
if (/^\s*$/)
{
$blankcount++;
next;
}
$preceded = $blankcount;
$blankcount = 0;
if (/^(\d+)\./)
{
&poops("$preceded empty lines precede (3 expected)") if $preceded != 3;
&oops(sprint("Answer %02d%02d is missing\n", $section, $question))
if $expect_answer;
$section = $1;
$question = ($section == 20)? 0 : 1;
$expected = 1;
if ($section == 99)
{
$c = 1;
$f = 1;
}
next;
}
if ($section != 99)
{
if (/^Q(\d\d)(\d\d):/)
{
&poops("$preceded empty lines precede ($expected expected)")
if $preceded != $expected;
$expected = 2;
&oops("Answer expected") if $expect_answer;
&oops("Q$1$2 is in the wrong section") if ($1 != $section);
&oops("Q$1$2 is out of order") if $2 != $question;
$expect_answer = 1;
next;
}
if (/^A(\d\d)(\d\d):/)
{
&poops("$preceded empty lines precede (1 expected)") if $preceded != 1;
&oops("Question expected") if !$expect_answer;
&oops("A$1$2 is in the wrong section") if $1 != $section;
&oops("A$1$2 is out of order") if $2 != $question++;
$expect_answer = 0;
next;
}
}
else
{
if (/^C(\d\d\d):/)
{
&oops("C$1 is mixed up in the Fs") if $f != 1;
# Some Cxxx configs are omitted (not translated from Exim 3) so can
# only check increasing number.
&oops("C$1 is out of order") if $1 < $c;
$c = $1;
}
elsif (/^F(\d\d\d):/)
{
&oops("F$1 is out of order") if $1 != $f++;
next;
}
}
}
exit 1 if $precede_fail;
# End