Expand description
行の折り返し機会(soft wrap opportunity)の判定。
§なぜ必要か
従来の折り返しは1 文字単位だった。次の文字が入らなければ
そこで改行するので、英単語が語中で分割されていた。
CSS の既定(overflow-wrap: normal / word-break: normal)では
単語は分割しない。収まらなければはみ出すのが正しい。
実害は見た目だけではない。min-content(最小内容幅)は 「available=1 で組んだときの幅」で測っているため、語中で切れる実装だと min-content が 1 文字ぶんになる。flex の縮小はこの値を下限に使うので、 項目を 1 文字幅まで潰してしまう(実サイトのナビ項目 “Papers” が 縦一列に潰れた)。
§方針
UAX #14 の完全実装はしない。実用上効く規則だけを入れる。
- 空白の後ろでは改行できる
- 漢字・かな等(表意文字)の前後では改行できる
- それ以外(英数字が連なる部分)では改行できない
禁則処理(行頭・行末禁則)は既存の vector_font 側が持っており、
ここでは扱わない。
§既知の差
厳密には、行の途中で始まった単語が収まらない場合はその単語ごと
次の行へ送るのが正しい。現状は送らずにはみ出させる。
計測(vector_font)と描画(web_engine::layout)で同じ規則を
使うことを優先した——両者がずれると、箱の大きさと実際の文字の位置が
食い違い、見た目の崩れとして現れる。
Functions§
- can_
break_ between prevとnextの間で改行してよいか。- is_
ideographic - その文字が表意文字(漢字・かな・全角記号など)か。