| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- '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:
- *
- * <http://example.com>
- *
- * Otherwise, is smart about enclosing `url` (see
- * `encloseURI()`) and `title` (see `encloseTitle()`).
- *
- * [foo](<foo at bar dot com> '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 + ')';
- }
|