Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

CGI::Kwiki PodFormatter

by larsen (Parson)
on Aug 12, 2003 at 20:29 UTC ( #283338=snippet: print w/replies, xml ) Need Help??
Description: 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(.*?)^(----

        $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 );

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.


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

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://283338]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (9)
As of 2018-06-20 18:04 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (117 votes). Check out past polls.