File Coverage

blib/lib/Template/Plugin/WikiFormat.pm
Criterion Covered Total %
statement 30 30 100.0
branch 2 2 100.0
condition 3 5 60.0
subroutine 5 5 100.0
pod 1 1 100.0
total 41 43 95.3


line stmt bran cond sub pod time code
1             package Template::Plugin::WikiFormat;
2 6     6   105491 use strict;
  6         13  
  6         209  
3 6     6   29 use warnings;
  6         10  
  6         261  
4              
5             our $VERSION = '0.08';
6              
7             #----------------------------------------------------------------------------
8              
9             =head1 NAME
10              
11             Template::Plugin::WikiFormat - TT wrapper for Text::WikiFormat
12              
13             =head1 SYNOPSIS
14              
15             [% USE WikiFormat %]
16             [% FILTER $WikiFormat %]
17             ...
18             [% END %]
19              
20             =head1 DESCRIPTION
21              
22             This is a plugin used for wiki rendering inside Template Toolkit.
23              
24             Parameters may be passed in through the USE directive, e.g.
25              
26             [% USE WikiFormat prefix = "http://www.mysite.com/?page=" %]
27              
28             This provides the 4 options supported by L, i.e.
29             C, and the special option
30             global_replace, which takes an array of arrays of from and to strings. The
31             output from Text::WikiFormat is post processed by replacing each from regexp
32             with the to regexp. Anything else passed in is interpreted as a tag (see the
33             Gory Details section).
34              
35             =head2 filter
36              
37             Accepts the wiki text to be rendered, and context. The tags and options are
38             passed in through the context. See L.
39              
40             =cut
41              
42             #----------------------------------------------------------------------------
43              
44             #############################################################################
45             #Library Modules #
46             #############################################################################
47              
48 6     6   30 use base 'Template::Plugin::Filter';
  6         13  
  6         2620  
49 6     6   26888 use Text::WikiFormat;
  6         47511  
  6         34  
50              
51             #----------------------------------------------------------------------------
52              
53             #############################################################################
54             #Interface Methods #
55             #############################################################################
56              
57             sub filter {
58 5     5 1 12752 my ( $self, $text ) = @_;
59              
60 5         10 my $conf = $self->{_CONFIG};
61 5   50     14 $conf ||= {};
62 5         17 my %tags = %$conf;
63 5         9 my %opts;
64 5         16 my %default = (
65             prefix => '',
66             extended => 0,
67             implicit_links => 1,
68             absolute_links => 0,
69             );
70 5         13 for ( keys %default ) {
71 20   66     50 $opts{$_} = $tags{$_} || $default{$_};
72 20         37 delete $tags{$_};
73             }
74 5         8 my $replace;
75 5 100       15 if ( exists $tags{global_replace} ) {
76 1         2 $replace = $tags{global_replace};
77 1         2 delete $tags{global_replace};
78             }
79              
80 5         15 my $output = Text::WikiFormat::format( $text, \%tags, \%opts );
81              
82 5         5701 for my $rep (@$replace) {
83 1         4 my ( $from, $to ) = @$rep;
84 1         59 eval("\$output =~ s($from)($to)sg");
85             }
86 5         31 return $output;
87             }
88              
89             1;
90              
91             __END__