| '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('') |
| } |
| } |