總網頁瀏覽量

咕狗大神

2010年6月1日 星期二

關於 Webkit 在中文直書上的技術問題

安裝 WebKit 請參考這裡

目前 Webkit 可透過呼叫 -webkit-transform: rotate(90deg) 的方式,把文字及排版同時旋轉九十度。而中文直書需要的,其實只要把排版轉九十度,文字不旋轉。

在 /Webkit/WebCore/rendering/SVGTextLayoutUtilities.cpp
有段 float glyphOrientationToAngle(const SVGRenderStyle*, bool isVerticalText, const UChar&) { }
回傳值為角度,共有 0, 90, 180, 270 四種
假如文字方向垂直,則檢查 SVGRenderStyle::glyphOrientationVertical(),
否則為 SVGRenderStyle::glyphOrientationHorizontal()
回傳的 state 有 GO_AUTO, GO_90DEG, GO_180DEG, GO270DEG, GO_0DEG 五種。


...(以下刪去)

(我覺得之前好像搞錯方向了)
在 /Webkit/WebCore/ 目錄裡面搜尋 WM_TBRL ,總共出現在五個地方:
  1. /Webkit/WebCore/rendering/style/SVGRenderStyleDefs.h -- 定義 EWritingMode { WM_LRTB, WM_LR, WM_RLTB, WM_RL, WM_TBRL, WM_TB } ... 直書就是這兩個
  2. /Webkit/WebCore/svg/SVGFont.cpp -- 透過 SVGRenderStyle->writingMode() 是否為 WM_TBRL 或者 WM_TB 來判斷直書與否
  3. /Webkit/WebCore/svg/SVGTextContentElement.cpp -- 透過檢查 SVGRenderStyle->writingMode() 決定是否為直書,整個類別使用多次直書與否進行不同邏輯演算
  4. /Webkit/WebCore/css/CSSPrimitiveValueMapping.h -- 進行各種 CSSValue 與程式定義的對應
  5. /WebKit/WebCore/rendering/SVGTextLayoutUtilities.cpp -- 把 SVGRenderStyle->writingMode() 是否為直書,包裝成一個 isVerticalWritingMode() 的函式。
所以接下來應該從這幾個去著手。看起來, Webkit 對 CSS 3.0 的 < writing-mode > 已經有實作了,只是還沒有開放而已。

~先寫到這裡

沒有留言:

張貼留言