Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Plugins/Litedown/Parser/Passes/InlineCode.js
function parse()
{
var markers = getInlineCodeMarkers(),
i       = -1,
cnt     = markers.length;
while (++i < (cnt - 1))
{
var pos = markers[i].next,
j   = i;
if (text[markers[i].pos] !== '`')
{
// Adjust the left marker if its first backtick was escaped
++markers[i].pos;
--markers[i].len;
}
while (++j < cnt && markers[j].pos === pos)
{
if (markers[j].len === markers[i].len)
{
addInlineCodeTags(markers[i], markers[j]);
i = j;
break;
}
pos = markers[j].next;
}
}
}

/**
* Add the tag pair for an inline code span
*
* @param {!Object} left  Left marker
* @param {!Object} right Right marker
*/
function addInlineCodeTags(left, right)
{
var startPos = left.pos,
startLen = left.len + left.trimAfter,
endPos   = right.pos - right.trimBefore,
endLen   = right.len + right.trimBefore;
addTagPair('C', startPos, startLen, endPos, endLen);
overwrite(startPos, endPos + endLen - startPos);
}


/**
* Capture and return inline code markers
*
* @return {!Array<!Object>}
*/
function getInlineCodeMarkers()
{
var pos = text.indexOf('`');
if (pos < 0)
{
return [];
}

var regexp   = /(`+)(\s*)[^\x17`]*/g,
trimNext = 0,
markers  = [],
_text    = text.replace(/\x1BD/g, '\\`'),
m;
regexp.lastIndex = pos;
while (m = regexp.exec(_text))
{
markers.push({
pos        : m.index,
len        : m[1].length,
trimBefore : trimNext,
trimAfter  : m[2].length,
next       : m.index + m[0].length
});
trimNext = m[0].length - m[0].replace(/\s+$/, '').length;
}

return markers;
}