@robotical/martyblocks
Version:
MartyBlocks based on Scratch for Marty the Robot by Robotical
79 lines (58 loc) • 2.49 kB
Markdown
> Parse ICU MessageFormat pattern strings to a compact ast
[![npm Version][npm-image]][npm]
[![JS Standard Style][style-image]][style]
[![MIT License][license-image]][LICENSE]
Turns a ICU Message Format string:
```js
`You have {
numBananas, plural,
=0 {no bananas}
one {a banana}
other {
} for sale`
```
into a compact format-message ast:
```js
[ "You have ", [ "numBananas", "plural", 0, {
"=0": [ "no bananas" ],
"one": [ "a banana" ],
"other": [ [ '#' ], " bananas" ]
} ], " for sale." ]
```
Quick Examples
--------------
`npm install format-message-parse --save`
```js
import parse from 'format-message-parse'
import interpret from 'format-message-interpret'
interpret('en', parse('Hello, {name}!'))({ name: 'Jane' })
```
API
---
Generate a compact array-based AST from an ICU MessageFormat string pattern. If an empty `tokens` array is passed in, it will be filled with found tokens.
This can throw a `SyntaxError` if the pattern is not valid. The `offset` property of the error lets you know how far into the pattern tokenization was able to go before the error. The `tokens` array will have all the found tokens up until the bad syntax.
Note that the only semantic validation done in parsing is ensuring that `select`, `selectordinal`, and `plural` include an `other` sub-message. It does *not* validate that a plural keyword applies to the locale, or that a style is supported by the type, or even that the type will be supported by the interpreter. Successful parsing is not a guarantee the final message will format as expected.
```ts
class SyntaxError extends Error {
name: 'SyntaxError';
message: string;
expected: ?string;
found: ?string;
offset: number;
line: number;
column: number;
}
```
License
-------
This software is free to use under the MIT license. See the [LICENSE-MIT file][LICENSE] for license text and copyright information.
[]: https://format-message.github.io/format-message/logo.svg
[]: https://www.npmjs.org/package/format-message-parse
[]: https://img.shields.io/npm/v/format-message-parse.svg
[]: https://github.com/feross/standard
[]: https://img.shields.io/badge/code%20style-standard-brightgreen.svg
[]: https://img.shields.io/npm/l/format-message.svg
[]: https://github.com/format-message/format-message/blob/master/LICENSE-MIT