{"version":3,"file":"fence.mjs","sources":["../../../../../../node_modules/markdown-it/lib/rules_block/fence.mjs"],"sourcesContent":["// fences (``` lang, ~~~ lang)\n\nexport default function fence (state, startLine, endLine, silent) {\n  let pos = state.bMarks[startLine] + state.tShift[startLine]\n  let max = state.eMarks[startLine]\n\n  // if it's indented more than 3 spaces, it should be a code block\n  if (state.sCount[startLine] - state.blkIndent >= 4) { return false }\n\n  if (pos + 3 > max) { return false }\n\n  const marker = state.src.charCodeAt(pos)\n\n  if (marker !== 0x7E/* ~ */ && marker !== 0x60 /* ` */) {\n    return false\n  }\n\n  // scan marker length\n  let mem = pos\n  pos = state.skipChars(pos, marker)\n\n  let len = pos - mem\n\n  if (len < 3) { return false }\n\n  const markup = state.src.slice(mem, pos)\n  const params = state.src.slice(pos, max)\n\n  if (marker === 0x60 /* ` */) {\n    if (params.indexOf(String.fromCharCode(marker)) >= 0) {\n      return false\n    }\n  }\n\n  // Since start is found, we can report success here in validation mode\n  if (silent) { return true }\n\n  // search end of block\n  let nextLine = startLine\n  let haveEndMarker = false\n\n  for (;;) {\n    nextLine++\n    if (nextLine >= endLine) {\n      // unclosed block should be autoclosed by end of document.\n      // also block seems to be autoclosed by end of parent\n      break\n    }\n\n    pos = mem = state.bMarks[nextLine] + state.tShift[nextLine]\n    max = state.eMarks[nextLine]\n\n    if (pos < max && state.sCount[nextLine] < state.blkIndent) {\n      // non-empty line with negative indent should stop the list:\n      // - ```\n      //  test\n      break\n    }\n\n    if (state.src.charCodeAt(pos) !== marker) { continue }\n\n    if (state.sCount[nextLine] - state.blkIndent >= 4) {\n      // closing fence should be indented less than 4 spaces\n      continue\n    }\n\n    pos = state.skipChars(pos, marker)\n\n    // closing code fence must be at least as long as the opening one\n    if (pos - mem < len) { continue }\n\n    // make sure tail has spaces only\n    pos = state.skipSpaces(pos)\n\n    if (pos < max) { continue }\n\n    haveEndMarker = true\n    // found!\n    break\n  }\n\n  // If a fence has heading spaces, they should be removed from its inner block\n  len = state.sCount[startLine]\n\n  state.line = nextLine + (haveEndMarker ? 1 : 0)\n\n  const token   = state.push('fence', 'code', 0)\n  token.info    = params\n  token.content = state.getLines(startLine + 1, nextLine, len, true)\n  token.markup  = markup\n  token.map     = [startLine, state.line]\n\n  return true\n}\n"],"names":["fence","state","startLine","endLine","silent","pos","max","marker","mem","len","markup","params","nextLine","haveEndMarker","token"],"mappings":"AAEe,SAASA,EAAOC,GAAOC,GAAWC,GAASC,GAAQ;AAChE,MAAIC,IAAMJ,EAAM,OAAOC,CAAS,IAAID,EAAM,OAAOC,CAAS,GACtDI,IAAML,EAAM,OAAOC,CAAS;AAKhC,MAFID,EAAM,OAAOC,CAAS,IAAID,EAAM,aAAa,KAE7CI,IAAM,IAAIC;AAAO,WAAO;AAE5B,QAAMC,IAASN,EAAM,IAAI,WAAWI,CAAG;AAEvC,MAAIE,MAAW,OAAeA,MAAW;AACvC,WAAO;AAIT,MAAIC,IAAMH;AACV,EAAAA,IAAMJ,EAAM,UAAUI,GAAKE,CAAM;AAEjC,MAAIE,IAAMJ,IAAMG;AAEhB,MAAIC,IAAM;AAAK,WAAO;AAEtB,QAAMC,IAAST,EAAM,IAAI,MAAMO,GAAKH,CAAG,GACjCM,IAASV,EAAM,IAAI,MAAMI,GAAKC,CAAG;AAEvC,MAAIC,MAAW,MACTI,EAAO,QAAQ,OAAO,aAAaJ,CAAM,CAAC,KAAK;AACjD,WAAO;AAKX,MAAIH;AAAU,WAAO;AAGrB,MAAIQ,IAAWV,GACXW,IAAgB;AAEpB,SACED,KACI,EAAAA,KAAYT,MAMhBE,IAAMG,IAAMP,EAAM,OAAOW,CAAQ,IAAIX,EAAM,OAAOW,CAAQ,GAC1DN,IAAML,EAAM,OAAOW,CAAQ,GAEvBP,IAAMC,KAAOL,EAAM,OAAOW,CAAQ,IAAIX,EAAM;AAOhD,QAAIA,EAAM,IAAI,WAAWI,CAAG,MAAME,KAE9B,EAAAN,EAAM,OAAOW,CAAQ,IAAIX,EAAM,aAAa,OAKhDI,IAAMJ,EAAM,UAAUI,GAAKE,CAAM,GAG7B,EAAAF,IAAMG,IAAMC,OAGhBJ,IAAMJ,EAAM,WAAWI,CAAG,GAEtB,EAAAA,IAAMC,MAEV;AAAA,MAAAO,IAAgB;AAEhB;AAAA;AAIF,EAAAJ,IAAMR,EAAM,OAAOC,CAAS,GAE5BD,EAAM,OAAOW,KAAYC,IAAgB,IAAI;AAE7C,QAAMC,IAAUb,EAAM,KAAK,SAAS,QAAQ,CAAC;AAC7C,SAAAa,EAAM,OAAUH,GAChBG,EAAM,UAAUb,EAAM,SAASC,IAAY,GAAGU,GAAUH,GAAK,EAAI,GACjEK,EAAM,SAAUJ,GAChBI,EAAM,MAAU,CAACZ,GAAWD,EAAM,IAAI,GAE/B;AACT;","x_google_ignoreList":[0]}