Unicode code pointからのリンクはUnicode utilities, character propertiesの該当文字のページ。
Unicodeへの参照以外にも、いくつかのカテゴリが定義されており置換(読み替え)で利用される。
空白関係で利用される文字参照のリスト、展開先のコードポイントとCSSプロパティーによる置換などをコメントで含めて。全リストはNamed character referencesにある。文字参照名に貼ってあるリンクはこのリストのページ内の該当業へのリンク。
以下、この文書記述時点での最新ドラフト準拠。
CSSの空白処理で影響する対象は、各仕様で明記がない限りdocument white space characters (css-text-3 4.1)となる U+0020, U+0009, U+000A の文字。UCD General_Category=ZsのU+0020, U+00A0以外の15文字はother space separators
とされる。
またこのセクションの定義により、U+000Aや言語ごとにunicodeで定義された改行文字はsegment break
となり、プロパティーの設定によっては表示に反映される。
U+0009, U+000A, segment break
の表現に当てはまらないControl characters, General_Category=Ccの文字は、フォント上で不可視の場合でも何らかの形で可視表示せねばならず、`Other Symbols’ (General_Category=So)として扱う。
推奨される(結果が同じであれば必須ではない)文字列処理の順序はAppendix Aにあり、以下の順になる。
ざっくりいうと、preエレメント的な扱いの拡張の設定と、畳み込み規則の詳細定義
normal
: infra specの畳み込みに準拠、soft wrap opportunitiesも適用pre
: 空白の畳み込みを一切行わず、segment break
は強制改行位置として扱い、soft wrapは適用しない (htmlのpreエレメントの扱い)norwap
: 空白の畳み込みを行うが、soft wrapは適用しないpre-wrap
: 空白の畳み込みは一切行わないが、soft wrapは適用するbreak-spaces
: 以下の2点以外はpre-wrap
と同じ。行末を含め空白やother space separators
による空白のサイズを維持する、それらの空白の間を含めすべての空白文字の直後にsoft wrap
を許可する (その分行末に余計なサイズが付く)pre-line
: 空白の畳み込みもsoft wrapも行うが、segment break
を強制改行位置として扱う (強制改行以外はnormal
と同じ)これらの処理で保持された(畳み込まれなかった)空白はpreserved white space
と呼ぶ。
white-space
がnormal
, nowrap
, pre-line
の場合、空白の畳み込みを行う
space
, tab
の並びは削除するsegment break
の変換規則により、畳み込み可能なsegment break
を変換するtab
はU+0020 (space
)に置換するspace
の2つ目以降をゼロ幅に置換する (soft wrap
可能な不可視文字)white-space
がpre
, pre-wrap
, break-spaces
の場合、すべてのspace
をU+00A0と扱う
soft wrap
の位置について、pre-wrap
の場合は空白の連続の最後のみに、break-spaces
の場合はすべての空白の直後に許されるtab-size
が0に設定されていれば保持されたタブは表示されない、それ以外の場合は通常のタブの表示の処理で空白をあけるspace
やother space separators
が行末にある場合は以下の処理を行う (ぶら下げ処理を行われた空白は文字選択時に選択可能になる)
white-space
がnormal
, norwap
, pre-line
の場合、ぶら下げ処理を行う (領域外に出られる)white-space
がpre-wrap
の場合、forced line break
が続いていない場合に限りぶら下げ処理を行い、続く場合はconditional hang
(文字揃えを行う前に収まらない場合のみぶら下げる)を行うwhite-space
がbreak-spaces
の場合、行末でのぶら下げ・畳み込みは禁止され、行送りされるsegment break
変換処理
white-space
がpre
, pre-wrap
, break-spaces
, pre-line
の場合、segment break
は畳みこまれず、すべてpreserved line feed
として扱うsegment break
は畳み込み可能になる。2つ目以降は除去され、残ったものはU+0020に置換されるか前後の状況により除去される
zero width space character
(U+200B)がある場合は除去し、U+200Bのみ残すEast Asian Width
がFullwidth
, Wide
, Halfwidth
でAmbiguous
でない場合、かつ、ハングルでなければsegment break
は除去するsegment break
に適用されるlang
が中国語、日本語、Yiの場合、かつ、前後のどちらかが約物か記号(Unicode General Category PかS)でEast Asian Width
がAmbiguous
であり、もう一方のEast Asian Width
がFullwidth
, Wide
, Halfwidth
でハングルでない場合、segment break
は除去するEast Asian Width
がWide
かNeutral
の文字はAmbiguous
として扱う検討点
forced line break
: preserved newline character
などの明示的改行指示や、ブロックの先頭・最後soft wrap break
: 表示幅に合わせて表示上で改行する場所、soft wrap opportunity
である許可された場所でのみ可能
orthographic syllable boundary
での改行になるline-break
: 改行規則の厳密さの選択word-break
: 改行不可な単語として扱う文字種の定義hyphens
: ハイフンを利用する言語でのハイフン規則の制御overflow-wrap
: 改行不可な文字列以外のどこでも改行可能で、不可なものは行送りする概要
preserved forced break
で改行する、UAX #14のBK, NLも考慮するline-break
の値などによる改行可能優先度は定義しないが、word-break: break-all
では単語区切りの優先扱いは想定されておらず、line-break: anywhere
の場合は優先扱いは禁止される。forced line break
やsoft wrap opportunity
としては扱わないsoft wrap opportunity
を置くsoft wrap opportunity
はその文字を含む要素の属性による。連続する2文字間については最下位の共通要素のwhite-space
属性により、line-break
, word-break
, overflow-wrap
属性に関してはLevel 3では未定義soft wrap opportunity
はボックスの端と中身の間でなく、直前・直後(margin edge)で行うsoft wrap opportunity
を置く定義されている属性
soft wrap opportunity
の制御であり、white space
や約物によるものには影響しないnormal
: 前出の言語による一般規則に従うbreak-all
基本的にはどこでも改行可能にする。UAX #14 NU, AL, SAをIDとして扱う。約物には影響しないkepp-all
: 単語中での改行を禁止する。辞書ベースの改行位置以外の、NU, AL, AI, IDや表示の塊の間のsoft wrap opportunity
は無視される。auto
: UAによる判断、行長などに依存して選択されるloose
, normal
, strict
, anywhere
が選べるanywhere
ではUAX #14のGL, WJ, ZWJなどを含めた禁止規則が無視され、ハイフネーションも行わない。またwhite-space
による行末の空白処理も変更される。strict
で禁止、normal
, loose
で許可normal
, loose
で許可され、それ以外では禁止loose
の場合のみ許可East Asian Width
がAmbiguous
, Fullwidth
, Wide
の後置文字の前、UAX #14 PRかつEast Asian Width
がAmbiguous
, Fullwidth
, Wide
の前置文字の後での改行は、中国語・日本語でloose
の場合のみ許可shy
のハイフネーション可能点の制御none
(行わない), manual
(事前定義のみ), auto
(単語解析で挿入可能)があるnormal
: 許可された点でのみ可能だが、word-break: kepp-all
の場合はnormal
に読み替え可能anywhere
: どこでも改行挿入可能break-word
: anywhere
と同等だが、break-word
で追加されるsoft wrap opportunity
は表示幅を計算する際には考慮しない両端揃えなどの設定と、揃えにした場合の空白挿入の扱いについて
text-align
: start
, end
などの揃え方の指定 (text-align-all
とtext-align-last
2つの短縮版)
justify
の場合で空白がcollapsable
でない場合は、文字列を揃えに利用せずjustification opportunities
なしとみなす。もし文字列を揃える場合は、tab
を空白処理基準に従って並べる。end
側を外に伸ばすtext-justify
: 空白挿入の方法
auto
: (既定値) 速度と品質を考慮してUAが決定する、記述方式・言語によって処理を変えるべきであるとされているnone
: justification opportunities
なしとみなす (user stylesheetでの設定が主目的)inter-word
: word separator
で空きを調整する (word-spacing
の設定に依存)inter-character
: 全てのtypographic character units
間で空きを調整する (letter-spacing
の設定に依存)justification opportunity
: 調整可能な位置の定義で、word separator
などの単一typographic character unit
もしくはその並びで、text-justify
の値により決定される
letter-spacing
, word-spacing
での空き量に加算される。justrification opportunity
が存在する場合、揃えは設定されていれば必ず適用される。S*
, P*
)はその文字の属する言語、もしくはCommon
の場合は文章で主要な言語に従って行う。ただし、言語ごとに要求される処理は別途適用する。text-align-last
によって処理するjustification opportunity
非存在として扱う。auto
に対する要求は明示されていないが、最低要件は提示されている
block script
の塊・clustered script
の塊と他の塊の間、にjustification opportunity
が存在するblock script
のすべての文字、clustered script
のすべての文字は同等に扱う (異言語交じりの場合など)単語間(word-spacing
)、文字間(letter-spacing
)の空き量の指定
word-spacing
: normal
は0
とし、値はフォント指定の単語間空き量に追加する値(両側に半分ずつ)となる
letter-spacing
: typographic character units
間の追加空き量で、bidi処理後にカーニングやword-spacing
に追加して挿入され、揃えの指定によっては増減が加えられる
normal
がgetComputedStyle()
から戻るtypographic character unit
として扱うtypographic character units
が属する最内の要素に属するfont-feature-settings
で上書きされうる
typographic character units
を分割し、かつ以下の条件を満たすインラインボックスの端ではshapingは解除される
vertical-align
がbaseline
でないtext-indent
: 行頭空き指定、each-line
やhanging
がない限り先頭行のみで、絶対量指定かブロック要素全幅に対する割合
each-line
: forced line break
の直後全てに挿入するhanging
: 適用行頭の反転min-content
には入らないがmax-content
には入るhanging-punctuation
: 約物のぶら下げ処理を行うかどうか
none
: 行わないfirst
, last
: 要素の先頭・最終行で行う、Ps, Pf, Pi, U+0027, U+0022が対象force-end
(強制), allow-end
(許可): 行末のstop or comma
を対象に行う
stop or comma
: U+002C, U+002E, U+060C, U+06D4, U+3001, U+3002, U+FF0C, U+FF0E, U+FE50, U+FE51, U+FE52, U+FF61, U+FF64空白処理以外では
分かち書きなどのために利用できる設定の導入で、wbrやU+200Bを挿入することで位置を定義する。
word-boundary-detection
: 単語間区切りの検出方法、検出された位置にvirtual word boundary
が挿入される
manual
: virtual word boundary
の挿入はしない、SAはAL属性も持つとして扱う (line-break
がanywhere
以外の場合にsoft wrap opportunity
が存在しなくなる)normal
: 東南アジア諸言語以外においてはvirtual word boundary
の挿入はしない、SAはAL属性も持つとして扱うがvirtual word boundary
を解析して必要なら挿入しなければならないauto(lang)
: 指定の言語での仕様に沿った解析を行うvirtual word boundary
の挿入は空白文字処理 Phase 1 (Lv3 4.1.1)の前、かつ、word-boundary-expansion
の処理前に行う。virtual word boundary
挿入位置で複数のインラインボックス境界がある場合は、最外の境界に入れる。virtual word boundary
を挿入禁止
manual
がある場合の先頭・最後typographic character unit
内の文字間vitual word boundary
を挿入すべきではない
word-boundary-expansion
: 単語間文字の置き換えの指定
none
: 行わないspace
: U+200BをU+0020に置き換えideographic-space
: U+200BをU+3000に置き換えforced line break
の直前直後のU+200Bは置き換え禁止virtual word boundary
であるwbrはU+200Bとして扱うtext-space-collapse
: 空白文字を畳みこむかどうかの選択
collapse
: 既定の動作で、連続の空白文字を1文字に置き換えるpreserve
: 畳みこまない、segment break
はforced line break
になるpreserve-breaks
: 畳みこむが、segment break
はforced line break
になるpreserve-spaces
: 空白を畳み込まないが、タブやsegment break
を空白に置き換えるdiscard
: 全て除去するtext-space-trim
: 先頭・最後での除去のオプション、既定はnone
(行わない)
trim-inner
: ブロックコンテナにおいて先頭・最後を除去するdiscard-before
: 先頭の空白を要素の直前の空白に畳み込むdiscard-after
: 最後の空白を要素の直後の空白に畳み込むline-padding
: 先頭・末尾の追加padding量text-spacing
: 文字種による空き量処理の設定
auto
: 自動処理normal
: 現状ではspace-start
, allow-end
, trim-adjacent
none
: 行わないideograph-alpha
: ideographs
, non-ideographic lettes
間に1/4emを追加ideograph-numeric
: ideographs
, non-ideographic numerals
間に1/4emを追加punctuation
: 言語で定義された約物周りの分割禁止空白を入れるspace-start
: fullwidth opening punctuation
を行頭で全角として扱うtrim-start
: fullwidth opening punctuation
を行頭で半角として扱うspace-first
: 改行の行分割直後のみspace-start
とするallow-end
: fullwidth closing punctuation
を追い出しの代わりに行末で半角として扱うspace-end
: fullwidth closing punctuation
を行末で全角として扱うtrim-end
: fullwidth closing punctuation
を行末で半角として扱うspace-adjacent
: 行頭でないfullwidth opening punctuation
と行末でないfullwidth closing punctuation
を全角として扱うtrim-adjacent
: 連続した約物の空き量を調整するno-compress
: 揃えの時にtext-spacingを圧縮しないtrim-adjacent
での処理
fullwidth opening punctuation
が、fullwidth opening punctuation
, fullwidth middle dot punctuation
, U+3000に続く場合と、同じかより大きなサイズのfullwidth closing punctuation
に続く場合に半角にするfullwidth closing punctuation
の後に、fullwidth closing punctuation
, fullwidth middle dot punctuation
, U+3000が続く場合と、同じ課より大きなサイズのfullwidth opening punctuation
が続く場合に、半角にするideographs
: U+3041からU+30FFでP*
でないもの、CJKストローク (U+31C0からU+31EF)、カタカナ発音 (U+31F0からU+31FF)、Han属性を持つ文字non-ideographic letters
: ideograph
, EAW=F, 縦書き中の縦中横の文字、でないL*
とM*
の文字non-ideographic numerals
: EAW=F, 縦書き中の縦中横の文字、でないNd
の文字fullwidth opening punctuation
: Ps
中、CJK (U+3000からU+303F)かEAW=Fの文字、またU+2018, U+201Cで、半角にする場合は左半分もしくは上半分を消すfullwidth closing punctuation
: Pe
中、CJK (U+3000からU+303F)かEAW=Fの文字、またU+2019, U+201Dで、もしくはfullwidth colon punctuation
とfullwidth dot punctuation
も含むことがある。半角にする場合は右半分かう下半分を消すfullwidth middle dot punctuation
: U+00B7, U+2027, U+30FBで、fullwidth colon punctuation
とfullwidth dot punctuation
を含むことがあるfullwidth colon punctuation
: U+FF1A, U+FF1Bfullwidth dot punctuation
: U+3001, U+3002, U+FF0C, U+FF0E