鑒於之前我介紹的 Balabolka_text 是以批次檔這種不人性的方法操作,還有結果裡面老是很多 Unicode 字元,那些原本都是數學算式裡被轉出來的,因此我用 AutoIt 寫下一個互動介面,取代批次檔的功能,並且對輸出結果進一步處理。 當執行本文最後面的 AutoIt 程式碼,會先跳出視窗提示使用者挑選檔案,選定後會稍微延遲等待 balabolka_text 轉檔,然後出現視窗詢問輸出檔名,預設跟輸入檔一樣只是替換副檔名為 txt. 假設讀者有安裝 AutoIt 或者請有安裝的人先編譯執行檔。請依照下列步驟搭建整個系統:
程式碼由 BalabolkaClient.au3 與 UnicodeNormalizer.au3 構成,另外需從 Unicode2LaTeX.ini 獲得某些外部資料進行運算。 BalabolkaClient.au3 是主程式所在,裡面依序讀入 Unicode2LaTeX.ini, 詢問輸入檔名,呼叫 balabolka_text.exe, Unicode 正規化,最後將數學符號取代為 LaTeX. UnicodeNormalizer.au3 提供一個介面,讓主程式使用 Normaliz.dll 中的函式。 Unicode2LaTeX.ini 包含檔案格式清單與 LaTeX 符號的設定,打開選擇輸入檔的視窗時,檔案格式下拉方塊內容跟順序依據 [Format List] 的內容而定,Unicode 字元至 LaTeX 符號的對照表列於 [LaTeX] 區段。 首先用 IniReadSection 指定從 Unicode2LaTeX.ini 的 [Format List] 跟 [LaTeX] 區段讀入資料,分別存入 $format 及 $latex 變數裡。整個 .ini 檔格式是先分區段,各區段內都是 key = value 的形式,可用分號在行首做整行註解。[Format List] 的 key 是副檔名的解釋,value 是對應的所有副檔名,主程式會替 value 加括號並將 key-value 對全部串接起來迎合 FileOpenDialog 要求的 filter 格式。[LaTeX] 的 key 是十六進位的 Unicode 碼,value 是對應的替換文字,表的建立主要參考自Unicode - LaTeX symbol palette. 透過 FileOpenDialog 取得使用者指定的輸入後,程式會挑出路徑裡的檔名,然後呼叫跟程式同目錄的 balabolka_text.exe 來轉檔。這邊使用 Run 呼叫別的程序時,就讓 balabolka_text.exe 在輸入檔的儲存目錄下工作,但用 $STDOUT_CHILD 要求它把轉檔結果交還給 AutoIt 而非寫入某暫存檔。隨後即用一個 While 迴圈一直抓取 balabolka_text.exe 的輸出,直到它把所有結果都傳回來,當沒有更多結果時迴圈就因為 @error 被設置而停止。 拿到所有輸出後將其以 UTF-8 編碼轉成 Unicode. 這邊如果不抽取 Binary 格式輸出再自己指定編碼,將導致 AutoIt 用台灣電腦預設的 BIG-5 解碼而毀了整個結果。轉 Unicode 以後就能正規化,四種正規形式 (normal form) 當中我選擇 KC 形式。K 的效果是可以把全形轉成半形,許多圖像類似但語意上給予不同 Unicode 編號的內容將被統一,C 表示會保留字母旁邊的重音等既耗與其是合併顯示的。這個步驟主要用途是克服如 "fi" 連寫 (Unicode FB01) 這種外觀效果上的 Unicode, 把它原本的 fi 挑出來。 最後理論上該先進行 LaTeX 替換才寫入使用者指定之輸出檔。但是如果對每個字元查找對照表後要替換,將改變字串長度,然而 AutoIt 的 For 迴圈禁止過程中改變邊界條件,再者經常取子字串也會導致 AutoIt 需要兩倍空間存放輸出內容。也可以對表中每個字元都跟輸出內容進行字串取代,但每取代一次就要掃過全文一次,並不利於效能。因此,最後選擇先索求輸出檔路徑,編寫入輸出黨鞭查表替代。 下面是文中提到的三個檔案:
回 · 測試發表文章,「可以在螢幕上打出「點字」的 AutoIt 腳本程式」 這一篇文章封面 |
本站公告:〔您越需要我們,我們就越有創意〕 | 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕 |
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 | 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」 |