手頭專案遇到個ass庫,在這個庫的中用到了fontconfig庫,由於字元編碼問題,導致找不到字型檔案,所以不得不修改下fontconfig庫,看了看原始碼,頭大眼皮沉。。。寫個記錄屢屢思路
首先libass呼叫fontconfig庫整合了幾個函式
fontconfig_init();初始化fontfontconfg庫
fontconfig_select();選擇乙個字型,輸入族名編碼等引數,返回乙個可用的字型的字型檔案路徑。
fontconfig_done();銷毀庫物件
fontconfig_update();更新kudu庫物件
libass庫的rander.c檔案中的呼叫順序是init - select - update -select -update -……done;
並且定義了乙個fcinstance的結構體作為上下文,其中有個fcconfig*的指標存放fontconfig庫返回的上下文,fcconfig結構體內存放了一系列的set結構,其中包括config配置檔案的路徑,字型資料夾的路徑,具體字型檔案的路徑,字型替換的patterns等資訊。fontconfig的執行主要依靠該結構體。
首先是初始化
呼叫 fcconfigcreate();
函式返回乙個fcconfig結構體指標,並對結構體內各個set結構初始化,置零。
呼叫fcconfigparseandload();
引數為fcconfig結構體指標 和 字型配置檔案的路徑,最後是是否覆蓋。
說道這裡就得說下字型配置檔案一般命名為fonts.conf ,該檔案可以根據自己需求編輯,也可以直接找乙個套用(文件後會附乙份我常用的字型配置檔案)。所謂fonts.con檔案其實就是乙個xml,格式如下
<?xml version="1.0"?>
c:/windows/fonts
media/fonts
../../media/fonts
~/.fonts
windowstempdir_fontconfig_cache
~/.fontconfig
mono
monospace
sans serif
sans-serif
sans
sans-serif
arial
宋體sans
sans-serif
times
times new roman
serif
helvetica
arial
sans
courier
courier new
monospace
serif
times new roman
sans
arial
monospace
andale mono
conf.d
0x0020
0x00a0
0x00ad
0x034f
0x0600
0x0601
0x0602
0x0603
0x06dd
0x070f
0x115f
0x1160
0x1680
0x17b4
0x17b5
0x180e
0x2000
0x2001
0x2002
0x2003
0x2004
0x2005
0x2006
0x2007
0x2008
0x2009
0x200a
0x200b
0x200c
0x200d
0x200e
0x200f
0x2028
0x2029
0x202a
0x202b
0x202c
0x202d
0x202e
0x202f
0x205f
0x2060
0x2061
0x2062
0x2063
0x206a
0x206b
0x206c
0x206d
0x206e
0x206f
0x3000
0x3164
0xfeff
0xffa0
0xfff9
0xfffa
0xfffb
30
其中最重要的是windowsfontdir屬性,fontconfig會遞迴的查詢該資料夾下的所有字型檔案。
再有就是是乙個選擇模板 如:
mono
monospace
意思就是 嘗試(test)是否符合 family 的值中包含 mono 如果有,則編輯(edit ) family值為 monospace 。qual="any"的意思是只要有相同的就進入edit ,mode="assign"的意思是替換,由於family的屬性值為乙個列表,所以assgin是替換di的意第乙個匹配值,還有assign_all就是替換shux屬性值list中所有符合規則的值。
其實就是乙個條件替換的功能,將模板中的資訊按照寫出的規則替換。時,就是對字型引數進行操作了。比如字型的粗細,大小等。語法相近。
其他的引數用到時在詳細了解。
初始化獲取配置檔案結束。
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
思科VPP原始碼分析(dpo機制原始碼分析)
vpp的dpo機制跟路由緊密結合在一起。路由表查詢 ip4 lookup 的最後結果是乙個load balance t結構。該結構可以看做是乙個hash表,裡面包含了很多dpo,指向為下一步處理動作。每個dpo都是新增路由時的乙個path的結果。dpo標準型別有 dpo drop,dpo ip nu...
redux原始碼分析(三) 原始碼部分
下面是每個部分的一些解讀 createstore apicreatestore reducer,initialstate enhancer 曾經非常好奇這個函式的第二個引數到底是initialstate還是enhancer,因為見過兩種寫法都有的,以為是版本問題。看了原始碼才發現,都可以的。如果你不...