You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					104 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					104 lines
				
				1.8 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var extend = require('extend-shallow');
							 | 
						||
| 
								 | 
							
								var regexCache = {};
							 | 
						||
| 
								 | 
							
								var all;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var charSets = {
							 | 
						||
| 
								 | 
							
								  default: {
							 | 
						||
| 
								 | 
							
								    '"': '"',
							 | 
						||
| 
								 | 
							
								    '"': '"',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ''': '\'',
							 | 
						||
| 
								 | 
							
								    ''': '\'',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '&': '&',
							 | 
						||
| 
								 | 
							
								    '&': '&',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '>': '>',
							 | 
						||
| 
								 | 
							
								    '>': '>',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '<': '<',
							 | 
						||
| 
								 | 
							
								    '<': '<'
							 | 
						||
| 
								 | 
							
								  },
							 | 
						||
| 
								 | 
							
								  extras: {
							 | 
						||
| 
								 | 
							
								    '¢': '¢',
							 | 
						||
| 
								 | 
							
								    '¢': '¢',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '©': '©',
							 | 
						||
| 
								 | 
							
								    '©': '©',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '€': '€',
							 | 
						||
| 
								 | 
							
								    '€': '€',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '£': '£',
							 | 
						||
| 
								 | 
							
								    '£': '£',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '®': '®',
							 | 
						||
| 
								 | 
							
								    '®': '®',
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    '¥': '¥',
							 | 
						||
| 
								 | 
							
								    '¥': '¥'
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// don't merge char sets unless "all" is explicitly called
							 | 
						||
| 
								 | 
							
								Object.defineProperty(charSets, 'all', {
							 | 
						||
| 
								 | 
							
								  get: function() {
							 | 
						||
| 
								 | 
							
								    return all || (all = extend({}, charSets.default, charSets.extras));
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Convert HTML entities to HTML characters.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @param  {String} `str` String with HTML entities to un-escape.
							 | 
						||
| 
								 | 
							
								 * @return {String}
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function unescape(str, type) {
							 | 
						||
| 
								 | 
							
								  if (!isString(str)) return '';
							 | 
						||
| 
								 | 
							
								  var chars = charSets[type || 'default'];
							 | 
						||
| 
								 | 
							
								  var regex = toRegex(type, chars);
							 | 
						||
| 
								 | 
							
								  return str.replace(regex, function(m) {
							 | 
						||
| 
								 | 
							
								    return chars[m];
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function toRegex(type, chars) {
							 | 
						||
| 
								 | 
							
								  if (regexCache[type]) {
							 | 
						||
| 
								 | 
							
								    return regexCache[type];
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  var keys = Object.keys(chars).join('|');
							 | 
						||
| 
								 | 
							
								  var regex = new RegExp('(?=(' + keys + '))\\1', 'g');
							 | 
						||
| 
								 | 
							
								  regexCache[type] = regex;
							 | 
						||
| 
								 | 
							
								  return regex;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Returns true if str is a non-empty string
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function isString(str) {
							 | 
						||
| 
								 | 
							
								  return str && typeof str === 'string';
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Expose charSets
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								unescape.chars = charSets.default;
							 | 
						||
| 
								 | 
							
								unescape.extras = charSets.extras;
							 | 
						||
| 
								 | 
							
								// don't trip the "charSets" getter unless it's explicitly called
							 | 
						||
| 
								 | 
							
								Object.defineProperty(unescape, 'all', {
							 | 
						||
| 
								 | 
							
								  get: function() {
							 | 
						||
| 
								 | 
							
								    return charSets.all;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * Expose `unescape`
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								module.exports = unescape;
							 |