handbook now on wiki

Justin C. Sherrill justin at shiningsilence.com
Sun Apr 22 18:58:41 PDT 2007

I converted the whole handbook over to the wiki:


There's some typos and conversion errors, of course, but it's been tweaked
enough that it's remarkably similar to the original document.  Most of the
odd things come from the MoinMoin wiki software not allowing markup within
section headers or code, and the like.

Anyway: hooray, no more SGML!  Please mangle as you see fit.

For posterity, here's the Perl script I put together for it:


use WWW::CheckSite::Spider;
use Wiki::Gateway;
use HTML::WikiConverter;
use LWP;
use File::Basename;

# use checksite to grab all pages in handbook
# use converter to change
# apply to pages in wiki

$wikitype = "moinmoin1";

my $wc = new HTML::WikiConverter(
    dialect => 'MoinMoin',
    wiki_uri => 'http://leaf.dragonflybsd.org/~justin/handbook/'

my $sp = WWW::CheckSite::Spider->new(
         #uri      => 'http://leaf.dragonflybsd.org/~justin/handbook/',
         uri      =>
         #uri      =>

while ( my $page = $sp->get_page )
    # go through pages on site
    print "$page->{title} $page->{ret_uri}\n";
    # get actual page url
    my $path = $page->{ret_uri};

    # go get the page and convert
    my $page_text = $wc->html2wiki( uri => $path );

    # find name of end file
    my($filename, $directories, $suffix) = fileparse($path);

    if ($filename eq "article.html")
        $filename = $page->{title};

    print "result: $result\n";

    # takes care of table links on each handbook page
    $page_text =~ s/\[([\w\.\-]+)\ Prev]/\[:$1:Prev\]/sg;
    $page_text =~ s/ \[([\w\.\-]+)\ Next]/\<\)\> \[:$1:Next\]/sg;
    $page_text =~ s/\[([\w\.]+)\ Home]/\[:$1:Home\]/sg;
    $page_text =~ s/\[([\w\.\-]+)\ Up]/\[:$1:Up\]/sg;

    # fix the mini-table of contents found at the start of chapters,
    # as the wikiconverter tries to treat these as terms and definitions.
    $page_text =~ s/(\d+\.\d+) \[([\w\.\-\#]*?) +(.*?)\]::/$1
    $page_text =~ s/'''Table of Contents'''::/'''Table of Contents'''\n\n/sg;

    # footnotes/anchors
    $page_text =~ s/\[([\w\.]+#[\w\.\-]+)/\[:$1:/sg;
    $page_text =~ s/\[(\d)\]\]/\($1\)]/sg;
    $page_text =~ s/Up\] \|\| (.*?) \|\|/Up] ||<)> $1 ||/sg;

    # center the header text
    $page_text =~ s/(\> DragonFly Handbook \|\|)/ : $1/sg;
    $page_text =~ s/\|\|( Chapter)/\|\|<:>$1/sg;

    # mark it english
    $page_text = "#language en\n$page_text";

    # stupid CamelCase, which I hate with the intensity of
    # a thousand burning suns
    $page_text =~ s/DragonFly/Dragon``Fly/sg;
    $page_text =~ s/McKusick/Mc``Kusick/sg;

    #print "$page_text";

    # post page to wiki
    $result =
$wikitype, "$filename", $page_text);


More information about the Docs mailing list