Skip to content

Markdown の土台#

View Markdown

よく使う GitHub Flavored Markdown の挙動は既定でオンです。このページの機能に設定は不要です。下の描画例はすべて、このドキュメントサイト自身が既定設定で出しています。

オプション 既定 目的
gfm boolean true GitHub Flavored Markdown 拡張。
tables boolean true GFM の表。
taskLists boolean true - [ ] / - [x] チェックボックス。
strikethrough boolean true ~~text~~
autolinks boolean gfm を継承 裸の URL をリンクにする。
footnotes boolean true [^1] 参照と定義。
semanticFootnotes boolean false 数字マーカーと 1 つの <section class="footnotes">
frontmatter boolean true 描画前に YAML frontmatter をパース。
toc boolean true 見出しから目次を作る。
tocMaxDepth number 3 TOC に含める最も深い見出しレベル。

上のオプションはどれも CommonMark の上の拡張で、それぞれオプトアウトです。下のパーサは完全適合を狙います。コアプロファイルでは CommonMark 0.31.2 の仕様例 652 件を正しく描画し、毎回の CI で確認します。拡張を使わない文書は、適合スイートの HTML 正規化規則の下で仕様に適合します。マークアップはバイト一致ではありません。ox-content が見出しに slug の id 属性を付けるからです。プロファイルごとの数値は CommonMark 適合 を見てください。

より厳しい CommonMark が必要なサイトでは、明示的にオフにします。

import { oxContent } from "@ox-content/vite-plugin";

export default {
  plugins: [
    oxContent({
      strikethrough: false,
      taskLists: false,
    }),
  ],
};

#

| Feature    | Status  |
| ---------- | ------- |
| Tables     | Default |
| Task lists | Default |

描画:

Feature Status
Tables Default
Task lists Default

タスクリスト#

- [x] Parse Markdown in Rust
- [x] Render HTML
- [ ] Take over the world

描画:

  • Parse Markdown in Rust
  • Render HTML
  • Take over the world

取り消し線#

Ox Content is ~~slow~~ fast.

描画:

Ox Content is slow fast.

裸の URL はリンクになります。既定は gfm に従うので、autolinks: false で GFM の残りを捨てずにオプトアウトできます。

Docs live at https://ubugeeei-prod.github.io/ox-content/

描画:

Docs live at https://ubugeeei-prod.github.io/ox-content/

自動リンクされた URL は新しいタブで開き、rel="noopener noreferrer" が付きます。

URL は空白で終わり、末尾の句読点は取り除かれます。日本語や中国語の文章では URL と 直後の記号のあいだに空白が入らないため、全角の句読点でも URL は終わります。

詳細は https://example.com/foo。次の文。

描画:

詳細は https://example.com/foo。次の文。

URL の中の非 ASCII 文字はそのまま残るので、https://ja.wikipedia.org/wiki/日本語 のような IRI も全体がリンクになります。

脚注#

Ox Content renders footnotes natively.[^1]

[^1]: This is the footnote body.

描画:

Ox Content renders footnotes natively.1

参照は上付きリンクになります。既定のレンダラでは見えるマーカーはソースの識別子で、各定義は書いた場所で <div class="footnote"> として出ます。ページ末に定義を置くと、そこに集まります。

semanticFootnotes: true にすると、表示マーカーは文書順の安定した数字になり([^deployment-note] → 1, 2, …)、定義はアクセス可能な 1 つのセクションにまとまります。ソースの識別子は照合と slug 生成(fn-… / fnref-…)だけに使います。同じ定義への複数参照は一意の id(fnref-notefnref-note-2、…)を保ち、各出現に戻るリンクが付きます。定義本体のブロック内容はそのままです。クライアント JavaScript は不要です。

<section class="footnotes" aria-label="Footnotes">
  <ol>
    <li id="fn-deployment-note">
<a href="#fnref-deployment-note" aria-label="Back to reference 1"></a>
    </li>
  </ol>
</section>
oxContent({
  footnotes: true,
  semanticFootnotes: true,
});

このドキュメントサイトは semanticFootnotes をオンにしているので、上の実例は順序付きセクションになります。オプションの既定はオフのままなので、現在の alpha HTML は変わりません。

Frontmatter#

YAML frontmatter は描画前にパースされ、出力 HTML には出ません。このページは次で始まります。

---
title: Markdown の土台
description: 最初からオンの GitHub Flavored Markdown、frontmatter、目次の既定。
---

SSG テーマは title を文書タイトルとナビに使い、description<meta name="description"> と Open Graph タグに使います。他のキーはそのまま通ります。.md モジュールは frontmatter export として出し、コレクション はクエリに渡し、独自トランスフォーマcontext.frontmatter として受け取ります。

import { frontmatter, html } from "./guide.md";

console.log(frontmatter.title); // "Markdown Baseline"

目次#

TOC は変換中に見出しから作ります。まさにこのページのサイドバーナビもそれで動いています。tocMaxDepth: 3 は既定で # から ### までを含めます。より深い見出しは描画されますが、索引には入りません。

oxContent({
  toc: true,
  tocMaxDepth: 3,
});

TOC は .md モジュールに { depth, text, slug, children } の木として出ます。

[
  {
    "depth": 1,
    "text": "Install Guide",
    "slug": "install-guide",
    "children": [
      { "depth": 2, "text": "Prerequisites", "slug": "prerequisites", "children": [] },
      { "depth": 2, "text": "Run Vite", "slug": "run-vite", "children": [] }
    ]
  }
]

見出しには安定した id 属性(上の slug)も付くので、#タスクリスト のような深いリンクがどのページでも動きます。

見出し横の可視 # パーマリンクはオプトインです。見出しパーマリンク を見てください。既定はオフなので、既存 HTML は変わりません。

本文中の [[toc]]#

[[toc]] だけの段落は、その場でページのアウトラインになります。深いリンクから訪れた読者のいる長いページや、右側のアウトライン(ssg.theme.aside)が隠れる狭い画面で役に立ちます。

# 用語集

[[toc]]

## コンテンツ

大文字小文字は問いません。[[TOC]][[Toc]] も同じです。どこまでの深さを並べるかは tocMaxDepth が決めます。同じ行に他のものがあると文字のまま残るので、ディレクティブ自体を説明するページでも書けます。フェンス付きコードブロックの中も同じです。

アウトラインは生成 HTML の一部なので、静的なページにも検索用のデータにも入ります。Wiki リンク を有効にしていても [[toc]] はディレクティブのままです。本当に toc という名前のページへリンクするときは [[toc|toc]] と書いてください。

関連#

  1. This is the footnote body.

Last updated: