http://www.perlmonks.org?node_id=283338

I'm using CGI::Kwiki in a couple of projects. In one on them, I needed a way to use the POD format to compose pages. I came up with this formatter. To use it, put the module in your wiki directory, and change config.yaml in this way:
formatter_class: PodFormatter
The code reflects my choices: everything that's between PODPOD and ---- is going to be interpreted as POD, the rest is threated as wiki-language. The code should be easily customizable, though.

Update: Minor refactoring

use strict; use warnings; package MyFormatter; use base qw/CGI::Kwiki::Formatter/; use Pod::POM; use Pod::POM::View::HTML; sub _wiki2html { my ($self, $text) = @_; my $array = []; push @$array, $text; for my $method ($self->process_order) { $array = $self->dispatch($array, $method); } return $self->combine_chunks( $array ); } sub process { my ($self, $wiki_text) = @_; if ($wiki_text =~ /^PODPOD/ ) { my ($pod_part, $wiki_part) = $wiki_text =~ /^PODPOD(.*?)^(---- +.*)/sm; $pod_part = "=over 4\n\n" . $pod_part . "\n\n=back\n\n"; my $parser = Pod::POM->new(); my $pom = $parser->parse_text( $pod_part ); return Pod::POM::View::HTML->print( $pom ) . $self->_wiki2html( $wiki_part ); } else { return $self->_wiki2html( $wiki_text ); } } 1;

Replies are listed 'Best First'.
Re: CGI::Kwiki PodFormatter
by jmcnamara (Monsignor) on Aug 12, 2003 at 22:39 UTC

    That is nice. ++

    I encountered a similar problem when I wanted to load some Pod documentation onto a Kwiki site at work. However, since nobody else there used Pod I took another approach and wrote a parser as a subclass of Sean Burke's Pod::Simple.

    The module is Pod::Simple::Wiki. It is still a work in progress but here is a simple pod2kwiki filter based on it.

    #!/usr/bin/perl -w use strict; use Pod::Simple::Wiki; my $parser = Pod::Simple::Wiki->new('kwiki'); if (defined $ARGV[0]) { open IN, $ARGV[0] or die "Couldn't open $ARGV[0]: $!\n"; } else { *IN = *STDIN; } if (defined $ARGV[1]) { open OUT, ">$ARGV[1]" or die "Couldn't open $ARGV[1]: $!\n"; } else { *OUT = *STDOUT; } $parser->output_fh(*OUT); $parser->parse_file(*IN);
    Pod to Kwiki isn't currently a one to one mapping. Kwiki doesn't yet support term lists and definition lists and it isn't possible to escape camel case words in inline code sections.

    Here is an example of the the Parse::RecDescent docs converted from Pod to Kwiki to Html.

    --
    John.

    If man is 5 then this is the very model of a man.