MCPcopy
hub / github.com/formatjs/formatjs / parseNumberSkeleton

Function parseNumberSkeleton

packages/icu-skeleton-parser/number.ts:172–378  ·  view source on GitHub ↗
(
  tokens: NumberSkeletonToken[]
)

Source from the content-addressed store, hash-verified

170 * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options
171 */
172export function parseNumberSkeleton(
173 tokens: NumberSkeletonToken[]
174): ExtendedNumberFormatOptions {
175 let result: ExtendedNumberFormatOptions = {}
176 for (const token of tokens) {
177 switch (token.stem) {
178 case 'percent':
179 case '%':
180 result.style = 'percent'
181 continue
182 case '%x100':
183 result.style = 'percent'
184 result.scale = 100
185 continue
186 case 'currency':
187 result.style = 'currency'
188 result.currency = token.options[0]
189 continue
190 case 'group-off':
191 case ',_':
192 result.useGrouping = false
193 continue
194 case 'precision-integer':
195 case '.':
196 result.maximumFractionDigits = 0
197 continue
198 case 'measure-unit':
199 case 'unit':
200 result.style = 'unit'
201 result.unit = icuUnitToEcma(token.options[0])
202 continue
203 case 'compact-short':
204 case 'K':
205 result.notation = 'compact'
206 result.compactDisplay = 'short'
207 continue
208 case 'compact-long':
209 case 'KK':
210 result.notation = 'compact'
211 result.compactDisplay = 'long'
212 continue
213 case 'scientific':
214 result = {
215 ...result,
216 notation: 'scientific',
217 ...token.options.reduce(
218 (all, opt) => ({...all, ...parseNotationOptions(opt)}),
219 {}
220 ),
221 }
222 continue
223 case 'engineering':
224 result = {
225 ...result,
226 notation: 'engineering',
227 ...token.options.reduce(
228 (all, opt) => ({...all, ...parseNotationOptions(opt)}),
229 {}

Callers 2

index.test.tsFile · 0.85

Calls 5

icuUnitToEcmaFunction · 0.85
parseNotationOptionsFunction · 0.85
parseSignFunction · 0.85

Tested by

no test coverage detected