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.
37 lines
1.0 KiB
37 lines
1.0 KiB
// 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; |
|
};
|
|
|