'use strict'; var uri = require('../util/enclose-uri'); var title = require('../util/enclose-title'); module.exports = link; /* Expression for a protocol: * http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax */ var PROTOCOL = /^[a-z][a-z+.-]+:\/?/i; /* Stringify a link. * * When no title exists, the compiled `children` equal * `url`, and `url` starts with a protocol, an auto * link is created: * * * * Otherwise, is smart about enclosing `url` (see * `encloseURI()`) and `title` (see `encloseTitle()`). * * [foo]( 'An "example" e-mail') * * Supports named entities in the `url` and `title` when * in `settings.encode` mode. */ function link(node) { var self = this; var content = self.encode(node.url || '', node); var exit = self.enterLink(); var escaped = self.encode(self.escape(node.url || '', node)); var value = self.all(node).join(''); exit(); if ( node.title == null && PROTOCOL.test(content) && (escaped === value || escaped === 'mailto:' + value) ) { /* Backslash escapes do not work in autolinks, * so we do not escape. */ return uri(self.encode(node.url), true); } content = uri(content); if (node.title) { content += ' ' + title(self.encode(self.escape(node.title, node), node)); } return '[' + value + '](' + content + ')'; }