summaryrefslogtreecommitdiff
path: root/node_modules/markdown-it/lib/rules_inline/autolink.js
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2022-01-20 13:43:34 +0100
committerMinteck <contact@minteck.org>2022-01-20 13:43:34 +0100
commitc2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1 (patch)
tree226598e8d17d20e3721358f7c60b1cc6b851163a /node_modules/markdown-it/lib/rules_inline/autolink.js
downloadcobalt-c2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1.tar.gz
cobalt-c2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1.tar.bz2
cobalt-c2aa7bf38fb30de2d04f87f8e7780e4c768ae6b1.zip
Initial commit
Diffstat (limited to 'node_modules/markdown-it/lib/rules_inline/autolink.js')
-rw-r--r--node_modules/markdown-it/lib/rules_inline/autolink.js76
1 files changed, 76 insertions, 0 deletions
diff --git a/node_modules/markdown-it/lib/rules_inline/autolink.js b/node_modules/markdown-it/lib/rules_inline/autolink.js
new file mode 100644
index 0000000..66deb90
--- /dev/null
+++ b/node_modules/markdown-it/lib/rules_inline/autolink.js
@@ -0,0 +1,76 @@
+// Process autolinks '<protocol:...>'
+
+'use strict';
+
+
+/*eslint max-len:0*/
+var EMAIL_RE = /^([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)$/;
+var AUTOLINK_RE = /^([a-zA-Z][a-zA-Z0-9+.\-]{1,31}):([^<>\x00-\x20]*)$/;
+
+
+module.exports = function autolink(state, silent) {
+ var url, fullUrl, token, ch, start, max,
+ pos = state.pos;
+
+ if (state.src.charCodeAt(pos) !== 0x3C/* < */) { return false; }
+
+ start = state.pos;
+ max = state.posMax;
+
+ for (;;) {
+ if (++pos >= max) return false;
+
+ ch = state.src.charCodeAt(pos);
+
+ if (ch === 0x3C /* < */) return false;
+ if (ch === 0x3E /* > */) break;
+ }
+
+ url = state.src.slice(start + 1, pos);
+
+ if (AUTOLINK_RE.test(url)) {
+ fullUrl = state.md.normalizeLink(url);
+ if (!state.md.validateLink(fullUrl)) { return false; }
+
+ if (!silent) {
+ token = state.push('link_open', 'a', 1);
+ token.attrs = [ [ 'href', fullUrl ] ];
+ token.markup = 'autolink';
+ token.info = 'auto';
+
+ token = state.push('text', '', 0);
+ token.content = state.md.normalizeLinkText(url);
+
+ token = state.push('link_close', 'a', -1);
+ token.markup = 'autolink';
+ token.info = 'auto';
+ }
+
+ state.pos += url.length + 2;
+ return true;
+ }
+
+ if (EMAIL_RE.test(url)) {
+ fullUrl = state.md.normalizeLink('mailto:' + url);
+ if (!state.md.validateLink(fullUrl)) { return false; }
+
+ if (!silent) {
+ token = state.push('link_open', 'a', 1);
+ token.attrs = [ [ 'href', fullUrl ] ];
+ token.markup = 'autolink';
+ token.info = 'auto';
+
+ token = state.push('text', '', 0);
+ token.content = state.md.normalizeLinkText(url);
+
+ token = state.push('link_close', 'a', -1);
+ token.markup = 'autolink';
+ token.info = 'auto';
+ }
+
+ state.pos += url.length + 2;
+ return true;
+ }
+
+ return false;
+};