summaryrefslogtreecommitdiff
path: root/www/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs
diff options
context:
space:
mode:
authoraltaf-creator <dev@altafcreator.com>2026-04-30 22:01:53 +0800
committeraltaf-creator <dev@altafcreator.com>2026-04-30 22:01:53 +0800
commitdb1c6676a13798ee57dbac429a1d5045b60356fb (patch)
tree5ff305c09686de50bbcac404c1954e42c26ba494 /www/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs
parent97fa8f57fbefcbfa6b3e56c31a1e5b60ef1a9e37 (diff)
quite a big commit
Diffstat (limited to 'www/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs')
-rw-r--r--www/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs77
1 files changed, 77 insertions, 0 deletions
diff --git a/www/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs b/www/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs
new file mode 100644
index 0000000..6a723a6
--- /dev/null
+++ b/www/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
+}