diff --git a/README.md b/README.md index bfb55f3..dc7ef37 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,12 @@ Usage ```javascript var Remarkable = require('remarkable')(); -var md = new Remarkable(/* options */); +var md = new Remarkable({ + html: false, + xhtml: false, + breaks: true, + langprefix: 'language-' +}); console.log(md.parse('# Remarkable rulezz!')); //=>

# Remarkable rulezz!

@@ -47,13 +52,10 @@ var Remarkable = require('remarkable'); var md = new Remarkable(); md.set({ - gfm: true, - tables: true, - breaks: false, - pedantic: false, - sanitize: true, - smartLists: true, - smartypants: false + html: false, + xhtml: false, + breaks: true, + langprefix: 'language-' }); ``` diff --git a/lib/defaults.js b/lib/defaults.js index ac6c61a..226635d 100644 --- a/lib/defaults.js +++ b/lib/defaults.js @@ -4,10 +4,8 @@ module.exports = { - blocksep: '\n', - innersep: '\n', - softbreak: '\n', html: false, xhtml: false, + breaks: true, langprefix: 'language-' }; diff --git a/lib/lexer_inline/newline.js b/lib/lexer_inline/newline.js index 57d1639..c20b571 100644 --- a/lib/lexer_inline/newline.js +++ b/lib/lexer_inline/newline.js @@ -9,30 +9,31 @@ module.exports = function escape(state) { max = state.posMax; // ' \n' -> hardbreak - if (pmax >= 1 && - state.pending.charCodeAt(pmax) === 0x20 && - state.pending.charCodeAt(pmax - 1) === 0x20) { - state.pending = state.pending.replace(/ +$/, ''); + // Lookup in pending chars is bad practice! Don't copy to other rules! + // Pending string is stored in concat mode, indexed lookups will cause + // convertion to flat mode. + if (pmax >= 0 && state.pending.charCodeAt(pmax) === 0x20) { + if (pmax >= 1 && state.pending.charCodeAt(pmax - 1) === 0x20) { + state.pending = state.pending.replace(/ +$/, ''); + state.push({ + type: 'hardbreak' + }); + } else { + state.pending = state.pending.slice(0, -1); + state.push({ + type: 'softbreak' + }); + } + + } else { state.push({ - type: 'hardbreak' + type: 'softbreak' }); - - pos++; - // skip spaces - while (pos < max && state.src.charCodeAt(pos) === 0x20) { pos++; } - - state.pos = pos; - return true; - } - - if (pmax > 0 && state.pending.charCodeAt(pmax) === 0x20) { - state.pending = state.pending.replace(/ +$/, ''); } - state.pending += '\n'; - pos++; - // skip spaces + + // skip heading spaces for next line while (pos < max && state.src.charCodeAt(pos) === 0x20) { pos++; } state.pos = pos; diff --git a/lib/renderer.js b/lib/renderer.js index cf6c85b..904097a 100644 --- a/lib/renderer.js +++ b/lib/renderer.js @@ -154,7 +154,10 @@ rules.em_close = function(/*tokens, idx, options*/) { rules.hardbreak = function (tokens, idx, options) { - return (options.xhtml ? '
' : '
') + '\n'; + return options.xhtml ? '
\n' : '
\n'; +}; +rules.softbreak = function (tokens, idx, options) { + return options.breaks ? (options.xhtml ? '
\n' : '
\n') : '\n'; }; diff --git a/test/remarkable.js b/test/remarkable.js index 643df9e..3f562ad 100644 --- a/test/remarkable.js +++ b/test/remarkable.js @@ -11,6 +11,7 @@ var Remarked = require('../'); describe('Default', function () { var md = new Remarked({ + breaks: false, langprefix: '' }); diff --git a/test/remarked.js b/test/remarked.js index 5f87648..d62f812 100644 --- a/test/remarked.js +++ b/test/remarked.js @@ -14,6 +14,7 @@ describe('remarked', function () { // Set options, to give output more close to remarked md.set({ + breaks: false, langprefix: 'lang-' }); diff --git a/test/stmd.js b/test/stmd.js index 4528fb6..c4c759d 100644 --- a/test/stmd.js +++ b/test/stmd.js @@ -13,6 +13,7 @@ describe('stmd', function () { var md = new Remarked({ html: true, xhtml: true, + breaks: false, langprefix: 'language-' });