This commit is contained in:
30
node_modules/mdast-util-to-markdown/lib/util/association.js
generated
vendored
Normal file
30
node_modules/mdast-util-to-markdown/lib/util/association.js
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
module.exports = association
|
||||
|
||||
var decode = require('parse-entities/decode-entity')
|
||||
|
||||
var characterEscape = /\\([!-/:-@[-`{-~])/g
|
||||
var characterReference = /&(#(\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi
|
||||
|
||||
// The `label` of an association is the string value: character escapes and
|
||||
// references work, and casing is intact.
|
||||
// The `identifier` is used to match one association to another: controversially,
|
||||
// character escapes and references don’t work in this matching: `©` does
|
||||
// not match `©`, and `\+` does not match `+`.
|
||||
// But casing is ignored (and whitespace) is trimmed and collapsed: ` A\nb`
|
||||
// matches `a b`.
|
||||
// So, we do prefer the label when figuring out how we’re going to serialize:
|
||||
// it has whitespace, casing, and we can ignore most useless character escapes
|
||||
// and all character references.
|
||||
function association(node) {
|
||||
if (node.label || !node.identifier) {
|
||||
return node.label || ''
|
||||
}
|
||||
|
||||
return node.identifier
|
||||
.replace(characterEscape, '$1')
|
||||
.replace(characterReference, decodeIfPossible)
|
||||
}
|
||||
|
||||
function decodeIfPossible($0, $1) {
|
||||
return decode($1) || $0
|
||||
}
|
||||
Reference in New Issue
Block a user