sfm-js/docs/syntax.md

664 lines
9.4 KiB
Markdown
Raw Normal View History

2021-04-19 03:18:24 +00:00
<h1>目次</h2>
2021-04-18 11:11:05 +00:00
ブロック構文:
- [引用ブロック](#quote)
- [検索ブロック](#search)
- [コードブロック](#code-block)
- [数式ブロック](#math-block)
- [中央寄せブロック](#center)
インライン構文:
2021-09-30 02:06:21 +00:00
- [揺れる字](#big)
- [太字](#bold)
- [目立たない字](#small)
- [イタリック](#italic)
- [打ち消し線](#strike)
- [インラインコード](#inline-code)
- [インライン数式](#math-inline)
- [メンション](#mention)
- [ハッシュタグ](#hashtag)
- [URL](#url)
- [リンク](#link)
- [絵文字コード(カスタム絵文字)](#emoji-code)
- [MFM関数](#fn)
- [Unicode絵文字](#unicode-emoji)
- [テキスト](#text)
2021-04-18 11:11:05 +00:00
2021-09-30 02:12:45 +00:00
<h1 id="quote">Block: 引用ブロック</h1>
2021-04-18 11:11:05 +00:00
## 形式
```
> abc
>abc
>>nest
```
2021-09-30 02:17:40 +00:00
## 詳細
- 引用された内容には再度FullParserを適用する。
- `>`の後に続く01文字のスペースを無視する。
- 隣接する引用の行は一つになる。
- 複数行の引用では空行も含めることができる。
- 引用の後ろにある空行は無視される。([#61](https://github.com/misskey-dev/mfm.js/issues/61))
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'quote',
children: [
{ type: 'text', props: { text: 'abc' } }
]
}
```
2021-09-30 02:12:45 +00:00
<h1 id="search">Block: 検索ブロック</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
MFM 書き方 Search
MFM 書き方 検索
MFM 書き方 [Search]
MFM 書き方 [検索]
```
2021-09-30 02:17:40 +00:00
## 詳細
- Searchの大文字小文字は区別されない。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'search',
props: {
query: 'MFM 書き方',
content: 'MFM 書き方 Search'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="code-block">Block: コードブロック</h2>
2021-04-18 11:11:05 +00:00
## 形式
<pre>
```
a
b```
```c
````
```
</pre>
<pre>
```js
abc
````
</pre>
2021-09-30 02:17:40 +00:00
## 詳細
- langは指定されない場合はnullになる。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'blockCode',
props: {
code: 'abc',
lang: 'js'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="math-block">Block: 数式ブロック</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
\[a = 1\]
```
```
\[
a = 2
\]
```
2021-09-30 02:17:40 +00:00
## 詳細
- `\[`は行頭でなければならない。
- `\]`は行末でなければならない。
- 前後のスペースと改行はトリミングされる。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'mathBlock',
props: {
formula: 'a = 1'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="center">Block: 中央寄せブロック</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
<center>abc</center>
```
```
<center>
abc
</center>
```
2021-09-30 02:17:40 +00:00
## 詳細
- `<center>`は行頭でなければならない。
- `</center>`は行末でなければならない。
- 中身を空にすることはできない。
- 内容には再度InlineParserを適用する。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'center',
children: [
{ type: 'text', props: { text: 'abc' } }
]
}
```
2021-09-30 02:12:45 +00:00
<h1 id="big">Inline: 揺れる字</h2>
2021-04-18 11:11:05 +00:00
**廃止予定の構文。代替の構文が用意されています。**
## 形式
```
***big!***
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には再度InlineParserを適用する。
- 内容には改行も含めることが可能です。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'fn',
props: {
name: 'tada',
args: { }
},
children: [
{ type: 'text', props: { text: 'big!' } }
]
}
```
2021-09-30 02:12:45 +00:00
<h1 id="bold">Inline: 太字</h2>
2021-04-18 11:11:05 +00:00
## 形式
2021-09-30 02:06:21 +00:00
構文1:
2021-04-18 11:11:05 +00:00
```
**bold**
```
2021-09-30 02:06:21 +00:00
構文2:
2021-04-18 12:30:07 +00:00
```
__bold__
```
2021-09-30 02:06:21 +00:00
構文3:
```
<b>bold</b>
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には再度InlineParserを適用する。
構文1,3のみ:
- 内容にはすべての文字、改行が使用できる。
構文2のみ:
- 内容には`[a-z0-9 \t]i`にマッチする文字が使用できる。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'bold',
children: [
{ type: 'text', props: { text: 'bold' } }
]
}
```
2021-09-30 02:12:45 +00:00
<h1 id="small">Inline: 目立たない字</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
<small>small</small>
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には再度InlineParserを適用する。
- 内容には改行も含めることが可能です。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'small',
children: [
{ type: 'text', props: { text: 'small' } }
]
}
```
2021-09-30 02:12:45 +00:00
<h1 id="italic">Inline: イタリック</h2>
2021-04-18 11:11:05 +00:00
## 形式
構文1:
```
<i>italic</i>
```
構文2:
```
*italic*
```
構文3:
```
_italic_
```
## 詳細
- 内容には再度InlineParserを適用する。
構文1のみ:
- 内容には改行も含めることが可能です。
構文2,3のみ:
※1つ目の`*`と`_`を開始記号と呼ぶ。
- 内容には`[a-z0-9 \t]i`にマッチする文字が使用できる。
2021-05-08 12:18:23 +00:00
- 開始記号の前の文字が(無い、改行、半角スペース、[a-zA-Z0-9]に一致しない)のいずれかの時にイタリック文字として判定される。
2021-04-18 11:11:05 +00:00
2021-09-30 02:17:40 +00:00
## ノード
```js
{
type: 'italic',
children: [
{ type: 'text', props: { text: 'italic' } }
]
}
```
2021-04-18 11:11:05 +00:00
2021-09-30 02:12:45 +00:00
<h1 id="strike">Inline: 打ち消し線</h2>
2021-04-18 11:11:05 +00:00
## 形式
2021-09-30 02:06:21 +00:00
構文1:
2021-04-18 11:11:05 +00:00
```
~~strike~~
```
2021-09-30 02:06:21 +00:00
構文2:
```
<s>strike</s>
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には再度InlineParserを適用する。
構文1のみ:
- 内容には`~`、改行以外の文字を使用できる。
構文2のみ:
- 内容には改行以外の文字を使用できる。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'strike',
children: [
{ type: 'text', props: { text: 'strike' } }
]
}
```
2021-09-30 02:12:45 +00:00
<h1 id="inline-code">Inline: インラインコード</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
`$abc <- 1`
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には改行を含めることができない。
- 内容には「´」を含めることができない。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'inlineCode',
props: {
code: '$abc <- 1'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="math-inline">Inline: インライン数式</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
\(y = 2x\)
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には改行を含めることができない。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'mathInline',
props: {
formula: 'y = 2x'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="mention">Inline: メンション</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
@user@misskey.io
```
```
@user
```
2021-09-30 02:17:40 +00:00
## 詳細
- 最初の`@`の前の文字が(改行、スペース、無し、[a-zA-Z0-9]に一致しない)のいずれかの場合にメンションとして認識する。
### ユーザ名
- 1文字以上。
- `A``Z` `0``9` `_` `-`が含められる。
- 1文字目と最後の文字は`-`にできない。
### ホスト名
- 1文字以上。
- `A``Z` `0``9` `_` `-` `.`が含められる。
- 1文字目と最後の文字は`-` `.`にできない。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'mention',
props: {
username: 'user',
host: 'misskey.io',
acct: '@user@misskey.io'
}
}
```
```js
{
type: 'mention',
props: {
username: 'user',
host: null,
acct: '@user'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="hashtag">Inline: ハッシュタグ</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
#abc
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には半角スペース、全角スペース、改行、タブ文字を含めることができない。
- 内容には`.` `,` `!` `?` `'` `"` `#` `:` `/` `【` `】` `<` `>` を含めることができない。
- 括弧は対になっている時のみ内容に含めることができる。対象: `()` `[]` `「」`
- `#`の前の文字が(改行、スペース、無し、[a-zA-Z0-9]に一致しない)のいずれかの場合にハッシュタグとして認識する。
- 内容が数字のみの場合はハッシュタグとして認識しない。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'hashtag',
props: {
hashtag: 'abc'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="url">Inline: URL</h2>
2021-04-18 11:11:05 +00:00
## 形式
2021-06-05 09:02:50 +00:00
構文1:
2021-04-18 11:11:05 +00:00
```
https://misskey.io/@ai
2021-06-05 09:05:14 +00:00
```
```
2021-06-05 09:02:50 +00:00
http://hoge.jp/abc
2021-04-18 11:11:05 +00:00
```
2021-06-05 09:05:14 +00:00
2021-06-05 09:02:50 +00:00
構文2:
2021-04-18 11:11:05 +00:00
```
2021-06-05 09:02:50 +00:00
<https://misskey.io/@ai>
2021-06-05 09:05:14 +00:00
```
```
2021-06-05 09:02:50 +00:00
<http://.jp/abc>
2021-04-18 11:11:05 +00:00
```
2021-09-30 02:17:40 +00:00
## 詳細
構文1のみ:
- 内容には`[.,a-z0-9_/:%#@$&?!~=+-]i`にマッチする文字を使用できる。
- 内容には対になっている括弧を使用できる。対象: `( )` `[ ]`
- `.`や`,`は最後の文字にできない。
構文2のみ:
- 内容には改行、スペース以外の文字を使用できる。
2021-04-18 11:11:05 +00:00
## ノード
2021-07-22 11:30:46 +00:00
構文1:
2021-04-18 11:11:05 +00:00
```js
{
type: 'url',
props: {
url: 'https://misskey.io/@ai'
}
}
```
2021-07-22 11:30:46 +00:00
または
```js
{
type: 'url',
props: {
url: 'https://misskey.io/@ai',
brackets: false
}
}
```
構文2:
```js
{
type: 'url',
props: {
url: 'https://misskey.io/@ai',
brackets: true
}
}
```
2021-04-18 11:11:05 +00:00
2021-09-30 02:12:45 +00:00
<h1 id="link">Inline: リンク</h2>
2021-04-18 11:11:05 +00:00
## 形式
silent=false
```
[Misskey.io](https://misskey.io/)
```
silent=true
```
?[Misskey.io](https://misskey.io/)
```
2021-09-30 02:17:40 +00:00
## 詳細
2022-01-09 08:13:25 +00:00
- リンクラベルには再度InlineParserを適用する。ただし、リンクラベルではURL、リンク、メンションは使用できない。
2021-09-30 02:17:40 +00:00
2021-04-18 11:11:05 +00:00
## ノード
```js
[
{
type: 'link',
props: {
silent: false,
url: 'https://misskey.io/'
},
children: [
{
type: 'text',
props: {
text: 'Misskey.io'
}
}
]
}
]
```
2021-09-30 02:12:45 +00:00
<h1 id="emoji-code">Inline: 絵文字コード(カスタム絵文字)</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
:thinking_ai:
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には[a-z0-9_+-]iにマッチする文字を使用できる。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'emojiCode',
props: {
name: 'thinking_ai'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="fn">Inline: 関数</h2>
2021-04-18 11:11:05 +00:00
## 形式
2021-04-19 03:25:53 +00:00
構文1:
```
$[shake 🍮]
```
```
$[spin.alternate 🍮]
```
```
$[shake.speed=1s 🍮]
```
```
$[flip.h,v MisskeyでFediverseの世界が広がります]
```
2021-09-30 02:17:40 +00:00
## 詳細
- 内容には再度InlineParserを適用する。
- 内容には改行も含めることが可能です。
2021-04-18 11:11:05 +00:00
## ノード
```js
{
type: 'fn',
props: {
name: 'shake',
args: { }
},
children: [
{ type: 'unicodeEmoji', props: { emoji: '👍' } }
]
}
```
2021-09-30 02:12:45 +00:00
<h1 id="unicode-emoji">Inline: Unicode絵文字</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
😇
```
## ノード
```js
{
type: 'unicodeEmoji',
props: {
emoji: '😇'
}
}
```
2021-09-30 02:12:45 +00:00
<h1 id="text">Inline: テキスト</h2>
2021-04-18 11:11:05 +00:00
## 形式
```
abc
```
## ノード
```js
{
type: 'text',
props:
text: 'abc'
}
}
```