1package HTML::WikiConverter::WakkaWiki; 2 3use warnings; 4use strict; 5 6use base 'HTML::WikiConverter'; 7our $VERSION = '0.50'; 8 9=head1 NAME 10 11HTML::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 21This module contains rules for converting HTML into WakkaWiki 22markup. See L<HTML::WikiConverter> for additional usage details. 23 24=cut 25 26sub rules { 27 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 for( 1..5 ) { 47 my $str = ( '=' ) x (7 - $_ ); 48 $rules{"h$_"} = { start => "$str ", end => " $str", block => 1, trim => 'both', line_format => 'single' }; 49 } 50 $rules{h6} = { alias => 'h5' }; 51 52 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. 57my %li_count = ( ); 58sub _list_start { 59 my( $self, $node ) = @_; 60 return '' unless $node->tag eq 'ol'; 61 $li_count{$node->address} = 0; 62 return ''; 63} 64 65sub _li_start { 66 my( $self, $node, $rules ) = @_; 67 my @parent_lists = $node->look_up( _tag => qr/ul|ol/ ); 68 69 my $bullet = '-'; 70 if( $node->parent->tag eq 'ol' ) { 71 $bullet = ++$li_count{$node->parent->address}; 72 $bullet .= ')'; 73 } 74 75 return "\n$bullet "; 76} 77 78sub _link { 79 my( $self, $node, $rules ) = @_; 80 my $url = $node->attr('href') || ''; 81 my $text = $self->get_elem_contents($node) || ''; 82 83 if( my $title = $self->get_wiki_page($url) ) { 84 $title =~ s/_/ /g; 85 # [[MiXed cAsE]] ==> <a href="http://site/wiki:mixed_case">MiXed cAsE</a> 86 return $text if lc $title eq lc $text and $self->is_camel_case($text); 87 return "[[$title|$text]]"; 88 } else { 89 return $url if $url eq $text; 90 return "[[$url $text]]"; 91 } 92} 93 94=head1 AUTHOR 95 96David J. Iberri, C<< <diberri at cpan.org> >> 97 98=head1 BUGS 99 100Please report any bugs or feature requests to 101C<bug-html-wikiconverter-wakkawiki at rt.cpan.org>, or through the web 102interface at 103L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=HTML-WikiConverter-WakkaWiki>. 104I will be notified, and then you'll automatically be notified of 105progress on your bug as I make changes. 106 107=head1 SUPPORT 108 109You can find documentation for this module with the perldoc command. 110 111 perldoc HTML::WikiConverter::WakkaWiki 112 113You can also look for information at: 114 115=over 4 116 117=item * AnnoCPAN: Annotated CPAN documentation 118 119L<http://annocpan.org/dist/HTML-WikiConverter-WakkaWiki> 120 121=item * CPAN Ratings 122 123L<http://cpanratings.perl.org/d/HTML-WikiConverter-WakkaWiki> 124 125=item * RT: CPAN's request tracker 126 127L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=HTML-WikiConverter-WakkaWiki> 128 129=item * Search CPAN 130 131L<http://search.cpan.org/dist/HTML-WikiConverter-WakkaWiki> 132 133=back 134 135=head1 COPYRIGHT & LICENSE 136 137Copyright 2006 David J. Iberri, all rights reserved. 138 139This program is free software; you can redistribute it and/or modify 140it under the same terms as Perl itself. 141 142=cut 143 1441; 145