From d607ac12097afb5cb6f398a4e7b5cf4316efedc6 Mon Sep 17 00:00:00 2001 From: altaf-creator Date: Sun, 12 May 2024 12:14:02 +0700 Subject: self host --- .../lib/helpers/parse_link_destination.mjs | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs (limited to 'packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs') diff --git a/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs b/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs new file mode 100644 index 0000000..6a723a6 --- /dev/null +++ b/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs @@ -0,0 +1,77 @@ +// Parse link destination +// + +import { unescapeAll } from '../common/utils.mjs' + +export default function parseLinkDestination (str, start, max) { + let code + let pos = start + + const result = { + ok: false, + pos: 0, + str: '' + } + + if (str.charCodeAt(pos) === 0x3C /* < */) { + pos++ + while (pos < max) { + code = str.charCodeAt(pos) + if (code === 0x0A /* \n */) { return result } + if (code === 0x3C /* < */) { return result } + if (code === 0x3E /* > */) { + result.pos = pos + 1 + result.str = unescapeAll(str.slice(start + 1, pos)) + result.ok = true + return result + } + if (code === 0x5C /* \ */ && pos + 1 < max) { + pos += 2 + continue + } + + pos++ + } + + // no closing '>' + return result + } + + // this should be ... } else { ... branch + + let level = 0 + while (pos < max) { + code = str.charCodeAt(pos) + + if (code === 0x20) { break } + + // ascii control characters + if (code < 0x20 || code === 0x7F) { break } + + if (code === 0x5C /* \ */ && pos + 1 < max) { + if (str.charCodeAt(pos + 1) === 0x20) { break } + pos += 2 + continue + } + + if (code === 0x28 /* ( */) { + level++ + if (level > 32) { return result } + } + + if (code === 0x29 /* ) */) { + if (level === 0) { break } + level-- + } + + pos++ + } + + if (start === pos) { return result } + if (level !== 0) { return result } + + result.str = unescapeAll(str.slice(start, pos)) + result.pos = pos + result.ok = true + return result +} -- cgit v1.2.3