vue-files-preview-inno
Version:
A tool for previewing files such as doc, excel, pdf, image, markdown, txt, audio, and video and so on.
1 lines • 6.12 kB
Source Map (JSON)
{"version":3,"file":"balance_pairs.mjs","sources":["../../../../../../node_modules/markdown-it/lib/rules_inline/balance_pairs.mjs"],"sourcesContent":["// For each opening emphasis-like marker find a matching closing one\n//\n\nfunction processDelimiters (delimiters) {\n const openersBottom = {}\n const max = delimiters.length\n\n if (!max) return\n\n // headerIdx is the first delimiter of the current (where closer is) delimiter run\n let headerIdx = 0\n let lastTokenIdx = -2 // needs any value lower than -1\n const jumps = []\n\n for (let closerIdx = 0; closerIdx < max; closerIdx++) {\n const closer = delimiters[closerIdx]\n\n jumps.push(0)\n\n // markers belong to same delimiter run if:\n // - they have adjacent tokens\n // - AND markers are the same\n //\n if (delimiters[headerIdx].marker !== closer.marker || lastTokenIdx !== closer.token - 1) {\n headerIdx = closerIdx\n }\n\n lastTokenIdx = closer.token\n\n // Length is only used for emphasis-specific \"rule of 3\",\n // if it's not defined (in strikethrough or 3rd party plugins),\n // we can default it to 0 to disable those checks.\n //\n closer.length = closer.length || 0\n\n if (!closer.close) continue\n\n // Previously calculated lower bounds (previous fails)\n // for each marker, each delimiter length modulo 3,\n // and for whether this closer can be an opener;\n // https://github.com/commonmark/cmark/commit/34250e12ccebdc6372b8b49c44fab57c72443460\n /* eslint-disable-next-line no-prototype-builtins */\n if (!openersBottom.hasOwnProperty(closer.marker)) {\n openersBottom[closer.marker] = [-1, -1, -1, -1, -1, -1]\n }\n\n const minOpenerIdx = openersBottom[closer.marker][(closer.open ? 3 : 0) + (closer.length % 3)]\n\n let openerIdx = headerIdx - jumps[headerIdx] - 1\n\n let newMinOpenerIdx = openerIdx\n\n for (; openerIdx > minOpenerIdx; openerIdx -= jumps[openerIdx] + 1) {\n const opener = delimiters[openerIdx]\n\n if (opener.marker !== closer.marker) continue\n\n if (opener.open && opener.end < 0) {\n let isOddMatch = false\n\n // from spec:\n //\n // If one of the delimiters can both open and close emphasis, then the\n // sum of the lengths of the delimiter runs containing the opening and\n // closing delimiters must not be a multiple of 3 unless both lengths\n // are multiples of 3.\n //\n if (opener.close || closer.open) {\n if ((opener.length + closer.length) % 3 === 0) {\n if (opener.length % 3 !== 0 || closer.length % 3 !== 0) {\n isOddMatch = true\n }\n }\n }\n\n if (!isOddMatch) {\n // If previous delimiter cannot be an opener, we can safely skip\n // the entire sequence in future checks. This is required to make\n // sure algorithm has linear complexity (see *_*_*_*_*_... case).\n //\n const lastJump = openerIdx > 0 && !delimiters[openerIdx - 1].open\n ? jumps[openerIdx - 1] + 1\n : 0\n\n jumps[closerIdx] = closerIdx - openerIdx + lastJump\n jumps[openerIdx] = lastJump\n\n closer.open = false\n opener.end = closerIdx\n opener.close = false\n newMinOpenerIdx = -1\n // treat next token as start of run,\n // it optimizes skips in **<...>**a**<...>** pathological case\n lastTokenIdx = -2\n break\n }\n }\n }\n\n if (newMinOpenerIdx !== -1) {\n // If match for this delimiter run failed, we want to set lower bound for\n // future lookups. This is required to make sure algorithm has linear\n // complexity.\n //\n // See details here:\n // https://github.com/commonmark/cmark/issues/178#issuecomment-270417442\n //\n openersBottom[closer.marker][(closer.open ? 3 : 0) + ((closer.length || 0) % 3)] = newMinOpenerIdx\n }\n }\n}\n\nexport default function link_pairs (state) {\n const tokens_meta = state.tokens_meta\n const max = state.tokens_meta.length\n\n processDelimiters(state.delimiters)\n\n for (let curr = 0; curr < max; curr++) {\n if (tokens_meta[curr] && tokens_meta[curr].delimiters) {\n processDelimiters(tokens_meta[curr].delimiters)\n }\n }\n}\n"],"names":["processDelimiters","delimiters","openersBottom","max","headerIdx","lastTokenIdx","jumps","closerIdx","closer","minOpenerIdx","openerIdx","newMinOpenerIdx","opener","isOddMatch","lastJump","link_pairs","state","tokens_meta","curr"],"mappings":"AAGA,SAASA,EAAmBC,GAAY;AACtC,QAAMC,IAAgB,CAAA,GAChBC,IAAMF,EAAW;AAEvB,MAAI,CAACE,EAAK;AAGV,MAAIC,IAAY,GACZC,IAAe;AACnB,QAAMC,IAAQ,CAAA;AAEd,WAASC,IAAY,GAAGA,IAAYJ,GAAKI,KAAa;AACpD,UAAMC,IAASP,EAAWM,CAAS;AAoBnC,QAlBAD,EAAM,KAAK,CAAC,IAMRL,EAAWG,CAAS,EAAE,WAAWI,EAAO,UAAUH,MAAiBG,EAAO,QAAQ,OACpFJ,IAAYG,IAGdF,IAAeG,EAAO,OAMtBA,EAAO,SAASA,EAAO,UAAU,GAE7B,CAACA,EAAO,MAAO;AAOnB,IAAKN,EAAc,eAAeM,EAAO,MAAM,MAC7CN,EAAcM,EAAO,MAAM,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AAGxD,UAAMC,IAAeP,EAAcM,EAAO,MAAM,GAAGA,EAAO,OAAO,IAAI,KAAMA,EAAO,SAAS,CAAE;AAE7F,QAAIE,IAAYN,IAAYE,EAAMF,CAAS,IAAI,GAE3CO,IAAkBD;AAEtB,WAAOA,IAAYD,GAAcC,KAAaJ,EAAMI,CAAS,IAAI,GAAG;AAClE,YAAME,IAASX,EAAWS,CAAS;AAEnC,UAAIE,EAAO,WAAWJ,EAAO,UAEzBI,EAAO,QAAQA,EAAO,MAAM,GAAG;AACjC,YAAIC,IAAa;AAiBjB,aARID,EAAO,SAASJ,EAAO,UACpBI,EAAO,SAASJ,EAAO,UAAU,MAAM,MACtCI,EAAO,SAAS,MAAM,KAAKJ,EAAO,SAAS,MAAM,OACnDK,IAAa,KAKf,CAACA,GAAY;AAKf,gBAAMC,IAAWJ,IAAY,KAAK,CAACT,EAAWS,IAAY,CAAC,EAAE,OACzDJ,EAAMI,IAAY,CAAC,IAAI,IACvB;AAEJ,UAAAJ,EAAMC,CAAS,IAAIA,IAAYG,IAAYI,GAC3CR,EAAMI,CAAS,IAAII,GAEnBN,EAAO,OAAQ,IACfI,EAAO,MAAQL,GACfK,EAAO,QAAQ,IACfD,IAAkB,IAGlBN,IAAe;AACf;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAIM,MAAoB,OAQtBT,EAAcM,EAAO,MAAM,GAAGA,EAAO,OAAO,IAAI,MAAOA,EAAO,UAAU,KAAK,CAAE,IAAIG;AAAA,EAEvF;AACF;AAEe,SAASI,EAAYC,GAAO;AACzC,QAAMC,IAAcD,EAAM,aACpBb,IAAMa,EAAM,YAAY;AAE9B,EAAAhB,EAAkBgB,EAAM,UAAU;AAElC,WAASE,IAAO,GAAGA,IAAOf,GAAKe;AAC7B,IAAID,EAAYC,CAAI,KAAKD,EAAYC,CAAI,EAAE,cACzClB,EAAkBiB,EAAYC,CAAI,EAAE,UAAU;AAGpD;","x_google_ignoreList":[0]}