123456789101112131415161718192021222324252627282930 |
- // Based on:
- // http://norbertlindenberg.com/2012/05/ecmascript-supplementary-characters/
- // and:
- // https://github.com/mathiasbynens/String.fromCodePoint/blob/master
- // /fromcodepoint.js
- 'use strict';
- var floor = Math.floor, fromCharCode = String.fromCharCode;
- module.exports = function (codePoint/*, …codePoints*/) {
- var chars = [], l = arguments.length, i, c, result = '';
- for (i = 0; i < l; ++i) {
- c = Number(arguments[i]);
- if (!isFinite(c) || c < 0 || c > 0x10FFFF || floor(c) !== c) {
- throw new RangeError("Invalid code point " + c);
- }
- if (c < 0x10000) {
- chars.push(c);
- } else {
- c -= 0x10000;
- chars.push((c >> 10) + 0xD800, (c % 0x400) + 0xDC00);
- }
- if (i + 1 !== l && chars.length <= 0x4000) continue;
- result += fromCharCode.apply(null, chars);
- chars.length = 0;
- }
- return result;
- };
|