{"version":3,"file":"link.mjs","sources":["../../../../../../node_modules/markdown-it/lib/rules_inline/link.mjs"],"sourcesContent":["// Process [link](<to> \"stuff\")\n\nimport { normalizeReference, isSpace } from '../common/utils.mjs'\n\nexport default function link (state, silent) {\n  let code, label, res, ref\n  let href = ''\n  let title = ''\n  let start = state.pos\n  let parseReference = true\n\n  if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false }\n\n  const oldPos = state.pos\n  const max = state.posMax\n  const labelStart = state.pos + 1\n  const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true)\n\n  // parser failed to find ']', so it's not a valid link\n  if (labelEnd < 0) { return false }\n\n  let pos = labelEnd + 1\n  if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) {\n    //\n    // Inline link\n    //\n\n    // might have found a valid shortcut link, disable reference parsing\n    parseReference = false\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      // [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      }\n    }\n\n    if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) {\n      // parsing a valid shortcut link failed, fallback to reference\n      parseReference = true\n    }\n    pos++\n  }\n\n  if (parseReference) {\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    state.pos = labelStart\n    state.posMax = labelEnd\n\n    const token_o = state.push('link_open', 'a', 1)\n    const attrs = [['href', href]]\n    token_o.attrs  = attrs\n    if (title) {\n      attrs.push(['title', title])\n    }\n\n    state.linkLevel++\n    state.md.inline.tokenize(state)\n    state.linkLevel--\n\n    state.push('link_close', 'a', -1)\n  }\n\n  state.pos = pos\n  state.posMax = max\n  return true\n}\n"],"names":["link","state","silent","code","label","res","ref","href","title","start","parseReference","oldPos","max","labelStart","labelEnd","pos","isSpace","normalizeReference","token_o","attrs"],"mappings":";AAIe,SAASA,EAAMC,GAAOC,GAAQ;AAC3C,MAAIC,GAAMC,GAAOC,GAAKC,GAClBC,IAAO,IACPC,IAAQ,IACRC,IAAQR,EAAM,KACdS,IAAiB;AAErB,MAAIT,EAAM,IAAI,WAAWA,EAAM,GAAG,MAAM;AAAe,WAAO;AAE9D,QAAMU,IAASV,EAAM,KACfW,IAAMX,EAAM,QACZY,IAAaZ,EAAM,MAAM,GACzBa,IAAWb,EAAM,GAAG,QAAQ,eAAeA,GAAOA,EAAM,KAAK,EAAI;AAGvE,MAAIa,IAAW;AAAK,WAAO;AAE3B,MAAIC,IAAMD,IAAW;AACrB,MAAIC,IAAMH,KAAOX,EAAM,IAAI,WAAWc,CAAG,MAAM,IAAa;AAW1D,SALAL,IAAiB,IAIjBK,KACOA,IAAMH,MACXT,IAAOF,EAAM,IAAI,WAAWc,CAAG,GAC3B,GAACC,EAAQb,CAAI,KAAKA,MAAS,MAFfY;AAEhB;AAEF,QAAIA,KAAOH;AAAO,aAAO;AAMzB,QAFAH,IAAQM,GACRV,IAAMJ,EAAM,GAAG,QAAQ,qBAAqBA,EAAM,KAAKc,GAAKd,EAAM,MAAM,GACpEI,EAAI,IAAI;AAWV,WAVAE,IAAON,EAAM,GAAG,cAAcI,EAAI,GAAG,GACjCJ,EAAM,GAAG,aAAaM,CAAI,IAC5BQ,IAAMV,EAAI,MAEVE,IAAO,IAKTE,IAAQM,GACDA,IAAMH,MACXT,IAAOF,EAAM,IAAI,WAAWc,CAAG,GAC3B,GAACC,EAAQb,CAAI,KAAKA,MAAS,MAFfY;AAEhB;AAMF,UADAV,IAAMJ,EAAM,GAAG,QAAQ,eAAeA,EAAM,KAAKc,GAAKd,EAAM,MAAM,GAC9Dc,IAAMH,KAAOH,MAAUM,KAAOV,EAAI;AAMpC,aALAG,IAAQH,EAAI,KACZU,IAAMV,EAAI,KAIHU,IAAMH,MACXT,IAAOF,EAAM,IAAI,WAAWc,CAAG,GAC3B,GAACC,EAAQb,CAAI,KAAKA,MAAS,MAFfY;AAEhB;AAAA,IAGN;AAEA,KAAIA,KAAOH,KAAOX,EAAM,IAAI,WAAWc,CAAG,MAAM,QAE9CL,IAAiB,KAEnBK;AAAA,EACF;AAEA,MAAIL,GAAgB;AAIlB,QAAI,OAAOT,EAAM,IAAI,aAAe;AAAe,aAAO;AAmB1D,QAjBIc,IAAMH,KAAOX,EAAM,IAAI,WAAWc,CAAG,MAAM,MAC7CN,IAAQM,IAAM,GACdA,IAAMd,EAAM,GAAG,QAAQ,eAAeA,GAAOc,CAAG,GAC5CA,KAAO,IACTX,IAAQH,EAAM,IAAI,MAAMQ,GAAOM,GAAK,IAEpCA,IAAMD,IAAW,KAGnBC,IAAMD,IAAW,GAKdV,MAASA,IAAQH,EAAM,IAAI,MAAMY,GAAYC,CAAQ,IAE1DR,IAAML,EAAM,IAAI,WAAWgB,EAAmBb,CAAK,CAAC,GAChD,CAACE;AACH,aAAAL,EAAM,MAAMU,GACL;AAET,IAAAJ,IAAOD,EAAI,MACXE,IAAQF,EAAI;AAAA,EACd;AAMA,MAAI,CAACJ,GAAQ;AACX,IAAAD,EAAM,MAAMY,GACZZ,EAAM,SAASa;AAEf,UAAMI,IAAUjB,EAAM,KAAK,aAAa,KAAK,CAAC,GACxCkB,IAAQ,CAAC,CAAC,QAAQZ,CAAI,CAAC;AAC7B,IAAAW,EAAQ,QAASC,GACbX,KACFW,EAAM,KAAK,CAAC,SAASX,CAAK,CAAC,GAG7BP,EAAM,aACNA,EAAM,GAAG,OAAO,SAASA,CAAK,GAC9BA,EAAM,aAENA,EAAM,KAAK,cAAc,KAAK,EAAE;AAAA,EAClC;AAEA,SAAAA,EAAM,MAAMc,GACZd,EAAM,SAASW,GACR;AACT;","x_google_ignoreList":[0]}