summaryrefslogtreecommitdiff
path: root/packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs
diff options
context:
space:
mode:
authoraltaf-creator <dev@altafcreator.com>2024-05-12 12:14:02 +0700
committeraltaf-creator <dev@altafcreator.com>2024-05-12 12:14:02 +0700
commitd607ac12097afb5cb6f398a4e7b5cf4316efedc6 (patch)
tree6f4bc5b98a6ff3a1c3189f7ef9b570c0481e100d /packages/markdown-it-14.1.0/lib/helpers/parse_link_destination.mjs
parent7441f212967256ac4c9a93ba0b1f026308a8bfb6 (diff)
self host
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
+}