r44905 - in /trunk/libhtml-wikiconverter-markdown-perl: Changes MANIFEST META.yml Makefile.PL README debian/changelog lib/HTML/WikiConverter/Markdown.pm t/01-markdown.t t/markdown.t
ghostbar at users.alioth.debian.org
ghostbar at users.alioth.debian.org
Sun Sep 27 02:42:47 UTC 2009
Author: ghostbar
Date: Sun Sep 27 02:42:41 2009
New Revision: 44905
URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=44905
Log:
new upstream release 0.05
Added:
trunk/libhtml-wikiconverter-markdown-perl/t/01-markdown.t
- copied unchanged from r44904, branches/upstream/libhtml-wikiconverter-markdown-perl/current/t/01-markdown.t
Removed:
trunk/libhtml-wikiconverter-markdown-perl/t/markdown.t
Modified:
trunk/libhtml-wikiconverter-markdown-perl/Changes
trunk/libhtml-wikiconverter-markdown-perl/MANIFEST
trunk/libhtml-wikiconverter-markdown-perl/META.yml
trunk/libhtml-wikiconverter-markdown-perl/Makefile.PL
trunk/libhtml-wikiconverter-markdown-perl/README
trunk/libhtml-wikiconverter-markdown-perl/debian/changelog
trunk/libhtml-wikiconverter-markdown-perl/lib/HTML/WikiConverter/Markdown.pm
Modified: trunk/libhtml-wikiconverter-markdown-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libhtml-wikiconverter-markdown-perl/Changes?rev=44905&op=diff
==============================================================================
--- trunk/libhtml-wikiconverter-markdown-perl/Changes (original)
+++ trunk/libhtml-wikiconverter-markdown-perl/Changes Sun Sep 27 02:42:41 2009
@@ -1,4 +1,18 @@
# Revision history for HTML::WikiConverter::Markdown
+
+date: 2009-03-16
+version: 0.05
+changes:
+ - requires HTML::WikiConverter 0.67
+ - (bug #43997) properly handles multiline code blocks
+
+date: 2009-03-13
+version: 0.04
+changes:
+ - correct handling of blockquotes containing only phrasal elements
+ - (bug #43988) properly escape backticks within code tags
+ - (bug #43993) don't escape underscores within code tags
+ - (bug #43996) decode specific html entities within code tags
date: 2008-11-14
version: 0.03
Modified: trunk/libhtml-wikiconverter-markdown-perl/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libhtml-wikiconverter-markdown-perl/MANIFEST?rev=44905&op=diff
==============================================================================
--- trunk/libhtml-wikiconverter-markdown-perl/MANIFEST (original)
+++ trunk/libhtml-wikiconverter-markdown-perl/MANIFEST Sun Sep 27 02:42:41 2009
@@ -6,7 +6,7 @@
lib/HTML/WikiConverter/Markdown.pm
t/00-load.t
t/boilerplate.t
-t/markdown.t
+t/01-markdown.t
t/pod-coverage.t
t/pod.t
t/runtests.pl
Modified: trunk/libhtml-wikiconverter-markdown-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libhtml-wikiconverter-markdown-perl/META.yml?rev=44905&op=diff
==============================================================================
--- trunk/libhtml-wikiconverter-markdown-perl/META.yml (original)
+++ trunk/libhtml-wikiconverter-markdown-perl/META.yml Sun Sep 27 02:42:41 2009
@@ -1,6 +1,6 @@
--- #YAML:1.0
name: HTML-WikiConverter-Markdown
-version: 0.03
+version: 0.05
abstract: Convert HTML to Markdown markup
author:
- David J. Iberri <diberri at cpan.org>
@@ -10,7 +10,7 @@
ExtUtils::MakeMaker: 0
requires:
HTML::Tagset: 0
- HTML::WikiConverter: 0.63
+ HTML::WikiConverter: 0.67
Params::Validate: 0
Test::More: 0
URI: 0
Modified: trunk/libhtml-wikiconverter-markdown-perl/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libhtml-wikiconverter-markdown-perl/Makefile.PL?rev=44905&op=diff
==============================================================================
--- trunk/libhtml-wikiconverter-markdown-perl/Makefile.PL (original)
+++ trunk/libhtml-wikiconverter-markdown-perl/Makefile.PL Sun Sep 27 02:42:41 2009
@@ -11,7 +11,7 @@
PL_FILES => {},
PREREQ_PM => {
'Test::More' => 0,
- 'HTML::WikiConverter' => 0.63,
+ 'HTML::WikiConverter' => 0.67, # for p_strict attribute
'HTML::Tagset' => 0,
'Params::Validate' => 0,
'URI' => 0,
Modified: trunk/libhtml-wikiconverter-markdown-perl/README
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libhtml-wikiconverter-markdown-perl/README?rev=44905&op=diff
==============================================================================
--- trunk/libhtml-wikiconverter-markdown-perl/README (original)
+++ trunk/libhtml-wikiconverter-markdown-perl/README Sun Sep 27 02:42:41 2009
@@ -1,8 +1,8 @@
HTML::WikiConverter::Markdown
=============================
-This module adds HTML->Markdown conversion to the HTML::WikiConverter
-module.
+This module adds HTML-to-Markdown conversion to the
+HTML::WikiConverter module.
SYNOPSIS
@@ -19,12 +19,6 @@
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
@@ -57,7 +51,7 @@
COPYRIGHT AND LICENCE
-Copyright (C) 2006 David J. Iberri
+Copyright (c) David J. Iberri
This program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
Modified: trunk/libhtml-wikiconverter-markdown-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libhtml-wikiconverter-markdown-perl/debian/changelog?rev=44905&op=diff
==============================================================================
--- trunk/libhtml-wikiconverter-markdown-perl/debian/changelog (original)
+++ trunk/libhtml-wikiconverter-markdown-perl/debian/changelog Sun Sep 27 02:42:41 2009
@@ -1,4 +1,4 @@
-libhtml-wikiconverter-markdown-perl (0.03-1) UNRELEASED; urgency=low
+libhtml-wikiconverter-markdown-perl (0.05-1) UNRELEASED; urgency=low
[ gregor herrmann <gregoa at debian.org> ]
* Add debian/README.source to document quilt usage, as required by
@@ -39,7 +39,10 @@
perl (>= 5.6.0-{12,16}) with an unversioned dependency on perl (as
permitted by Debian Policy 3.8.3).
- -- Jonas Smedegaard <dr at jones.dk> Sat, 13 Dec 2008 02:04:30 +0100
+ [ Jose Luis Rivas ]
+ * New upstream release
+
+ -- Jose Luis Rivas <ghostbar at debian.org> Sat, 26 Sep 2009 22:12:57 -0430
libhtml-wikiconverter-markdown-perl (0.02-6) unstable; urgency=high
Modified: trunk/libhtml-wikiconverter-markdown-perl/lib/HTML/WikiConverter/Markdown.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libhtml-wikiconverter-markdown-perl/lib/HTML/WikiConverter/Markdown.pm?rev=44905&op=diff
==============================================================================
--- trunk/libhtml-wikiconverter-markdown-perl/lib/HTML/WikiConverter/Markdown.pm (original)
+++ trunk/libhtml-wikiconverter-markdown-perl/lib/HTML/WikiConverter/Markdown.pm Sun Sep 27 02:42:41 2009
@@ -4,9 +4,10 @@
use strict;
use base 'HTML::WikiConverter';
-our $VERSION = '0.03';
+our $VERSION = '0.05';
use Params::Validate ':types';
+use HTML::Entities;
use HTML::Tagset;
use URI;
@@ -94,9 +95,15 @@
image_tag_fallback => { default => 1, type => BOOLEAN },
unordered_list_style => { default => 'asterisk', type => SCALAR },
ordered_list_style => { default => 'sequential', type => SCALAR },
+
+ # Requires H::WC version 0.67
+ p_strict => { default => 0 },
} }
my @common_attrs = qw/ id class lang dir title style /;
+
+# Hack to accommodate bug #43997 - multiline code blocks
+my $code_block_prefix = 'bqwegsdfbwegadfbnsdfbahwerfgkjnsdfbohqw34t927398y5jnwrteb8uq34inb';
sub rules {
my $self = shift;
@@ -114,7 +121,8 @@
em => { alias => 'i' },
b => { start => '**', end => '**' },
strong => { alias => 'b' },
- code => { start => '`', end => '`' },
+ code => { start => \&_code_delim, end => \&_code_delim },
+ code_block => { line_prefix => $code_block_prefix, block => 1 },
a => { replace => \&_link },
img => { replace => \&_img },
@@ -258,36 +266,131 @@
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') );
+ if( $node->tag eq 'blockquote' ) {
+ my @non_phrasal_children = grep { ! $self->_is_phrase_tag($_->tag) } $node->content_list;
+ unless( @non_phrasal_children ) { # ie, we have things like <blockquote>blah blah blah</blockquote>, without a <p> or something
+ $self->_envelop_children( $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
+
+ # bug #43998
+ $self->_decode_entities_in_code($node)
+ if $node->parent->tag eq 'code' or $node->parent->tag eq 'code_block';
+ }
+}
+
+sub preprocess_tree {
+ my( $self, $root ) = @_;
+ foreach my $node ( $root->descendants ) {
+ # bug #43997 - multiline code blocks
+ if( $self->_text_is_within_code_pre($node) ) {
+ $self->_convert_to_code_block($node);
+ }
+ }
+}
+
+sub _text_is_within_code_pre {
+ my( $self, $node ) = @_;
+ return unless $node->parent->parent and $node->parent->parent->tag;
+
+ # Must be <code><pre>...</pre></code> (or <pre><code>...</code></pre>)
+ my $code_pre = $node->parent->tag eq 'code' && $node->parent->parent->tag eq 'pre';
+ my $pre_code = $node->parent->tag eq 'pre' && $node->parent->parent->tag eq 'code';
+ return unless $code_pre or $pre_code;
+
+ # Can't be any other nodes in a code block
+ return if $node->left or $node->right;
+ return if $node->parent->left or $node->parent->right;
+
+ return 1;
+}
+
+sub _convert_to_code_block {
+ my( $self, $node ) = @_;
+ $node->parent->parent->replace_with_content->delete;
+ $node->parent->tag( "code_block" );
+}
+
+sub _envelop_children {
+ my( $self, $node, $new_child ) = @_;
+
+ my @children = $node->detach_content;
+ $node->push_content($new_child);
+ $new_child->push_content(@children);
+}
+
+# special handling for: ` _ # . [ !
+my @escapes = qw( \\ * { } _ ` );
+
+my %backslash_escapes = (
+ '\\' => [ '0923fjhtml2wikiescapedbackslash', "\\\\" ],
+ '*' => [ '0923fjhtml2wikiescapedasterisk', "\\*" ],
+ '{' => [ '0923fjhtml2wikiescapedopenbrace', "\\{" ],
+ '}' => [ '0923fjhtml2wikiescapedclosebrace', "\\}" ],
+ '_' => [ '0923fjhtml2wikiescapedunderscore', "\\_" ],
+ '`' => [ '0923fjhtml2wikiescapedbacktick', "\\`" ],
+);
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;
+
+ #
+ # (bug #43998)
+ # Only backslash-escape backticks that don't occur within <code>
+ # tags. Those within <code> tags are left alone and the backticks to
+ # signal a <code> tag get upgraded to a double-backtick by
+ # _code_delim().
+ #
+ # (bug #43993)
+ # Likewise, only backslash-escape underscores that occur outside
+ # <code> tags.
+ #
+
+ my $inside_code = $node->look_up( _tag => 'code' ) || $node->look_up( _tag => 'code_block' );
+
+ if( not $inside_code ) {
+ my $escapes = join '', @escapes;
+ $text =~ s/([\Q$escapes\E])/$backslash_escapes{$1}->[0]/g;
+ $text =~ s/^([\d]+)\./$1\\./;
+ $text =~ s/^\#/\\#/;
+ $text =~ s/\!\[/\\![/g;
+ $text =~ s/\]\[/]\\[/g;
+
+ $node->attr( text => $text );
+ }
+}
+
+# bug #43998
+sub _code_delim {
+ my( $self, $node, $rules ) = @_;
+ my $contents = $self->get_elem_contents($node);
+ return $contents =~ /\`/ ? '``' : '`';
+}
+
+# bug #43996
+sub _decode_entities_in_code {
+ my( $self, $node ) = @_;
+ my $text = $node->attr('text') || '';
+ return unless $text;
+
+ HTML::Entities::_decode_entities( $text, { 'amp' => '&', 'lt' => '<', 'gt' => '>' } );
$node->attr( text => $text );
}
sub postprocess_output {
my( $self, $outref ) = @_;
+ $$outref =~ s/\Q$code_block_prefix\E/ /gm;
+ $self->_unescape_text($outref);
$self->_add_references($outref);
+}
+
+sub _unescape_text {
+ my( $self, $outref ) = @_;
+ foreach my $escape ( values %backslash_escapes ) {
+ $$outref =~ s/$escape->[0]/$escape->[1]/g;
+ }
}
sub _add_references {
More information about the Pkg-perl-cvs-commits
mailing list