Start
[exim.git] / doc / doc-scripts / faqchk
CommitLineData
495ae4b0
PH
1#!/usr/bin/perl -w
2# $Cambridge: exim/doc/doc-scripts/faqchk,v 1.1 2004/10/07 15:04:35 ph10 Exp $
3
4# Script to check the FAQ source and make sure I have all the numbers
5# in the right order without duplication. Also check the numbers of blank
6# lines. It gives up on any error (other than bad blank line counts).
7
8sub oops {
9print "\nLine $line: $_[0]\n";
10print;
11exit 1;
12}
13
14sub poops {
15print "\nLine $line: $_[0]\n";
16print;
17$precede_fail = 1;
18}
19
20
21$line = 0;
22$section = -1;
23$expect_answer = 0;
24$precede_fail = 0;
25
26while (<>)
27 {
28 $line++;
29 if (/^\s*$/)
30 {
31 $blankcount++;
32 next;
33 }
34 $preceded = $blankcount;
35 $blankcount = 0;
36
37 if (/^(\d+)\./)
38 {
39 &poops("$preceded empty lines precede (3 expected)") if $preceded != 3;
40 &oops(sprint("Answer %02d%02d is missing\n", $section, $question))
41 if $expect_answer;
42 $section = $1;
43 $question = ($section == 20)? 0 : 1;
44 $expected = 1;
45 if ($section == 99)
46 {
47 $c = 1;
48 $f = 1;
49 }
50 next;
51 }
52
53 if ($section != 99)
54 {
55 if (/^Q(\d\d)(\d\d):/)
56 {
57 &poops("$preceded empty lines precede ($expected expected)")
58 if $preceded != $expected;
59 $expected = 2;
60
61 &oops("Answer expected") if $expect_answer;
62 &oops("Q$1$2 is in the wrong section") if ($1 != $section);
63 &oops("Q$1$2 is out of order") if $2 != $question;
64
65 $expect_answer = 1;
66 next;
67 }
68
69 if (/^A(\d\d)(\d\d):/)
70 {
71 &poops("$preceded empty lines precede (1 expected)") if $preceded != 1;
72
73 &oops("Question expected") if !$expect_answer;
74 &oops("A$1$2 is in the wrong section") if $1 != $section;
75 &oops("A$1$2 is out of order") if $2 != $question++;
76
77 $expect_answer = 0;
78 next;
79 }
80 }
81
82 else
83 {
84 if (/^C(\d\d\d):/)
85 {
86 &oops("C$1 is mixed up in the Fs") if $f != 1;
87 # Some Cxxx configs are omitted (not translated from Exim 3) so can
88 # only check increasing number.
89 &oops("C$1 is out of order") if $1 < $c;
90 $c = $1;
91 }
92 elsif (/^F(\d\d\d):/)
93 {
94 &oops("F$1 is out of order") if $1 != $f++;
95 next;
96 }
97 }
98 }
99
100exit 1 if $precede_fail;
101
102# End