Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

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(.*?)^(----
+.*)/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;
Comment on CGI::Kwiki PodFormatter
Download Code
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.

Back to Snippets Section

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://283338]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (7)
As of 2014-08-28 01:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (254 votes), past polls