3 var whitespace = require('is-whitespace-character');
4 var decode = require('parse-entities');
5 var locate = require('../locate/tag');
7 module.exports = autoLink;
8 autoLink.locator = locate;
9 autoLink.notInLink = true;
15 var MAILTO = 'mailto:';
16 var MAILTO_LENGTH = MAILTO.length;
18 /* Tokenise a link. */
19 function autoLink(eat, value, silent) {
33 if (value.charAt(0) !== C_LT) {
39 length = value.length;
42 hasAtCharacter = false;
48 while (index < length) {
49 character = value.charAt(index);
52 whitespace(character) ||
54 character === C_AT_SIGN ||
55 (character === ':' && value.charAt(index + 1) === C_SLASH)
71 character = value.charAt(index);
75 if (character === C_AT_SIGN) {
76 hasAtCharacter = true;
80 value.charAt(index + 1) !== C_SLASH
89 while (index < length) {
90 character = value.charAt(index);
92 if (whitespace(character) || character === C_GT) {
100 character = value.charAt(index);
102 if (!queue || character !== C_GT) {
106 /* istanbul ignore if - never used (yet) */
113 subvalue += link + character;
118 if (hasAtCharacter) {
119 if (link.slice(0, MAILTO_LENGTH).toLowerCase() === MAILTO) {
120 content = content.substr(MAILTO_LENGTH);
121 now.column += MAILTO_LENGTH;
122 now.offset += MAILTO_LENGTH;
124 link = MAILTO + link;
128 /* Temporarily remove support for escapes in autolinks. */
129 tokenize = self.inlineTokenizers.escape;
130 self.inlineTokenizers.escape = null;
131 exit = self.enterLink();
133 content = self.tokenizeInline(content, now);
135 self.inlineTokenizers.escape = tokenize;
138 return eat(subvalue)({