Skip to content

台灣點字、英文、數字混排時的規則與實作

Weizhong Yang a.k.a zonble edited this page Nov 28, 2025 · 6 revisions

本文說明在處理「國字(注音)、英文、數字」混合內容時的點字轉換標準,以及小麥注音(McBopomofo)的實作邏輯。

在點字中混排時基本規則

由於標準點字系統僅有 6 點(共 64 種變化),點字圖形在不同語境下會重複使用。為了消除歧義,在不同類型的文字混合編排時,必須遵守嚴格的分隔與標示規則。

不同文字之間需要加上空格

在一般書寫中,中英文或中數之間通常緊密排列或僅留半形空隙,但在點字規則中,必須強制插入**空格(Space)**作為區隔。

範例:

  • 一般文字:第1名
  • 點字邏輯:[國字] + [空格] + [數字] + [空格] + [國字]
  • 一般文字:Hi你好
  • 點字邏輯:[英文] + [空格] + [國字]

前置符號

為了讓讀者知道接下來的點字該對照哪一張表(英文表或數字表),必須使用前置修飾符號。

  • 數字符號 ():

    • 當出現阿拉伯數字時,必須在數字序列的開頭加上此符號。
    • 後續連續的數字不需要重複加符號。
    • 若數字序列被空格中斷,再次出現數字時需重新加上符號。
  • 大寫符號 ():

    • 當出現大寫英文字母時,必須在該字母前加上此符號。
    • 每個大寫字母前都需單獨標示(除非使用雙大寫符號鎖定,本規範目前採單字標示)。

標點符號

標點符號依據其「全形/半形」屬性,決定其不需分隔的語種:

  • 全形標點(如 ):視同「國字」類別,與國字連接時不需加空格。
  • 半形標點(如 , .):視同「英文/數字」類別,穿插在英文或數字中時不需加空格(如 3.14 或 a,b)。

小麥注音的實作邏輯

小麥注音中實作了國字轉點字,以及反過來的點字轉國字,流程中採用有限狀態機 (Finite State Machine, FSM) 進行解析與轉換。

狀態機模型

轉換核心維護一個 state 變數,用來記錄當前處理的文字類型,共有四種狀態:

  • Initial (0):初始狀態,或剛輸出過空格(重置狀態)。
  • Bpmf (1):注音/國字模式(含全形標點)。
  • Digits (2):數字模式(含數字相關標點)。
  • Letters (3):英文模式(含半形標點)。
stateDiagram-v2
    direction LR
    [*] --> Initial

    Initial --> Bpmf : 遇到國字/注音/全形標點
    Initial --> Digits : 遇到數字 (輸出 ⠼)
    Initial --> Letters : 遇到英文 (判斷大小寫)
    Bpmf --> Initial : 遇到數字/英文 (輸出空格)
    Digits --> Initial : 遇到國字/注音/英文 (輸出空格)
    Letters --> Initial : 遇到國字/注音/數字 (輸出空格)
Loading

國字轉點字 (Text to Braille)

輸入一段混合文字字串,程式依序掃描字元:

  • 自動插入空格(Auto-Spacing): 當讀取到的字元類型與 state 不同(且 state 不是 Initial)時,程式會先輸出一格空格,並將 state 重置為 Initial,設成 Initial 狀態才能避免重複插入空格。
  • 狀態轉移與前綴輸出:
    • 遇到數字:若當前非 Digits 狀態,輸出數字符號 ⠼,切換 state 至 Digits,再輸出數字點字。
    • 遇到英文:若當前非 Letters 狀態,切換 state 至 Letters。若為大寫字母,先輸出大寫符號 ⠠,再輸出字母點字。
    • 遇到注音/全形標點:切換 state 至 Bpmf,如果是國字的話,查詢小麥內建的詞庫轉換成注音,再輸出對應點字。

點字轉注音 (Braille to Bopomofo)

輸入一段點字字串,程式依序解析 Token:

  • 前綴觸發狀態切換:

    • 遇到 :鎖定進入 Digits 狀態。
    • 遇到 或英文點字:進入 Letters 狀態。是否是英文點字,是用後面提到貪婪匹配決定的,只要無法用貪婪比對
    • 空格:若作為分隔符號使用,則消耗該空格並重置狀態至 Initial;若為有意義的空格則保留。
  • 貪婪匹配 (Greedy Matching): 在未鎖定特定狀態(或 Initial 狀態)下,優先嘗試匹配注音符號(最長匹配原則,例如優先匹配 ㄓㄨㄤ 而非 ㄓ)。若匹配失敗,則嘗試解析為標點符號。如果發現是一段連續的注音符號,再用小麥的輸入功能打成國字—其實可以想像成就是機器代替一名使用者用注音輸入法打了一串字,過程當中不選字,因此,還原程度不會非常理想,但至少可以很快看懂原本點字的大致意思。

附註

想要將任何國字寫成的文件,轉換成點字文件之後,很難再從點字再完整轉回國字。當中包括以下幾種狀況:

  1. 在原本文件中,就包含點字所不包含的範圍,像是許多的特殊標點符號,甚至顏文字等。這些符號再轉換成點字時就出問題了。
  2. 國字文件中,出現了在點字規則中不可能出現的事情—例如將問號、句號、下引號放在句首。這樣的狀況其實在一般文章中也是不合規格的,但實際上卻可以這麼打,但是在點字規則中,會直接無法處理這種狀況,句首的標點會被直接當成無法處理的點字。在點字中會出現在句首的標點只有上引號。
  3. 如前所述,在將國字、英文、數字混排的時候,會自動插入空格,那麼,再轉換回來的時候,原本沒有空格的文字,也會自然多出這些空格。

Clone this wiki locally