This commit is contained in:
65
node_modules/remark-stringify/lib/visitors/link.js
generated
vendored
Normal file
65
node_modules/remark-stringify/lib/visitors/link.js
generated
vendored
Normal file
@@ -0,0 +1,65 @@
|
||||
'use strict'
|
||||
|
||||
var uri = require('../util/enclose-uri')
|
||||
var title = require('../util/enclose-title')
|
||||
|
||||
module.exports = link
|
||||
|
||||
var space = ' '
|
||||
var leftSquareBracket = '['
|
||||
var rightSquareBracket = ']'
|
||||
var leftParenthesis = '('
|
||||
var rightParenthesis = ')'
|
||||
|
||||
// Expression for a protocol:
|
||||
// See <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:
|
||||
//
|
||||
// ```markdown
|
||||
// <http://example.com>
|
||||
// ```
|
||||
//
|
||||
// Otherwise, is smart about enclosing `url` (see `encloseURI()`) and `title`
|
||||
// (see `encloseTitle()`).
|
||||
// ```
|
||||
//
|
||||
// ```markdown
|
||||
// [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) {
|
||||
// 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 += space + title(self.encode(self.escape(node.title, node), node))
|
||||
}
|
||||
|
||||
return (
|
||||
leftSquareBracket +
|
||||
value +
|
||||
rightSquareBracket +
|
||||
leftParenthesis +
|
||||
content +
|
||||
rightParenthesis
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user