Seditio Source
Root |
./othercms/phpBB3/vendor/s9e/text-formatter/src/Plugins/Litedown/Parser/Passes/Images.js
function parse()
{
var pos = text.indexOf('![');
if (pos === -1)
{
return;
}
if (text.indexOf('](', pos) > 0)
{
parseInlineImages();
}
if (hasReferences)
{
parseReferenceImages();
}
}

/**
* Add an image tag for given text span
*
* @param {number} startPos Start tag position
* @param {number} endPos   End tag position
* @param {number} endLen   End tag length
* @param {string} linkInfo URL optionally followed by space and a title
* @param {string} alt      Value for the alt attribute
*/
function addImageTag(startPos, endPos, endLen, linkInfo, alt)
{
var tag = addTagPair('IMG', startPos, 2, endPos, endLen);
setLinkAttributes(tag, linkInfo, 'src');
tag.setAttribute('alt', decode(alt));

// Overwrite the markup
overwrite(startPos, endPos + endLen - startPos);
}

/**
* Parse inline images markup
*/
function parseInlineImages()
{
var m, regexp = /!\[(?:[^\x17[\]]|\[[^\x17[\]]*\])*\]\(( *(?:[^\x17\s()]|\([^\x17\s()]*\))*(?=[ )]) *(?:"[^\x17]*?"|'[^\x17]*?'|\([^\x17)]*\))? *)\)/g;
while (m = regexp.exec(text))
{
var linkInfo = m[1],
startPos = m.index,
endLen   = 3 + linkInfo.length,
endPos   = startPos + m[0].length - endLen,
alt      = m[0].substring(2, m[0].length - endLen);

addImageTag(startPos, endPos, endLen, linkInfo, alt);
}
}

/**
* Parse reference images markup
*/
function parseReferenceImages()
{
var m, regexp = /!\[((?:[^\x17[\]]|\[[^\x17[\]]*\])*)\](?: ?\[([^\x17[\]]+)\])?/g;
while (m = regexp.exec(text))
{
var startPos = m.index,
endPos   = startPos + 2 + m[1].length,
endLen   = 1,
alt      = m[1],
id       = alt;

if (m[2] > '' && linkReferences[m[2]])
{
endLen = m[0].length - alt.length - 2;
id     = m[2];
}
else if (!linkReferences[id])
{
continue;
}

addImageTag(startPos, endPos, endLen, linkReferences[id], alt);
}
}