# MDParser

本頁說明 `MDParser` 這個不需要編輯器或預覽器介面的 Markdown 轉 HTML 類別。

## 建構

```javascript
const parser = new MDParser({ standard: false, text: "# Default" });
```

| 選項 | 型別 | 預設 | 說明 |
|---|---|---|---|
| `standard` | `boolean` | `true` | `true` 時只處理標準語法；見 [標準模式](/standard-mode) |
| `text` | `string` | `""` | `parse()` 未傳參數時使用的預設文字 |

## parse()

```javascript
parser.parse(text?) // => string
```

| 輸入 | 行為 |
|---|---|
| `text` 為字串 | 轉換該字串 |
| `text` 為 `undefined` 或 `null` | 轉換建構時的 `text` |
| 空字串 | 回傳 `"<br>"`（不會改用預設文字） |

回傳值是 HTML 字串，前後可能帶有換行。每次呼叫都重新跑完整管線，沒有快取。

## 與預覽器的差異

| 項目 | `MDParser` | `MDViewer` |
|---|---|---|
| 預設模式 | 標準 | 擴充（不可改） |
| hashtag | 不轉換 | 依 `hashtag.path` |
| 程式碼高亮、Mermaid | 只輸出 `prettyprint` class 與 `.mermaid` 容器，需自行呼叫 `PR.prettyPrint()`／`mermaid.run()` | 渲染後自動執行 |
| 複製按鈕 | 輸出 `<button class="copy">`，未綁定事件 | 自動綁定剪貼簿 |

## 環境需求

`MDParser` 不建立 DOM 容器，但仍需瀏覽器環境：

- 轉換過程用 `document.createElement` 組出 HTML 片段
- 載入 bundle 時會讀取 `window.matchMedia` 並在 `<head>` 插入 CDN 資源，見 [執行期依賴](/runtime-dependencies)
- 連結指向 Vimeo 時會以同步 XHR 查詢縮圖（擴充模式），轉換期間會阻塞主執行緒

在 Node.js 使用需搭配 jsdom 等 DOM 實作並先提供 `window.matchMedia`。

## 範例

```javascript
const parser = new MDParser({ standard: false });
const html = parser.parse("```js\nconst a = 1;\n```");
document.querySelector("#out").innerHTML = html;
PR.prettyPrint();
```

輸出直接寫入 `innerHTML` 前，請先閱讀 [安全性](/security)。
