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);
}
}