sfm-js/docs/api.md

92 lines
2.9 KiB
Markdown
Raw Normal View History

2021-04-18 11:11:05 +00:00
## parse API
入力文字列からノードツリーを生成します。
全てのMFM構文を利用可能です。
例:
```ts
2021-10-02 01:27:05 +00:00
const nodes = mfm.parse('hello $[tada world]');
2021-04-18 11:11:05 +00:00
console.log(JSON.stringify(nodes));
2022-01-06 14:31:21 +00:00
// => [{"type":"text","props":{"text":"hello "}},{"type":"fn","props":{"name":"tada","args":{}},"children":[{"type":"text","props":{"text":"world"}}]}]
2021-04-18 11:11:05 +00:00
```
2023-01-10 14:47:18 +00:00
### 利用可能なMFM関数やカスタム絵文字のリストを設定する
2021-10-02 01:30:44 +00:00
MFM関数の名前をホワイトリストに登録して、登録されたMFM関数以外を通常のテキストードとして解釈するように設定できます。
デフォルトではすべてのMFM関数名を受け入れるように設定されています。
2021-10-02 01:27:05 +00:00
2021-10-02 01:30:02 +00:00
例:
2021-10-02 01:27:05 +00:00
```ts
const nodes = mfm.parse('hello $[tada world]', { fnNameList: ['tada', 'spin'] });
console.log(JSON.stringify(nodes));
2022-01-06 14:31:21 +00:00
// => [{"type":"text","props":{"text":"hello "}},{"type":"fn","props":{"name":"tada","args":{}},"children":[{"type":"text","props":{"text":"world"}}]}]
2021-10-02 01:27:05 +00:00
```
```ts
const nodes = mfm.parse('hello $[pope world]', { fnNameList: ['tada', 'spin'] });
console.log(JSON.stringify(nodes));
2022-01-06 14:31:21 +00:00
// => [{"type":"text","props":{"text":"hello $[pope world]"}}]
```
2023-01-10 14:47:18 +00:00
同様に、カスタム絵文字の名前もホワイトリスト制にできます。
例:
```ts
const nodes = mfm.parse(':bap:', { emojiCodeList: ['polarbear', 'bap'] });
console.log(JSON.stringify(nodes));
// => [{"type":"emojiCode","props":{"name":"bap"}}]
```
2022-01-06 14:31:21 +00:00
### 最大のネストの深さを変更する
デフォルトで20に設定されています。
例:
```ts
const nodes = mfm.parse('**<s>cannot nest</s>**', { nestLimit: 1 });
console.log(JSON.stringify(nodes));
// => [{"type":"bold","children":[{"type":"text","props":{"text":"<s>cannot nest</s>"}}]}]
2021-10-02 01:27:05 +00:00
```
## parseSimple API
2021-04-18 11:11:05 +00:00
入力文字列からノードツリーを生成します。
絵文字コードとUnicode絵文字を利用可能です。
例:
```ts
const nodes = mfm.parseSimple('Hello :surprised_ai:');
2021-04-18 11:11:05 +00:00
console.log(JSON.stringify(nodes));
2022-01-06 14:31:21 +00:00
// => [{"type":"text","props":{"text":"Hello "}},{"type":"emojiCode","props":{"name":"surprised_ai"}}]
2021-04-18 11:11:05 +00:00
```
## toString API
ードツリーからMFM文字列を生成します。
例:
```ts
2021-10-02 01:27:05 +00:00
const nodes = mfm.parse('hello $[tada world]');
2021-04-18 11:11:05 +00:00
const output = mfm.toString(nodes);
2021-10-02 03:46:28 +00:00
console.log(output); // => "hello $[tada world]"
2021-04-18 11:11:05 +00:00
```
※元の文字列とtoString APIで出力される文字列の同一性は保障されません。
## inspect API
ノードツリーの全ノードに指定された関数を適用します。
例:
```ts
mfm.inspect(nodes, node => {
if (node.type == 'text') {
node.props.text = node.props.text.replace(/Good morning/g, 'Hello');
}
});
```
## extract API
ブール値を返す関数を渡してノードを抽出します。
このAPIはードツリーを再帰的に探索します。
例:
```ts
mfm.extract(nodes, (node) => {
return (node.type === 'emojiCode');
});
```