summaryrefslogtreecommitdiff
path: root/node_modules/luxon/src/impl/digits.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/luxon/src/impl/digits.js')
-rw-r--r--node_modules/luxon/src/impl/digits.js94
1 files changed, 94 insertions, 0 deletions
diff --git a/node_modules/luxon/src/impl/digits.js b/node_modules/luxon/src/impl/digits.js
new file mode 100644
index 0000000..db8dcca
--- /dev/null
+++ b/node_modules/luxon/src/impl/digits.js
@@ -0,0 +1,94 @@
+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],
+};
+
+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;
+ }
+}
+
+// cache of {numberingSystem: {append: regex}}
+const digitRegexCache = new Map();
+export function resetDigitRegexCache() {
+ digitRegexCache.clear();
+}
+
+export function digitRegex({ numberingSystem }, append = "") {
+ const ns = numberingSystem || "latn";
+
+ let appendCache = digitRegexCache.get(ns);
+ if (appendCache === undefined) {
+ appendCache = new Map();
+ digitRegexCache.set(ns, appendCache);
+ }
+ let regex = appendCache.get(append);
+ if (regex === undefined) {
+ regex = new RegExp(`${numberingSystems[ns]}${append}`);
+ appendCache.set(append, regex);
+ }
+
+ return regex;
+}