r13058 - in /branches/upstream/libhtml-wikiconverter-markdown-perl: ./ current/ current/lib/ current/lib/HTML/ current/lib/HTML/WikiConverter/ current/t/

js at users.alioth.debian.org js at users.alioth.debian.org
Mon Jan 21 00:41:02 UTC 2008


Author: js
Date: Mon Jan 21 00:41:01 2008
New Revision: 13058

URL: http://svn.debian.org/wsvn/?sc=1&rev=13058
Log:
[svn-inject] Installing original source of libhtml-wikiconverter-markdown-perl

Added:
    branches/upstream/libhtml-wikiconverter-markdown-perl/
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/Changes
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/MANIFEST
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/META.yml
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/Makefile.PL
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/README
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/HTML/
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/HTML/WikiConverter/
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/HTML/WikiConverter/Markdown.pm
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/00-load.t
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/boilerplate.t
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/markdown.t
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod-coverage.t
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod.t
    branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/runtests.pl

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/Changes
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/Changes?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/Changes (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/Changes Mon Jan 21 00:41:01 2008
@@ -1,0 +1,12 @@
+# Revision history for HTML::WikiConverter::Markdown
+
+date: Thu Jul 20 18:00:00 EST 2006
+version: 0.02
+changes:
+  - require 0.60
+  - add attribute types
+
+date: Wed Jun 07 10:00:00 EST 2006
+version: 0.01
+changes:
+  - initial release (fulfill feature request: bug #18111)

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/MANIFEST
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/MANIFEST?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/MANIFEST (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/MANIFEST Mon Jan 21 00:41:01 2008
@@ -1,0 +1,12 @@
+Changes
+MANIFEST
+META.yml # Will be created by "make dist"
+Makefile.PL
+README
+lib/HTML/WikiConverter/Markdown.pm
+t/00-load.t
+t/boilerplate.t
+t/markdown.t
+t/pod-coverage.t
+t/pod.t
+t/runtests.pl

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/META.yml
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/META.yml?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/META.yml (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/META.yml Mon Jan 21 00:41:01 2008
@@ -1,0 +1,15 @@
+# http://module-build.sourceforge.net/META-spec.html
+#XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
+name:         HTML-WikiConverter-Markdown
+version:      0.02
+version_from: lib/HTML/WikiConverter/Markdown.pm
+installdirs:  site
+requires:
+    HTML::Tagset:                  0
+    HTML::WikiConverter:           0.6
+    Params::Validate:              0
+    Test::More:                    0
+    URI:                           0
+
+distribution_type: module
+generated_by: ExtUtils::MakeMaker version 6.17

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/Makefile.PL
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/Makefile.PL?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/Makefile.PL (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/Makefile.PL Mon Jan 21 00:41:01 2008
@@ -1,0 +1,20 @@
+use strict;
+use warnings;
+use ExtUtils::MakeMaker;
+
+WriteMakefile(
+    NAME                => 'HTML::WikiConverter::Markdown',
+    AUTHOR              => 'David J. Iberri <diberri at cpan.org>',
+    VERSION_FROM        => 'lib/HTML/WikiConverter/Markdown.pm',
+    ABSTRACT_FROM       => 'lib/HTML/WikiConverter/Markdown.pm',
+    PL_FILES            => {},
+    PREREQ_PM => {
+        'Test::More' => 0,
+        'HTML::WikiConverter' => 0.60,
+        'HTML::Tagset' => 0,
+        'Params::Validate' => 0,
+        'URI' => 0,
+    },
+    dist                => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', },
+    clean               => { FILES => 'HTML-WikiConverter-Markdown-*' },
+);

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/README
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/README?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/README (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/README Mon Jan 21 00:41:01 2008
@@ -1,0 +1,63 @@
+HTML::WikiConverter::Markdown
+=============================
+
+This module adds HTML->Markdown conversion to the HTML::WikiConverter
+module.
+
+SYNOPSIS
+
+Converting HTML to wiki markup is easy:
+
+  use HTML::WikiConverter;
+  my $wc = new HTML::WikiConverter( dialect => 'Markdown' );
+  print $wc->html2wiki( "<b>hello</b>" );
+
+Or from the command line:
+
+  % html2wiki --dialect Markdown input.html > output.wiki
+
+There's also a web interface if you're so inclined:
+
+  http://diberri.dyndns.org/wikipedia/html2wiki/
+
+DEPENDENCIES
+
+  * HTML::WikiConverter version 0.60
+  * HTML::Tagset
+  * URI
+
+INSTALLATION
+
+To install this module, run the following commands:
+
+    perl Makefile.PL
+    make
+    make test
+    make install
+
+SUPPORT AND DOCUMENTATION
+
+After installing, you can find documentation for this module with the perldoc command.
+
+    perldoc HTML::WikiConverter::Markdown
+
+You can also look for information at:
+
+    Search CPAN
+        http://search.cpan.org/dist/HTML-WikiConverter-Markdown
+
+    CPAN Request Tracker:
+        http://rt.cpan.org/NoAuth/Bugs.html?Dist=HTML-WikiConverter-Markdown
+
+    AnnoCPAN, annotated CPAN documentation:
+        http://annocpan.org/dist/HTML-WikiConverter-Markdown
+
+    CPAN Ratings:
+        http://cpanratings.perl.org/d/HTML-WikiConverter-Markdown
+
+COPYRIGHT AND LICENCE
+
+Copyright (C) 2006 David J. Iberri
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/HTML/WikiConverter/Markdown.pm
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/HTML/WikiConverter/Markdown.pm?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/HTML/WikiConverter/Markdown.pm (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/lib/HTML/WikiConverter/Markdown.pm Mon Jan 21 00:41:01 2008
@@ -1,0 +1,376 @@
+package HTML::WikiConverter::Markdown;
+
+use warnings;
+use strict;
+
+use base 'HTML::WikiConverter';
+our $VERSION = '0.02';
+
+use Params::Validate ':types';
+use HTML::Tagset;
+use URI;
+
+=head1 NAME
+
+HTML::WikiConverter::Markdown - Convert HTML to Markdown markup
+
+=head1 SYNOPSIS
+
+  use HTML::WikiConverter;
+  my $wc = new HTML::WikiConverter( dialect => 'Markdown' );
+  print $wc->html2wiki( $html );
+
+=head1 DESCRIPTION
+
+This module contains rules for converting HTML into Markdown markup.
+You should not use this module directly; HTML::WikiConverter is the
+entry point for html->wiki conversion (eg, see synopsis above). See
+L<HTML::WikiConverter> for additional usage details.
+
+=head1 ATTRIBUTES
+
+In addition to the regular set of attributes recognized by the
+L<HTML::WikiConverter> constructor, this dialect also accepts the
+following attributes that can be passed into the C<new()>
+constructor. See L<HTML::WikiConverter/ATTRIBUTES> for usage details.
+
+=head2 header_style
+
+Possible values: C<'setext'>, C<'atx'>. Determines how headers
+C<h1>-C<h6> will be formatted. See
+L<http://daringfireball.net/projects/markdown/syntax#header> for more
+information. Default is C<'atx'>.
+
+=head2 link_style
+
+Possible values: C<'inline'>, C<'reference'>. See
+L<http://daringfireball.net/projects/markdown/syntax#link> for more
+information. Default is C<'reference'>.
+
+=head2 force_inline_anchor_links
+
+Possible values: C<0>, C<1>. If enabled, links to anchors within the
+same page (eg, C<#some-anchor>) will always produce inline Markdown
+links, even under reference link style. This might be useful for
+building tables of contents. Default is C<0>.
+
+=head2 image_style
+
+Possible values: C<'inline'>, C<'reference'>. See
+L<http://daringfireball.net/projects/markdown/syntax#img> for more
+information. Default is C<'reference'>.
+
+=head2 image_tag_fallback
+
+Possible values: C<0>, C<1>. Markdown's image markup does not
+support image dimensions. If C<image_tag_fallback> is enabled, image
+tags containing dimensional information (ie, width or height) will not
+be converted into Markdown markup. Rather, they will be roughly
+preserved in their HTML form. Default is C<1>.
+
+=head2 unordered_list_style
+
+Possible values: C<'asterisk'>, C<'plus'>, C<'dash'>. See
+L<http://daringfireball.net/projects/markdown/syntax#list> for more
+information. Default is C<'asterisk'>.
+
+=head2 ordered_list_style
+
+Possible values: C<'sequential'>, C<'one-dot'>. Markdown supports two
+different markups for ordered lists. Sequential style gives each list
+element its own ordinal number (ie, C<'1.'>, C<'2.'>, C<'3.'>,
+etc.). One-dot style gives each list element the same ordinal number
+(ie, C<'1.'>). See
+L<http://daringfireball.net/projects/markdown/syntax#list> for more
+information. Default is C<'sequential'>.
+
+=cut
+
+sub attributes { {
+  header_style              => { default => 'atx', type => SCALAR },
+  link_style                => { default => 'reference', type => SCALAR },
+  force_inline_anchor_links => { default => 0, type => BOOLEAN },
+  image_style               => { default => 'reference', type => SCALAR },
+  image_tag_fallback        => { default => 1, type => BOOLEAN },
+  unordered_list_style      => { default => 'asterisk', type => SCALAR },
+  ordered_list_style        => { default => 'sequential', type => SCALAR },
+} }
+
+my @common_attrs = qw/ id class lang dir title style /;
+
+sub rules {
+  my $self = shift;
+
+  my %rules = (
+    hr => { replace => "\n\n----\n\n" },
+    br => { preserve => 1, empty => 1 },
+    p => { block => 1, trim => 'both', line_format => 'multi', line_prefix => \&_p_prefix },
+    blockquote => { block => 1, trim => 'both', line_format => 'blocks', line_prefix => '> ' },
+    ul => { block => 1, line_format => 'multi' },
+    ol => { alias => 'ul' },
+    li => { start => \&_li_start, trim => 'leading' },
+
+    i => { start => '_', end => '_' },
+    em => { alias => 'i' },
+    b => { start => '**', end => '**' },
+    strong => { alias => 'b' },
+    code => { start => '`', end => '`' },
+
+    a => { replace => \&_link },
+    img => { replace => \&_img },
+  );
+
+  for( 1..6 ) {
+    $rules{"h$_"} = { start => \&_header_start, end => \&_header_end, trim => 'both', block => 1 };
+  }
+
+  for( qw/ table caption tr th td / ) {
+    $rules{$_} = { preserve => 1, attrs => \@common_attrs, start => "\n", end => "\n", line_format => 'multi' };
+  }
+
+  return \%rules;
+}
+
+sub _header_start {
+  my( $self, $node, $rules ) = @_;
+  return '' unless $self->header_style eq 'atx';
+  ( my $level = $node->tag ) =~ s/\D//g;
+  return unless $level;
+
+  my $hr = ('#') x $level;
+  return "$hr ";
+}
+
+sub _header_end {
+  my( $self, $node, $rules ) = @_;
+  return '' unless $self->header_style eq 'setext';
+  ( my $level = $node->tag ) =~ s/\D//g;
+  return unless $level;
+
+  my $symbol = $level == 1 ? '=' : '-';
+  my $len = length $self->get_elem_contents($node);
+  my $bar = ($symbol) x $len;
+  return "\n$bar\n";
+}
+
+sub _link {
+  my( $self, $node, $rules ) = @_;
+
+  my $url = $self->_abs2rel($node->attr('href') || '');
+  my $text = $self->get_elem_contents($node);
+  my $title = $node->attr('title') || '';
+  
+  my $style = $self->link_style;
+  $style = 'inline' if $url =~ /^\#/ and $self->force_inline_anchor_links;
+
+  if( $url eq $text ) {
+    return sprintf "<%s>", $url;
+  } elsif( $style eq 'inline' ) {
+    return sprintf "[%s](%s %s)", $text, $url, $title if $title;
+    return sprintf "[%s](%s)", $text, $url;
+  } elsif( $style eq 'reference' ) {
+    my $id = $self->_next_link_id;
+    $self->_add_link( { id => $id, url => $url, title => $title } );
+    return sprintf "[%s][%s]", $text, $id;
+  }
+}
+
+sub _last_link_id { shift->_attr( { internal => 1 }, _last_link_id => @_ ) }
+
+sub _links { shift->_attr( { internal => 1 }, _links => @_ ) }
+
+sub _next_link_id {
+  my $self = shift;
+  my $next_id = ($self->_last_link_id || 0) + 1;
+  $self->_last_link_id( $next_id );
+  return $next_id;
+}
+
+sub _add_link {
+  my( $self, $link ) = @_;
+  $self->_links( [ @{ $self->_links || [] }, $link ] );
+}
+
+sub _img {
+  my( $self, $node, $rules ) = @_;
+  
+  my $url = $node->attr('src') || '';
+  my $text = $node->attr('alt') || '';
+  my $title = $node->attr('title') || '';
+  my $width = $node->attr('width') || '';
+  my $height = $node->attr('height') || '';
+  
+  if( $width || $height and $self->image_tag_fallback ) {
+    return "<img ".$self->get_attr_str( $node, qw/ src width height alt /, @common_attrs )." />";
+  } elsif( $self->image_style eq 'inline' ) {
+    return sprintf "![%s](%s \"%s\")", $text, $url, $title if $title;
+    return sprintf "![%s](%s)", $text, $url;
+  } elsif( $self->image_style eq 'reference' ) {
+    my $id = $self->_next_link_id;
+    $self->_add_link( { id => $id, url => $url, title => $title } );
+    return sprintf "![%s][%s]", $text, $id;
+  }
+}
+
+sub _li_start {
+  my( $self, $node, $rules ) = @_;
+  my @parent_lists = $node->look_up( _tag => qr/ul|ol/ );
+
+  my $prefix = ('  ') x ( @parent_lists - 1 );
+
+  my $bullet = '';
+  $bullet = $self->_ul_li_start if $node->parent and $node->parent->tag eq 'ul';
+  $bullet = $self->_ol_li_start($node->parent) if $node->parent and $node->parent->tag eq 'ol';
+  return "\n$prefix$bullet ";
+}
+
+sub _ul_li_start {
+  my $self = shift;
+  my $style = $self->unordered_list_style;
+  return '*' if $style eq 'asterisk';
+  return '+' if $style eq 'plus';
+  return '-' if $style eq 'dash';
+  die "no such unordered list style: '$style'";
+}
+
+my %ol_count = ( );
+sub _ol_li_start {
+  my( $self, $ol ) = @_;
+  my $style = $self->ordered_list_style;
+
+  if( $style eq 'one-dot' ) {
+    return '1.';
+  } elsif( $style eq 'sequential' ) {
+    my $count = ++$ol_count{$ol};
+    return "$count.";
+  } else {
+    die "no such ordered list style: $style";
+  }
+}
+
+sub _p_prefix {
+  my( $wc, $node, $rules ) = @_;
+  return $node->look_up( _tag => 'li' ) ? '    ' : '';
+}
+
+sub preprocess_node {
+  my( $self, $node ) = @_;
+  return unless $node->tag and $node->parent and $node->parent->tag;
+
+  if( $node->parent->tag eq 'blockquote' and $self->_is_phrase_tag($node->tag) ) {
+    $self->_envelop_elem( $node, HTML::Element->new('p') );
+  } elsif( $node->tag eq '~text' ) {
+    $self->_escape_text($node);
+  }
+}
+
+sub _envelop_elem {
+  my( $self, $node, $new_parent ) = @_;
+  my $h = $node->replace_with($new_parent);
+  $new_parent->push_content($h);
+}
+
+my @escapes = qw( \\ \` * _ { } ); # '#', '.', '[', and '!' are handled specially
+
+sub _escape_text {
+  my( $self, $node ) = @_;
+  my $text = $node->attr('text') || '';
+  my $escapes = join '', @escapes;
+  $text =~ s/([\Q$escapes\E])/\\$1/g;
+  $text =~ s/^([\d]+)\./$1\\./;
+  $text =~ s/^\#/\\#/;
+  $text =~ s/\!\[/\\![/g;
+  $text =~ s/\]\[/]\\[/g;
+  $node->attr( text => $text );
+}
+
+sub postprocess_output {
+  my( $self, $outref ) = @_;
+  $self->_add_references($outref);
+}
+
+sub _add_references {
+  my( $self, $outref ) = @_;
+  my @links = @{ $self->_links || [] };
+  return unless @links;
+
+  my $links = '';
+  foreach my $link ( @links ) {
+    my $id = $link->{id} || '';
+    my $url = $link->{url} || '';
+    my $title = $link->{title} || '';
+    if( $title ) {
+      $links .= sprintf "  [%s]: %s \"%s\"\n", $id, $url, $title;
+    } else { 
+      $links .= sprintf "  [%s]: %s\n", $id, $url;
+    }
+  }
+
+  $self->_links( [] );
+  $self->_last_link_id( 0 );
+
+  $$outref .= "\n\n$links";
+  $$outref =~ s/\s+$//gs;
+}
+
+sub _is_phrase_tag {
+  my $tag = pop || '';
+  return $HTML::Tagset::isPhraseMarkup{$tag} || $tag eq '~text';
+}
+
+sub _abs2rel {
+  my( $self, $uri ) = @_;
+  return $uri unless $self->base_uri;
+  return URI->new($uri)->rel($self->base_uri)->as_string;
+}
+
+=head1 AUTHOR
+
+David J. Iberri, C<< <diberri at cpan.org> >>
+
+=head1 BUGS
+
+Please report any bugs or feature requests to
+C<bug-html-wikiconverter-markdown at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=HTML-WikiConverter-Markdown>.
+I will be notified, and then you'll automatically be notified of progress on
+your bug as I make changes.
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+    perldoc HTML::WikiConverter::Markdown
+
+You can also look for information at:
+
+=over 4
+
+=item * AnnoCPAN: Annotated CPAN documentation
+
+L<http://annocpan.org/dist/HTML-WikiConverter-Markdown>
+
+=item * CPAN Ratings
+
+L<http://cpanratings.perl.org/d/HTML-WikiConverter-Markdown>
+
+=item * RT: CPAN's request tracker
+
+L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=HTML-WikiConverter-Markdown>
+
+=item * Search CPAN
+
+L<http://search.cpan.org/dist/HTML-WikiConverter-Markdown>
+
+=back
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2006 David J. Iberri, all rights reserved.
+
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=cut
+
+1;

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/00-load.t
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/00-load.t?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/00-load.t (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/00-load.t Mon Jan 21 00:41:01 2008
@@ -1,0 +1,9 @@
+#!perl -T
+
+use Test::More tests => 1;
+
+BEGIN {
+	use_ok( 'HTML::WikiConverter::Markdown' );
+}
+
+diag( "Testing HTML::WikiConverter::Markdown $HTML::WikiConverter::Markdown::VERSION, Perl $], $^X" );

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/boilerplate.t
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/boilerplate.t?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/boilerplate.t (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/boilerplate.t Mon Jan 21 00:41:01 2008
@@ -1,0 +1,48 @@
+#!perl -T
+
+use strict;
+use warnings;
+use Test::More tests => 3;
+
+sub not_in_file_ok {
+    my ($filename, %regex) = @_;
+    open my $fh, "<", $filename
+        or die "couldn't open $filename for reading: $!";
+
+    my %violated;
+
+    while (my $line = <$fh>) {
+        while (my ($desc, $regex) = each %regex) {
+            if ($line =~ $regex) {
+                push @{$violated{$desc}||=[]}, $.;
+            }
+        }
+    }
+
+    if (%violated) {
+        fail("$filename contains boilerplate text");
+        diag "$_ appears on lines @{$violated{$_}}" for keys %violated;
+    } else {
+        pass("$filename contains no boilerplate text");
+    }
+}
+
+not_in_file_ok(README =>
+    "The README is used..."       => qr/The README is used/,
+    "'version information here'"  => qr/to provide version information/,
+);
+
+not_in_file_ok(Changes =>
+    "placeholder date/time"       => qr(Date/time)
+);
+
+sub module_boilerplate_ok {
+    my ($module) = @_;
+    not_in_file_ok($module =>
+        'the great new $MODULENAME'   => qr/ - The great new /,
+        'boilerplate description'     => qr/Quick summary of what the module/,
+        'stub function definition'    => qr/function[12]/,
+    );
+}
+
+module_boilerplate_ok('lib/HTML/WikiConverter/Markdown.pm');

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/markdown.t
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/markdown.t?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/markdown.t (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/markdown.t Mon Jan 21 00:41:01 2008
@@ -1,0 +1,323 @@
+local $/;
+require 't/runtests.pl';
+runtests( data => <DATA>, dialect => 'Markdown', wiki_uri => 'http://www.test.com/wiki/' );
+close DATA;
+
+__DATA__
+unordered list
+__H__
+<ul>
+<li>one</li>
+<li>two</li>
+<li>three</li>
+</ul>
+__W__
+* one
+* two
+* three
+__NEXT__
+ordered list
+__H__
+<ol>
+<li>one</li>
+<li>two</li>
+<li>three</li>
+</ol>
+__W__
+1. one
+2. two
+3. three
+__NEXT__
+blockquote
+__H__
+<blockquote>text</blockquote>
+__W__
+> text
+__NEXT__
+nested blockquote
+__H__
+<blockquote>text<blockquote>text2</blockquote></blockquote>
+__W__
+> text
+>
+> > text2
+__NEXT__
+nested blockquote cont'd
+__H__
+<blockquote>This is the first level of quoting.
+<blockquote>This is nested blockquote.</blockquote>
+<p>Back to the first level.</p></blockquote>
+__W__
+> This is the first level of quoting.
+>
+> > This is nested blockquote.
+>
+> Back to the first level.
+__NEXT__
+h1
+__H__
+<h1>text</h1>
+__W__
+# text
+__NEXT__
+bold
+__H__
+<b>bold text</b>
+__W__
+**bold text**
+__NEXT__
+italics
+__H__
+<i>text</i>
+__W__
+_text_
+__NEXT__
+strong
+__H__
+<strong>text</strong>
+__W__
+**text**
+__NEXT__
+em
+__H__
+<em>text</em>
+__W__
+_text_
+__NEXT__
+inline link ::link_style('inline')
+__H__
+<p>It's called <a href="http://en.wikipedia.org/wiki/Long-term_potentiation" title="Long-term potentiation">LTP</a>.</p>
+__W__
+It's called [LTP](http://en.wikipedia.org/wiki/Long-term_potentiation Long-term potentiation).
+__NEXT__
+reference link ::link_style('reference')
+__H__
+<p>It's called <a href="http://en.wikipedia.org/wiki/Long-term_potentiation" title="Long-term potentiation">LTP</a>.</p>
+__W__
+It's called [LTP][1].
+
+  [1]: http://en.wikipedia.org/wiki/Long-term_potentiation "Long-term potentiation"
+__NEXT__
+reference link no title ::link_style('inline')
+__H__
+<p><a href="http://example.net/">This link</a> has no title attribute.</p>
+__W__
+[This link](http://example.net/) has no title attribute.
+__NEXT__
+multi-paragraphs with reference links ::link_style('reference')
+__H__
+<p>This is a paragraph with a link to <a href="http://google.com">Google</a>.
+There's also a link to some other stuff, like <a href="http://digg.com">Digg</a>
+and <a href="http://wikipedia.org">Wikipedia</a>.
+
+<p>Here's another paragraph.</p>
+
+<p>This is fun stuff:</p>
+<ul>
+  <li><a href="http://video.google.com" title="Google Video">Google Video is the best!</a></li>
+  <li><a href="http://www.example.org" title="Examples">Example.org is a close second</a></li>
+</ul>
+__W__
+This is a paragraph with a link to [Google][1]. There's also a link to some other stuff, like [Digg][2] and [Wikipedia][3].
+
+Here's another paragraph.
+
+This is fun stuff:
+
+* [Google Video is the best!][4]
+* [Example.org is a close second][5]
+
+  [1]: http://google.com
+  [2]: http://digg.com
+  [3]: http://wikipedia.org
+  [4]: http://video.google.com "Google Video"
+  [5]: http://www.example.org "Examples"
+__NEXT__
+code
+__H__
+<code>printf()</code>
+__W__
+`printf()`
+__NEXT__
+inline image ::image_style('inline')
+__H__
+<img src="http://example.com/delete.png" alt="Delete" title="Click to delete" />
+__W__
+![Delete](http://example.com/delete.png "Click to delete")
+__NEXT__
+reference image ::image_style('reference')
+__H__
+<img src="http://example.com/delete.png" alt="Delete" title="Click to delete" />
+__W__
+![Delete][1]
+
+  [1]: http://example.com/delete.png "Click to delete"
+__NEXT__
+mixed inline images and links ::image_style('inline') ::link_style('inline')
+__H__
+<p>Link goes <a href="http://example.com" title="Link to example.com">Here</a>.
+Image goes below:</p>
+
+<p><img src="http://example.com/logo.png" alt="Logo"/></p>
+__W__
+Link goes [Here](http://example.com Link to example.com). Image goes below:
+
+![Logo](http://example.com/logo.png)
+__NEXT__
+mixed reference images and links ::image_style('reference') ::link_style('reference')
+__H__
+<p>This is a paragraph with a link to <a href="http://google.com">Google</a>.  There's also a link to some other stuff, like <a href="http://digg.com">Digg</a> and <a href="http://wikipedia.org">Wikipedia</a>. <img src="http://example.com/delete.png" alt="Delete" title="Click to delete" /></p>
+__W__
+This is a paragraph with a link to [Google][1]. There's also a link to some other stuff, like [Digg][2] and [Wikipedia][3]. ![Delete][4]
+
+  [1]: http://google.com
+  [2]: http://digg.com
+  [3]: http://wikipedia.org
+  [4]: http://example.com/delete.png "Click to delete"
+__NEXT__
+fallback to tag if image has dimensions ::image_tag_fallback(1)
+__H__
+<img src="http://example.com/origin.png" alt="Thingy" title="The title" width="100" />
+__W__
+<img src="http://example.com/origin.png" width="100" alt="Thingy" title="The title" />
+__NEXT__
+no fallback ::image_tag_fallback(0) ::image_style('inline')
+__H__
+<img src="http://example.com/origin.png" alt="Thingy" title="The title" width="100" />
+__W__
+![Thingy](http://example.com/origin.png "The title")
+__NEXT__
+automatic links
+__H__
+<a href="http://example.com">http://example.com</a>
+__W__
+<http://example.com>
+__NEXT__
+escapes
+__H__
+<p>a backslash \</p>
+<p>a weird combo ![</p>
+<p>a curly brace {</p>
+<p>1992. not a list item!</p>
+__W__
+a backslash \\
+
+a weird combo \![
+
+a curly brace \{
+
+1992\. not a list item!
+__NEXT__
+multi-headers
+__H__
+<h1>One</h1>
+<h2>Two</h2>
+<h3>Three</h3>
+__W__
+# One
+
+## Two
+
+### Three
+__NEXT__
+one-dot lists ::ordered_list_style('one-dot')
+__H__
+<ol>
+<li>one</li>
+<li>two</li>
+<li>three</li>
+</ol>
+__W__
+1. one
+1. two
+1. three
+__NEXT__
+plus lists ::unordered_list_style('plus')
+__H__
+<ul>
+<li>one</li>
+<li>two</li>
+<li>three</li>
+</ul>
+__W__
++ one
++ two
++ three
+__NEXT__
+dash lists ::unordered_list_style('dash')
+__H__
+<ul>
+<li>one</li>
+<li>two</li>
+<li>three</li>
+</ul>
+__W__
+- one
+- two
+- three
+__NEXT__
+forced inline anchors ::force_inline_anchor_links(1) ::unordered_list_style('asterisk')
+__H__
+<ul>
+  <li><a href="#overview">Overview</a>
+    <ul>
+      <li><a href="#philosophy">Philosophy</a></li>
+      <li><a href="#html">Inline HTML</a></li>
+    </ul>
+  </li>
+</ul>
+__W__
+* [Overview](#overview)
+  * [Philosophy](#philosophy)
+  * [Inline HTML](#html)
+__NEXT__
+table
+__H__
+<table>
+  <caption>My favorite animals</caption>
+  <tr>
+    <th>Animal</th>
+    <th>Region</th>
+    <th>Physical traits</th>
+    <th>Food</th>
+  </tr>
+  <tr>
+    <td>Pacman frog</td>
+    <td>Gran Chaco (Argentina)</td>
+    <td>Half mouth, half stomach (quite literally!)</td>
+    <td>Crickets, fish, etc.</td>
+  </tr>
+</table>
+__W__
+<table>
+<caption>My favorite animals</caption>
+<tr>
+<th>Animal</th>
+<th>Region</th>
+<th>Physical traits</th>
+<th>Food</th>
+</tr>
+<tr>
+<td>Pacman frog</td>
+<td>Gran Chaco (Argentina)</td>
+<td>Half mouth, half stomach (quite literally!)</td>
+<td>Crickets, fish, etc.</td>
+</tr>
+</table>
+__NEXT__
+setext header ::header_style('setext')
+__H__
+<h1>header1</h1>
+<p>Fun stuff here.</p>
+<h2>header2</h2>
+<p>More fun stuff!</p>
+__W__
+header1
+=======
+
+Fun stuff here.
+
+header2
+-------
+
+More fun stuff!

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod-coverage.t
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod-coverage.t?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod-coverage.t (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod-coverage.t Mon Jan 21 00:41:01 2008
@@ -1,0 +1,25 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod::Coverage 1.04";
+plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage" if $@;
+all_pod_coverage_ok( { also_private => [
+  # These methods are documented in HTML::WikiConverter::Dialects
+  qr/
+     get_elem_contents
+    |get_wiki_page
+    |get_attr_str
+    |is_camel_case
+    |rule
+    |rules
+    |attribute
+    |attributes
+    |preprocess_tree
+    |preprocess_node
+    |postprocess_output
+    |caption2para
+    |strip_aname
+    |base_url
+    |wiki_url
+  /x
+] } );

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod.t
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod.t?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod.t (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/pod.t Mon Jan 21 00:41:01 2008
@@ -1,0 +1,6 @@
+#!perl -T
+
+use Test::More;
+eval "use Test::Pod 1.14";
+plan skip_all => "Test::Pod 1.14 required for testing POD" if $@;
+all_pod_files_ok();

Added: branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/runtests.pl
URL: http://svn.debian.org/wsvn/branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/runtests.pl?rev=13058&op=file
==============================================================================
--- branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/runtests.pl (added)
+++ branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/runtests.pl Mon Jan 21 00:41:01 2008
@@ -1,0 +1,132 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use Test::More;
+use File::Spec;
+use HTML::Entities;
+use HTML::WikiConverter;
+*e = \&encode_entities;
+
+my $more_tests = <<END_TESTS;
+__NEXT__
+entities (1)
+__H__
+To enter a '&lt;' in your input, use "&amp;lt;"
+__W__
+To enter a '&lt;' in your input, use "&amp;lt;"
+__NEXT__
+entities (2)
+__H__
+To enter a '<' in your input, use "&amp;lt;"
+__W__
+To enter a '&lt;' in your input, use "&amp;lt;"
+__NEXT__
+strip comments
+__H__
+A <!-- stripped --> comment
+__W__
+A  comment
+__NEXT__
+strip head
+__H__
+<html>
+<head><title>fun stuff</title></head>
+<body>
+<p>Crazy stuff here</p>
+</body>
+</html>
+__W__
+Crazy stuff here
+__NEXT__
+strip scripts
+__H__
+<html>
+<head><script>bogus stuff</script></head>
+<body>
+<script>maliciousCode()</script>
+<p>benevolent text</p>
+</body>
+</html>
+__W__
+benevolent text
+END_TESTS
+
+sub runtests {
+  my %arg = @_;
+
+  $arg{wrap_in_html} = 1;
+  $arg{base_uri} ||= 'http://www.test.com';
+  my $minimal = $arg{minimal} || 0;
+
+  my $data = $arg{data} || '';
+  $data .= entity_tests() . $more_tests unless $minimal;
+
+  my @tests = split /__NEXT__\n/, $data;
+  my $numtests = @tests;
+  #$numtests += 1 unless $minimal; # file test
+  plan tests => $numtests;
+
+  # Delete unrecognized HTML::WikiConverter options
+  delete $arg{$_} for qw/ data minimal /;
+
+  my $wc = new HTML::WikiConverter(%arg);
+  foreach my $test ( @tests ) {
+    $test =~ s/^(.*?)\n//; my $name = $1;
+    my( $html, $wiki ) = split /__W__\n/, $test;
+    $html =~ s/__H__\n//;
+
+    $name =~ s{\s*\:\:(\w+\([^\)]*?\))}{
+      my $method_call = $1;
+      eval "\$wc->$method_call;";
+      die "Failed test call ($name): $@" if $@;
+      '';
+    }ge;
+
+    for( $html, $wiki ) { s/^\n+//; s/\n+$// }
+    is( $wc->html2wiki($html), $wiki, $name );
+  }
+
+  #file_test($wc) unless $minimal;
+}
+
+sub entity_tests {
+  my $tmpl = "__NEXT__\n%s\n__H__\n%s\n__W__\n%s\n"; # test-name, html-input, expected-wiki-output
+
+  my $data = '';
+  my @chars = ( '<', '>', '&' );
+  foreach my $char ( @chars ) {
+    ( my $charname = e($char) ) =~ s/[&;]//g;
+    $data .= sprintf $tmpl, "literal ($charname)", $char, e($char)
+          .  sprintf $tmpl, "encode ($charname)", e($char), e($char)
+          .  sprintf $tmpl, "meta ($charname)", e(e($char)), e(e($char));
+  }
+
+  return $data;
+}
+
+sub _slurp {
+  my $path = shift;
+  open H, $path or die "couldn't open $path: $!";
+  local $/;
+  my $c = <H>;
+  close H;
+  return $c;
+}
+
+sub file_test {
+  my $wc = shift;
+  my $lc_dialect = lc $wc->dialect;
+  my $infile = File::Spec->catfile( 't', 'complete.html' );
+  my $outfile = File::Spec->catfile( 't', "complete.$lc_dialect" );
+
+  SKIP: {
+    skip "Couldn't find $infile (ignore this)", 1 unless -e $infile;
+    skip "Couldn't find $outfile (ignore this)", 1 unless -e $outfile;
+    my( $got, $expect ) = ( $wc->html2wiki( file => $infile, slurp => 1 ), _slurp($outfile) );
+    for( $got, $expect ) { s/^\n+//; s/\n+$// }
+    is( $got, $expect, 'read from file' );
+  };
+}
+
+1;




More information about the Pkg-perl-cvs-commits mailing list