mirror of
https://github.com/swc-project/swc.git
synced 2024-12-01 09:52:57 +03:00
80 lines
2.0 KiB
TypeScript
80 lines
2.0 KiB
TypeScript
// Loaded from https://unpkg.com/luxon@1.25.0/src/impl/digits.js
|
||
|
||
|
||
const numberingSystems = {
|
||
arab: "[\u0660-\u0669]",
|
||
arabext: "[\u06F0-\u06F9]",
|
||
bali: "[\u1B50-\u1B59]",
|
||
beng: "[\u09E6-\u09EF]",
|
||
deva: "[\u0966-\u096F]",
|
||
fullwide: "[\uFF10-\uFF19]",
|
||
gujr: "[\u0AE6-\u0AEF]",
|
||
hanidec: "[〇|一|二|三|四|五|六|七|八|九]",
|
||
khmr: "[\u17E0-\u17E9]",
|
||
knda: "[\u0CE6-\u0CEF]",
|
||
laoo: "[\u0ED0-\u0ED9]",
|
||
limb: "[\u1946-\u194F]",
|
||
mlym: "[\u0D66-\u0D6F]",
|
||
mong: "[\u1810-\u1819]",
|
||
mymr: "[\u1040-\u1049]",
|
||
orya: "[\u0B66-\u0B6F]",
|
||
tamldec: "[\u0BE6-\u0BEF]",
|
||
telu: "[\u0C66-\u0C6F]",
|
||
thai: "[\u0E50-\u0E59]",
|
||
tibt: "[\u0F20-\u0F29]",
|
||
latn: "\\d"
|
||
};
|
||
|
||
const numberingSystemsUTF16 = {
|
||
arab: [1632, 1641],
|
||
arabext: [1776, 1785],
|
||
bali: [6992, 7001],
|
||
beng: [2534, 2543],
|
||
deva: [2406, 2415],
|
||
fullwide: [65296, 65303],
|
||
gujr: [2790, 2799],
|
||
khmr: [6112, 6121],
|
||
knda: [3302, 3311],
|
||
laoo: [3792, 3801],
|
||
limb: [6470, 6479],
|
||
mlym: [3430, 3439],
|
||
mong: [6160, 6169],
|
||
mymr: [4160, 4169],
|
||
orya: [2918, 2927],
|
||
tamldec: [3046, 3055],
|
||
telu: [3174, 3183],
|
||
thai: [3664, 3673],
|
||
tibt: [3872, 3881]
|
||
};
|
||
|
||
// eslint-disable-next-line
|
||
const hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split("");
|
||
|
||
export function parseDigits(str) {
|
||
let value = parseInt(str, 10);
|
||
if (isNaN(value)) {
|
||
value = "";
|
||
for (let i = 0; i < str.length; i++) {
|
||
const code = str.charCodeAt(i);
|
||
|
||
if (str[i].search(numberingSystems.hanidec) !== -1) {
|
||
value += hanidecChars.indexOf(str[i]);
|
||
} else {
|
||
for (const key in numberingSystemsUTF16) {
|
||
const [min, max] = numberingSystemsUTF16[key];
|
||
if (code >= min && code <= max) {
|
||
value += code - min;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return parseInt(value, 10);
|
||
} else {
|
||
return value;
|
||
}
|
||
}
|
||
|
||
export function digitRegex({ numberingSystem }, append = "") {
|
||
return new RegExp(`${numberingSystems[numberingSystem || "latn"]}${append}`);
|
||
}
|