Chinaunix首页 | 论坛 | 博客
  • 博客访问: 499541
  • 博文数量: 176
  • 博客积分: 4045
  • 博客等级: 上校
  • 技术积分: 2491
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-19 11:23
文章分类

全部博文(176)

文章存档

2011年(7)

2009年(12)

2008年(157)

我的朋友

分类:

2008-05-23 13:29:51

Name

fonts.conf -- 字型設定檔

Synopsis

/usr/local/etc/fonts/fonts.conf
/usr/local/etc/fonts/fonts.dtd
/usr/local/etc/fonts/conf.d
~/.fonts.conf

簡述

Fontconfig是全系統以及個人化字型設定的函式庫,應用程式可向其索取字型。


功能概覽

Fontconfig由兩個主要的模組構成,其一是設定模組,把XML設定檔轉換成Fontconfig的內部設定; 另一為比對模組,將應用程式傳來的字型樣式需求與現有字型比對,傳回最相似的字型。


字型設定

FcConfig datatype,libexpat,FcConfigParse三者所構成的設定模組在解析XML樹狀結構之後,對Fontconfig重新設定。 從外部觀之,設定Fontconfig函試庫的方法,即為編輯出一個正確的XML檔案,然後交給FcConfigParse處理。 除此之外,更動字型設定的唯一方法就是把字型和目錄加入應用程式提供的字型檔清單中。

其目的就是儘量不更動字型設定,並且讓各種應用程式共用一個設定。 這樣一來當程式之間需要交換字型名稱時,所取得的字型較為一致。 我們用XML作為設定檔的格式,因為XML容易被外部程式編輯,而不會意外地損壞設定檔該有的結構和語法。

字型設定和字型比對不同;有些程式需要自己比對字型,所以會向Fontconfig詢問電腦上所有可用的字型,再自行比對。 這讓程式可以只針對Fontconfig中合適的功能善加利用,不必採納Fontconfig的所有設定,所以不會陷入程式本身和Fontconfig設 定兩者的抉擇。 然而願景是讓所有程式的字型設定都能集中管理。 若字型設定能集中管理,字型的安裝和個人化就會簡易而有秩序。


字型的性質

雖然字型需求樣式可以指定各種性質,但是有些性質才較為常用。 Fontconfig利用下列的性質來做字型比對和字型補全。 (譯註:當程式傳來的字型格式需求沒有一一指定各種需要的性質時,透過字型補全由Fontconfig為其挑選一個適用的字型。) 其它的性質將交給字體繪製程式,以便應用程式另外指定繪製方法。

性質            型態    說明
--------------------------------------------------------------
family 字串 字族名稱 Font family names
familylang 字串 字族名稱所對應的語言 Languages coresponding to each family
style 字串 字型風格。Fontconfig將無視weight字粗和slant斜體設定 Font style. Overrides weight and slant
stylelang 字串 字型風格所對應的語言 Languages cooresponding to each style
fullname 字串 字型全名 (包含風格) Font full names (often includes style)
fullnamelang 字串 字型全名所對應的語言 Languages cooresponding to each fullname
slant 整數 指定義大利斜體、一般斜體或正體 (羅馬字體) Italic, oblique or roman
weight 整數 細、中等、微粗、粗、黑 Light, medium, demibold, bold or black
size 浮點數 字體大小 (單位為point) Point size
width 整數 壓縮、正常或加寬 Condensed, normal or expanded
aspect 浮點數 在hinting前將字體再拉寬的倍數 Stretches glyphs horizontally before hinting
pixelsize 浮點數 字體大小 (單位為pixel) Pixel size
spacing 整數 寬度不等、雙寬度、等寬度或charcell Proportional, dual-width, monospace or charcell
foundry 字串 字型公司名稱 Font foundry name
antialias 布爾數 字體邊緣平滑化 Whether glyphs can be antialiased
hinting 布爾數 字體繪製是否要 hintingWhether the rasterizer should use hinting
hintstyle 整數 自動的hinting風格 Automatic hinting style
verticallayout 布爾數 直式排版 Use vertical layout
autohint 布爾數 使用autohinter而不讀取字型內部的hinting指令 Use autohinter instead of normal hinter
globaladvance 布爾數 使用字型提供的全域字寬 font global advance data
file 字串 字型的檔名 The filename holding the font
index 整數 檔案中該字型的index The index of the font within the file
ftface FT_Face 用Freetype指定的字體物件 Use the specified FreeType face object
rasterizer 字串 使用何種繪製字體程式 Which rasterizer is in use
outline 布爾數 字型是否為中空字型 Whether the glyphs are outlines
scalable 布爾數 字型是否可縮放 Whether glyphs can be scaled
scale 浮點數 Point->pixel變換單位所用的常數 Scale factor for point->pixel conversions
dpi 浮點數 目的裝置的dpi Target dots per inch
rgba 整數 unknown, rgb, bgr, vrgb, vbgr, none - 液晶營幕的次像素排列方式 subpixel geometry
minspace 布爾數 消去行距 Eliminate leading from line spacing
charset CharSet 所支援的 Unicode 字集 (codepage?) Unicode chars encoded by the font
lang 字串 字型所支援的語言,用RFC-3066格式表式 (譯註:例如zh-TW) List of RFC-3066-style languages this font supports
fontversion 整數 字型的版本編號 Version number of the font
capability 字串 字型的排版能力 List of layout capabilities in the font
embolden 布爾數 字體繪製程式是否需要再額外加粗字體 Rasterizer should synthetically embolden the font

譯註:浮點數是雙精數。
再註:有關不同整數的意義,可參考下面const元素的說明。

字型比對

當接收到字型的樣式需求,Fontconfig會將之與電腦現有的字型逐一比對,比對其間之差距。 然後從結果中選出最接近的字型。 雖然一定會傳回一個字型,但不保證傳回的字型和需求的樣式有多相符。

首先應用程式必須提出一個字型的樣式需求。 應用程式所想要的屬性會集中起來,成為一個樣式。 樣式裡的每一種性質可能不只一個值; 若有多個值,係依優先順序排列; 所以如果現有的字型中和較前面的值相符,就算是「較為接近需求」。

在字型比對之前,Fontconfig會依照一系列修訂指令來修改樣式需求,不同的樣式可以有不同的修訂指令; 每一個修訂指令分成兩個部份:比對和修改。(譯註:這裡的比對,指樣式需求和設定比對,不是和現有的字型比對。) 修訂指令依照於設定檔中的出現順序執行。 若比對正確,即依指令修改樣式。

需求樣式經過修改後,接下來就進行預設的替換,把不典型的性質換為典型的性質; 這麼一來下層的畫字程式就不必一直提供預設值給不同的字型性質。

經過修訂和替換的步驟後,典型的需求樣式終於要和電腦中的字型逐一比對了。 樣式和字型的差距是藉由比對下列性質再換算而得的: foundry, charset, family, lang, spacing, pixelsize, style,slant, weight, antialias, rasterizer 和 outline。 上面是依優先順序列出,比較前面的權重較大。

有一個特別規則:字族名稱 (family) 分為兩種約束:強和弱(strong and weak)。(譯註:binding怎麼翻?) 強字族名稱比字型所支援的語言 (lang) 更為優先,弱字族名稱反之。 在文件指定的字型都不在電腦裡的時候,這可以讓語言引導字型的選擇。

如果需求樣式的性質中有字型本身所沒有的性質,這些額外的性質會被保留住; 這允許應用程式通知畫字程式另外的指示或資料,不因修改及比對而被干擾。 最後,樣式再次依照設定檔中的修訂指令修改。 再次修改後的樣式才會傳回給應用程式。

傳回值提供字型的位置和畫字的方法,包含檔名、pixel大小和其它畫字資料等。 由於傳回的資訊並非專屬於FreeType,所以應用程式可以自行選則畫字引擎,甚或利用傳回的檔名直接存取字型檔。

比對和修改 (也就是修訂指令) 一共進行兩次,因為根本上就有兩件事要做-- 第一要調整字型選擇的方法:主要是為字族名稱起別名和加上適合的預設值。 第二件事是選好字型後,針對選上的字型修正其畫字方式。 只可以在選上的字型上做第二次的修改,不可以在需求樣式上做第二次的修改,因為第二次的比對方式時常有錯誤的比對成功。


字型名稱(譯註:不是字族名稱)

Fontconfig可以收發的字型樣式是用文字表示的。 (譯註:字型樣式的文字表示,稱作字型名稱。別和字族名稱搞混了。) 這種表示法分為三個部份,第一部份是條列字族名稱,然後是條列point sizes,最後才是其它的性質:

<字族名稱列表>-<大小列表(point sizes)>:<性質1>=<數值列表1>:<性質2>=<數值列表2>...

數值列表用逗點分開。 字型名稱可以不包含字族名稱或是大小(point sizes)。 此外有符號常數可以同時指定性質和其數值。 下面是一些例子:

字型名稱                         意義
----------------------------------------------------------
Times-12 12 point Times 羅馬體(正體) 12 point Times Roman
Times-12:bold 12 point Times 粗體 12 point Times Bold
Courier:italic Courier 意大利斜體,使用預設大小 Courier Italic in the default size
Monospace:matrix=1 .1 0 1 用Monospace以及合成斜體 The users preferred monospace font with artificial obliquing
(譯註:matrix不屬於字型的性質,所以matrix=1 .1 0 1會原封不動的傳回給應用程式)

語言標幟

資料庫裡的每一個字型都有其所支援的語言的清單。 藉由比較字型涵蓋Unicode的範圍和每個語言所用到的文字,Fontconfig可以算出字型支援的語言。 語言標幟和RFC-3066相容,分成兩個部份--依前後是ISO 639語言標幟和ISO 3166國碼,用連字號相連。 連字號和國碼可以省略。

Fontconfig內建有多種語言所用到的文字。 除非重新編譯Fontconfig,不然沒有辦法新增。 目前支援了ISO 639-1裡139種語言的122種,和ISO 639-2裡用兩個字母表示的語言141種及三個字母表示的30種。 用兩個字母或三個字母都可以表示的語言,就用兩個字母為代表。

針對一些在不同地區使用完全不同的字集的語言,Fontconfig對不同地區語文所記錄的「語言所使用的文字」也不一樣。 這包括亞塞拜然文、庫德文、普什圖文、提格利尼亞文和中文。(Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese)


設定檔格式

Fontconfig的設定檔是XML格式; 這種格式的好處是易於外部設定程式編輯,確保能編輯出語法正確的設定檔。 因為XML檔是純文字,所以有經驗的使用者也可以用一般的文字編輯器修改之。

Fontconfig文件格式定義(document type definition)是外部實體「fonts.dtd」; 這個檔案一般存放在預設的字型設定目錄內 (/etc/fonts)。 每一個設定檔都應該包含如下的結構:




...

這是字型設定檔的頂層元素,可以容納多個 dir, cache, include, match, alias, config, 和selectfont等元素,次序不限。


dir

這個元素容納一個目錄名稱,存放在此的字型檔會被當作是可以使用的字型。


cache

這個元素容納一個檔名,用來存放每一個使用者的字型資訊快取。 如果檔名以「~」為起頭,代表指到使用者的家目錄下的檔案。 這個檔案裡,存放了一些不在其它目錄的快取的字型的資訊。 這由Fontconfig自動維持。 預設是``~/.fonts.cache-version'',version是字型設定檔的版本編號(目前是1)。


include ignore_missing="no"

這個元素容納一個設定檔的檔名或是一個目錄名。 如果容納的是目錄名,該目錄下的每一個以數字為檔名開頭的檔案,都會被當字型設定檔來依序處理。 當FcConfigParse處理字型設定檔時,設定檔裡該元素容納的檔案 (或該元素容納的目錄下的檔案) 會交給FcConfigLoadAndParse使之與目前的設定結合。 如果「ignore_missing」設為"yes"而不是預設的"no",而且元素裡的檔名並不存在,Fontconfig不會為之產生警示訊息。


config

這個元素用來存放其它的設定資訊。 config可容納多個blankrescan元素,順序不限。


blank

雖然字型的編碼可能有編到,但是字型經常闕漏字體,闕漏的部份畫起來是空白的。 在blank元素裡,把本來就應該是空白的字體其編碼用int元素容納,內容是每一個空白字元的Unicode編碼。 不包含在這裡的字元如果畫起來還是空白的,就會被當作不被此字型支援的字元。


rescan

rescan元素容納一個int元素,用來設定多少秒自動檢查一次字型設定。 Fontconfig在指定的時間過後會檢查所有的設定檔和目錄,然後重建內部的資料結構。


selectfont

這個元素用來設定黑名單或白名單,指示哪些字型該列出給應用程式,以及哪些字型可供比對。


acceptfont

acceptfont元素裡比對到的字型會被列入「白名單」內; 這種字型會被列出給應用程式,而且可供比對; 在白名單內的字型不會被rejectfont元素列入黑名單。 acceptfont元素包含多個globpattern元素,用來比對字型。


rejectfont

rejectfont元素裡比對到的字型會被列入黑名單內; 這類的字型既不會列出給應用程式,也不會被拿來比對,就好像該字列不存在於系統中一樣。 rejectfont元素包含多個globpattern元素,用來比對字型。


glob

glob元素容納多個shell下完整路徑的檔名比對方式(可以包含?和*)。 這可以用來排除一整套目錄(/usr/share/fonts/uglyfont*),或特定的字型檔格式(*.pcf.gz),然而使用附檔名的方法,依賴的是不可靠的檔案命名系統。


pattern

pattern元素把進來的字型和樣式需求一一比較;也就是說,它容納了一系列的元素及其值。 如果每個元素裡都有一個值佮好與進來的字型相符,代表進來的字型和這整個樣式相符。 依屬性(可縮放、粗體等)比對字型時,就會用到這個功能,這種方法比依賴附檔名可靠多了。 pattern元素包含多個patelt元素。


patelt name="property"

patelt name="property"元素容納多個constant元素,constant再轉而容納一個下列元素:int|double|string|matrix|bool|charset|constpatelt name="property"元素必須要指定屬性name,表示對應於何種字型性質。


match target="pattern"

這個元素容納一系列的test元素(也可以不含test),接著是一系列的edit元素(也可以不含)。 符合所有test的字型樣式,會按照edit裡的指令逐一修改。 如果設定「match target="font"」,表示一系列的修改只針對選出的字型的樣式名稱。預設的「match target="pattern"」表示更改的是字型樣式需求。(譯註:還記得字型樣式共修訂兩次嗎?一次在和選出字型之前,一次在選出字型之後。)


test qual="any" name="property" target="default" compare="eq"

這個元素容納一個值,跟target(可以是"pattern", "font", "default")的某一性質比較,性質property可以是上面「字型的性質」裡提到的任何一種。compare可以設為下列之一:"eq""not_eq""less""less_eq""more"、或"more_eq"qual可以是預設的"any",代表當樣式裡任一個性質符合測試值的時候就算符合; 也可以是"all",代表當樣式裡每一個性質都符合測試值的時候才算符合。 如果這個裡面,裡的target可以設定為測試原本的樣式需求(pattern),也可以設定為測試選出來的字型(font)。設為default代表和外面的用同一個設定。


edit name="property" mode="assign" binding="weak"


Mode                    With Match              Without Match
---------------------------------------------------------------------
"assign" Replace matching value Replace all values
"assign_replace" Replace all values Replace all values
"prepend" Insert before matching Insert at head of list
"prepend_first" Insert at head of list Insert at head of list
"append" Append after matching Append at end of list
"append_last" Append at end of list Append at end of list

這個元素容納一系列的元素表示式(以值和算子構成)。 程式執行時才計算這些表示式,並以計算結果修改性質"property"。 隨著樣式是否符合某一個test條件,修改方式也不同, 如果有一個值符合,就修改符合的第一個。 每一個插入值都有一個約束("strong", "weak", 或"same"),其中的"same"代表使用符合的樣式元素的約束。 mode意義如下:

Mode                    符合其一                  全不符合
---------------------------------------------------------------------
"assign" 取代符合的值 取代所有的值
"assign_replace" 取代所有的值 取代所有的值
"prepend" 插在符合的值之前 插在所有的值之前
"prepend_first" 插在所有的值之前 插在所有的值之前
"append" 插在符合的值之後 插在所有的值之後
"append_last" 插在所有的值之後 插在所有的值之後

int, double, string, bool

這些元素容納同型態的單一數值。 bool容納的是truefalse。[註: true, on, 1, yes, t*, y*, 1*, on* 等等都是真值; false, off, 0, no, f*, n*, 0*, of* 等等都是偽值。] 浮點數有重要的限制:fontconfig只能接受以數字開頭的尾數,不可以是小數點,所以遇到純小數時請在開頭插入零。 (也就是說接受0.5而非.5,以及接受-0.5而非-.5)。


matrix

這個元素容納四個double元素,作為仿射轉換的四個係數。


name

這個元素容納一個性質名稱。 執行時會算作是字型裡性質的第一個值。 (不適用於樣式需求的性質。)


const

Constant        Property        Value
-------------------------------------
thin weight 0
extralight weight 40
ultralight weight 40
light weight 50
book weight 75
regular weight 80
normal weight 80
medium weight 100
demibold weight 180
semibold weight 180
bold weight 200
extrabold weight 205
black weight 210
heavy weight 210
roman slant 0
italic slant 100
oblique slant 110
ultracondensed width 50
extracondensed width 63
condensed width 75
semicondensed width 87
normal width 100
semiexpanded width 113
expanded width 125
extraexpanded width 150
ultraexpanded width 200
proportional spacing 0
dual spacing 90
mono spacing 100
charcell spacing 110
unknown rgba 0
rgb rgba 1
bgr rgba 2
vrgb rgba 3
vbgr rgba 4
none rgba 5
hintnone hintstyle 0
hintslight hintstyle 1
hintmedium hintstyle 2
hintfull hintstyle 3

這個元素容納一個常數的名字; 這些名字都是整數型態的性質及其值,是常用的字型數值:

Constant        Property        Value
-------------------------------------
thin weight 0
extralight weight 40
ultralight weight 40
light weight 50
book weight 75
regular weight 80
normal weight 80
medium weight 100
demibold weight 180
semibold weight 180
bold weight 200
extrabold weight 205
black weight 210
heavy weight 210
roman slant 0
italic slant 100
oblique slant 110
ultracondensed width 50
extracondensed width 63
condensed width 75
semicondensed width 87
normal width 100
semiexpanded width 113
expanded width 125
extraexpanded width 150
ultraexpanded width 200
proportional spacing 0
dual spacing 90
mono spacing 100
charcell spacing 110
unknown rgba 0
rgb rgba 1
bgr rgba 2
vrgb rgba 3
vbgr rgba 4
none rgba 5
hintnone hintstyle 0
hintslight hintstyle 1
hintmedium hintstyle 2
hintfull hintstyle 3

or, and, plus, minus, times, divide

這些元素對一列的表示式元素執行運算。 or以及and是普通的布爾運算,不是逐位元的布爾運算。


eq, not_eq, less, less_eq, more, more_eq

這些元素比較兩個值,產生一個布爾代數結果。


not

para> 對容納的一個表示式做布爾代數中的反運算。

if

這個元素容納三個表示式元素; 如果第一個表示式為真,則產出的結果為第二個表示式的值,不然的話產生的是第三個的值。


alias

代換字族名稱時,原本需要一連串match元素,我們可以運用alias元素來縮短記法。 alias容納一個family元素,接著preferacceptdefault元素(可以不接)。 若樣式的字族名稱符合family,那麼就會在符合的字族名稱前面插入prefer容納的部份,在符合的名稱後面插入accept容納的部份,而在字族名列表的最後插入default容納的部份。


family

這個元素容納一個字族名稱。


prefer, accept, default

這些元素容納一系列的family元素,供alias元素使用。


設定檔範例

系統設定檔

以下是系統全域設定檔的範例。






/usr/share/fonts
/usr/X11R6/lib/X11/fonts



mono
monospace




sans
serif
monospace
sans



~/.fonts.conf


conf.d
local.conf



Times
Times New Roman
serif


Helvetica
Arial
sans


Courier
Courier New
monospace




serif
Times New Roman


sans
Arial


monospace
Andale Mono


使用者設定檔

底下是使用者字型設定檔的例子,內容存放於~/.fonts.conf







~/.fonts



rgb


檔案

fonts.conf 含有針對fontconfig函式庫的設定資訊,包括了含有字型資訊的目錄,以及比對字型之前修訂字型需求樣式的指令。 此檔案採用XML格式。

conf.d :依慣例,conf.d是額外設定檔所存放的目錄,這些額外的設定檔通常由外部程式或電腦管理員管理。 檔名以數字開頭的檔案按照字典方法排序後,依額外設定檔處理。 這些檔案都採用XML格式。 主要設定檔fonts.conf利用指示fontconfig讀取conf.d。

fonts.dtd 是定義設定檔格式的DTD。

~/.fonts.conf :慣例上~/.fonts.conf是每個使用者各自的字型設定檔。這是由全域的fonts.conf所指定的。

~/.fonts.cache-* 慣例上是所有字型資訊的快取檔,若各別目錄有快取檔則不存放該目錄的資訊。此檔案由fontconfig自動維護。

請參閱

fc-cache(1), fc-match(1), fc-list(1)

阅读(1436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~