summaryrefslogtreecommitdiff
path: root/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs')
-rw-r--r--packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs77
1 files changed, 77 insertions, 0 deletions
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
+}