text: 'use strict';
  
  module.exports = factory;
  
  /* 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('\\');
          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('\\');
              }
  
              index = value.indexOf('\\', prev);
          }
  
          queue.push(value.slice(prev));
  
          return queue.join('');
      }
  }
  