diff options
author | Minteck <contact@minteck.org> | 2022-01-20 13:43:34 +0100 |
---|---|---|
committer | Minteck <contact@minteck.org> | 2022-01-20 13:43:34 +0100 |
commit | c2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1 (patch) | |
tree | 226598e8d17d20e3721358f7c60b1cc6b851163a /node_modules/markdown-it/lib/helpers | |
download | cobalt-c2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1.tar.gz cobalt-c2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1.tar.bz2 cobalt-c2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1.zip |
Initial commit
Diffstat (limited to 'node_modules/markdown-it/lib/helpers')
4 files changed, 192 insertions, 0 deletions
diff --git a/node_modules/markdown-it/lib/helpers/index.js b/node_modules/markdown-it/lib/helpers/index.js new file mode 100644 index 0000000..bfdbfa2 --- /dev/null +++ b/node_modules/markdown-it/lib/helpers/index.js @@ -0,0 +1,7 @@ +// Just a shortcut for bulk export +'use strict'; + + +exports.parseLinkLabel = require('./parse_link_label'); +exports.parseLinkDestination = require('./parse_link_destination'); +exports.parseLinkTitle = require('./parse_link_title'); diff --git a/node_modules/markdown-it/lib/helpers/parse_link_destination.js b/node_modules/markdown-it/lib/helpers/parse_link_destination.js new file mode 100644 index 0000000..637f1f4 --- /dev/null +++ b/node_modules/markdown-it/lib/helpers/parse_link_destination.js @@ -0,0 +1,82 @@ +// Parse link destination +// +'use strict'; + + +var unescapeAll = require('../common/utils').unescapeAll; + + +module.exports = function parseLinkDestination(str, pos, max) { + var code, level, + lines = 0, + start = pos, + result = { + ok: false, + pos: 0, + lines: 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 + + 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.lines = lines; + result.pos = pos; + result.ok = true; + return result; +}; diff --git a/node_modules/markdown-it/lib/helpers/parse_link_label.js b/node_modules/markdown-it/lib/helpers/parse_link_label.js new file mode 100644 index 0000000..5a450fd --- /dev/null +++ b/node_modules/markdown-it/lib/helpers/parse_link_label.js @@ -0,0 +1,48 @@ +// Parse link label +// +// this function assumes that first character ("[") already matches; +// returns the end of the label +// +'use strict'; + +module.exports = function parseLinkLabel(state, start, disableNested) { + var level, found, marker, prevPos, + labelEnd = -1, + max = state.posMax, + oldPos = state.pos; + + state.pos = start + 1; + level = 1; + + while (state.pos < max) { + marker = state.src.charCodeAt(state.pos); + if (marker === 0x5D /* ] */) { + level--; + if (level === 0) { + found = true; + break; + } + } + + prevPos = state.pos; + state.md.inline.skipToken(state); + if (marker === 0x5B /* [ */) { + if (prevPos === state.pos - 1) { + // increase level if we find text `[`, which is not a part of any token + level++; + } else if (disableNested) { + state.pos = oldPos; + return -1; + } + } + } + + if (found) { + labelEnd = state.pos; + } + + // restore old state + state.pos = oldPos; + + return labelEnd; +}; diff --git a/node_modules/markdown-it/lib/helpers/parse_link_title.js b/node_modules/markdown-it/lib/helpers/parse_link_title.js new file mode 100644 index 0000000..051d6f4 --- /dev/null +++ b/node_modules/markdown-it/lib/helpers/parse_link_title.js @@ -0,0 +1,55 @@ +// Parse link title +// +'use strict'; + + +var unescapeAll = require('../common/utils').unescapeAll; + + +module.exports = function parseLinkTitle(str, pos, max) { + var code, + marker, + lines = 0, + start = pos, + result = { + ok: false, + pos: 0, + lines: 0, + str: '' + }; + + if (pos >= max) { return result; } + + marker = str.charCodeAt(pos); + + if (marker !== 0x22 /* " */ && marker !== 0x27 /* ' */ && marker !== 0x28 /* ( */) { return result; } + + pos++; + + // if opening marker is "(", switch it to closing marker ")" + if (marker === 0x28) { marker = 0x29; } + + while (pos < max) { + code = str.charCodeAt(pos); + if (code === marker) { + result.pos = pos + 1; + result.lines = lines; + result.str = unescapeAll(str.slice(start + 1, pos)); + result.ok = true; + return result; + } else if (code === 0x28 /* ( */ && marker === 0x29 /* ) */) { + return result; + } else if (code === 0x0A) { + lines++; + } else if (code === 0x5C /* \ */ && pos + 1 < max) { + pos++; + if (str.charCodeAt(pos) === 0x0A) { + lines++; + } + } + + pos++; + } + + return result; +}; |