Rearrange struct client_state to reduce memory on amd64
[privoxy.git] / utils / prepare-configfile.pl
1 #!/usr/local/bin/perl
2
3 # This script is used by the config-file target in GNUMakefile.
4 #
5 # It removes garbage in the w3m output and separates comments
6 # and active directives.
7
8 use strict;
9 use warnings;
10
11 sub main() {
12     my $hit_header = 0;
13     my $hit_option = 0;
14     my $header_len;
15     my $unfold_mode = 0;
16     my $unfolding_enabled = 0;
17     my $windows_section_reached = 0;
18
19     while (<>) {
20
21         if (!$unfolding_enabled and m/=========/) {
22             # We passed the table of contents
23             # and can try to unfold unintentional
24             # line breaks;
25             $unfolding_enabled = 1;
26         }
27         if (m/specific to the Windows GUI/) {
28             # The Windows section is formatted differently.
29             $windows_section_reached = 1;
30         }
31
32         s/^1\. \@\@TITLE\@\@/     /i;
33
34         if ($hit_header) {
35             $header_len += length($_);
36             $_ = " " . $_;
37         } elsif (m/^(\d*\.){1,3}\s/) {
38             # Remove the first digit as it's the
39             # config file section in the User Manual.
40             s/^(\d\.)//;
41
42             # If it's a section header, uppercase it.
43             $_ = uc() if (/^\d\.\s+/);
44
45             # Remember to underline it.
46             $hit_header = 1;
47             $header_len = length($_);
48         }
49
50         if ($unfold_mode) {
51             s/^\s+/ /;
52             $unfold_mode = 0;
53         } else {
54             if ( $hit_option ) {
55                # processing a continuation of a @@ line
56                if ( /^\s*$/ ) { # blank line
57                   $hit_option = 0;
58                   next;
59                }
60             }
61             s/^/#  /;
62         }
63         if ($unfolding_enabled and
64             (m/(\s+#)\s*$/ or m/forward-socks5 and$/)) {
65             $unfold_mode = 1;
66             chomp;
67         }
68
69         # XXX: someone should figure out what this stuff
70         # is supposed to do (and if it really does that).
71         s/^#  #/####/ if /^#  #{12,}/;
72         s/^\n//;
73         s/^#\s*-{20,}//;
74         s/ *$//;
75         $hit_option = 1 if s/^#\s+@@//;
76
77         if ($windows_section_reached) {
78             # Do not drop empty lines in the Windows section
79             s/^\s*$/#\n/;
80         }
81
82         print unless (/^\s*$/);
83
84         if ($hit_header and !$unfold_mode) {
85             # The previous line was a section
86             # header so we better underline it.
87             die "Invalid header length" unless defined $header_len;
88             print "#  " . "=" x $header_len . "\n";
89             $hit_header = 0;
90             $header_len = 0;
91         };
92     }
93 }
94 main();