( tokens: NumberSkeletonToken[] )
| 170 | * https://github.com/unicode-org/icu/blob/master/docs/userguide/format_parse/numbers/skeletons.md#skeleton-stems-and-options |
| 171 | */ |
| 172 | export 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 | {} |
no test coverage detected