注音標音OpenType Font計畫
- 提案人:董福興
- 執掌單位:教育部終身教育司第四科「閱讀與語文教育科」
說明
注音符號在Web上的顯示,除了使用Polyfill處理以外,還是希望能夠通過標準化的方式在各瀏覽器上得到實作。尤其是ruby-position: inter-character的實作,幾乎讓注音在Web上的顯示只差一步,而那一步就是調號(tone mark, e.g. ˊˇˋ)該怎麼被放到注音的右側。
最近在W3C i18-CJK的討論群組上開始討論這個議題,而有了比較清楚的輪廓。可以確定的是調號不屬於Layout Engine的處理範圍,而交由OpenType來實作會較佳,而最好是能做出一套僅有注音符號與調號的開源OpenType字體,具備對應的GPOS功能,能將調號放到右側去。不管是透過安裝、內嵌或者網路字型(Webfont)的方式提供,都能讓調號得以放到對的位置。
- <ruby>我<rt>ㄨㄛˇ</rt></ruby>
- 調號僅會與以下符號一併出現:ㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ,即U+3113—U+3129。
- 調號位置請參考《國語注音符號手冊》。
- 調號Unicode
- 二聲U+02CA MODIFIER LETTER ACUTE ACCENT
- 三聲U+02C7 CARON
- 四聲U+02CB MODIFIER LETTER GRAVE ACCENT
- 輕聲U+02D9 DOT ABOVE
- 注音符號Unicode
- U+3105-U+3129(即ㄅ到ㄩ)
- 應該不用包括U+312A-U+312D
- U+31A0-U+31BA(方言音擴展)
- OpenType GPOS registered feature: "mark"
人力需求
熟OpenType規格與製作的Font Designer & Font Engineer。
技術實作需求
- 首先,從開源字型中取出U+3105-U+3129(即ㄅ到ㄩ)、以及二聲U+02CA、三聲U+02C7、四聲U+02CB、輕聲U+02D9的Subset。
- 套用GPOS Feature "mark"。
- 當文字直排,且U+02CA、U+02C7、U+02CB三個調號前接U+3113(ㄓ)-U+3129(ㄩ)時,將調號放到符合《國語注音符號手冊》的右上角位置。
- (可能功能)U+02D9輕聲(˙)的位置在直排中偏高,可能在U+02D9後接U+3105-U+3129時,改變Glyph成扁一點的點,以接近標準位置?
技術細節
- ruby-position: inter-character 是一種橫中直的概念,瀏覽器對於 <rt> 的內容必須視為直排處理。
- e.g. 解釋 vmtx 所規定的直排坐標,套用 vert/vrt2/vkrn 等直排特有的 feature
- 是否需要相容於 Adobe-CNS1-x 的問題
- 既有繁體中文OpenType字型標準是Adobe-CNS1-x,若需要相容該標準,就不能增加新glyphs。
- 允許增加新glyphs,能得到比較多彈性:例如可準備兩組注音符號(實務上是ㄓ~ㄦ共23個),在vert/vrt2時GSUB處理,即可能用同一套GPOS敘述同時支援橫排與直排。另外可增加一個寬/高度較小的輕聲符號。
- 原始碼中輕聲必須置於前方(˙ㄉㄜ),因為置於後方難以推算要回推幾個字元。
實作回饋
- 或许可以考虑改用 GSUB 而不是 GPOS 来处理?
- 除了用在Ruby標音外,也包含行內的呈現?見R.I.的Test Case
Test Case
Test Case 1: http://binb.tw/bopomofo/case01/
- 文字:橫排
- 注音:橫排
- 嵌入字型:bpmfgpos.otf by But Ko
- 效果:透過OpenType GPOS(本案例為’kern’)調整調號位置
- 說明:這一點在呈現上,幾乎在各瀏覽器都沒有問題,也是比較確切的成果。
Test Case 2: http://binb.tw/bopomofo/case02/
- 文字:直排
- 注音:直排
- 嵌入字型:bpmfgpos.otf by But Ko
- 效果:透過OpenType GPOS(本案例為’vkrn’)調整調號位置
- 說明:
- Firefox請使用Nightly build並且將layout.css.vertical-text.enabled設定為True,但似乎不支援GPOS位置調整。
- Google Chrome請使用Chrome Canary,但會發生調號原位置出現空白的狀況。
Test Case 3: http://binb.tw/bopomofo/case03/
- 文字:橫排
- 注音:直排
- 嵌入字型:bpmfgpos.otf by But Ko
- 效果:透過OpenType GPOS(本案例為’vkrn’)調整調號位置
- 說明:除Webkit Nightly外,不支援ruby-position:inter-character。
發行與普及
做出來再說(;´Д`)。