# v1.8.0 換行規則 ## 修正方式 - 中日文按 grapheme 處理,收尾標點與前一個字、開頭標點與下一個字形成不可拆單位。超出可用寬度時,把這個單位移至下一行;不壓縮標點、不讓標點越界。 - 韓文以詞級分段;收尾標點黏住前一個詞。沒有標點的過長詞保留 grapheme 回退換行;帶禁則標點的不可拆單位若放不下,回報既有「文字或圖片過大,請縮小」錯誤,不越界。 - 新禁則流程以 HarfBuzz 塑形後的實際寬度衡量;文字框左右原有 4 pt 留白保留。 - 阿拉伯文自動方向:每個明確換行分隔的段落,尋找第一個 bidi 類型為 L、R 或 AL 的強方向字元;數字與標點不決定方向。沒有強方向字元時採 LTR。段落的各行、預覽與 PDF 匯出共用方向。 - 固定 RTL 分支不改。與 v1.7.1 比對混合文字 `12.5 mm Report V1.7.1 ويبلغ القياس` 的 glyph id、cluster、位置、位移與 Unicode 映射完全相同;未將固定 RTL 中的單位顯示改成 LTR。 - 本禁則只控制自動換行;不刪改使用者本身輸入的標點。若段落原本就以收尾標點開始或以開頭標點結束,不宣稱可修復原文。 ## 實際完整禁則清單 ### 行首禁止:47 個字元 ```text ,。、;:?!)」』〕】》〉…]}〗〙〛’”﹚﹜﹞﹐﹑﹒﹔﹕﹖﹗.。、」,.;:?!)]}»› ``` | 字元 | Unicode | |---|---| | `,` | U+FF0C | | `。` | U+3002 | | `、` | U+3001 | | `;` | U+FF1B | | `:` | U+FF1A | | `?` | U+FF1F | | `!` | U+FF01 | | `)` | U+FF09 | | `」` | U+300D | | `』` | U+300F | | `〕` | U+3015 | | `】` | U+3011 | | `》` | U+300B | | `〉` | U+3009 | | `…` | U+2026 | | `]` | U+FF3D | | `}` | U+FF5D | | `〗` | U+3017 | | `〙` | U+3019 | | `〛` | U+301B | | `’` | U+2019 | | `”` | U+201D | | `﹚` | U+FE5A | | `﹜` | U+FE5C | | `﹞` | U+FE5E | | `﹐` | U+FE50 | | `﹑` | U+FE51 | | `﹒` | U+FE52 | | `﹔` | U+FE54 | | `﹕` | U+FE55 | | `﹖` | U+FE56 | | `﹗` | U+FE57 | | `.` | U+FF0E | | `。` | U+FF61 | | `、` | U+FF64 | | `」` | U+FF63 | | `,` | U+002C | | `.` | U+002E | | `;` | U+003B | | `:` | U+003A | | `?` | U+003F | | `!` | U+0021 | | `)` | U+0029 | | `]` | U+005D | | `}` | U+007D | | `»` | U+00BB | | `›` | U+203A | ### 行尾禁止:23 個字元 ```text (「『〔【《〈[{〖〘〚‘“﹙﹛﹝「([{«‹ ``` | 字元 | Unicode | |---|---| | `(` | U+FF08 | | `「` | U+300C | | `『` | U+300E | | `〔` | U+3014 | | `【` | U+3010 | | `《` | U+300A | | `〈` | U+3008 | | `[` | U+FF3B | | `{` | U+FF5B | | `〖` | U+3016 | | `〘` | U+3018 | | `〚` | U+301A | | `‘` | U+2018 | | `“` | U+201C | | `﹙` | U+FE59 | | `﹛` | U+FE5B | | `﹝` | U+FE5D | | `「` | U+FF62 | | `(` | U+0028 | | `[` | U+005B | | `{` | U+007B | | `«` | U+00AB | | `‹` | U+2039 | - `……` 與 `...` 由連續的禁首字元處理;不在其間斷開。 - ASCII 直引號 `"` 與 `'` 沒有加入這份清單,因為同一字元可能作開引號、收引號或撇號;本輪未新增引號角色辨識。 - 日文新增嚴格禁首字元(僅日文字型組):`ぁぃぅぇぉっゃゅょゎゕゖァィゥェォッャュョヮヵヶー々ゝゞヽヾ`。與既有收尾標點相同,和前字形成不可拆單位,放不下就移到下一行,不壓縮、不越界。 - 韓文收尾標點後緊接非空白文字,與前方詞形成不可拆單位,例如 `주세요”라고`。 - 自動換行後去除斷點處行首空白;使用者明確段落開頭輸入的空白保留。 - 泰文維持原 `Intl.Segmenter(undefined,{granularity:"word"})` 與 grapheme 回退流程;`ตรวจสอบ` 的分詞仍為 `ตรวจ/สอบ`。