2019年2月22日 星期五

libchewing 原始碼分析 (1) chewing_new & chewing_new2()


chewing_new()


chewing_new() 不接受任何參數

裡面直接呼叫

chewing_new2() 且 syspath, userpath, logger, loggerdata 這些參數直接填上NULL

chewing_new2()

傳入參數介紹

chewing_new2() 接收四個參數: syspath, userpath, logger, loggerdata

syspath 

主要就是搜尋路徑,如果沒有值的話,會呼叫 get_search_path(),根據作業系統不同會有不同的預設路徑,chewing_new2() 會在初始化的過程從此路徑中搜尋檔案 ex: DICT_FIELS, SYMBOL_TABLE_FILES, EASY_SYMBOL_FILES, PINYIN_FILES
至於這些檔案內容是什麼就等之後trace其他部分後再了解

userpath 

主要就是存放 userphrase 的路徑,就我之前的理解,Userphrase 指的是詞組 例如: 茶葉 綠茶  這種詞組的檔案

logger

如同字面上的意思做紀錄的 logger,會存放在 chewing context 的 chewing data 裡面
如果值是 NULL 則會設定為 NullLogger (就是完全不做任何logging)

loggerdata

如字面上的意思 logger 的 data 但我也不確定確切的內容會存放何物
與 logger 一樣會存放在 chewing data 裡


行為簡介

主要會是 allocate 一個 chewing_context 然後再 allocate 其他必須的空間

呼叫 chewing_Reset()

接著會從search path中尋找一些檔案的path

## 搜尋 DICT_FILES path
        InitDict()
        InitTree()

## 從 user path 搜尋 userphrase path
        InitUserphrase()

## 搜尋 SYMBOL_TABLE_FILES path
        InitSymbolTable()

## 搜尋 EASY_SYMBOL_FILES path
        InitEasySymbolInput()

## 搜尋 PINYIN_FILES path
        InitPinyin()

最後再回傳chewing_context

2019年2月18日 星期一

libchewing 原始碼分析 (0) 前言

由於網路上幾乎找不到關於libchewing原始程式碼的介紹

然後我又對於這個每天都會用到的輸入法有興趣

(想修掉一些bug)

所以就一邊trace code一邊把一些心得寫成文章記錄下來

目前沒有規劃多久出一篇

也沒有規劃要寫多久

一切隨緣看心情  哈哈

Go lang 學習筆記 - 17 Pointers

``` package main import "fmt" func zeroval(n int) {         n = 0 } func zeroptr(n *int) {         *n = 0 } func main() {         ...