Vitaly Puzrin
10 years ago
7 changed files with 228 additions and 3 deletions
@ -0,0 +1,43 @@ |
|||||
|
// Remarkable default options
|
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
|
||||
|
module.exports = { |
||||
|
options: { |
||||
|
html: false, // Enable html tags in source
|
||||
|
xhtmlOut: false, // Use '/' to close single tags (<br />)
|
||||
|
breaks: false, // Convert '\n' in paragraphs into <br>
|
||||
|
langPrefix: 'language-', // CSS language prefix for fenced blocks
|
||||
|
linkify: false, // autoconvert url-like texts to links
|
||||
|
typographer: false, // Enable smartypants and other sweet transforms
|
||||
|
|
||||
|
// Highlighter function. Should return escaped html,
|
||||
|
// or '' if input not changed
|
||||
|
highlight: function (/*str, , lang*/) { return ''; }, |
||||
|
|
||||
|
maxNesting: 20 // Internal protection, recursion limit
|
||||
|
}, |
||||
|
|
||||
|
components: { |
||||
|
|
||||
|
// Don't restrict block/inline rules
|
||||
|
block: {}, |
||||
|
inline: {}, |
||||
|
|
||||
|
typographer: { |
||||
|
options: { |
||||
|
singleQuotes: '‘’', // set empty to disable
|
||||
|
doubleQuotes: '“”', // set '«»' for russian, '„“' for deutch, empty to disable
|
||||
|
copyright: true, // (c) (C) → ©
|
||||
|
trademark: true, // (tm) (TM) → ™
|
||||
|
registered: true, // (r) (R) → ®
|
||||
|
plusminus: true, // +- → ±
|
||||
|
paragraph: true, // (p) (P) → §
|
||||
|
ellipsis: true, // ... → …
|
||||
|
dupes: true, // ???????? → ???, !!!!! → !!!, `,,` → `,`
|
||||
|
dashes: true // -- → —
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}; |
@ -0,0 +1,78 @@ |
|||||
|
// Process ++inserted text++
|
||||
|
|
||||
|
'use strict'; |
||||
|
|
||||
|
module.exports = function ins(state, silent) { |
||||
|
var found, |
||||
|
pos, |
||||
|
max = state.posMax, |
||||
|
start = state.pos, |
||||
|
lastChar, |
||||
|
nextChar; |
||||
|
|
||||
|
if (state.src.charCodeAt(start) !== 0x2B/* + */) { return false; } |
||||
|
if (start + 4 >= max) { return false; } |
||||
|
if (state.src.charCodeAt(start + 1) !== 0x2B/* + */) { return false; } |
||||
|
|
||||
|
// make ins lower a priority tag with respect to links, same as <em>;
|
||||
|
// this code also prevents recursion
|
||||
|
if (silent && state.isInLabel) { return false; } |
||||
|
|
||||
|
if (state.level >= state.options.maxNesting) { return false; } |
||||
|
|
||||
|
lastChar = start > 0 ? state.src.charCodeAt(start - 1) : -1; |
||||
|
nextChar = state.src.charCodeAt(start + 2); |
||||
|
|
||||
|
if (lastChar === 0x2B/* + */) { return false; } |
||||
|
if (nextChar === 0x2B/* + */) { return false; } |
||||
|
if (nextChar === 0x20 || nextChar === 0x0A) { return false; } |
||||
|
|
||||
|
pos = start + 2; |
||||
|
while (pos < max && state.src.charCodeAt(pos) === 0x2B/* + */) { pos++; } |
||||
|
if (pos !== start + 2) { |
||||
|
// sequence of 3+ markers taking as literal, same as in a emphasis
|
||||
|
state.pos += pos - start; |
||||
|
if (!silent) { state.pending += state.src.slice(start, pos); } |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
state.pos = start + 2; |
||||
|
|
||||
|
while (state.pos + 1 < max) { |
||||
|
if (state.src.charCodeAt(state.pos) === 0x2B/* + */) { |
||||
|
if (state.src.charCodeAt(state.pos + 1) === 0x2B/* + */) { |
||||
|
lastChar = state.src.charCodeAt(state.pos - 1); |
||||
|
nextChar = state.pos + 2 < max ? state.src.charCodeAt(state.pos + 2) : -1; |
||||
|
if (nextChar !== 0x2B/* + */ && lastChar !== 0x2B/* + */) { |
||||
|
if (lastChar !== 0x20 && lastChar !== 0x0A) { |
||||
|
// closing '++'
|
||||
|
found = true; |
||||
|
break; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
state.parser.skipToken(state); |
||||
|
} |
||||
|
|
||||
|
if (!found) { |
||||
|
// parser failed to find ending tag, so it's not valid emphasis
|
||||
|
state.pos = start; |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
// found!
|
||||
|
state.posMax = state.pos; |
||||
|
state.pos = start + 2; |
||||
|
|
||||
|
if (!silent) { |
||||
|
state.push({ type: 'ins_open', level: state.level++ }); |
||||
|
state.parser.tokenize(state); |
||||
|
state.push({ type: 'ins_close', level: --state.level }); |
||||
|
} |
||||
|
|
||||
|
state.pos = state.posMax + 2; |
||||
|
state.posMax = max; |
||||
|
return true; |
||||
|
}; |
@ -0,0 +1,93 @@ |
|||||
|
. |
||||
|
++Insert++ |
||||
|
. |
||||
|
<p><ins>Insert</ins></p> |
||||
|
. |
||||
|
|
||||
|
|
||||
|
These are not inserts, you have to use exactly two "++": |
||||
|
. |
||||
|
x +++foo+++ |
||||
|
|
||||
|
x ++foo+++ |
||||
|
|
||||
|
x +++foo++ |
||||
|
. |
||||
|
<p>x +++foo+++</p> |
||||
|
<p>x ++foo+++</p> |
||||
|
<p>x +++foo++</p> |
||||
|
. |
||||
|
|
||||
|
Inserts have the same priority as emphases: |
||||
|
|
||||
|
. |
||||
|
**++test**++ |
||||
|
|
||||
|
++**test++** |
||||
|
. |
||||
|
<p>**<ins>test**</ins></p> |
||||
|
<p>++<strong>test++</strong></p> |
||||
|
. |
||||
|
|
||||
|
Inserts have the same priority as emphases with respect to links: |
||||
|
. |
||||
|
[++link]()++ |
||||
|
|
||||
|
++[link++]() |
||||
|
. |
||||
|
<p><a href="">++link</a>++</p> |
||||
|
<p>++<a href="">link++</a></p> |
||||
|
. |
||||
|
|
||||
|
Inserts have the same priority as emphases with respect to backticks: |
||||
|
. |
||||
|
++`code++` |
||||
|
|
||||
|
`++code`++ |
||||
|
. |
||||
|
<p>++<code>code++</code></p> |
||||
|
<p><code>++code</code>++</p> |
||||
|
. |
||||
|
|
||||
|
Nested inserts: |
||||
|
. |
||||
|
++foo ++bar++ baz++ |
||||
|
. |
||||
|
<p><ins>foo <ins>bar</ins> baz</ins></p> |
||||
|
. |
||||
|
|
||||
|
. |
||||
|
++f **o ++o b++ a** r++ |
||||
|
. |
||||
|
<p><ins>f <strong>o <ins>o b</ins> a</strong> r</ins></p> |
||||
|
. |
||||
|
|
||||
|
Should not have a whitespace between text and "++": |
||||
|
. |
||||
|
foo ++ bar ++ baz |
||||
|
. |
||||
|
<p>foo ++ bar ++ baz</p> |
||||
|
. |
||||
|
|
||||
|
|
||||
|
Newline should be considered a whitespace: |
||||
|
|
||||
|
. |
||||
|
++test |
||||
|
++ |
||||
|
|
||||
|
++ |
||||
|
test++ |
||||
|
|
||||
|
++ |
||||
|
test |
||||
|
++ |
||||
|
. |
||||
|
<p>++test |
||||
|
++</p> |
||||
|
<p>++ |
||||
|
test++</p> |
||||
|
<p>++ |
||||
|
test |
||||
|
++</p> |
||||
|
. |
Loading…
Reference in new issue