mirror of
https://activitypub.software/TransFem-org/sfm-js
synced 2024-11-25 23:45:14 +00:00
5fe291a7e7
* implement parser with TypeScript (#116) * clean parser * parser, success, failure, str, parser.map * seq * atLeast, any, alt, match, notMatch * mergeText * improve seq * lazy, createLanguage * types * regexp, refactor * nest limit * lint * state * syntaxes * sep1, succeeded, option, fn * simple * strikeWave, plainTag, inlineCode, mathInline * mention, refactor * seqPartial * 🚀 * parser trace * fix mention, implement hashtag * lineBegin, lineEnd, refactor * imple codeBlock, fix lineEnd * codeBlock, mathBlock * fix codeBlock * fix mathBlock * fix codeBlock * lint * fix inlineCode * 🚀 * centerTag * fix nesting limit * fix unicodeEmoji * 🚀 * search * refactor * seqPartial -> seqOrText * lint * url, urlAlt * 🚀 * 🚀 * text * fix * link * linkLabel state * lint * nesting limit for link label * fix url bracket pair * nest * refactor * refactor * remove * add test * wip quote * add quote test * quote * refactor * hashtag * refactor * type * type * refactor * lint * url * italicAsta, italicUnder * italicAsta, italicUnder, mention, rethink spec * rethink spec * test: change implementation-dependent parts * hashtag * add mention test * mention * mention * mention * mention * url * test * hashtag * Revert "Auxiliary commit to revert individual files from 373972beef10eb99ff3e3635a32a207854154a2a" This reverts commit 622b66e20778ad5c283ea7629db853cbf2bb601f. * package-lock * Update tsconfig.json * Update tsconfig.json * ignore a tsd error when importing twemoji-parser regexp * lint * lint Co-authored-by: syuilo <Syuilotan@yahoo.co.jp> * v0.23.0-canary.1 * readme * update chagelog * update changelog * update changelog * refactor * update core combinators Co-authored-by: syuilo <Syuilotan@yahoo.co.jp>
9.8 KiB
9.8 KiB
目次
ブロック構文:
インライン構文:
- 揺れる字
- 太字
- 目立たない字
- イタリック
- 打ち消し線
- インラインコード
- インライン数式
- メンション
- ハッシュタグ
- URL
- リンク
- 絵文字コード(カスタム絵文字)
- MFM関数
- Unicode絵文字
- テキスト
Block: 引用ブロック
形式
> abc
>abc
>>nest
詳細
- 引用された内容には再度FullParserを適用する。
>
の後に続く0~1文字のスペースを無視する。- 隣接する引用の行は一つになる。
- 複数行の引用では空行も含めることができる。
- 引用の後ろにある空行は無視される。(#61)
ノード
{
type: 'quote',
children: [
{ type: 'text', props: { text: 'abc' } }
]
}
Block: 検索ブロック
形式
MFM 書き方 Search
MFM 書き方 検索
MFM 書き方 [Search]
MFM 書き方 [検索]
詳細
- Searchの大文字小文字は区別されない。
ノード
{
type: 'search',
props: {
query: 'MFM 書き方',
content: 'MFM 書き方 Search'
}
}
Block: コードブロック
形式
``` a b``` ```c ```` ```
```js abc ````
詳細
- langは指定されない場合はnullになる。
ノード
{
type: 'blockCode',
props: {
code: 'abc',
lang: 'js'
}
}
Block: 数式ブロック
形式
\[a = 1\]
\[
a = 2
\]
詳細
\[
は行頭でなければならない。\]
は行末でなければならない。- 前後のスペースと改行はトリミングされる。
ノード
{
type: 'mathBlock',
props: {
formula: 'a = 1'
}
}
Block: 中央寄せブロック
形式
<center>abc</center>
<center>
abc
</center>
詳細
<center>
は行頭でなければならない。</center>
は行末でなければならない。- 内容には再度InlineParserを適用する。
ノード
{
type: 'center',
children: [
{ type: 'text', props: { text: 'abc' } }
]
}
Inline: 揺れる字
廃止予定の構文。代替の構文が用意されています。
形式
***big!***
詳細
- 内容には再度InlineParserを適用する。
- 内容にはすべての文字、改行が使用できる。
- 内容を空にすることはできない。
ノード
{
type: 'fn',
props: {
name: 'tada',
args: { }
},
children: [
{ type: 'text', props: { text: 'big!' } }
]
}
Inline: 太字
形式
構文1:
**bold**
構文2:
__bold__
構文3:
<b>bold</b>
詳細
- 内容には再度InlineParserを適用する。
- 内容を空にすることはできない。
構文1,3のみ:
- 内容にはすべての文字、改行が使用できる。
構文2のみ:
- 内容には
[a-z0-9 \t]i
にマッチする文字が使用できる。
ノード
{
type: 'bold',
children: [
{ type: 'text', props: { text: 'bold' } }
]
}
Inline: 目立たない字
形式
<small>small</small>
詳細
- 内容には再度InlineParserを適用する。
- 内容を空にすることはできない。
- 内容にはすべての文字、改行が使用できる。
ノード
{
type: 'small',
children: [
{ type: 'text', props: { text: 'small' } }
]
}
Inline: イタリック
形式
構文1:
<i>italic</i>
構文2:
*italic*
構文3:
_italic_
詳細
- 内容には再度InlineParserを適用する。
- 内容を空にすることはできない。
構文1のみ:
- 内容にはすべての文字、改行が使用できる。
構文2,3のみ:
※1つ目の*
と_
を開始記号と呼ぶ。
- 内容には
[a-z0-9 \t]i
にマッチする文字が使用できる。 - 開始記号の前の文字が
[a-z0-9]i
に一致しない時にイタリック文字として判定される。
ノード
{
type: 'italic',
children: [
{ type: 'text', props: { text: 'italic' } }
]
}
Inline: 打ち消し線
形式
構文1:
~~strike~~
構文2:
<s>strike</s>
詳細
- 内容には再度InlineParserを適用する。
- 内容を空にすることはできない。
構文1のみ:
- 内容には
~
、改行以外の文字を使用できる。
構文2のみ:
- 内容にはすべての文字、改行が使用できる。
ノード
{
type: 'strike',
children: [
{ type: 'text', props: { text: 'strike' } }
]
}
Inline: インラインコード
形式
`$abc <- 1`
詳細
- 内容を空にすることはできない。
- 内容には改行を含めることができない。
- 内容には「´」を含めることができない。
ノード
{
type: 'inlineCode',
props: {
code: '$abc <- 1'
}
}
Inline: インライン数式
形式
\(y = 2x\)
詳細
- 内容を空にすることはできない。
- 内容には改行を含めることができない。
ノード
{
type: 'mathInline',
props: {
formula: 'y = 2x'
}
}
Inline: メンション
形式
@user@misskey.io
@user
詳細
- 最初の
@
の前の文字が[a-z0-9]i
に一致しない場合にメンションとして認識する。
ユーザ名
- 1文字以上。
A
~Z
0
~9
_
-
が含められる。- 1文字目と最後の文字は
-
にできない。
ホスト名
- 1文字以上。
A
~Z
0
~9
_
-
.
が含められる。- 1文字目と最後の文字は
-
.
にできない。
ノード
{
type: 'mention',
props: {
username: 'user',
host: 'misskey.io',
acct: '@user@misskey.io'
}
}
{
type: 'mention',
props: {
username: 'user',
host: null,
acct: '@user'
}
}
Inline: ハッシュタグ
形式
#abc
詳細
- 内容を空にすることはできない。
- 内容には半角スペース、全角スペース、改行、タブ文字を含めることができない。
- 内容には
.
,
!
?
'
"
#
:
/
【
】
<
>
【
】
(
)
「
」
(
)
を含めることができない。 - 括弧は対になっている時のみ内容に含めることができる。対象:
()
[]
「」
()
#
の前の文字が[a-z0-9]i
に一致しない場合にハッシュタグとして認識する。- 内容が数字のみの場合はハッシュタグとして認識しない。
ノード
{
type: 'hashtag',
props: {
hashtag: 'abc'
}
}
Inline: URL
形式
構文1:
https://misskey.io/@ai
http://hoge.jp/abc
構文2:
<https://misskey.io/@ai>
<http://藍.jp/abc>
詳細
構文1のみ:
- 内容には
[.,a-z0-9_/:%#@$&?!~=+-]i
にマッチする文字を使用できる。 - 内容には対になっている括弧を使用できる。対象:
( )
[ ]
.
や,
は最後の文字にできない。
構文2のみ:
- 内容には改行、スペース以外の文字を使用できる。
ノード
構文1:
{
type: 'url',
props: {
url: 'https://misskey.io/@ai'
}
}
または
{
type: 'url',
props: {
url: 'https://misskey.io/@ai',
brackets: false
}
}
構文2:
{
type: 'url',
props: {
url: 'https://misskey.io/@ai',
brackets: true
}
}
Inline: リンク
形式
silent=false
[Misskey.io](https://misskey.io/)
silent=true
?[Misskey.io](https://misskey.io/)
詳細
- リンクラベルには再度InlineParserを適用する。ただし、リンクラベルではURL、リンク、メンションは使用できない。
ノード
[
{
type: 'link',
props: {
silent: false,
url: 'https://misskey.io/'
},
children: [
{
type: 'text',
props: {
text: 'Misskey.io'
}
}
]
}
]
Inline: 絵文字コード(カスタム絵文字)
形式
:thinking_ai:
詳細
- 内容を空にすることはできない。
- 内容には[a-z0-9_+-]iにマッチする文字を使用できる。
ノード
{
type: 'emojiCode',
props: {
name: 'thinking_ai'
}
}
Inline: 関数
形式
構文1:
$[shake 🍮]
$[spin.alternate 🍮]
$[shake.speed=1s 🍮]
$[flip.h,v MisskeyでFediverseの世界が広がります]
詳細
- 内容には再度InlineParserを適用する。
- 内容を空にすることはできない。
- 内容には改行も含めることが可能です。
ノード
{
type: 'fn',
props: {
name: 'shake',
args: { }
},
children: [
{ type: 'unicodeEmoji', props: { emoji: '👍' } }
]
}
Inline: Unicode絵文字
形式
😇
ノード
{
type: 'unicodeEmoji',
props: {
emoji: '😇'
}
}
Inline: テキスト
形式
abc
ノード
{
type: 'text',
props:
text: 'abc'
}
}