排版的想法一則

目錄
  1. Span style

這是個人筆記。

Span style

HTML 的span加上style指定文字格式,可以進行文字的調整。但要如何實作於自己的排版軟體上呢?

我們可以想像文字的呈現是:有格式的文字 = f(純文字,環境)

我們可以假設預設格式為:dfStyle

applyStyle(dfStyle, [txt1, span([a_1: v_1, a_2: v_2, ..., a_n, v_n],txt2), txt3])可以轉為:

applyStyle(dftyle,txt1), applyStyle(dfStyle.replaceAttr([a _ 1: v_1, ...a_n, v_n], applyStyle(txt2)), applyStyle(txt3)

寫成虛擬碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
fn applyStyle(style, appliee) -> void{
if isArray(appliee){
// if appliee[0] is a span then replace the attrs in appliee[1]
if (appliee[0] == span){
applyStyle(style.replaceAttr(appliee[1], appliee[2])
}else{
return map(appliee, applyStyle);
}
}else{
drawText(appliee, style);
}
}