summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGervase Markham <gerv@mozilla.org>2017-02-26 03:54:49 +0100
committerDylan William Hardison <dylan@hardison.net>2017-02-26 04:14:56 +0100
commitd045206593953ebfeb22858baa25e8c2fe565e33 (patch)
treee728b094024a8cba884b22db30e45d037a8b03b7
parent4480c8ca91365aa60c60f371a6cc2fd3f22a1ff1 (diff)
downloadbugzilla-d045206593953ebfeb22858baa25e8c2fe565e33.tar.gz
bugzilla-d045206593953ebfeb22858baa25e8c2fe565e33.tar.xz
Bug 1174341 - only treat emphasis markdown based on spaces
-rw-r--r--Bugzilla/Markdown.pm16
-rw-r--r--t/100markdown.t34
-rw-r--r--t/markdown/embedded-blockquote.md9
-rw-r--r--t/markdown/embedded-underscore.md19
4 files changed, 57 insertions, 21 deletions
diff --git a/Bugzilla/Markdown.pm b/Bugzilla/Markdown.pm
index 72e788fd0..b7d7b4393 100644
--- a/Bugzilla/Markdown.pm
+++ b/Bugzilla/Markdown.pm
@@ -350,38 +350,38 @@ sub _DoItalicsAndBold {
$text =~ s{ ^\* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx;
# <strong> must go first:
- $text =~ s{ ( (?<=\W) __ (?=\S) (.+?[*_]*) (?<=\S) __ (?!\S) ) }
+ $text =~ s{ ( (?<=\s) __ (?=\S) (.+?[*_]*) (?<=\S) __ (?!\S) ) }
{
my $result = _has_multiple_underscores($2) ? $1 : "<strong>$2</strong>";
$result;
}gsxe;
- $text =~ s{ (?<=\W) \*\* (?=\S) (.+?[*_]*) (?<=\S) \*\* }{<strong>$1</strong>}gsx;
+ $text =~ s{ (?<=\s) \*\* (?=\S) (.+?[*_]*) (?<=\S) \*\* }{<strong>$1</strong>}gsx;
- $text =~ s{ ( (?<=\W) _ (?=\S) (.+?) (?<=\S) _ (?!\S) ) }
+ $text =~ s{ ( (?<=\s) _ (?=\S) (.+?) (?<=\S) _ (?!\S) ) }
{
my $result = _has_multiple_underscores($2) ? $1 : "<em>$2</em>";
$result;
}gsxe;
- $text =~ s{ (?<=\W) \* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx;
+ $text =~ s{ (?<=\s) \* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx;
# And now, a second pass to catch nested strong and emphasis special cases
- $text =~ s{ ( (?<=\W) __ (?=\S) (.+?[*_]*) (?<=\S) __ (\S*) ) }
+ $text =~ s{ ( (?<=\s) __ (?=\S) (.+?[*_]*) (?<=\S) __ (\S*) ) }
{
my $result = _has_multiple_underscores($3) ? $1 : "<strong>$2</strong>$3";
$result;
}gsxe;
- $text =~ s{ (?<=\W) \*\* (?=\S) (.+?[*_]*) (?<=\S) \*\* }{<strong>$1</strong>}gsx;
- $text =~ s{ ( (?<=\W) _ (?=\S) (.+?) (?<=\S) _ (\S*) ) }
+ $text =~ s{ (?<=\s) \*\* (?=\S) (.+?[*_]*) (?<=\S) \*\* }{<strong>$1</strong>}gsx;
+ $text =~ s{ ( (?<=\s) _ (?=\S) (.+?) (?<=\S) _ (\S*) ) }
{
my $result = _has_multiple_underscores($3) ? $1 : "<em>$2</em>$3";
$result;
}gsxe;
- $text =~ s{ (?<=\W) \* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx;
+ $text =~ s{ (?<=\s) \* (?=\S) (.+?) (?<=\S) \* }{<em>$1</em>}gsx;
return $text;
}
diff --git a/t/100markdown.t b/t/100markdown.t
index 70dece55f..217912bf9 100644
--- a/t/100markdown.t
+++ b/t/100markdown.t
@@ -12,7 +12,8 @@ use strict;
use warnings;
use lib qw(. lib local/lib/perl5 t);
-use Test2::Bundle::Extended;
+use Test2::Tools::Mock;
+use Test::More;
use Bugzilla::Util;
BEGIN {
my $terms = {
@@ -45,6 +46,8 @@ use Bugzilla::Bug;
use Bugzilla::Comment;
use Bugzilla::User;
use Bugzilla::Markdown;
+use Bugzilla::Util;
+use File::Basename;
Bugzilla->usage_mode(USAGE_MODE_TEST);
Bugzilla->error_mode(ERROR_MODE_DIE);
@@ -71,19 +74,24 @@ my $comment = Bugzilla::Comment->new(already_wrapped => 0);
Bugzilla->set_user($user);
-my $markdown_text = <<MARKDOWN;
-```
-this is a block
-> with an embedded blockquote
-```
-MARKDOWN
+my @testfiles = glob("t/markdown/*.md");
-my $markdown = Bugzilla::Markdown->new();
+plan(tests => scalar(@testfiles) + 1);
+my $markdown = Bugzilla::Markdown->new();
ok($markdown, "got a new markdown object");
-my $markdown_html = $markdown->markdown($markdown_text, $bug, $comment);
-is("<pre><code>this is a block\n"
- . "&gt; with an embedded blockquote</code></pre>\n",
- $markdown_html, "code block with embedded block quote");
-done_testing;
+foreach my $testfile (@testfiles) {
+ my $data = read_text($testfile);
+
+ my ($markdown_text, $expected_html) = split(/---/, $data);
+ $markdown_text = trim($markdown_text);
+ $expected_html = trim($expected_html);
+
+ my $actual_html = $markdown->markdown($markdown_text, $bug, $comment);
+ $actual_html = trim($actual_html);
+
+ is($actual_html, $expected_html, basename($testfile));
+}
+
+done_testing();
diff --git a/t/markdown/embedded-blockquote.md b/t/markdown/embedded-blockquote.md
new file mode 100644
index 000000000..6c34434e9
--- /dev/null
+++ b/t/markdown/embedded-blockquote.md
@@ -0,0 +1,9 @@
+```
+this is a block
+> with an embedded blockquote
+```
+
+---
+
+<pre><code>this is a block
+&gt; with an embedded blockquote</code></pre>
diff --git a/t/markdown/embedded-underscore.md b/t/markdown/embedded-underscore.md
new file mode 100644
index 000000000..15093cccf
--- /dev/null
+++ b/t/markdown/embedded-underscore.md
@@ -0,0 +1,19 @@
+<lib>_foo_bar.c
+<lib>_foo_bar_baz.c
+<prefix>_bar.c and <prefix>_bif.c
+hello_bar.c and there_bif.c
+
+var this__is_a_variable__ = "";
+
+__this is not__
+
+---
+
+<p>&lt;lib&gt;_foo_bar.c<br>
+&lt;lib&gt;_foo_bar_baz.c<br>
+&lt;prefix&gt;_bar.c and &lt;prefix&gt;_bif.c<br>
+hello_bar.c and there_bif.c</p>
+
+<p>var this__is_a_variable__ = &quot;&quot;;</p>
+
+<p><strong>this is not</strong></p>