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.
		
		
		
		
		
			
		
			
				
					
					
						
							40 lines
						
					
					
						
							1.0 KiB
						
					
					
				
			
		
		
	
	
							40 lines
						
					
					
						
							1.0 KiB
						
					
					
				var punycode = require('punycode');
 | 
						|
var revEntities = require('./reversed.json');
 | 
						|
 | 
						|
module.exports = encode;
 | 
						|
 | 
						|
function encode (str, opts) {
 | 
						|
    if (typeof str !== 'string') {
 | 
						|
        throw new TypeError('Expected a String');
 | 
						|
    }
 | 
						|
    if (!opts) opts = {};
 | 
						|
 | 
						|
    var numeric = true;
 | 
						|
    if (opts.named) numeric = false;
 | 
						|
    if (opts.numeric !== undefined) numeric = opts.numeric;
 | 
						|
 | 
						|
    var special = opts.special || {
 | 
						|
        '"': true, "'": true,
 | 
						|
        '<': true, '>': true,
 | 
						|
        '&': true
 | 
						|
    };
 | 
						|
 | 
						|
    var codePoints = punycode.ucs2.decode(str);
 | 
						|
    var chars = [];
 | 
						|
    for (var i = 0; i < codePoints.length; i++) {
 | 
						|
        var cc = codePoints[i];
 | 
						|
        var c = punycode.ucs2.encode([ cc ]);
 | 
						|
        var e = revEntities[cc];
 | 
						|
        if (e && (cc >= 127 || special[c]) && !numeric) {
 | 
						|
            chars.push('&' + (/;$/.test(e) ? e : e + ';'));
 | 
						|
        }
 | 
						|
        else if (cc < 32 || cc >= 127 || special[c]) {
 | 
						|
            chars.push('&#' + cc + ';');
 | 
						|
        }
 | 
						|
        else {
 | 
						|
            chars.push(c);
 | 
						|
        }
 | 
						|
    }
 | 
						|
    return chars.join('');
 | 
						|
}
 |