# Changelog

## v9.1.0 / 2026-08-01

- CLI 的 `-v` 會在版本號前面加上 `pangu.js`，本來只印版本號
- CLI 的 `-t`、`-f`、`-c` 不能再混用，同時給多個會出現錯誤訊息
- CLI 支援從 stdin 讀取文字，`echo "他們在release的前一天爆炸" | pangu` 會直接印出加好空格的結果，`-c` 也可以這樣用
- 修正 CLI 的輸出被導向 pipe 時，超過 64KB 的部分會被截斷的問題
- 修正 CLI 的 `-f` 現在會原封不動輸出加完空格的檔案內容，不會多加一個換行，檔案結尾本來有幾個換行就是幾個
- 修正引號的加空格規則，內容以 `+` 或 `|` 結尾時，結尾引號前面不會再多一個空格，同樣的文字加第二次空格也不會變，排版完馬上用 `-c` 檢查也會通過
- 新增 `pangu-js` 這個 CLI command，不管 PATH 順序如何都會執行到 pangu.js

## v9.0.0 / 2026-07-28

- 修正 `<wbr>` 這類元素把 `/` 兩邊拆成不同文字節點時，斜線前面會漏加空格的問題
- 拿掉了 `package.json` 的 `module` 欄位
- 拿掉了 `package.json` 的 `browser` 欄位
  - 瀏覽器端請改用 `import pangu from 'pangu/browser'`，本來就是文件建議的用法，型別也一直是對的
  - 之前用 bundler 直接 `import pangu from 'pangu'`，執行時會拿到瀏覽器版本，但是 TypeScript 給的型別是 Node.js 版本
  - 用 `<script>` 載入 UMD 檔案、或是已經在用 `pangu/browser` 的話都不受影響
- 支援的 Node.js 版本改成 v20 以上

## v8.2.0 / 2026-07-26

- 修正引號的加空格規則，當引號的內容跨越換行時，不會再把引號外面本來就有的空格吃掉

## v8.1.0 / 2026-07-26

- 修正 `-` `*` `=` `<` `>` `_` `+` 這些符號的加空格規則，夾在半形字元中間時會跟兩邊黏成同一個詞，不會再被拆開
- 修正 `+` 在字尾的加空格規則
- 修正 `|` 的加空格規則，同一行只要有 `|` 直接貼著中文，整行的 `|` 都會當成分隔符來加空格，例如 `標題|網站名稱` 會變成 `標題 | 網站名稱`
- 修正 `+` 直接貼著中文時會當成分隔符來加空格，跟 `|` 一樣以行為單位來判斷
- 修正 `!` `;` `,` `?` 後面直接貼著中文時的加空格規則，現在不管這些符號前面是什麼字元，都會在符號後面加空格
- 修正純文字中的 `<tag>` 現在會被當成一個詞來加空格，但是一般網頁中的 HTML 標籤不受影響
- 修正文字節點的開頭或結尾是 `&nbsp;`、旁邊又緊接著連結之類的元素時，會多加一個半形空格的問題
- Chrome extension 的工具列圖示新增了 OFF 狀態，切到手動模式、或是目前網址被黑白名單排除時，圖示會換成頭戴紙袋的圖示
- Chrome extension 會在所有網頁啟用瀏覽器原生的 [`text-autospace: normal;`](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-autospace) 排版
  - 預設啟用，可以在設定裡關掉
  - 需要 Chrome v140 以上版本
- `pangu/browser` 改成只提供 ESM，拿掉了 `require` 條件，`require('pangu/browser')` 會出現 `ERR_PACKAGE_PATH_NOT_EXPORTED`
  - 用 bundler 的話 `import` 照舊，不受影響
  - 在瀏覽器裡直接用 `<script>` 載入 UMD 檔案的方式也不受影響

## v8.0.0 / 2026-07-19

- 各位觀眾！Paranoid Text Spacing 演算法 v8！
  - 修正有些網頁加空格會抖動的問題
  - 修正 `/` 和 `&` 的加空格規則
  - 修正單獨出現的 `&nbsp;` 會造成空格判斷錯誤的問題，現在會先把它當成一般的半形空格
  - 修正引號緊鄰日文時，空格規則跟中文不一致的問題
  - 修正同一批動態新增的相鄰節點之間會正確加空格了
  - 修正兩個變動的節點中間如果隔著沒變動的內容，不會再把它們誤判成相鄰節點而加錯空格
  - 修正連結被其他元素包住、後面又接著其他文字時，連結前後漏加空格的問題
  - 修正兩段文字中間本來就有空白時，不會再多加一個空格，之前隔著 `<a>` 這類元素、或空白被包在 `<span>` 這類元素裡時會看不到那個空白
- 又一次史詩級性能提升！

## v7.2.1 / 2026-03-02

- 修正在 CSS Grid 和 Flexbox 容器裡插入 `<pangu>` 元素會破壞排版的問題
- 移除 Chrome extension 的 `file://` host permission

## v7.2.0 / 2025-07-05

- 趁末日前更新一下，不然以後就沒機會了
- 修正在 Google Calendar 會不小心在 CSS 隱藏元素與中文之間加空格的問題

## v7.0.0 / 2025-07-02

- 各位觀眾！Paranoid Text Spacing 演算法 v7 橫空出世！
  - 會自動判斷某些元素是不是被 CSS 隱藏來決定要不要加空格
  - 不會把半形的標點符號轉成全形了
- 史詩級性能提升！
  - 把 XPath 換成 [TreeWalker](https://developer.mozilla.org/en-US/docs/Web/API/TreeWalker)，快他媽 5 倍！
  - 比較慢的操作都丟到 [requestIdleCallback()](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestIdleCallback)，內容太多的網站終於不卡了！
    - Chrome/Firefox 都有支援 `requestIdleCallback()`，但是 Safari 不支援

## v6.1.3 / 2025-07-01

- 修正 Asana 的 comments 會被重複加空格的問題

## v6.1.2 / 2025-06-30

- 修正 Node.js imports

## v6.1.0 / 2025-06-30

- 各位觀眾！Paranoid Text Spacing 演算法 v6.1
  - 好啦好啦，我要去玩死亡擱淺 2 了

## v6.0.0 / 2025-06-28

- 各位觀眾！Paranoid Text Spacing 演算法 v6
  - 特別處理了各種括號 `()` `[]` `{}` `<>` 和 `/` 的問題，仁至義盡了

## v5.3.2 / 2025-06-27

- 在 popup 加了一個方便把目前的網址加到黑名單的按鈕

## v5.2.0 / 2025-06-26

- 各位觀眾！Paranoid Text Spacing 演算法 v5

## v5.1.1 / 2025-06-24

- 偉哉 Claude Code，精雕細琢的 v5.1.0 終於推出啦！
- 雖然看起來好像只是換了一個新 UI，但是爽啦！

## v5.0.0 / 2025-06-17

- 請 Claude Code 把 Chrome extension 升級成 Manifest v3 了
- 請 Claude Code 幫我把 codebase 改寫成 TypeScript 了

## v4.0.7 / 2019-02-15

- 修正 `“ ”` 的問題

## v4.0.6 / 2019-02-04

- 修正 `,` 的問題
- 新增 `pangu` 指令

## v4.0.5 / 2019-01-30

- 修正 `<pre>` 的問題

## v4.0.4 / 2019-01-29

- 修正 Bilibili 影片會消失的問題

## v4.0.3 / 2019-01-29

- 修正 `node.isContentEditable` 的問題

## v4.0.2 / 2019-01-29

- 修正 `<code>` 的問題
- 修正 `<i>` 的問題
- 修正 `・` 的問題

## v4.0.0 / 2019-01-27

- 各位觀眾！Paranoid Text Spacing 演算法 v4
- 大幅地改進 Chrome extension 的效能，使用 `MutationObserver` 和 `debounce`
- 忍痛拿掉「空格之神顯靈了」
- 修正 `Pangu.spacingText()` 的 error callback
- 新增 `BrowserPangu.autoSpacingPage()`

## v3.3.0 / 2016-12-28

- 修個 bug 好過年
- 修正在 Twitter 上跟 Buffer 一起使用時會隨機出現的錯誤問題

## v3.2.1 / 2016-06-26

- 又他媽改善效能問題

## v3.2.0 / 2016-06-26

- 修正效能問題

## v3.1.1 / 2016-06-26

- 剛吃完烤肉來改進一下 Paranoid Text Spacing 演算法

## v3.1.0 / 2016-06-25

- `NodePangu` 新增 `spacingFile()`，支援 callback 與 promise
- `NodePangu` 新增 `spacingFileSync()`

## v3.0.0 / 2016-01-10

- Isomorphic!

## v2.5.6 / 2015-05-13

- 大家好，很抱歉這麼快又跟大家見面了

## v2.5.5 / 2015-05-13

- 持續改進 Paranoid Text Spacing 演算法

## v2.5.1 / 2015-05-11

- 再次改進 Paranoid Text Spacing 演算法

## v2.5.0 / 2015-05-11

- 改進 Paranoid Text Spacing 演算法

## v2.4.2 / 2014-12-10

- 修正 Facebook 留言框的空格錯位

## v2.4.1 / 2014-12-10

- 修正 `<title>` 網頁標題的加空格
- 修正 `'` 單引號的加空格

## v2.4.0 / 2014-12-08

- 改進效能
- 完善對雙引號的處理
- 修正 Popup Page 的 CSS 問題

## v2.3.4 / 2014-03-01

- 再度完善 Paranoid Text Spacing 演算法
- 修正 Options Page 的小錯誤

## v2.3.3 / 2014-02-16

- 完善 Paranoid Text Spacing 演算法

## v2.3.2 / 2014-02-12

- 心血來潮，加個版本號！

## v2.3.1 / 2014-02-10

- 真的不會對 `<code>` 和 `<pre>` 裡的文字加空格了

## v2.3.0 / 2014-02-08

- 威力加強版！
- 解決特定情況下在同一個地方會一直加空格的問題

## v2.2.3 / 2014-02-07

- 不會在 Google+ 的輸入框裡加空格
- 記事本不懂 Vim 的黑

## v2.2.2 / 2014-02-07

- 銀河大客車指南！

## v2.2.1 / 2014-02-05

- 改進 Paranoid Text Spacing 演算法

## v2.1.2 / 2014-02-01

- 不會對 `<textarea>` 裡的文字加空格！

## v2.1.1 / 2014-01-31

- 不對 `_` 加空格
- 對 `|` 加空格
- 新增 Popup Page
- 空格之神 姍姍來遲

## v2.1.0 / 2014-01-29

- 解決在 Facebook、Twitter、QQ 空间、百度贴吧等網站輸入文字時游標會亂衝的問題
- 支援 `file:///` 開頭的網頁

## v2.0.2 / 2014-01-26

- 遇到 `<br>` 就不加空格

## v2.0.1 / 2014-01-25

- 拿掉 `console.log()`
- 修正 Option Page footer 裡的超連結

## v2.0.0 / 2014-01-24

- 新年新氣象，翻新 Option Page 的 UI 和 Icon
- 網址黑白名單可以使用 Chrome 的同步功能（Chrome Storage API）
- 修正在 Gmail 中加空格的問題
- 改善效率問題

## v1.8 / 2013-09-17

- 修正在 Google Docs 中游標錯位的問題
- 網址黑、白名單支援 `//` 前綴

## v1.7 / 2012-04-08

- 減少 Chrome extension 的大小

## v1.6 / 2012-04-04

- 感謝 [@jiefoxi](https://github.com/jiefoxi)，現在英文超連結和中文之間也會加上空格了

## v1.5 / 2012-04-04

- 新增 Firefox 版本
- 目前支援「中文（繁體、簡體）」、「日文（漢字、平假名、片假名）」加空格
- 修正網址黑白名單沒有作用的問題

## v1.3 / 2012-03-20

- 根據 [@Fenng](https://github.com/Fenng) 的回報，修正了「新浪微博的 `@` 符號之後不要加空格」的問題
- 新增「簡體中文」語系

## v1.0 / 第一份工作的某一個下班日

- Paranoid Text Spacing 演算法橫空出世
