mirror of
https://github.com/showdownjs/showdown.git
synced 2024-03-22 13:30:55 +08:00
feat(backslashEscapesHTMLTags): backslash escapes HTML tags
Add support for HTML tag escaping with backslash Closes #374
This commit is contained in:
parent
4109aae068
commit
5a5aff6721
|
@ -198,7 +198,7 @@ var defaultOptions = showdown.getDefaultOptions();
|
|||
|
||||
* **noHeaderId**: (boolean) [default false] Disable the automatic generation of header ids. Setting to true overrides **prefixHeaderId**
|
||||
|
||||
* **customizedHeaderId**: (boolean) [default false] Use text in curly braces as header id.
|
||||
* **customizedHeaderId**: (boolean) [default false] Use text in curly braces as header id. (since v1.7.0)
|
||||
Example:
|
||||
```
|
||||
## Sample header {real-id} will use real-id as id
|
||||
|
@ -328,7 +328,9 @@ var defaultOptions = showdown.getDefaultOptions();
|
|||
|
||||
NOTE: Prior to version 1.6.1, emails would always be obfuscated through dec and hex encoding.
|
||||
|
||||
* **openLinksInNewWindow**: (boolean) [default false] Open all links in new windows (by adding the attribute `target="_blank"` to `<a>` tags)
|
||||
* **openLinksInNewWindow**: (boolean) [default false] Open all links in new windows (by adding the attribute `target="_blank"` to `<a>` tags) (since v1.7.0)
|
||||
|
||||
* **backslashEscapesHTMLTags**: (boolean) [default false] Support for HTML Tag escaping. ex: `\<div>foo\</div>` (since v1.7.2)
|
||||
|
||||
**NOTE**: Please note that until version 1.6.0, all of these options are ***DISABLED*** by default in the cli tool.
|
||||
|
||||
|
|
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.
|
@ -125,6 +125,11 @@ function getDefaultOpts (simple) {
|
|||
defaultValue: false,
|
||||
description: 'Open all links in new windows',
|
||||
type: 'boolean'
|
||||
},
|
||||
backslashEscapesHTMLTags: {
|
||||
defaultValue: false,
|
||||
description: 'Support for HTML Tag escaping. ex: \<div>foo\</div>',
|
||||
type: 'boolean'
|
||||
}
|
||||
};
|
||||
if (simple === false) {
|
||||
|
|
|
@ -48,14 +48,26 @@ showdown.subParser('hashHTMLBlocks', function (text, options, globals) {
|
|||
return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
|
||||
};
|
||||
|
||||
if (options.backslashEscapesHTMLTags) {
|
||||
// encode backslash escaped HTML tags
|
||||
text = text.replace(/\\<(\/?[^>]+?)>/g, function (wm, inside) {
|
||||
return '<' + inside + '>';
|
||||
});
|
||||
}
|
||||
|
||||
// hash HTML Blocks
|
||||
for (var i = 0; i < blockTags.length; ++i) {
|
||||
|
||||
var opTagPos,
|
||||
rgx1 = new RegExp('^ {0,3}<' + blockTags[i] + '\\b[^>]*>', 'im'),
|
||||
rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\b[^>]*>)', 'im'),
|
||||
patLeft = '<' + blockTags[i] + '\\b[^>]*>',
|
||||
patRight = '</' + blockTags[i] + '>';
|
||||
// 1. Look for the first position of the first opening HTML tag in the text
|
||||
while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {
|
||||
|
||||
// if the HTML tag is \ escaped, we need to escape it and break
|
||||
|
||||
|
||||
//2. Split the text in that position
|
||||
var subTexts = showdown.helper.splitAtIndex(text, opTagPos),
|
||||
//3. Match recursively
|
||||
|
|
1
test/features/#374.escape-html-tags.html
Normal file
1
test/features/#374.escape-html-tags.html
Normal file
|
@ -0,0 +1 @@
|
|||
<p><div>foo</div></p>
|
1
test/features/#374.escape-html-tags.md
Normal file
1
test/features/#374.escape-html-tags.md
Normal file
|
@ -0,0 +1 @@
|
|||
\<div>foo\</div>
|
|
@ -80,6 +80,8 @@ describe('makeHtml() features testsuite', function () {
|
|||
converter = new showdown.Converter({customizedHeaderId: true});
|
||||
} else if (testsuite[i].name === '#378.simplifiedAutoLinks-with-excludeTrailingPunctuationFromURLs') {
|
||||
converter = new showdown.Converter({simplifiedAutoLink: true, excludeTrailingPunctuationFromURLs: true});
|
||||
} else if (testsuite[i].name === '#374.escape-html-tags') {
|
||||
converter = new showdown.Converter({backslashEscapesHTMLTags: true});
|
||||
} else if (testsuite[i].name === '#379.openLinksInNewWindow-breaks-em-markdup') {
|
||||
converter = new showdown.Converter({openLinksInNewWindow: true});
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue
Block a user