TextFormator 框架的誕生源自兩件事:
尋找通用解決方案過程中,利用一週時間完成設計、編碼、文件與測試,重拾大學時期用組合語言寫「學生檔案管理程式」的創作熱情。雖或許有現成工具更完善,但這是一次實踐 OO 設計與 STL 的好機會,開源釋出期望拋磚引玉,讓有興趣者能在此基礎上延伸。

圖一:文字處理流程

圖二:框架類別圖
核心採類似 Strategy Pattern 組織:
所有解析 Handler 基類,定義 accept() 方法:從目前位置按指定方式解析當前行。成功則填入 TokenInfo、前進位置並回傳 true;失敗回傳 false 讓框架嘗試下一個 Handler。
優先權機制:參考 Java 執行緒優先權設計。註解與字串解析需高優先權 (MAX_PRIORITY),避免關鍵字在註解/字串中被誤判。預設 DefaultParseHandler 為 MIN_PRIORITY,作為最後防線防止死循環。
逐行逐字解析,透過 getTokensInfoList() 取得結果。支援 registParseHandler()/unregistParseHandler() 執行期動態調整,同一 Parser 物件可切換解析 C++ 或組合語言。
格式化 Handler 基類,定義 format() 方法。處理結果直接修改傳入字串,多 Handler 依註冊順序鏈式處理。附帶統計功能:若不修改字串僅分析內容,即可實作關鍵字統計、註解行統計等。
逐行格式化,getFormattedLines() 取得結果。允許同類 Token 註冊多個 Handler (如先縮排再 HTML 化),提供極大彈性。
__WINDOWS__)解析 Handler:StringParseHandler、NumberParseHandler、OperatorParseHandler、IdentifierParseHandler、WhitespaceParseHandler、CommentParseHandler
格式化 Handler:Htmlize::BodyOutputHandler、Indent::NormalOutputHandler、Indent::WhitespaceOutputHandler、Indent::OperatorOutputHandler
統計 Handler:Count::KeywordCountHandler、Count::CommentCountHandler
| 檔案 | 說明 |
|---|---|
| GeneralDefine.h | 全域型別定義 |
| Portability.h | 跨平台巨集定義 |
| LineParser.h/.cpp | 文字解析元件 |
| LineFormator.h/.cpp | 文字格式化元件 |
| ParseHandler.h | 解析 Handler 抽象類別 |
| DefaultParseHandler.h | 預設解析 Handler |
| ConcreteParseHandlers.h | 具體解析 Handler 實作 |
| FormatHandler.h | 格式化 Handler 抽象類別 |
| HtmlFormatHandlers.h | HTML 格式化 Handler |
| IndentFormatHandlers.h | 縮排格式化 Handler |
| CountFormatHandlers.h | 統計功能 Handler |
| Context.h / Session.h | 上下文與 Session |
| FileHelper.h/.cpp | 檔案操作輔助 |
| FileFinder.h/.cpp | 檔案搜尋輔助 |
| Htmlize.cpp | HTML 格式化示範 |
| Indent.cpp | 縮排排版示範 |
| IndentHtmlize.cpp | 縮排+HTML 示範 |
| Count.cpp | 統計分析示範 |
| Batch.cpp | 批次處理示範 |
TextFormator::XXXTextFormator::Language_Name::XXXTextFormator::Util_Name::XXX歡迎建議與討論:moying@etang.com