44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
|
// Parse backticks
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
module.exports = function backtick(state, silent) {
|
||
|
var start, max, marker, matchStart, matchEnd, token,
|
||
|
pos = state.pos,
|
||
|
ch = state.src.charCodeAt(pos);
|
||
|
|
||
|
if (ch !== 0x60/* ` */) { return false; }
|
||
|
|
||
|
start = pos;
|
||
|
pos++;
|
||
|
max = state.posMax;
|
||
|
|
||
|
while (pos < max && state.src.charCodeAt(pos) === 0x60/* ` */) { pos++; }
|
||
|
|
||
|
marker = state.src.slice(start, pos);
|
||
|
|
||
|
matchStart = matchEnd = pos;
|
||
|
|
||
|
while ((matchStart = state.src.indexOf('`', matchEnd)) !== -1) {
|
||
|
matchEnd = matchStart + 1;
|
||
|
|
||
|
while (matchEnd < max && state.src.charCodeAt(matchEnd) === 0x60/* ` */) { matchEnd++; }
|
||
|
|
||
|
if (matchEnd - matchStart === marker.length) {
|
||
|
if (!silent) {
|
||
|
token = state.push('code_inline', 'code', 0);
|
||
|
token.markup = marker;
|
||
|
token.content = state.src.slice(pos, matchStart)
|
||
|
.replace(/\n/g, ' ')
|
||
|
.replace(/^ (.+) $/, '$1');
|
||
|
}
|
||
|
state.pos = matchEnd;
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!silent) { state.pending += marker; }
|
||
|
state.pos += marker.length;
|
||
|
return true;
|
||
|
};
|