This commit is contained in:
67
node_modules/remark-stringify/lib/util/copy-identifier-encoding.js
generated
vendored
Normal file
67
node_modules/remark-stringify/lib/util/copy-identifier-encoding.js
generated
vendored
Normal file
@@ -0,0 +1,67 @@
|
||||
'use strict'
|
||||
|
||||
var entityPrefixLength = require('./entity-prefix-length')
|
||||
|
||||
module.exports = copy
|
||||
|
||||
var ampersand = '&'
|
||||
|
||||
var punctuationExppresion = /[-!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~_]/
|
||||
|
||||
// For shortcut and collapsed reference links, the contents is also an
|
||||
// identifier, so we need to restore the original encoding and escaping
|
||||
// that were present in the source string.
|
||||
//
|
||||
// This function takes the unescaped & unencoded value from shortcut’s
|
||||
// child nodes and the identifier and encodes the former according to
|
||||
// the latter.
|
||||
function copy(value, identifier) {
|
||||
var length = value.length
|
||||
var count = identifier.length
|
||||
var result = []
|
||||
var position = 0
|
||||
var index = 0
|
||||
var start
|
||||
|
||||
while (index < length) {
|
||||
// Take next non-punctuation characters from `value`.
|
||||
start = index
|
||||
|
||||
while (index < length && !punctuationExppresion.test(value.charAt(index))) {
|
||||
index += 1
|
||||
}
|
||||
|
||||
result.push(value.slice(start, index))
|
||||
|
||||
// Advance `position` to the next punctuation character.
|
||||
while (
|
||||
position < count &&
|
||||
!punctuationExppresion.test(identifier.charAt(position))
|
||||
) {
|
||||
position += 1
|
||||
}
|
||||
|
||||
// Take next punctuation characters from `identifier`.
|
||||
start = position
|
||||
|
||||
while (
|
||||
position < count &&
|
||||
punctuationExppresion.test(identifier.charAt(position))
|
||||
) {
|
||||
if (identifier.charAt(position) === ampersand) {
|
||||
position += entityPrefixLength(identifier.slice(position))
|
||||
}
|
||||
|
||||
position += 1
|
||||
}
|
||||
|
||||
result.push(identifier.slice(start, position))
|
||||
|
||||
// Advance `index` to the next non-punctuation character.
|
||||
while (index < length && punctuationExppresion.test(value.charAt(index))) {
|
||||
index += 1
|
||||
}
|
||||
}
|
||||
|
||||
return result.join('')
|
||||
}
|
||||
Reference in New Issue
Block a user