summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2021-01-16 15:40:11 +0000
committerMichael Williamson <mike@zwobble.org>2021-01-16 15:40:11 +0000
commitd4cb5b0f45a95f37f92cac2bb4dc8a998c31d224 (patch)
treec0c002024ff6504045861048a9f2fd5174fb8426
parent5138195d335706a59ff19b60bb63ae28ca25b490 (diff)
Include strings for scalar values
-rw-r--r--js/src/index.ts22
-rw-r--r--js/test/tests.ts48
2 files changed, 48 insertions, 22 deletions
diff --git a/js/src/index.ts b/js/src/index.ts
index 13b1f3b..1563b59 100644
--- a/js/src/index.ts
+++ b/js/src/index.ts
@@ -1,15 +1,20 @@
import dingbats from "./dingbats";
-interface UnicodeScalarValue {
+export interface UnicodeScalarValue {
codePoint: number;
+ string: string;
}
const dingbatsByDec: {[key: string]: UnicodeScalarValue} = {};
const dingbatsByHex: {[key: string]: UnicodeScalarValue} = {};
+const fromCodePoint = String.fromCodePoint ? String.fromCodePoint : fromCodePointPolyfill;
+
for (const dingbat of dingbats) {
+ const codePoint = parseInt(dingbat["Unicode dec"], 10);
const scalarValue = {
- codePoint: parseInt(dingbat["Unicode dec"], 10),
+ codePoint: codePoint,
+ string: fromCodePoint(codePoint),
};
dingbatsByDec[dingbat["Typeface name"] + "_" + dingbat["Dingbat dec"]] = scalarValue;
@@ -27,3 +32,16 @@ export function dec(typeface: string, dec: string): UnicodeScalarValue | undefin
export function hex(typeface: string, hex: string): UnicodeScalarValue | undefined {
return dingbatsByHex[typeface + "_" + hex.toUpperCase()];
}
+
+function fromCodePointPolyfill(codePoint: number) {
+ if (codePoint <= 0xFFFF) {
+ // BMP
+ return String.fromCharCode(codePoint);
+ } else {
+ // Astral
+ // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+ const highSurrogate = Math.floor((codePoint - 0x10000) / 0x400) + 0xD800;
+ const lowSurrogate = (codePoint - 0x10000) % 0x400 + 0xDC00;
+ return String.fromCharCode(highSurrogate, lowSurrogate);
+ }
+};
diff --git a/js/test/tests.ts b/js/test/tests.ts
index a00b827..68a4bdf 100644
--- a/js/test/tests.ts
+++ b/js/test/tests.ts
@@ -3,41 +3,49 @@ import assert from "assert";
import * as dingbatToUnicode from "../";
export function canConvertFromDingbatCodePointToUnicode() {
- const result = dingbatToUnicode.codePoint("Wingdings", 41);
+ const result = dingbatToUnicode.codePoint("Wingdings", 41)!!;
- assert.deepStrictEqual(result, {
- codePoint: 0x2706,
- });
+ assert.strictEqual(result.codePoint, 0x2706);
}
export function canConvertFromDecimalDingbatToUnicode() {
- const result = dingbatToUnicode.dec("Wingdings", "41");
+ const result = dingbatToUnicode.dec("Wingdings", "41")!!;
- assert.deepStrictEqual(result, {
- codePoint: 0x2706,
- });
+ assert.strictEqual(result.codePoint, 0x2706);
}
export function canConvertFromHexDingbatToUnicode() {
- const result = dingbatToUnicode.hex("Wingdings", "29");
+ const result = dingbatToUnicode.hex("Wingdings", "29")!!;
- assert.deepStrictEqual(result, {
- codePoint: 0x2706,
- });
+ assert.strictEqual(result.codePoint, 0x2706);
}
export function canConvertFromUppercaseHexDingbatToUnicode() {
- const result = dingbatToUnicode.hex("Wingdings", "3E");
+ const result = dingbatToUnicode.hex("Wingdings", "3E")!!;
- assert.deepStrictEqual(result, {
- codePoint: 0x2707,
- });
+ assert.strictEqual(result.codePoint, 0x2707);
}
export function canConvertFromLowercaseHexDingbatToUnicode() {
- const result = dingbatToUnicode.hex("Wingdings", "3e");
+ const result = dingbatToUnicode.hex("Wingdings", "3e")!!;
- assert.deepStrictEqual(result, {
- codePoint: 0x2707,
- });
+ assert.strictEqual(result.codePoint, 0x2707);
+}
+
+export function returnedValueIncludesCodePoint() {
+ const result = dingbatToUnicode.hex("Wingdings", "29")!!;
+
+ assert.strictEqual(result.codePoint, 0x2706);
+}
+
+export function whenUnicodeCodePointIsInBmpThenReturnedValueIncludesString() {
+ const result = dingbatToUnicode.hex("Wingdings", "29")!!;
+
+ assert.strictEqual(result.string, "\u2706");
+}
+
+export function whenUnicodeCodePointIsInAstralPlaneThenReturnedValueIncludesString() {
+ const result = dingbatToUnicode.hex("Wingdings", "28")!!;
+
+ assert.strictEqual(result.string, "🕿");
}