Skip to content

構文拡張#

View Markdown

非標準の Markdown 構文はオプトインです。サイトが拡張を明示的にオンにするまで、普通の文書はどこでも同じように描画されます。

オプション 既定
emojiShortcodes boolean / EmojiShortcodeOptions false
wikiLinks boolean / WikiLinkOptions false
attrs boolean / AttrsOptions false
crossReferences boolean / CrossReferencesOptions false
xrefs crossReferences の alias false
citations boolean / CitationsOptions false
budoux boolean / BudouxOptions false
cjkEmphasis boolean false
magicLinks boolean / MagicLinkOptions false
notByAi boolean / NotByAiOptions false
keyboardKeys boolean / KeyboardKeysOptions false
abbreviations boolean / AbbreviationsOptions false
definitionLists boolean / DefinitionListOptions false

絵文字ショートコード#

GitHub 風の :shortcode: エイリアスを Unicode 絵文字へ展開します。

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

export default {
  plugins: [
    oxContent({
      emojiShortcodes: true,
    }),
  ],
};

組み込み表はよく使うエイリアスを数百件カバーします。展開はフェンスとインラインコードの外で走り、未知のショートコードはそのままです。

Ship it :rocket: :tada:

Status: :white_check_mark: passed, :warning: flaky, :x: failed

Unknown aliases like :no-such-emoji: stay untouched, and so does
inline code: `:rocket:`.

描画:

Ship it 🚀 🎉

Status: ✅ passed, ⚠️ flaky, ❌ failed

Unknown aliases like :no-such-emoji: stay untouched, and so does inline code: :rocket:.

独自ショートコード#

独自の値は組み込み表にマージされ、衝突時は上書きします。キーはコロンなしで書きます。

oxContent({
  emojiShortcodes: {
    custom: {
      shipit: "🚢",
      oxc: "🦀",
    },
  },
});

Wiki リンク#

Obsidian 風の [[target]] リンクを普通のサイトリンクへ解決します。

oxContent({
  wikiLinks: {
    // トップレベルの `base` オプションが既定。
    baseUrl: "/docs/",
  },
});

展開は Markdown パースの前に走り、フェンス付きコードブロックとインラインコードスパンは保護されます。次のソースがあるとき、

See [[getting-started|Getting started]] and [[api/transform#options]].

変換は次を出します。

<p>
  See <a href="/docs/getting-started">Getting started</a> and
  <a href="/docs/api/transform#options">api/transform#options</a>.
</p>

[[target]] はターゲットをラベルにし、[[target|label]] で上書きします。#fragment 部分は slug 化します。サイト相対のターゲットには baseUrl を付けます。

Wiki リンクは生 HTML のパースよりも前に走るので、埋め込み HTML のリテラル <code> タグの中の [[...]] も展開されます。リテラルの例は Markdown のコードスパンかフェンスに置いてください。

属性構文#

markdown-it-attrs 構文で ID、クラス、属性を足します。

oxContent({
  attrs: true,
});

対応するトークンは #id.classkey=value です。末尾の {...} ブロックは、その行から描画された要素に付きます。

A lead paragraph. {.lead}

## Install {.section data-section=install}

結果は次です。

<p class="lead">A lead paragraph.</p>

<h2 id="install" class="section" data-section="install">Install</h2>

変換は文書全体に対する描画後の HTML パスです。Markdown に埋め込んだ生 HTML も影響を受けるので、リテラルの {...} 例はコードスパンかフェンスに置いてください。

CJK 強調#

CJK 文字に隣接する強調に設定は不要です。CommonMark の区切り規則がすでに許しており、ASCII スペースも要りません。

これは**重要**です。次の文でも*強調*できます。

描画:

これは重要です。次の文でも強調できます。

素の CommonMark が拒否するのは、区切りランが外側で句読点に直接接している場合です。隣接規則は Unicode 句読点を一括して読むので、東アジアの句読点は ASCII 句読点と同じようにランを止め、A**強調。**B はリテラルのままです。ラテン語の本文では間にスペースが入ることが多いので、あまり当たりません。CJK は句読点を直前の語に付けるので、日常的に起きます。

cjkEmphasis はその判定に限って、東アジアの句読点を普通の文字として分類します。

oxContent({
  cjkEmphasis: true,
});
A**強調。**B

オプションがオンなら A<strong>強調。</strong>B になり、オフならリテラルのままです。半角 ASCII 句読点は意図して触らないので、ラテン文書のパースはどちらでも同じです。

これは仕様からの意図した逸脱なので、オプトインです。境界と再分類する文字範囲の正確な話は CJK Emphasis を見てください。

マジックリンク#

オプトインの {link:@user}{link:alias}{link:label|url} リッチリンクです。アバターも付けられます。既定はオフです。詳細は マジックリンク を見てください。

相互参照#

@sec-*@fig-*@tbl-* を、label 付きの見出し、figure、画像、表へのリンクにします。既定はオフです。詳細は 相互参照 を見てください。

引用#

[@key][@key; -@other] を、ローカル CSL JSON から生成した bibliography entry へのリンクにします。既定はオフです。詳細は 引用 を見てください。

BudouX#

オプトインの budoux は、より自然な日本語改行のために visible prose へ zero-width space をビルド時に挿入します。tag、attribute、URL、entity、code、生 HTML block、island JSON payload は変えません。既定はオフです。詳細は BudouX を見てください。

NotByAI バッジ#

オプトインの <NotByAI /> は静的な人の執筆開示です。状態バッジではありません。既定はオフです。詳細は NotByAI バッジ を見てください。

キーボードキー#

オプトインの {kbd:Ctrl+K}{kbd:Cmd Shift P} です。既定はオフです。詳細は キーボードキー を見てください。

略語・用語集#

オプトインの *[LSP]: Language Server Protocol 用語展開です。既定はオフです。 詳細は 略語・用語集 を見てください。

定義リスト#

オプトインの Term / : definition 用語リストです。既定はオフです。詳細は 定義リスト を見てください。

関連#

Last updated: