文件 1.11.6

程式碼與 Mermaid

本頁說明 fenced code block、縮排程式碼區塊、語法高亮、複製按鈕與 Mermaid 圖表。

Fenced Code Block

```javascript
const greet = (name) => `Hello, ${name}`;
```

輸出結構:

<pre class="prettyprint" name="javascript">
  <code class="language-javascript" name="javascript">
    <ol><li>const&nbsp;greet...</li></ol>
  </code>
  <button class="copy"></button>
</pre>
規則 說明
圍欄 只支援三個反引號;~~~ 不支援
每行一個 <li> 由 CSS 顯示行號
共同縮排 以第一行的縮排(取 4 的倍數)為基準,從每一行移除
內容跳脫 <、>、&、引號與空白轉成 entity
標準模式 不處理,見 標準模式
同一行 ```word``` 會把 word 當成語言名稱,輸出空的 <code>

語言與高亮

語言名稱轉小寫後寫入 name 屬性;只有在下列清單中時才加上 language-<名稱> class:

javascript、js、ts、typescript、html、css、xml、json、sql、java、python、ruby、php、cpp、csharp、swift、kotlin、go、rust、perl、bash

實際上色由 Google code-prettify 的 PR.prettyPrint() 依 prettyprint class 完成,它會自行偵測語言,所以不在清單中的語言也可能被上色。MDViewer 在每次渲染後自動呼叫。

複製按鈕

每個區塊尾端都有 <button class="copy">。在 MDViewer 中點擊會把第一個子元素(<code>)的 innerText 寫入剪貼簿,成功時區塊加上 success class 1 秒,失敗加上 error class。navigator.clipboard 需要 HTTPS 或 localhost。

縮排程式碼區塊

以 4 個以上空白或 Tab 開頭的連續行輸出 <pre class="prettyprint"><code>,同樣帶行號與複製按鈕,但沒有語言。

例外 原因
區塊內含 HTML 標籤 跳過不轉換,避免把縮排的 HTML 當成程式碼
巢狀列表 列表在前一步已轉換,縮排項目不會變成程式碼

Mermaid

```mermaid
graph LR
    A[Editor] --> B[Viewer]
```

語言為 mermaid 時輸出 <div class="mermaid"> 而不是 <pre>。MDViewer 渲染後會把 <br> 還原為換行、&gt; 還原為 >,再呼叫 mermaid.run()。Mermaid 11.4.1 由 bundle 自動載入,見 執行期依賴;匯出的 HTML 不載入 Mermaid。

EN