網頁標題: 用 AutoIt 整理 Balabolka_text 的輸出

Warning: fopen(/home/crazy/www/cmsb/bcj/has_read.php): failed to open stream: Permission denied in /home/crazy/www/compose/reading.php on line 2070

Warning: fputs() expects parameter 1 to be resource, bool given in /home/crazy/www/compose/reading.php on line 2072

Warning: fclose() expects parameter 1 to be resource, bool given in /home/crazy/www/compose/reading.php on line 2073
 
﹗﹗﹗觀看留言:此文章已經有3則留言 ﹗﹗﹗


 鑒於之前我介紹的 Balabolka_text 是以批次檔這種不人性的方法操作,還有結果裡面老是很多 Unicode 字元,那些原本都是數學算式裡被轉出來的,因此我用 AutoIt 寫下一個互動介面,取代批次檔的功能,並且對輸出結果進一步處理。

 當執行本文最後面的 AutoIt 程式碼,會先跳出視窗提示使用者挑選檔案,選定後會稍微延遲等待 balabolka_text 轉檔,然後出現視窗詢問輸出檔名,預設跟輸入檔一樣只是替換副檔名為 txt.

 假設讀者有安裝 AutoIt 或者請有安裝的人先編譯執行檔。請依照下列步驟搭建整個系統:

  1. XP 的使用者請先下載 Microsoft Internationalized Domain Names (IDN) Mitigation APIs 並解開它執行 Microsoft IDN Mitigation APIs\Redist\idndl.x86.exe 安裝 Normaliz.dll
  2. 從剛才的介紹中下載 balabolka_text.zip 並解開
  3. 自本文取出程式碼(或執行檔)及所附的 .ini 檔案,置於 balabolka_text.exe 相同目錄中,注意程式碼有二個 .au3
  4. Enter Balabolka_Client.au3 檔(或執行檔)就可執行
 這個程式會先把使用者指定的檔案送交 balabolka_text.exe 轉出文字,然後利用 Normaliz.dll 的功能將內容進行Unicode 正規化,然後把跟數學有關的 Unicode 符號用 LaTeX 表示,形成最後結果。

 下方解釋整個程式架構以及 .ini 檔的用途。


 程式碼由 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 腳本程式」 這一篇文章封面


本文張貼者:Bo-Cheng Jhan〔張貼時間:民國105年5月5日(星期四)19點12分〕

部落格首頁


學習的故鄉首頁
本站公告:〔您越需要我們,我們就越有創意〕 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」
〔為了讓我們有乾淨的學習環境,請勿任意在本站散播商業廣告與不合法文件或聯結〕:本站宣示