# tinymarkdown で書けること

記事は、わざと小さく絞った Markdown のサブセットで書いている。
対応していない書き方はそのままテキストとして表示されるので、<b>これ</b> もエスケープされたまま出る。
**太字** や *強調* も同じで、記号ごと表示される。

## セクション

`#` から `#####` までの見出しが、入れ子のセクションを開く。
見出しにはその文字列から作った id が付き、末尾の `#` からその場所へリンクできる。同じ id が重なると `-1`、`-2` を足して分ける。決め方は [見出しに id と permalink を付けた](2026-10-25-permalink.md) に書いた。

### 3 段目の見出し

#### 4 段目の見出し

##### 5 段目の見出し

###### 6 段目はサポート外で、段落のテキストになる

## リスト

当初は `- ` だけに絞っていたが、生成される文章には `* ` の箇条書きも出てくる。
結局、記事を書くたびに直さなくて済むように、`* ` にも対応を追加した。

- 1 行に 1 項目で、`- ` または `* ` で始める。記号の後ろには半角スペースが必要。
* この項目は `* ` で書いている。`- ` と混ぜても同じ箇条書きになる。
- 字下げした次の行は、
  直前の項目の続きになる。
- `- ` または `* ` で始まる字下げした行は、いちばん近い上の項目の入れ子になる。
  * こう書くと、この行が上の項目の子になる。親と子で記号が違ってもよい。
- 番号付きリストはない。
- 空行でリストが終わる。

`*強調*` や `**太字**` のように記号の直後にスペースがないものは、箇条書きにはならない。
インラインの強調記法にも対応していないので、これまでどおり記号ごとテキストとして表示される。

## 引用

> `> ` で始まる行が引用になる。
>
> 中身はもう一度ドキュメントとしてパースされるので、
>
> - リストや
> - コードブロック、入れ子の引用も書ける。

## アラート

引用の先頭行が `[!NOTE]`、`[!TIP]`、`[!IMPORTANT]`、`[!WARNING]`、`[!CAUTION]` のどれかだけのとき、その引用はアラートになる。種類の大文字小文字は区別しない。

> [!NOTE]
> こう書くと、種類ごとの色とアイコンの付いたアラートとして描かれる。

種類と描き方は [GitHub のアラート記法に対応した](2026-10-24-alerts.md) に書いた。

## 表

GitHub 風のパイプ区切りの表に対応している。

| 書き方 | 結果 |
| :--- | :---: |
| `` `code` `` | インラインのコード |
| `[text](url)` | リンク |
| `a \| b` | セルの中の `\|` |

2 行目は `| --- | --- |` のような区切り行で、列の数がヘッダーと同じでなければ表にならない。先頭の `|` は必要で、末尾は省略できる。足りないセルは空、多いセルは捨てる。区切り行の `:---:` は受け付けるが、揃え方は無視する。

## インライン

段落、リスト、見出し、表のセルの中では、`` `code` `` とリンクだけが使える。
コードはバッククォートの数を揃えて閉じ、複数行にまたがると改行は空白になる。
リンクのテキストにはコードを書けるが、`[` `]` や入れ子のリンクは書けない。

リンクの行き先は URL の形で決まる。`http`、`https`、`mailto` はそのままリンクし、`/` や `#` で始まる URL もそのまま使う。リポジトリ内の相対パスはファイルの置き場所から解決し、記事や文書ならこのサイトのページ、それ以外のファイルは GitHub の main ブランチへリンクする。ほかのスキームはテキストのままになる。

たとえば [tinymarkdown の設計メモ](../docs/sketch/ja/blog.md) はこのサイトの `/docs/` のページへ、
[パッケージのソース](../go/pkg/tinymarkdown/tinymarkdown.go) は GitHub へリンクする。

## コードブロック

フェンスはちょうど 3 つのバッククォート。開始行の後ろの文字列（`go` など）は読み飛ばし、`svg` のときだけ中身を生のマークアップとしてそのまま埋め込む（インライン SVG になる）。それ以外の言語名は無視され、ハイライトはない。開始行を字下げすると、その分だけ中身の行頭も取り除く（CommonMark と同じ）。閉じるフェンスは前後の空白を無視し、閉じないまま終わると最後までをコードブロックとする。長い行は折り返さず、ブロックの中で横にスクロールする。ブロックの右上の Copy ボタンを押すと、中身がクリップボードにコピーされる。

```go
func Render(w io.Writer, n Node, r Renderer) error {
	switch n := n.(type) {
	case TextNode:
		return r.Text(w, n) // a long line to check that narrow screens scroll horizontally instead of wrapping
	}
	return nil
}
```

字下げしたフェンスも使える。ソースではフェンスも中身も 3 文字ぶん字下げしてあるが、描画されるときにはその 3 文字が取り除かれる。

   ```go
   x := 1
   ```

コードブロックの後のテキストは、また段落に戻る。

## 試す

ヘッダーの `preview`（`/preview`）では、書いた Markdown がこのサイトでどう見えるかをその場で確かめられる。記事と同じ renderer をブラウザーで動かしているので、見出しの id と permalink、アラート、表、コードブロックの Copy ボタンまで、記事と同じ形で出る。詳しくは [Markdown をその場で試せる /preview を付けた](2026-10-25-preview.md) に書いた。
