diff options
| author | altaf-creator <dev@altafcreator.com> | 2026-04-30 22:01:53 +0800 |
|---|---|---|
| committer | altaf-creator <dev@altafcreator.com> | 2026-04-30 22:01:53 +0800 |
| commit | db1c6676a13798ee57dbac429a1d5045b60356fb (patch) | |
| tree | 5ff305c09686de50bbcac404c1954e42c26ba494 /packages/markdown-it-14.1.0/lib/rules_inline/link.mjs | |
| parent | 97fa8f57fbefcbfa6b3e56c31a1e5b60ef1a9e37 (diff) | |
quite a big commit
Diffstat (limited to 'packages/markdown-it-14.1.0/lib/rules_inline/link.mjs')
| -rw-r--r-- | packages/markdown-it-14.1.0/lib/rules_inline/link.mjs | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/packages/markdown-it-14.1.0/lib/rules_inline/link.mjs b/packages/markdown-it-14.1.0/lib/rules_inline/link.mjs deleted file mode 100644 index b145173..0000000 --- a/packages/markdown-it-14.1.0/lib/rules_inline/link.mjs +++ /dev/null @@ -1,139 +0,0 @@ -// Process [link](<to> "stuff") - -import { normalizeReference, isSpace } from '../common/utils.mjs' - -export default function link (state, silent) { - let code, label, res, ref - let href = '' - let title = '' - let start = state.pos - let parseReference = true - - if (state.src.charCodeAt(state.pos) !== 0x5B/* [ */) { return false } - - const oldPos = state.pos - const max = state.posMax - const labelStart = state.pos + 1 - const labelEnd = state.md.helpers.parseLinkLabel(state, state.pos, true) - - // parser failed to find ']', so it's not a valid link - if (labelEnd < 0) { return false } - - let pos = labelEnd + 1 - if (pos < max && state.src.charCodeAt(pos) === 0x28/* ( */) { - // - // Inline link - // - - // might have found a valid shortcut link, disable reference parsing - parseReference = false - - // [link]( <href> "title" ) - // ^^ skipping these spaces - pos++ - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos) - if (!isSpace(code) && code !== 0x0A) { break } - } - if (pos >= max) { return false } - - // [link]( <href> "title" ) - // ^^^^^^ parsing link destination - start = pos - res = state.md.helpers.parseLinkDestination(state.src, pos, state.posMax) - if (res.ok) { - href = state.md.normalizeLink(res.str) - if (state.md.validateLink(href)) { - pos = res.pos - } else { - href = '' - } - - // [link]( <href> "title" ) - // ^^ skipping these spaces - start = pos - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos) - if (!isSpace(code) && code !== 0x0A) { break } - } - - // [link]( <href> "title" ) - // ^^^^^^^ parsing link title - res = state.md.helpers.parseLinkTitle(state.src, pos, state.posMax) - if (pos < max && start !== pos && res.ok) { - title = res.str - pos = res.pos - - // [link]( <href> "title" ) - // ^^ skipping these spaces - for (; pos < max; pos++) { - code = state.src.charCodeAt(pos) - if (!isSpace(code) && code !== 0x0A) { break } - } - } - } - - if (pos >= max || state.src.charCodeAt(pos) !== 0x29/* ) */) { - // parsing a valid shortcut link failed, fallback to reference - parseReference = true - } - pos++ - } - - if (parseReference) { - // - // Link reference - // - if (typeof state.env.references === 'undefined') { return false } - - if (pos < max && state.src.charCodeAt(pos) === 0x5B/* [ */) { - start = pos + 1 - pos = state.md.helpers.parseLinkLabel(state, pos) - if (pos >= 0) { - label = state.src.slice(start, pos++) - } else { - pos = labelEnd + 1 - } - } else { - pos = labelEnd + 1 - } - - // covers label === '' and label === undefined - // (collapsed reference link and shortcut reference link respectively) - if (!label) { label = state.src.slice(labelStart, labelEnd) } - - ref = state.env.references[normalizeReference(label)] - if (!ref) { - state.pos = oldPos - return false - } - href = ref.href - title = ref.title - } - - // - // We found the end of the link, and know for a fact it's a valid link; - // so all that's left to do is to call tokenizer. - // - if (!silent) { - state.pos = labelStart - state.posMax = labelEnd - - const token_o = state.push('link_open', 'a', 1) - const attrs = [['href', href]] - token_o.attrs = attrs - if (title) { - attrs.push(['title', title]) - } - - state.linkLevel++ - state.md.inline.tokenize(state) - state.linkLevel-- - - state.push('link_close', 'a', -1) - } - - state.pos = pos - state.posMax = max - return true -} |
