mirror of
https://github.com/showdownjs/showdown.git
synced 2024-03-22 13:30:55 +08:00
fix(italicsAndBold): fix double emphasis edge case
This commit is contained in:
parent
ab54933b16
commit
1832b7f721
BIN
dist/showdown.js
vendored
BIN
dist/showdown.js
vendored
Binary file not shown.
BIN
dist/showdown.js.map
vendored
BIN
dist/showdown.js.map
vendored
Binary file not shown.
BIN
dist/showdown.min.js
vendored
BIN
dist/showdown.min.js
vendored
Binary file not shown.
BIN
dist/showdown.min.js.map
vendored
BIN
dist/showdown.min.js.map
vendored
Binary file not shown.
|
@ -3,30 +3,36 @@ showdown.subParser('italicsAndBold', function (text, options, globals) {
|
|||
|
||||
text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);
|
||||
|
||||
// it's faster to have 2 separate regexes for each case than have just one
|
||||
// it's faster to have 3 separate regexes for each case than have just one
|
||||
// because of backtracing, in some cases, it could lead to an exponential effect
|
||||
// called "catastrophic backtrace". Ominous!
|
||||
|
||||
// Parse underscores
|
||||
if (options.literalMidWordUnderscores) {
|
||||
text = text.replace(/\b__(\S[\s\S]*?)__\b/gm, '<strong>$1</strong>');
|
||||
text = text.replace(/\b_(\S[\s\S]*?)_\b/gm, '<em>$1</em>');
|
||||
text = text.replace(/\b___(\S[\s\S]*)___\b/g, '<strong><em>$1</em></strong>');
|
||||
text = text.replace(/\b__(\S[\s\S]*)__\b/g, '<strong>$1</strong>');
|
||||
text = text.replace(/\b_(\S[\s\S]*?)_\b/g, '<em>$1</em>');
|
||||
} else {
|
||||
text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
|
||||
return (/\S$/.test(m)) ? '<strong><em>' + m + '</em></strong>' : wm;
|
||||
});
|
||||
text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
|
||||
return (/\S$/.test(m)) ? '<strong>' + m + '</strong>' : wm;
|
||||
});
|
||||
text = text.replace(/_(\S[\s\S]*?)_/g, function (wm, m) {
|
||||
text = text.replace(/_([^\s_][\s\S]*?)_/g, function (wm, m) {
|
||||
// !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)
|
||||
return (/\S$/.test(m)) ? '<em>' + m + '</em>' : wm;
|
||||
});
|
||||
}
|
||||
|
||||
// Now parse asterisks
|
||||
text = text.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g, function (wm, m) {
|
||||
return (/\S$/.test(m)) ? '<strong><em>' + m + '</em></strong>' : wm;
|
||||
});
|
||||
text = text.replace(/\*\*(\S[\s\S]*?)\*\*/g, function (wm, m) {
|
||||
return (/\S$/.test(m)) ? '<strong>' + m + '</strong>' : wm;
|
||||
});
|
||||
|
||||
text = text.replace(/\*(\S[\s\S]*?)\*/g, function (wm, m) {
|
||||
text = text.replace(/\*([^\s*][\s\S]*?)\*/g, function (wm, m) {
|
||||
// !/^\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)
|
||||
return (/\S$/.test(m)) ? '<em>' + m + '</em>' : wm;
|
||||
});
|
||||
|
|
4
test/cases/double-emphasis.html
Normal file
4
test/cases/double-emphasis.html
Normal file
|
@ -0,0 +1,4 @@
|
|||
<p>a <strong><em>strong and em</em></strong> thingy</p>
|
||||
<p>bar<strong><em>bazinga</em></strong>bar</p>
|
||||
<p>a <strong><em>strong and em</em></strong> thingy</p>
|
||||
<p>bar<strong><em>bazinga</em></strong>bar</p>
|
7
test/cases/double-emphasis.md
Normal file
7
test/cases/double-emphasis.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
a ___strong and em___ thingy
|
||||
|
||||
bar___bazinga___bar
|
||||
|
||||
a ***strong and em*** thingy
|
||||
|
||||
bar***bazinga***bar
|
|
@ -1,11 +1,15 @@
|
|||
<p>foo *bar *baz</p>
|
||||
<p>foo **bar **baz</p>
|
||||
<p>foo ***bar ***baz</p>
|
||||
<p>foo _bar _baz</p>
|
||||
<p>foo __bar __baz</p>
|
||||
<p>foo ___bar ___baz</p>
|
||||
<p>foo *bar *baz *bazinga</p>
|
||||
<p>foo **bar **baz **bazinga</p>
|
||||
<p>foo ***bar ***baz ***bazinga</p>
|
||||
<p>foo _bar _baz __bazinga</p>
|
||||
<p>foo __bar __baz __bazinga</p>
|
||||
<p>foo ___bar ___baz ___bazinga</p>
|
||||
<p><em>f</em></p>
|
||||
<p><strong>f</strong></p>
|
||||
<p><em>f</em></p>
|
||||
|
|
|
@ -2,18 +2,26 @@ foo *bar *baz
|
|||
|
||||
foo **bar **baz
|
||||
|
||||
foo ***bar ***baz
|
||||
|
||||
foo _bar _baz
|
||||
|
||||
foo __bar __baz
|
||||
|
||||
foo ___bar ___baz
|
||||
|
||||
foo *bar *baz *bazinga
|
||||
|
||||
foo **bar **baz **bazinga
|
||||
|
||||
foo ***bar ***baz ***bazinga
|
||||
|
||||
foo _bar _baz __bazinga
|
||||
|
||||
foo __bar __baz __bazinga
|
||||
|
||||
foo ___bar ___baz ___bazinga
|
||||
|
||||
*f*
|
||||
|
||||
**f**
|
||||
|
|
Loading…
Reference in New Issue
Block a user