display nice recepie names
[sysadmin-cookbook-html] / bin / html.pl
index 0436565..0a591fa 100755 (executable)
@@ -7,8 +7,7 @@ my $recepies = '/srv/sysadmin-cookbook/recepies';
 
 use File::Find;
 use File::Slurp;
-
-my $in_ul = 0;
+use Data::Dump qw/dump/;
 
 my @html;
 sub html { push @html, @_ }
@@ -21,7 +20,10 @@ sub file {
        my $content = read_file $path;
        $content =~ s{[\n\r\s]+$}{}s;
        $content =~ s/($escape_re)/$escape{$1}/gs;
-       return $content;
+       return ''
+               . "<pre class=changes>" . `svn log $path` . "</pre>"
+               . "<pre class=content>$content</pre>"
+               ;
 }
 
 my @names;
@@ -29,24 +31,45 @@ find({ follow => 0, no_chdir => 1, wanted => sub {
        push @names, $_ unless m{/\.};
 }}, $recepies );
 
+my $last_level = 0;
+my $toc_html = '';
+sub header {
+       my ($level, $content) = @_;
+       my $display = $content;
+       $display =~ s{^\d+[\.-]}{};
+       $display =~ s{-}{ }g;
+       html qq|<a name=$content></a>|;
+       html qq|<h$level>$display</h$level>|;
+
+       if ( $last_level > $level ) {
+               $toc_html .= "</ul>";
+       } elsif ( $last_level < $level ) {
+               $toc_html .= "<ul>";
+       }
+       $toc_html .= qq|<li><a href="#$content">$display</li>|;
+       $last_level = $level;
+}
+
 foreach my $path ( sort @names ) {
 
        my $name = $path;
-       $name =~ s{^$recepies/*}{};
+       $name =~ s{^$recepies.*?([^/]+)$}{$1};
+       next unless $name;
 
        if ( -d $path ) {
-               html "</ul>" if $in_ul++;
-               html "<h1>$name</h1><ul>";
+               header 1,$name;
        } elsif ( -l $path ) {
                my $to = readlink $path;
-               html "<li>$name</li>";
+               header 2,$name;
+               html $to;
        } else {
-               html "<li>$name<pre>", file( $path ), "</pre></li>";
+               header 2, $name;
+               html file( $path );
        }
 
 };
 
-html "</ul>" if $in_ul;
+$toc_html .= "</ul>" foreach ( 1 .. $last_level );
 
 print qq|
 <html><head>
@@ -55,12 +78,17 @@ print qq|
 <link type=text/css rel=stylesheet href="style.css">
 -->
 <style type=text/css>
-pre {
+pre.changes {
+       color: #444;
+}
+pre.content {
+       padding: 1em;
        background: #eee;
 }
 </style>
 </head><body>
        |
+       . "<div class=toc>$toc_html</div>"
        , join("\n", @html)
        , "</body></html>"
        ;