# Hashtag 連結

本頁說明 `MDViewer` 如何把內文中的 `#tag` 轉成連結，以及比對規則與限制。

## 啟用

```javascript
new MDViewer({
    id: "viewer",
    sync: { editor: editor },
    hashtag: { path: "/search?tag=", target: "_blank" }
});
```

| 條件 | 結果 |
|---|---|
| `hashtag.path` 為非空字串 | 啟用轉換 |
| `hashtag.path` 為空或未設定 | 不轉換，`#tag` 原樣輸出 |
| 使用 `MDParser` | 不轉換：`MDParser` 傳給管線的路徑為 `null` |

## 輸出

```markdown
今天的主題 #JavaScript 與 #前端
```

```html
今天的主題 <a class="tag" href="/search?tag=JavaScript" target="_blank">JavaScript</a> 與 <a class="tag" href="/search?tag=前端" target="_blank">前端</a>
```

| 項目 | 規則 |
|---|---|
| `href` | `hashtag.path` 直接串接標籤文字，不做 URL encode |
| 顯示文字 | 不含 `#` |
| `class` | `tag`，由 `NanoMD.css` 提供樣式 |
| `target` | `hashtag.target` 為 `"_blank"` 時 `_blank`，其他值一律 `_self` |

## 比對規則

| 規則 | 說明 |
|---|---|
| 前綴 | 半形 `#` 或全形 `＃` |
| 前方 | 必須緊接一個空白字元（含換行），所以緊貼前文的 `#`（`a#b`）不會轉換；行首的 `#` 前方視為換行，會轉換 |
| 標籤字元 | 中日韓統一表意文字、平假名／片假名、韓文音節、英數字與底線 |
| 結束 | 遇到不在上列範圍的字元（標點、空白、`-`）即結束 |
| 跳脫 | 寫成 `\#tag` 時不轉換，輸出 `#tag` 文字 |

`setHashtag` 在管線最後執行，程式碼區塊與行內 code 已先換成佔位符，因此其中的 `#` 不受影響。`#` 加空白是標題語法，會由 `setHeading` 先處理。
