File Coverage

blib/lib/HTML/WikiConverter/WakkaWiki.pm
Criterion Covered Total %
statement 9 35 25.7
branch 0 10 0.0
condition 0 7 0.0
subroutine 3 7 42.8
pod 0 1 0.0
total 12 60 20.0


line stmt bran cond sub pod time code
1             package HTML::WikiConverter::WakkaWiki;
2              
3 1     1   34061 use warnings;
  1         2  
  1         46  
4 1     1   6 use strict;
  1         2  
  1         100  
5              
6 1     1   8 use base 'HTML::WikiConverter';
  1         15  
  1         1240  
7             our $VERSION = '0.50';
8              
9             =head1 NAME
10              
11             HTML::WikiConverter::WakkaWiki - Convert HTML to WakkaWiki markup
12              
13             =head1 SYNOPSIS
14              
15             use HTML::WikiConverter;
16             my $wc = new HTML::WikiConverter( dialect => 'WakkaWiki' );
17             print $wc->html2wiki( $html );
18              
19             =head1 DESCRIPTION
20              
21             This module contains rules for converting HTML into WakkaWiki
22             markup. See L for additional usage details.
23              
24             =cut
25              
26             sub rules {
27 0     0 0   my %rules = (
28             b => { start => '**', end => '**' },
29             strong => { alias => 'b' },
30             i => { start => '//', end => '//' },
31             em => { alias => 'i' },
32             u => { start => '__', end => '__' },
33             tt => { start => '##', end => '##' },
34             code => { start => '%%', end => '%%' },
35              
36             p => { block => 1, trim => 'both', line_format => 'multi' },
37             hr => { replace => "\n----\n" },
38             a => { replace => \&_link },
39             img => { preserve => 1, attributes => [ qw/ src alt width height / ], start => '""', end => '""', empty => 1 },
40              
41             ul => { line_format => 'multi', block => 1, line_prefix => "\t", start => \&_list_start },
42             ol => { alias => 'ul' },
43             li => { line_format => 'multi', start => \&_li_start, trim => 'leading' },
44             );
45              
46 0           for( 1..5 ) {
47 0           my $str = ( '=' ) x (7 - $_ );
48 0           $rules{"h$_"} = { start => "$str ", end => " $str", block => 1, trim => 'both', line_format => 'single' };
49             }
50 0           $rules{h6} = { alias => 'h5' };
51              
52 0           return \%rules;
53             }
54              
55             # This is a kludge that's only used to mark the start of an ordered
56             # list element; there's no WakkaWiki markup to start such a list.
57             my %li_count = ( );
58             sub _list_start {
59 0     0     my( $self, $node ) = @_;
60 0 0         return '' unless $node->tag eq 'ol';
61 0           $li_count{$node->address} = 0;
62 0           return '';
63             }
64              
65             sub _li_start {
66 0     0     my( $self, $node, $rules ) = @_;
67 0           my @parent_lists = $node->look_up( _tag => qr/ul|ol/ );
68              
69 0           my $bullet = '-';
70 0 0         if( $node->parent->tag eq 'ol' ) {
71 0           $bullet = ++$li_count{$node->parent->address};
72 0           $bullet .= ')';
73             }
74              
75 0           return "\n$bullet ";
76             }
77              
78             sub _link {
79 0     0     my( $self, $node, $rules ) = @_;
80 0   0       my $url = $node->attr('href') || '';
81 0   0       my $text = $self->get_elem_contents($node) || '';
82            
83 0 0         if( my $title = $self->get_wiki_page($url) ) {
84 0           $title =~ s/_/ /g;
85             # [[MiXed cAsE]] ==> MiXed cAsE
86 0 0 0       return $text if lc $title eq lc $text and $self->is_camel_case($text);
87 0           return "[[$title|$text]]";
88             } else {
89 0 0         return $url if $url eq $text;
90 0           return "[[$url $text]]";
91             }
92             }
93              
94             =head1 AUTHOR
95              
96             David J. Iberri, C<< >>
97              
98             =head1 BUGS
99              
100             Please report any bugs or feature requests to
101             C, or through the web
102             interface at
103             L.
104             I will be notified, and then you'll automatically be notified of
105             progress on your bug as I make changes.
106              
107             =head1 SUPPORT
108              
109             You can find documentation for this module with the perldoc command.
110              
111             perldoc HTML::WikiConverter::WakkaWiki
112              
113             You can also look for information at:
114              
115             =over 4
116              
117             =item * AnnoCPAN: Annotated CPAN documentation
118              
119             L
120              
121             =item * CPAN Ratings
122              
123             L
124              
125             =item * RT: CPAN's request tracker
126              
127             L
128              
129             =item * Search CPAN
130              
131             L
132              
133             =back
134              
135             =head1 COPYRIGHT & LICENSE
136              
137             Copyright 2006 David J. Iberri, all rights reserved.
138              
139             This program is free software; you can redistribute it and/or modify
140             it under the same terms as Perl itself.
141              
142             =cut
143              
144             1;