Sha256: 196691125cdcf67093859eb3823aef51ff210ad2a2cc00e3b6e6398a274ee1c3

Contents?: true

Size: 1.54 KB

Versions: 23

Compression:

Stored size: 1.54 KB

Contents

'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 <https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#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
  )
}

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
trusty-cms-5.0.7 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-5.0.6 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-5.0.5 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-5.0.4 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-5.0.3 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-5.0.2 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-5.0.1 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.3.5 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-5.0.0 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.3.4 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.3.3 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.3.2 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.3.1 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.3 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.2.3 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.2.2 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.2.1 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.2 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.1.9 node_modules/remark-stringify/lib/visitors/link.js
trusty-cms-4.1.8 node_modules/remark-stringify/lib/visitors/link.js