I converted the whole handbook over to the wiki:

http://wiki.dragonflybsd.org/index.cgi/DragonFlyBSD_Handbook

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:

#!/usr/pkg/bin/perl

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      =>
'http://leaf.dragonflybsd.org/~justin/handbook/basics.html',
         #uri      =>
'http://leaf.dragonflybsd.org/~justin/new-bsdusers/article.html',
);

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
[:$2:$3]\n\n/sg;
    $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 =
Wiki::Gateway::putPage('http://wiki.dragonflybsd.org/index.cgi/',
$wikitype, "$filename", $page_text);

}

Reply via email to