Rename privoxy.1 to privoxy.8
[privoxy.git] / utils / filter2docs.pl
index cd69d02..1610f16 100755 (executable)
@@ -1,40 +1,89 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
 
-# $Id: filter2docs.pl,v 1.2 2006/07/18 14:49:14 david__schmidt Exp $
-# $Source: /cvsroot/ijbswa/current/utils/filter2docs.pl,v $
+# utils/filter2docs.pl
 
 # Parse the filter names and descriptions from a filter file and
 # spit out copy&paste-ready markup for the various places in
 # configuration and documentation where all filters are listed.
 
-die "Usage: $0 filter-file\n" unless (@ARGV == 1) ;
-open(INPUT, "< $ARGV[0]") or die "Coudln't open input file $ARGV[0] because $!\n";
-
-while (<INPUT>) {
-  if (/^FILTER: ([-\w]+) (.*)$/) {
-    $comment_lines .= "#     $1:" . (" " x (20-length($1))) . "$2\n";
-    $action_lines  .= "+filter{$1} \\\n";
-    $sgml_source_1 .= "   <para>\n    <anchor id=\"filter-$1\">\n    <screen>+filter{$1}" .
-                      (" " x (20-length($1))) . "# $2</screen>\n   </para>\n";
-    $sgml_source_2 .= " -<link linkend=\"FILTER-" . uc($1) . "\">filter{$1}</link> \\\n";
-  }
+use strict;
+use warnings;
+
+my (%comment_lines, %action_lines, %sgml_source_1, %sgml_source_2);
+
+sub main() {
+
+    die "Usage: $0 filter-file\n" unless (@ARGV == 1) ;
+    open(INPUT, "< $ARGV[0]") or die "Couldn't open input file $ARGV[0]: $!\n";
+
+    parse_file();
+    print_markup();
 }
 
-print <<DOCMARKUP;
+sub sgml_escape($) {
+    my $text = shift;
 
-Comment lines for default.action:
+    $text =~ s@<@&lt;@g;
+    $text =~ s@>@&gt;@g;
 
-$comment_lines
+    return $text;
+}
+
+sub parse_file() {
+    while (<INPUT>) {
+        if (/^((?:(?:SERVER|CLIENT)-HEADER-)?(?:FILTER|TAGGER)): ([-\w]+) (.*)$/) {
+            my $type_uc = $1;
+            my $name = $2;
+            my $description = $3;
+            my $type = lc($type_uc);
+            my $sgml_description = sgml_escape($description);
+            my $white_space = ' ' x (($type eq 'filter' ? 20 : 27) - length($name));
+
+            $comment_lines{$type} .= "#     $name:" . $white_space . "$description\n";
+            $action_lines{$type}  .= "+$type" . "{$name} \\\n";
+            $sgml_source_1{$type} .= "   <para>\n    <anchor id=\"$type-$name\">\n" .
+                "    <screen>+$type" . "{$name}" . $white_space .
+                "# $sgml_description</screen>\n   </para>\n";
+            $sgml_source_2{$type} .= ' -<link linkend="' . $type_uc . "-" .
+                uc($name) . "\">$type" . "{$name}</link> \\\n";
+        }
+    }
+}
 
-Block of filter actions for standard.action:
+sub print_markup() {
 
-$action_lines
+    my @filter_types = (
+        'filter',
+        'server-header-filter',
+        'client-header-filter',
+        'server-header-tagger',
+        'client-header-tagger'
+    );
 
+    foreach my $type (@filter_types) {
+
+        next unless defined $action_lines{$type};
+
+        print "=" x 90;
+        
+        print <<"        DOCMARKUP";
+
+Producing $type markup:
+
+Comment lines for default.action.master:
+
+$comment_lines{$type}
+Block of $type actions for default.action.master:
+
+$action_lines{$type}
 SGML Source for AF chapter in U-M:
 
-$sgml_source_1
+$sgml_source_1{$type}
+SGML Source for AF Tutorial chapter in U-M:
 
-SGML Source for AF Tutorial chapter in U-M
+$sgml_source_2{$type}
+        DOCMARKUP
+    }
+}
 
-$sgml_source_2
-DOCMARKUP
+main();