37 lines
820 B
JavaScript
37 lines
820 B
JavaScript
'use strict'
|
|
|
|
module.exports = factory
|
|
|
|
var backslash = '\\'
|
|
|
|
// Factory to de-escape a value, based on a list at `key` in `ctx`.
|
|
function factory(ctx, key) {
|
|
return unescape
|
|
|
|
// De-escape a string using the expression at `key` in `ctx`.
|
|
function unescape(value) {
|
|
var prev = 0
|
|
var index = value.indexOf(backslash)
|
|
var escape = ctx[key]
|
|
var queue = []
|
|
var character
|
|
|
|
while (index !== -1) {
|
|
queue.push(value.slice(prev, index))
|
|
prev = index + 1
|
|
character = value.charAt(prev)
|
|
|
|
// If the following character is not a valid escape, add the slash.
|
|
if (!character || escape.indexOf(character) === -1) {
|
|
queue.push(backslash)
|
|
}
|
|
|
|
index = value.indexOf(backslash, prev + 1)
|
|
}
|
|
|
|
queue.push(value.slice(prev))
|
|
|
|
return queue.join('')
|
|
}
|
|
}
|