sfm-js/docs/syntax.md
marihachi e38a6e6576
ハッシュタグの変更 (#111)
* fix #110

* add tests for hashtag
2022-05-21 19:33:28 +09:00

9.9 KiB
Raw Blame History

目次

ブロック構文:

インライン構文:

Block: 引用ブロック

形式

> abc
>abc
>>nest

詳細

  • 引用された内容には再度FullParserを適用する。
  • >の後に続く01文字のスペースを無視する。
  • 隣接する引用の行は一つになる。
  • 複数行の引用では空行も含めることができる。
  • 引用の後ろにある空行は無視される。(#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-zA-Z0-9]に一致しない)のいずれかの時にイタリック文字として判定される。

ノード

{
  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-zA-Z0-9]に一致しない)のいずれかの場合にメンションとして認識する。

ユーザ名

  • 1文字以上。
  • AZ 09 _ -が含められる。
  • 1文字目と最後の文字は-にできない。

ホスト名

  • 1文字以上。
  • AZ 09 _ - .が含められる。
  • 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-zA-Z0-9]に一致しない)のいずれかの場合にハッシュタグとして認識する。
  • 内容が数字のみの場合はハッシュタグとして認識しない。

ノード

{
  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'
  }
}