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
|
||
|
}
|