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