總網頁瀏覽量

咕狗大神

2010年6月28日 星期一

Arch Linux

好久沒有寫網誌了,一直都在追 WebKit 原始碼。六月中旬在追架構,六月底則是挑選 table 部份來追。對我而言,追原始碼本身是一件非常辛苦的事情,因為我已經太習慣從架構一路 down 下來了。

不過今天沒什麼心得要寫,主要是紀錄一套 linux 作業系統,叫做 Arch Linux,官方網址: http://www.archlinux.org/ 。這是一套針對 64 位元 Intel x86-64 最佳化的 linux 作業系統,以簡單乾淨為他的原則。

等我有空再來看看好不好玩。

2010年6月11日 星期五

利用 SVG 讓 WebKit 可以進行文字直書

上個週五,不小心被我發現,原來 WebKit 已經實做利用 SVG 的標籤,來改變文字排列方向了。這讓我省了一些事情,也爭取了一些時間,繼續進行比較精細的原始碼追蹤。

<div style="word-break:break-all; width:480;overflow:auto">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 400 300">
<text writing-mode='tb'>測試直書01234567測試直書。</text></svg></div>

用上面這段 html 就可以達成了,不過在 IE 是沒辦法的

2010年6月2日 星期三

蟄伏已久的心再度被喚醒

今天 Bernie 說,他想換個中醫, C 醫生療效不怎麼好,他有點害怕。然後他給我看了 J 醫生的網頁,不看還好,看了真的讓我血脈賁張。怎麼說呢?我看過的那些中醫古本,我超級喜歡的那幾本,包括曹穎甫、李可、彭子益、張錫純、陳修園等人的醫案,他們開出的藥方,那種攻守兼具,明辨陰陽的藥方,就出現在 J 醫生的醫案。

自從五月換了工作,一直沉浸在工作裡面,新的工作真是有趣,讓我把所有時間都花在上面,每天上班都超過九個小時,還意猶未盡。一直以為學習中醫只是對前一份工作失望後的寄情作用,沒想到今天發現,中醫其實一直藏在我心底,從來沒有消逝。要不是換新工作沒有放假,我超想跟 Bernie 一起跑一趟 J 醫生的診所。

~真的!我超想去一趟的。

鞕道:追蹤 WebKit 的原始碼,找出直書的部份

先說明一下,『鞕』音義同『硬』,請不要搞成鞭子的『鞭』囉。這次老大要我們兩個禮拜內,改寫 WebKit 使其擁有中文直書的功能,這就是台語講的『鞕道』。
追了一整天,先紀錄一下目前找到的東西。
  1. WebKit 把文字方向的功能,透過 class SVGRenderStyle 內的 struct IngeritedFlags 內的 unsign _writingMode 來控制, EWritingMode 定義請見這篇
  2. SVGRenderStyle 透過 setBitDefaults() 來賦予包含 svg_inherited_flags._writingMode 初值

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 > 已經有實作了,只是還沒有開放而已。

~先寫到這裡