Skip to content

Commit 4227a28

Browse files
committed
(third) Allow IntegerLiterals as variant keys
1 parent d8a062d commit 4227a28

File tree

3 files changed

+37
-10
lines changed

3 files changed

+37
-10
lines changed

experiments/stasm/third/impl/context.ts

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
1-
import {Message, Parameter, PatternElement, Selector, StringLiteral, Variant} from "./model.js";
1+
import {
2+
IntegerLiteral,
3+
Message,
4+
Parameter,
5+
PatternElement,
6+
Selector,
7+
StringLiteral,
8+
Variant,
9+
} from "./model.js";
210
import {REGISTRY} from "./registry.js";
3-
import {BooleanValue, NumberValue, RuntimeValue, StringValue} from "./runtime.js";
11+
import {BooleanValue, NumberValue, PluralValue, RuntimeValue, StringValue} from "./runtime.js";
412

513
// Resolution context for a single formatMessage() call.
614

@@ -95,12 +103,31 @@ export class FormattingContext {
95103
}
96104
}
97105

98-
// TODO(stasm): Add NumberLiterals as keys (maybe).
99-
function matches_corresponding_selector(key: StringLiteral, idx: number) {
100-
return (
101-
key.value === resolved_selectors[idx].value?.value ||
102-
key.value === resolved_selectors[idx].default
103-
);
106+
function matches_corresponding_selector(key: StringLiteral | IntegerLiteral, idx: number) {
107+
let selector = resolved_selectors[idx];
108+
switch (key.type) {
109+
case "StringLiteral": {
110+
if (key.value === selector.value?.value) {
111+
return true;
112+
}
113+
break;
114+
}
115+
case "IntegerLiteral": {
116+
let num = parseInt(key.value);
117+
if (selector.value instanceof NumberValue) {
118+
if (num === selector.value.value) {
119+
return true;
120+
}
121+
} else if (selector.value instanceof PluralValue) {
122+
if (key.value === selector.value.value || num === selector.value.count) {
123+
return true;
124+
}
125+
}
126+
break;
127+
}
128+
}
129+
130+
return key.value === selector.default;
104131
}
105132

106133
for (let variant of variants) {

experiments/stasm/third/impl/model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export interface Selector {
1717
}
1818

1919
export interface Variant {
20-
keys: Array<StringLiteral>;
20+
keys: Array<StringLiteral | IntegerLiteral>;
2121
value: Array<PatternElement>;
2222
}
2323

experiments/stasm/third/impl/runtime.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export class NumberValue extends RuntimeValue<number> {
5757
}
5858

5959
export class PluralValue extends RuntimeValue<Intl.LDMLPluralRule> {
60-
private count: number;
60+
public count: number;
6161

6262
constructor(value: Intl.LDMLPluralRule, count: number) {
6363
super(value);

0 commit comments

Comments
 (0)