The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Kwiki::Spork;
use Kwiki::Plugin -Base;
use Kwiki::Installer -Base;
our $VERSION = '0.11';

const class_id => 'spork';

sub register {
    my $registry = shift;
    $registry->add(wafl => spork => 'Kwiki::Spork::Wafl');
}

package Kwiki::Spork::Wafl;
use base 'Spoon::Formatter::WaflBlock';
use Cwd;

sub to_html {
    my $text = $self->block_text;
    $self->make_spork($text);
    return join '',
      qq{<div class="spork">\n},
      $self->render($text),
      qq{</div>\n};
}

sub make_spork {
    my $home = cwd;
    my $text = shift;
    my $page = $self->hub->pages->current;
    my $spork_dir = io->catdir(
        $self->hub->spork->plugin_directory, $page->id)->assert;
    if ((my @x = $spork_dir->all) == 0) {
        $self->require_spork;
        chdir $spork_dir;        
        $self->spork_command->new_spork;
        chdir $home;
    }
    my $slides = io->catfile("$spork_dir", 'Spork.slides');
    unless (-f $slides->name and $slides->scalar eq $text) {
        $self->require_spork;
        $slides->print($text);
        $slides->close;
        chdir $spork_dir;        
        my %env = %ENV;
        delete $env{GATEWAY_INTERFACE}; #XXX Ugly
        local %ENV = %env;
        $self->spork_command->make_spork;
        chdir $home;
        my $htaccess = io('template/tt2/spork_htaccess')->scalar;
        io("$spork_dir/slides/.htaccess")->print($htaccess);
    }
}

sub spork_command {
    local $main::HUB; #XXX tt2 hack
    Spork->new->load_hub->command;
}

sub render {
    my $text = shift;
    $text =~ s/^\+//gm;
    $text = join "----\n", grep {
        /\S/ and not /^\w+:\s+\S+/
    } split /^\-{4,}\s*\n/m, $text;
    $self->hub->template->process('spork_section.html',
        text => $text,
    );
}

#XXX Something evil is happening and I need this ugly hack.
sub require_spork { 
    require Spork;
    require Spork::Config;
    require Spork::Hub;
    require Spork::Command;
    require Spork::Template::TT2;
    require Spork::Formatter;
    require Spork::Slides;
}

package Kwiki::Spork;
__DATA__

=head1 NAME 

Kwiki::Spork - Kwiki Spork Plugin

=head1 SYNOPSIS

=head1 DESCRIPTION

=head1 AUTHOR

Brian Ingerson <ingy@cpan.org>

=head1 COPYRIGHT

Copyright (c) 2004. Brian Ingerson. All rights reserved.

This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.

See http://www.perl.com/perl/misc/Artistic.html

=cut
__template/tt2/spork_htaccess__
Allow from all
__template/tt2/spork_section.html__
<div class="spork">
<p>
<a target="spork" href="plugin/spork/[% hub.pages.current.id %]/slides/start.html">Start Spork Slideshow</a>
</p>
<hr />
[% hub.formatter.text_to_html(text) %]
</div>