34 lines
682 B
JavaScript
34 lines
682 B
JavaScript
'use strict'
|
|
|
|
var count = require('ccount')
|
|
|
|
module.exports = enclose
|
|
|
|
var leftParenthesis = '('
|
|
var rightParenthesis = ')'
|
|
var lessThan = '<'
|
|
var greaterThan = '>'
|
|
|
|
var expression = /\s/
|
|
|
|
// Wrap `url` in angle brackets when needed, or when
|
|
// forced.
|
|
// In links, images, and definitions, the URL part needs
|
|
// to be enclosed when it:
|
|
//
|
|
// - has a length of `0`
|
|
// - contains white-space
|
|
// - has more or less opening than closing parentheses
|
|
function enclose(uri, always) {
|
|
if (
|
|
always ||
|
|
uri.length === 0 ||
|
|
expression.test(uri) ||
|
|
count(uri, leftParenthesis) !== count(uri, rightParenthesis)
|
|
) {
|
|
return lessThan + uri + greaterThan
|
|
}
|
|
|
|
return uri
|
|
}
|