diff --git a/Gruntfile.js b/Gruntfile.js
index 10f0729..1a69f73 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -89,7 +89,7 @@ module.exports = function (grunt) {
options: {
globals: ['should'],
timeout: 3000,
- ignoreLeaks: false,
+ ignoreLeaks: true,
reporter: 'spec'
}
},
diff --git a/dist/showdown.js b/dist/showdown.js
index c5ac6da..b31b2b2 100644
Binary files a/dist/showdown.js and b/dist/showdown.js differ
diff --git a/dist/showdown.js.map b/dist/showdown.js.map
index 2554dfa..87161c3 100644
Binary files a/dist/showdown.js.map and b/dist/showdown.js.map differ
diff --git a/dist/showdown.min.js b/dist/showdown.min.js
index 3ff6774..f33c91d 100644
Binary files a/dist/showdown.min.js and b/dist/showdown.min.js differ
diff --git a/dist/showdown.min.js.map b/dist/showdown.min.js.map
index f17eed5..4172a5f 100644
Binary files a/dist/showdown.min.js.map and b/dist/showdown.min.js.map differ
diff --git a/src/subParsers/codeSpans.js b/src/subParsers/codeSpans.js
index 639ffa8..b0ec1dd 100644
--- a/src/subParsers/codeSpans.js
+++ b/src/subParsers/codeSpans.js
@@ -26,6 +26,14 @@
showdown.subParser('codeSpans', function (text) {
'use strict';
+ //special case -> literal html code tag
+ text = text.replace(/(<]*?>)([^]*?)<\/code>/g, function (wholeMatch, tag, c) {
+ c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
+ c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
+ c = showdown.subParser('encodeCode')(c);
+ return tag + c + '
';
+ });
+
/*
text = text.replace(/
(^|[^\\]) // Character before opening ` can't be a backslash
@@ -38,15 +46,15 @@ showdown.subParser('codeSpans', function (text) {
(?!`)
/gm, function(){...});
*/
-
- text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, function (wholeMatch, m1, m2, m3) {
- var c = m3;
- c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
- c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
- c = showdown.subParser('encodeCode')(c);
- return m1 + '' + c + '
';
- });
+ text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
+ function (wholeMatch, m1, m2, m3) {
+ var c = m3;
+ c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
+ c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
+ c = showdown.subParser('encodeCode')(c);
+ return m1 + '' + c + '
';
+ }
+ );
return text;
-
});
diff --git a/src/subParsers/images.js b/src/subParsers/images.js
index 0dc6b04..8dde87b 100644
--- a/src/subParsers/images.js
+++ b/src/subParsers/images.js
@@ -41,6 +41,7 @@ showdown.subParser('images', function (text, options, globals) {
}
altText = altText.replace(/"/g, '"');
+ altText = showdown.helper.escapeCharacters(altText, '*_', false);
url = showdown.helper.escapeCharacters(url, '*_', false);
var result = '$2');
- text = text.replace(/(^|\s)_(?=\S)([^]+?)_(?=\s|$)/gm, '$1$2');
+ text = text.replace(/(^|\s|>|\b)__(?=\S)([^]+?)__(?=\b|<|\s|$)/gm, '$1$2');
+ text = text.replace(/(^|\s|>|\b)_(?=\S)([^]+?)_(?=\b|<|\s|$)/gm, '$1$2');
//asterisks
text = text.replace(/\*\*(?=\S)([^]+?)\*\*/g, '$1');
text = text.replace(/\*(?=\S)([^]+?)\*/g, '$1');
diff --git a/test/bootstrap.js b/test/bootstrap.js
index a969f71..fc9b11d 100644
--- a/test/bootstrap.js
+++ b/test/bootstrap.js
@@ -82,8 +82,8 @@
testCase.actual = beautify(testCase.actual, beauOptions);
// Normalize line returns
- testCase.expected = testCase.expected.replace(/(\r\n)|\n|\r/g, os.EOL);
- testCase.actual = testCase.actual.replace(/(\r\n)|\n|\r/g, os.EOL);
+ testCase.expected = testCase.expected.replace(/(\r\n)|\n|\r/g, '\n');
+ testCase.actual = testCase.actual.replace(/(\r\n)|\n|\r/g, '\n');
return testCase;
}
diff --git a/test/features/autolink_and_disallow_underscores.html b/test/features/autolink_and_disallow_underscores.html
new file mode 100644
index 0000000..69efe76
--- /dev/null
+++ b/test/features/autolink_and_disallow_underscores.html
@@ -0,0 +1 @@
+
http://en.wikipedia.org/wiki/Tourism_in_Germany
\ No newline at end of file diff --git a/test/features/autolink_and_disallow_underscores.md b/test/features/autolink_and_disallow_underscores.md new file mode 100644 index 0000000..799cdcf --- /dev/null +++ b/test/features/autolink_and_disallow_underscores.md @@ -0,0 +1 @@ +http://en.wikipedia.org/wiki/Tourism_in_Germany \ No newline at end of file diff --git a/test/ghost/markdown-magic.html b/test/ghost/markdown-magic.html new file mode 100644 index 0000000..d7e74e5 --- /dev/null +++ b/test/ghost/markdown-magic.html @@ -0,0 +1,40 @@ +https://ghost.org
+
+
+
+
+The quick brown fox[^1] jumped over the lazy dog[^2].
+
+ [^1]: Foxes are red
+ [^2]: Dogs are usually not red
+
+
+The quick brown fox[^1] jumped over the lazy dog[^2].
+ +```language-javascript
+ [...]
+ ```
+
+
+Combined with Prism.js in the Ghost theme:
+ +// # Notifications API
+// RESTful API for creating notifications
+var Promise = require('bluebird'),
+_ = require('lodash'),
+canThis = require('../permissions').canThis,
+errors = require('../errors'),
+utils = require('./utils'),
+
+// Holds the persistent notifications
+notificationsStore = [],
+// Holds the last used id
+notificationCounter = 0,
+notifications;
+
\ No newline at end of file
diff --git a/test/ghost/markdown-magic.md b/test/ghost/markdown-magic.md
new file mode 100644
index 0000000..59153db
--- /dev/null
+++ b/test/ghost/markdown-magic.md
@@ -0,0 +1,43 @@
+### Automatic Links
+
+```
+https://ghost.org
+```
+
+https://ghost.org
+
+### Markdown Footnotes
+
+```
+The quick brown fox[^1] jumped over the lazy dog[^2].
+
+[^1]: Foxes are red
+[^2]: Dogs are usually not red
+```
+
+The quick brown fox[^1] jumped over the lazy dog[^2].
+
+
+### Syntax Highlighting
+
+ ```language-javascript
+ [...]
+ ```
+
+Combined with [Prism.js](http://prismjs.com/) in the Ghost theme:
+
+```language-javascript
+// # Notifications API
+// RESTful API for creating notifications
+var Promise = require('bluebird'),
+ _ = require('lodash'),
+ canThis = require('../permissions').canThis,
+ errors = require('../errors'),
+ utils = require('./utils'),
+
+ // Holds the persistent notifications
+ notificationsStore = [],
+ // Holds the last used id
+ notificationCounter = 0,
+ notifications;
+```
\ No newline at end of file
diff --git a/test/ghost/underscore.html b/test/ghost/underscore.html
new file mode 100644
index 0000000..8520667
--- /dev/null
+++ b/test/ghost/underscore.html
@@ -0,0 +1,78 @@
+foo_bar_baz foo_bar_baz_bar_foo foo_bar baz_bar baz_foo
+ +baz_bar_foo
+ +baz_bar_foo
+ +baz_bar_foo
+ +baz bar foo baz_bar_foo foo bar baz and foo
+ +foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+ +foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+
+foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+
+foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo+ +
foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+
+
+foo_bar_baz foo_bar_baz_bar_foo foo_bar baz_bar baz_foo
+ +foo_bar_baz foo_bar_baz_bar_foo foo_bar baz_bar baz_foo
+ + + +++ +foo_bar_baz foo_bar_baz_bar_foo foo_bar baz_bar baz_foo
+
http://en.wikipedia.org/wiki/Tourism_in_Germany
+ + + +Another example of a link
+ +foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
http://myurl.com/foo_bar_baz_bar_foo
+ +http://myurl.com/foo_bar_baz_bar_foo
+ +italics.
+ +italics .
diff --git a/test/ghost/underscore.md b/test/ghost/underscore.md new file mode 100644 index 0000000..8f5de54 --- /dev/null +++ b/test/ghost/underscore.md @@ -0,0 +1,76 @@ +foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo + +_baz_bar_foo_ + +__baz_bar_foo__ + +___baz_bar_foo___ + +baz bar foo _baz_bar_foo foo bar baz_ and foo + +foo\_bar\_baz foo\_bar\_baz\_bar\_foo \_foo\_bar baz\_bar\_ baz\_foo + +`foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo` + + + foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo + + +```html +foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo +``` + +foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo+ +
foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+
+
+[foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo](http://myurl.com/foo_bar_baz_bar_foo)
+
+foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+
+
+foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+-----
+
+### foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+1. foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+2. foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+> foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+* foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+* foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+-------
+
+http://en.wikipedia.org/wiki/Tourism_in_Germany
+
+[an example] [wiki]
+
+Another [example][wiki] of a link
+
+[wiki]: http://en.wikipedia.org/wiki/Tourism_in_Germany
+
+foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo
+
+![foo_bar_baz foo_bar_baz_bar_foo _foo_bar baz_bar_ baz_foo](http://myurl.com/foo_bar_baz_bar_foo)
+
+http://myurl.com/foo_bar_baz_bar_foo
+
+