12345678910111213141516171819202122232425262728293031323334353637 |
- // 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;
- // eslint-disable-next-line no-unused-vars
- module.exports = function (codePoint1 /*, …codePoints*/) {
- var chars = [], length = arguments.length, i, codePoint, result = "";
- for (i = 0; i < length; ++i) {
- codePoint = Number(arguments[i]);
- if (
- !isFinite(codePoint) ||
- codePoint < 0 ||
- codePoint > 0x10ffff ||
- floor(codePoint) !== codePoint
- ) {
- throw new RangeError("Invalid code point " + codePoint);
- }
- if (codePoint < 0x10000) {
- chars.push(codePoint);
- } else {
- codePoint -= 0x10000;
- // eslint-disable-next-line no-bitwise
- chars.push((codePoint >> 10) + 0xd800, codePoint % 0x400 + 0xdc00);
- }
- if (i + 1 !== length && chars.length <= 0x4000) continue;
- result += fromCharCode.apply(null, chars);
- chars.length = 0;
- }
- return result;
- };
|