Add support for the new ChangeLog format.
[privoxy.git] / utils / changelog2doc.pl
index d675159..e61be0c 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/perl
 
-# $Id: changelog2doc.pl,v 1.2 2008/09/26 16:49:09 fabiankeil Exp $
+# $Id: changelog2doc.pl,v 1.5 2010/10/31 13:27:03 fabiankeil Exp $
 # $Source: /cvsroot/ijbswa/current/utils/changelog2doc.pl,v $
 
 # Filter to parse the ChangeLog and translate the changes for
@@ -25,43 +25,79 @@ sub read_entries() {
         next unless $section_reached;
         next if /^\s*$/;
 
-        if (/^-/) {
+        if (/^(\s*)-/) {
+            my $indentation = length($1);
+            if ($i > 1 and $entries[$i]{indentation} > $indentation) {
+                $entries[$i]{last_list_item} = 1;
+            }
             $i++; 
-            $entries[$i] = '';
+            $entries[$i]{description} = '';
+            $entries[$i]{indentation} = $indentation;
         }
-        s@^-?\s*@@;
+        if (/:\s*$/) {
+            $entries[$i]{list_header} = 1;
+        }
+
+        s@^\s*-?\s*@@;
 
-        $entries[$i] .= $_;
+        $entries[$i]{description} .= $_;
+    }
+    if ($entries[$i]{indentation} != 0) {
+        $entries[$i]{last_list_item} = 1;
     }
     print "Parsed " . @entries . " entries.\n";
 }
 
 sub create_listitem_markup($) {
     my $entry = shift;
+    my $description = $entry->{description};
+    my $markup = '';
+    my $default_lws = '  ';
+    my $lws = $default_lws x ($entry->{indentation} ? 2 : 1);
+
+    chomp $description;
+
+    $description =~ s@\n@\n  ${lws}@g;
+
+    $markup .= $lws . "<listitem>\n" .
+               $lws . " <para>\n";
+
+    $markup .= $lws . "  " . $description . "\n";
 
-    $entry =~ s@\n@\n    @g;
-    return "  <listitem>\n" .
-           "   <para>\n" .
-           "    " . $entry . "\n" .
-           "   </para>\n" .
-           "  </listitem>\n";
+    if (defined $entry->{list_header}) {
+        $markup .= $lws . "  <itemizedlist>\n";
+
+    } else {
+        if (defined $entry->{last_list_item}) {
+            $markup .= $lws . " </para>\n";
+            $markup .= $lws . "</itemizedlist>\n";
+            $lws = $default_lws;
+        }
+        $markup .= $lws . " </para>\n" .
+                   $lws . "</listitem>\n";
+    }
+
+    return $markup;
+}
+
+sub wrap_in_para_itemlist_markup($) {
+    my $content = shift;
+    my $markup = "<para>\n" .
+                 " <itemizedlist>\n" .
+                 "  $content" .
+                 " </itemizedlist>\n" .
+                 "</para>\n";
+    return $markup;
 }
 
 sub generate_markup() {
     my $markup = '';
 
-    $markup .= "<para>\n" .
-               " <itemizedlist>\n";
-
     foreach my $entry (@entries) {
-        chomp $entry;
-        $markup .= create_listitem_markup($entry);
+        $markup .= create_listitem_markup(\%{$entry});
     }
 
-    $markup .= " </itemizedlist>\n" .
-               "</para>\n";
-
-    print $markup;
+    print wrap_in_para_itemlist_markup($markup);
 }
 
 sub main () {