{"version":3,"file":"image.mjs","sources":["../../../../../../node_modules/markdown-it/lib/rules_inline/image.mjs"],"sourcesContent":["// Process ![image](<src> \"title\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function image (state, silent) {\n  let code, content, label, pos, ref, res, title, start\n  let href = ''\n  const oldPos = state.pos\n  const max = state.posMax\n\n  if (state.src.charCodeAt(state.pos) !== 0x21/* ! */) { return false }\n  if (state.src.charCodeAt(state.pos + 1) !== 0x5B/* [ */) { return false }\n\n  const labelStart = state.pos + 2\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos + 1, false)\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false }\n\n  pos = labelEnd + 1\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // [link](  <href>  \"title\"  )\n    //        ^^ skipping these spaces\n    pos++\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n    if (pos >= max) { return false }\n\n    // [link](  <href>  \"title\"  )\n    //          ^^^^^^ parsing link destination\n    start = pos\n    res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax)\n    if (res.ok) {\n      href = state.md.normalizeLink(res.str)\n      if (state.md.validateLink(href)) {\n        pos = res.pos\n      } else {\n        href = ''\n      }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                ^^ skipping these spaces\n    start = pos\n    for (; pos < max; pos++) {\n      code = state.src.charCodeAt(pos)\n      if (!isSpace(code) && code !== 0x0A) { break }\n    }\n\n    // [link](  <href>  \"title\"  )\n    //                  ^^^^^^^ parsing link title\n    res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax)\n    if (pos < max && start !== pos && res.ok) {\n      title = res.str\n      pos = res.pos\n\n      // [link](  <href>  \"title\"  )\n      //                         ^^ skipping these spaces\n      for (; pos < max; pos++) {\n        code = state.src.charCodeAt(pos)\n        if (!isSpace(code) && code !== 0x0A) { break }\n      }\n    } else {\n      title = ''\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      state.pos = oldPos\n      return false\n    }\n    pos++\n  } else {\n    //\n    // Link reference\n    //\n    if (typeof state.env.references === 'undefined') { return false }\n\n    if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) {\n      start = pos + 1\n      pos = state.md.helpers.parseLinkLabel(state, pos)\n      if (pos >= 0) {\n        label = state.src.slice(start, pos++)\n      } else {\n        pos = labelEnd + 1\n      }\n    } else {\n      pos = labelEnd + 1\n    }\n\n    // covers label === '' and label === undefined\n    // (collapsed reference link and shortcut reference link respectively)\n    if (!label) { label = state.src.slice(labelStart, labelEnd) }\n\n    ref = state.env.references[normalizeReference(label)]\n    if (!ref) {\n      state.pos = oldPos\n      return false\n    }\n    href = ref.href\n    title = ref.title\n  }\n\n  //\n  // We found the end of the link, and know for a fact it's a valid link;\n  // so all that's left to do is to call tokenizer.\n  //\n  if (!silent) {\n    content = state.src.slice(labelStart, labelEnd)\n\n    const tokens = []\n    state.md.inline.parse(\n      content,\n      state.md,\n      state.env,\n      tokens\n    )\n\n    const token = state.push('image', 'img', 0)\n    const attrs = [['src', href], ['alt', '']]\n    token.attrs = attrs\n    token.children = tokens\n    token.content = content\n\n    if (title) {\n      attrs.push(['title', title])\n    }\n  }\n\n  state.pos = pos\n  state.posMax = max\n  return true\n}\n"],"names":["image","state","silent","code","content","label","pos","ref","res","title","start","href","oldPos","max","labelStart","labelEnd","isSpace","normalizeReference","tokens","token","attrs"],"mappings":"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","x_google_ignoreList":[0]}