* 仕様書

[REFS[
- [44] [CITE@en[CSS Writing Modes Level 4]], [TIME[2020-09-05T23:08:25.000Z]], [TIME[2020-09-06T01:23:51.094Z]] <https://drafts.csswg.org/css-writing-modes/>
- [46] [CITE@en[CSS Writing Modes Level 4]], [TIME[2020-09-05T23:08:25.000Z]], [TIME[2020-09-06T01:54:08.790Z]] <https://drafts.csswg.org/css-writing-modes/#propdef-writing-mode>
]REFS]

* 配置モデル

[FIG(short list)[ [45] [[CSS Writing Modes]]
- [[行内基底方向]]
- [[ブロックフロー方向]]
]FIG]

* [CODE['writing-mode']]

[SRC[>>46]]

* 実利用例

-[394] [CITE@zh-CN[人民网蒙文版]], [[M_1000]], [TIME[2025-05-26T08:50:53.000Z]], [TIME[2025-06-28T00:33:20.813Z]] <https://mongol.people.com.cn/n4/2025/0526/c306955-20016082.html>
--[395] 
[CITE[null]], [TIME[2024-06-20T04:08:24.000Z]], [TIME[2025-06-28T00:36:01.223Z]] <https://mongol.people.com.cn/img/2011mw/demowb3.css>

[396] >>395

>
[PRE[
[SNIP[]]writing-mode:tb-lr;-webkit-writing-mode:vertical-lr;-webkit-text-orientation:sideways;[SNIP[]]
]PRE]

[397] >>396 [[Chrome]] では正常に表示される。 [[Firefox]] では無視される。

;; [399] [[Firefox]] は [CODE[writing-mode: vertical-lr]] は対応しているのに、
なぜ >>396 には対応できないのか謎。 [CODE[tb-lr]] は旧仕様とはいえ二十年以上の歴史があるし、
[CODE[tb-rl]] には対応しているのに。
[[蒙古文字]]の市場が小さいからと無視しているのか?

* 歴史

** DSSSL

[54] 
[[JIS X 4153:1998]] (ISO 1996)

- 4.17 [L[行進行方向 (line-progression-direction)]]
- 12.1 l) [L[機能 bidi]]: 「[L[表記方向左向き (right-to-left)]]」
- 12.1 m) [L[機能 vertical]]: 「[L[表記方法下向き (top-to-bottom)]]」
- 12.3.1 表記方法: 「[L[右向き (left-to-right), 左向き (right-to-left) 又は下向き (top-to-bottom) のいずれか]]」
- 12.3.2 「[L[段落が複数の表記モードを使う]]」 (横書き [[bidi]] のこと)
- いくつかの[[流し込みオブジェクト]]に[[特質]]
[CODE[writing-mode]]
があって、
[CODE[left-to-right]], [CODE[right-to-left]]
が指定でき、ものによっては
[CODE[top-to-bottom]]
も指定できる。
- 12.6.6 [CODE[implicit-bidi-method]]


- [398] [TIME[2001-08-19T05:28:49.000Z]], [TIME[2023-08-02T14:22:45.132Z]] <http://www.y-adagio.com/public/standards/jis_dsssl/cls12.txt>

[388] >>398 によると [[ISO/IEC 9541-1]] に基づき[[フォント]]の指定が次のように解釈されます。

>
オプションの引数writing-mode:は,シンボルleft-to-right,シンボルright-to-left及びシンボルtop-to-bottomのいずれかを値とする。シンボルleft-to-rightの値は,引数listの前に次のリスト置くのと同等である。
[PRE[
("ISO/IEC 9541-1//WRMODES"
 "ISO/IEC 9541-1//WRMODE"
 "ISO/IEC 9541-1//WRMODENAME"
 "ISO/IEC 9541-1//LEFT-TO-RIGHT")
]PRE]
他の可能な値についても同様とする。

;; [389] 関連: [[公開識別子]]

[390] >>398

>
(15) 特質writing-mode:はシンボルであって,left-to-right又はright-to-leftのいずれかを値とする。これは,ヘッダ行及びフッタ行の表記方向を決める。初期値はleft-to-rightとする。

[391] >>398

>[202] filling-direction-specification = (filling-direction expression )
>
式expressionは評価の結果,シンボルleft-to-right,シンボルright-to-left又は シンボルtop-to-bottomのいずれか一つになり,領域コンテナの流し込み方向を指定する。流し込み方向が構文page-regionで指定されない場合,構文page-modelから継承される。構文page-region及び構文page-modelの両方にその指定がない場合,エラーとする。

[392] >>398

>
(48) 特質writing-mode:はシンボルであって,シンボルleft-to-right,シンボルright-to-left又はシンボルtop-to-bottomのいずれかを値とする。表記モードの決定する方向は,配置方向に直交する。初期値は,シンボルleft-to-rightとする。この特質は,行の配置方向を制御する。

>
(3) 特質writing-mode:はシンボルであって,シンボルleft-to-right,シンボルright-to-left又はシンボルtop-to-bottomのいずれかを値とする。表記モードの決定する方向は,配置方向に直交する。初期値は,シンボルleft-to-rightとする。

>(6) 特質glyph-reorder-method:は,#f,文字列又は文字列のリストとする。各文字列は,グリフの再順序付けの方法の公開識別子を指定する。初期値は,#fとする。
>
備考 これは,普通ヒンズースクリプトで使用する。
>
(7) 特質writing-mode:はシンボルであって,シンボルleft-to-right,シンボルright-to-left又はシンボルtop-to-bottomのいずれかを値とする。表記モードの決定する方向は,配置方向に直交する。初期値は,シンボルleft-to-rightとする。この特質は,グリフのメトリクの決定において,どの表記方向を用いるかを制御する。


** XSL モデル

[REFS[
- [55] [CITE[Extensible Stylesheet Language (XSL)]], [TIME[2017-10-02T10:21:49.000Z]], [TIME[2020-10-25T10:03:32.593Z]] <https://www.w3.org/TR/1998/WD-xsl-19980818>
]REFS]

- [CODE[writing-mode]], [CODE[[VAR[*]]-writing-mode]]
-- block-progression-direction
-- inline-progression-direction
-- escapement-direction
-- line-progression-direction
-- row-progression-direction
-- column-progression-direction
-- shift-direction
-- up-direction
-- [VAR[writing-mode-specifier]]
--- [CODE[lr-tb]] ([[既定値]])
--- [CODE[rl-tb]]
--- [CODE[tb-rl]]
--- [CODE[lr-bt]]
--- [CODE[rl-bt]]
--- [CODE[tb-lr]]
--- [CODE[bt-lr]]
--- [CODE[bt-rl]]
--- [CODE[lr-alternating-rl-tb]]
--- [CODE[lr-alternating-rl-bt]]
--- [CODE[lr-inverting-rl-tb]]
--- [CODE[lr-inverting-rl-bt]]
--- [CODE[tb-rl-in-rl-pairs]]
-- starting-edge, ending-edge
- [CODE[method-implicit-bidi]]

[56] このとき導入されたモデルが基本的にそのまま踏襲されたようです。

[[XSL]] → [[XSL 1.0]] ([[XSL-FO]]) → [[XSL 1.1]]

- [57] [CITE[Extensible Stylesheet Language (XSL)]], [TIME[2017-10-02T10:21:49.000Z]], [TIME[2020-10-25T10:13:24.595Z]] <https://www.w3.org/TR/1998/WD-xsl-19981216>
-- [58] [CODE[writing-mode]] 関連はやや整理が進むが基本は同じ
-- [59] [[bidi]] は [[Unicode Bidirectional Algorithm]] に
-- [62] start-edge, end-edge, before-edge, after-edge など
-- [76] up-direction に関係して
[CODE[vertical-roman-orientation]] = [CODE[vertical]]/[CODE[perpendicular]]
というのが出てくる
<https://www.w3.org/TR/1998/WD-xsl-19981216#fm-up-direction>
が、定義なし。
- [60] [CITE[Extensible Stylesheet Language (XSL)]], [TIME[2017-10-02T11:00:35.000Z]], [TIME[2020-10-25T10:15:31.897Z]] <https://www.w3.org/TR/1999/WD-xsl-19990421/>
-- [61] [CODE[fo:bidi-override]]
-- [63] [[CSS]] との統合が本格的に始まる
-- [77] 
[CODE[reference-orientation]] に90度単位で向きを指定できる
<https://www.w3.org/TR/1999/WD-xsl-19990421/#reference-orientation>
-- [64] [CODE[i18n-format]] が指していたのはここ

[65] この少し前に 
[[Microsoft]]
が
[[CSS]]
の追加機能として
[CODE[i18n-format]]
を提案していました。
[[書字方向]]指定は
[CODE['[[layout-flow]]']]
を使っていました。
そちらは
[[XSL]]
との統合で廃止され、
その後は
[[CSS]]
も
[CODE[writing-mode]]
を採用しました。


- [66] [CITE[Extensible Stylesheet Language (XSL)]], [TIME[2017-10-02T10:23:25.000Z]], [TIME[2020-10-26T08:47:18.476Z]] <https://www.w3.org/TR/2000/WD-xsl-20000112/#writing-mode>
- [71] [CITE[Extensible Stylesheet Language (XSL)]], [TIME[2017-10-02T10:23:25.000Z]], [TIME[2020-10-26T08:56:33.865Z]] <https://www.w3.org/TR/2000/WD-xsl-20000112/#writing-mode-add>
- [78] [CITE[Extensible Stylesheet Language (XSL)]], [TIME[2017-10-02T10:23:25.000Z]], [TIME[2020-10-26T09:44:15.652Z]] <https://www.w3.org/TR/2000/WD-xsl-20000112/#glyph-orientation-horizontal>

[67] 前の WD (>>60) では全バリエーションが定義されていましたが、
この WD から本体[[規定]]と附属書に分離されました。

- [68] 本体 (既存): [CODE[lr-tb]], [CODE[rl-tb]], [CODE[tb-rl]]
- [69] 本体 (新): [CODE[lr]] (= [CODE[lr-tb]]), [CODE[rl]] (= [CODE[rl-tb]]),
[CODE[tb]] (= [CODE[tb-rl]])
- [72] 追加: その他の既存値

[73] 追加の値は、
「for more extensive internationalization support」 [SRC[>>71]]
のための追加の値だと説明されていました。

[70] 
選択の理由は
「covers the base writing-modes that are used as the official languages of the United Nations」
[SRC[>>66]]
と説明されました。 
[[国際連合]]の[[公用語]]は
[[Arabic]], [[Chinese]], [[English]], [[French]], [[Russian]], [[Spanish]]
とされます。
[[国際連合]]が[[書字方向]]まで定めているのか不明ですが、
この各言語の現代の正式な[[書字方向]]は、
[CODE[lr-tb]] か [CODE[rl-tb]]
です。
([[Chinese]] が現[[国際連合]]加盟国である[[中華人民共和国]]の[[中文]]だとする場合。)
この理由付けからは [CODE[tb-rl]] が含まれた理由がよくわかりません。

;; [82] 
[[W3C]] は[[国際連合]]の機関ではないですし、
[[XSL]] は[[国際連合]]の採用言語という話も聞いたことがありません。
スポンサーか何か[[政治的]]な事情があったのでしょうか?



[81] 
[[XSL]] と何の関係があるのかわからない[[国際連合]]云々という基準で、
[[モンゴル文字]]で使われる [CODE[tb-lr]] 
は追加の値に格下げされました。

[79] 
向きの指定は
[CODE[glyph-orientation-horizontal]],
[CODE[glyph-orientation-vertical]]
で90度単位で指定できるようになりました。
I18N, CSS, SVG 
と協同で議論中とありました。
[SRC[>>78]]
結局 [[XSL 2.0]] の最期までほぼそのままでした。
[CODE[reference-orientation]] 
も残され、 [[XSL 2.0]] の最期まで存続しました。

[80] 
[CODE[glyph-orientation-vertical]]
には
[CODE[auto]]
があり、
全角の漢字とラテン文字は 0、
それ以外は 90 とされました。
漢字用句読点とその他漢字的文字は[[横書き字形]]、[[縦書き字形]]の別があるとき[[縦書き字形]]を使うとされました。
回転する文字の決定は[[利用者エージェント]]依存で、
country, language, script, character properties, font, character context
によって複雑で、
[[UTR #11]],
[[JIS]],
その他[[国家標準]]に従うのが良いとされました。





-*-*-

[1] [[XSL 1.0]]

,値	,行内部品・文の進行	,ブロックの進行	,シフト方向
,[CODE(XSL)[lr-tb]] ([CODE(XSL)[lr]])	,→	,↓	,↑
,[CODE(XSL)[rl-tb]] ([CODE(XSL)[rl]])	,←	,↓	,↑
,[CODE(XSL)[lr-bt]]	,→	,↑	,↑
,[CODE(XSL)[rl-bt]]	,→	,↑	,↑
,[CODE(XSL)[lr-alternating-rl-bt]]	,→ (奇数) ← (偶数)	,↑	,↑
,[CODE(XSL)[lr-alternating-rl-tb]]	,→ (奇数) ← (偶数)	,↓	,↑
,[CODE(XSL)[lr-inverting-rl-bt]]	,→ (奇数) ← (偶数)	,↑	,↑ (奇数) ↓ (偶数)
,[CODE(XSL)[lr-inverting-rl-tb]]	,→ (奇数) ← (偶数)	,↓	,↑ (奇数) ↓ (偶数)
,[CODE(XSL)[tb-lr]]	,↓	,→	,←
,[CODE(XSL)[tb-rl]] ([CODE(XSL)[tb]])	,↓	,←	,→
,[CODE(XSL)[tb-lr-in-lr-pairs]]	,↓	,←	,→
,[CODE(XSL)[bt-lr]]	,↑	,→	,←
,[CODE(XSL)[bt-rl]]	,↑	,←	,→

''Formatting Properties 7.27.7 "writing-mode"'' <http://www.w3.org/TR/xsl/slice7.html#writing-mode>

''Internationalization A.1 Additional "writing-mode" values'' <http://www.w3.org/TR/xsl/sliceA.html#writing-mode-add>

- [2] 表で、シフト方向とは、[[基線]]類の調整方向。
- [3] 注意する必要があるのは [[Unicode]] の [[bidi]] 算法との関係 (横書き系の時に影響) と、[[グリフ]]の向きかな。


[REFS[
- [121] [CITE@ja[[[Antenna House]] によるXSL拡張仕様]],
Apr 24, 2003,
Rev	Sep 8, 2003,
[TIME[2015-05-29T04:41:14.000Z]], [TIME[2020-10-28T07:48:55.406Z]]
<https://www.antenna.co.jp/XML/axf-extension/axf-extension.htm#writing-mode>
]REFS]

[122] 
数少ない
[[XSL]]
の実装の中でもよく普及していたという
[[アンテナハウス]]の
[[XSL Formatter]]
は、
[CODE[writing-mode]]
を独自に拡張していました。 

- [123] 標準の値:
[CODE[lr-tb]] = [CODE[lr]],
[CODE[rl-tb]] = [CODE[rl]],
[CODE[tb-rl]] = [CODE[tb]]
- [124] 独自の値:
[CODE[lr-bt]],
[CODE[rl-bt]],
[CODE[tb-lr]],
[CODE[bt-rl]],
[CODE[bt-lr]]

[125] 独自とはいっても附属書には入っていました。

[REFS[
- [74] [CITE@EN[Extensible Stylesheet Language (XSL) Version 1.1]], [TIME[2017-10-02T10:31:36.000Z]], [TIME[2020-10-26T09:26:37.124Z]] <https://www.w3.org/TR/2006/CR-xsl11-20060220/#writing-mode>
]REFS]

[75] その後の [[XSL 1.0]] [[W3C勧告]]や [[XSL 1.1]] 案は附属書と分離された状態のままでしたが、
[[XSL 1.1]] の [[CR]] でなぜか本体に再統合されました。
その後の版では統合されたままで、
[[XSL 2.0]] の最期に至りました。


- [47] [CITE@EN[Extensible Stylesheet Language (XSL) Version 2.0]], [TIME[2018-10-09T13:22:10.000Z]], [TIME[2020-10-23T12:51:15.244Z]] <https://www.w3.org/TR/xslfo20/#d2e425>
- [48] [CITE@EN[Extensible Stylesheet Language (XSL) Version 2.0]], [TIME[2018-10-09T13:22:10.000Z]], [TIME[2020-10-23T12:51:56.425Z]] <https://www.w3.org/TR/xslfo20/#writing-mode>
-
[49] [CITE@EN[Extensible Stylesheet Language (XSL) Version 2.0]], [TIME[2018-10-09T13:22:10.000Z]], [TIME[2020-10-23T12:54:36.278Z]] <https://www.w3.org/TR/xslfo20/#writing-mode-related>

-*-*-

[REFS[
- [86] [CITE@en[CSS3 module: text]], [TIME[2017-10-02T10:24:23.000Z]], [TIME[2020-10-27T11:13:02.631Z]] <https://www.w3.org/TR/2001/WD-css3-text-20010517/#TextLayout>
]REFS]

[87] 
[[CSS]]
に提案されていた
[CODE[layout-flow]]
モデルは
[[XSL]]
との統合で破棄されました。
[[CSS Text]]
で
[[XSL]]
との統合モデルに基づく
[CODE[writing-mode]]
が導入されました。
これは
[[XSL]] (附属書含む) のサブセットになっていました。

- [88] [CODE[writing-mode]]: 
[CODE[lr-tb]] = [CODE[lr]],
[CODE[rl-tb]] = [CODE[rl-tb]],
[CODE[tb-rl]] = [CODE[tb]],
[CODE[tb-lr]],
[CODE[bt-rl]],
[CODE[bt-lr]]
- [89] [[CSS2]] からあった [CODE[direction]] は統合されて再定義
- [90] [[縦中横]]は入れ子の要素の [CODE[writing-mode]] で記述
- [91] [CODE[glyph-orientation-vertical]], [CODE[glyph-orientation-horizontal]]
は [[XSL]] とほぼ同じ
- [92] [CODE[unicode-bidi]]
- [95] [[XSL]] と同じ start, end, before, after

[102] 
[[XSL]] (附属書含む) の有り得そうな組合せ全部に比べると、
使わなそうな [CODE[writing-mode]]
は省かれていますが、
lr/rl と tb/bt は一応全組み合わせ用意されています。
[[XSL]] (本体のみ) のよくわからない選択基準よりは論理的なサブセットにみえます。

[93] [[XSL]] の [CODE[glyph-orientation-*]] は最初から最後まで90度単位でしたが、
[[CSS]] は実装に

- 0度だけ
- 90度単位
- 任意

... の[[実装水準]]の選択を許していました。
([[XSL]] も [[CSS]] も対応している直近の角度に丸めるとされていました。)

[103] 
[[書字方向]]の記述に使わなそうな (装飾的な使い道はあるかもしれない) 
任意の角度まで認めているのは
[[XSL]] より記述能力が高いですが、
実装してもしなくてもいいとは[[相互運用性]]ガン無視。


[94] 
[[CSS]]
は
vertical:90,270、
horizontal: 0,180
のとき
[[Unicode Bidi algorithm]]
を適用するとしていました。

[126] 
[[CSS]]
の
[[WD]]
の[[編集者]]に
[[MS]] の
[[Michel Suignard]]
と
[[W3C]]
の
[[Chris Lilley]]
の名前が挙がっていました。
[[Michel Suignard]]
は
[CODE[layout-flow]]
の
[[WD]]
[CODE[i18n-format]]
にも貢献者として挙がっていました
([CODE[i18n-format]] の[[編集者]]と貢献者は全員 [[MS]])。
おそらく
[CODE[writing-mode]]
にも
[[Michel Suignard]]
が主に関わったのでしょう。



-*-*-

[96] 
[[IE]]
は
[[CSS]] [[WD]] モデルの 
[CODE[writing-mode]]
の一部に対応していました。
従来の
[CODE[layout-flow]]
にも対応し続けました。

[[IE]]
の開発はその後凍結されており、
他の
[[Webブラウザー]]もなかなか追随できなかったため、
長らく 
[[IE]] + [CODE[writing-mode]]/[CODE[layout-flow]]
が
[[Web]]
上で[[縦書き]]を実現する唯一の手法でした。


[4]
[[Firefox]] 2 は実装していません。
([[名無しさん]])

[5]
[[Opera]] 9 では [[SVG 1.1]] で定義されている値が使えます。


[393] 
[CITE@JA[Web Workshop - Internet Explorer 5.5 における縦書きレイアウトの使用]], [TIME[2024-08-26T05:15:20.000Z]], [TIME[2000-12-06T23:50:14.385Z]] <https://web.archive.org/web/20001206235000/http://www.microsoft.com/japan/developer/workshop/author/css/verticaltext/verticaltext.asp>


[6]
[[WinIE 6]] では [CODE(CSS)@en[[[lr-tb]]]] と
[CODE(CSS)@en[[[tb-rl]]]] が使えます。

[7]
テスト用
<http://suika.suikawiki.org/gate/2007/cssom/viewer?c=p%20%7B%0D%0A%20%20writing-mode%3A%20tb-rl%3B%0D%0A%7D%0D%0A;h=%3Cp%3E%3Cbutton%20type%3Dbutton%20onclick%3D%22%0D%0A%20%20w%20(getComputedStyle%20(this.parentNode%2C%20null).writingMode)%3B%0D%0A%22%3E%3Ccode%3EgetComputedStyle%3C%2Fcode%3E%3C%2Fbutton%3E%0D%0A%3Cp%3E%3Cbutton%20type%3Dbutton%20onclick%3D%22%0D%0A%20%20w%20(this.parentNode.currentStyle.writingMode)%3B%0D%0A%22%3E%3Ccode%3EcurrentStyle%3C%2Fcode%3E%3C%2Fbutton%3E;p=n;x=style-element;i=html-div>
([[名無しさん]])

[8]
[[WinIE 6]] には [[DOM属性]] [CODE(DOMa)@en[[[writingMode]]]]
があります。
([[名無しさん]])

[9]
>>8 [CODE(DOMa)@en[[[currentStyle]]]]
で得られるのは[[指定値]] = [[算出値]] = [[使用値]]のようです。
([[名無しさん]])

[10]
[[Opera]] 9 には [[DOM属性]]がないようです。
[CODE(DOMm)@en[[[getComputedStyle]]]] や
[CODE(DOMa)@en[[[currentStyle]]]] では
[[DOM属性]]もなく、
[CODE(DOMm)@en[[[getPropertyValue]]]] でも[[空文字列]]しか得られません。

[11] [CITE@ja[縦書きHTML/CSSに関するメモ - 血統の森 web実験小屋]] ([TIME[2009-02-02 01:40:26 +09:00]] 版) <http://momdo.s35.xrea.com/web-html-test/vertical-text/index.html>

-*-*-

[321] [[SVG]] 開発前に提出された案のうち、
[[PGML]] は[[縦書き]]対応していませんでした ([[bidi]] は曖昧) が、
[[VML]] は
[CODE[layout-flow]]
モデルでした。
[[SVG 1.0]] の最初の [[WD]] は[[書字方向]]を扱っていませんでした。

[323] [TIME[1999-04-12]]の第2次 [[WD]] [SRC[>>322]]
は、独自の新設の [[CSS]]
[[特性]]を定義していました。

- [324] [CODE[text-direction]]
-- [CODE[natural]]: natural text direction from the font
-- [CODE[l-to-r]], [CODE[r-to-l]], [CODE[t-to-b]], [CODE[b-to-t]]
- [325] [CODE[orient-to-path]]: 
[CODE[true]]: glyph/symbol が path の垂線方向に回転,
[CODE[false]]

[327] [TIME[1999-07-30]] [[WD]] で前者は
[[CSS2]] [CODE[direction]], [CODE[unicode-bidi]]
に置き換えられました。 [SRC[>>326]]
縦書きは消失。

[328] [TIME[1999-12-03]] [[WD]] [SRC[>>329]]
で [[XSL]] モデルに完全に置き換わりました。

- [330] [CODE[writing-mode]]
-- [CODE[lr-tb]] = [CODE[lr]]
-- [CODE[rl-tb]] = [CODE[rl]]
-- [CODE[tb-rl]] = [CODE[tb]]
- [331] [CODE[glyph-orientation-vertical]],
[CODE[glyph-orientation-horizontal]]:
角度は90度単位,
角度によっては [[Unicode Bidirectional Algorithm]] 対象
- [332] [CODE[direction]]: [[CSS2]] 参照 + glyph-orientation
- [333] [CODE[unicode-bidi]]: [[CSS2]] 参照

[334] 
[[XSL]] は参照せず同様の規定がありました。
この前後の [[XSL]] と [[CSS]] の [[WD]]
と見比べると、時期的にも内容的にもほぼ中間的な形でした。

[336] その後 1.0 [[W3C勧告]]に至るまでの改訂で基本的な構造は変わっていませんが、
規定は細かくなっていました [SRC[>>335]]。詳しくは要検証。
[[SVG 1.1]] では変更なし (細部は要検証)。
[[SVG Tiny 1.2]] ([[黒歴史]]) では [CODE[direction]] と [CODE[unicode-bidi]]
だけ残してあとは抹消されていました [SRC[>>335]]。

[340] [[SVG2]] で新モデルに更新されました (>>339)。

[REFS[
- [322] [CITE[Text]], [TIME[1999-04-12T05:12:26.000Z]], [TIME[2020-11-01T08:26:32.440Z]] <https://www.w3.org/TR/1999/WD-SVG-19990412/text.html#TextOnAPath>
- [326] [CITE[Text]], [TIME[1999-07-31T02:01:30.000Z]], [TIME[2020-11-01T08:31:01.255Z]] <https://www.w3.org/1999/07/30/WD-SVG-19990730/text.html>
- [329] [CITE[Text]], [TIME[1999-12-03T17:13:29.000Z]], [TIME[2020-11-01T08:40:04.452Z]] <https://www.w3.org/TR/1999/WD-SVG-19991203/text.html>
- [335] [CITE[Text - SVG 1.0 - 20010904]], [TIME[2001-09-01T01:37:36.000Z]], [TIME[2020-11-01T08:46:50.065Z]] <https://www.w3.org/TR/2001/REC-SVG-20010904/text.html#TextLayout>
-  [337] [CITE@en[Scalable Vector Graphics (SVG) Tiny 1.2 Specification]], [TIME[2008-12-22T23:20:34.000Z]], [TIME[2020-11-01T08:53:00.736Z]] <https://www.w3.org/TR/2008/REC-SVGTiny12-20081222/single-page.html#text-TextLayout>

]REFS]

-*-*-

[262] 
[[TTML]] は、
[TIME[2003-05-15]]の最初に公開された要件 [[WD]]
の時点で、既に
visual style parameter
の1つとして
「block progression dimension」
「inline progression dimension」
「line stacking strategy」
「reference orientation」
「writing mode」
を採用することを決めていました。
[SRC[>>263]]
[[XSL 1.0]] と [[CSS2]]
を参照していたものの、
こうした概念があるのは 
[[XSL 1.0]] の方だけでした。

[265] 
[TIME[2004-11-01]]の最初の [[WD]]
は
[DFN[[CODE[tts:writing-mode]]]]
を規定していました。
値は
[CODE[lr-tb]],
[CODE[rl-tb]],
[CODE[tb-rl]],
[CODE[tb-lr]],
[CODE[lr]],
[CODE[rl]],
[CODE[tb]]
でした。
block progression direction,
inline progression direction
を指定するものとされていました。
それ以上の詳細は [[XSL 1.0]] が参照されていました。
[SRC[>>264]]

[266] 
その後名前は
[DFN[[CODE[tts:writingMode]]]]、
値は
[CODE[lrtb]]
などハイフンなしと改められましたが、
[[TTML 1.0]] は最後までほぼそのままでした。
[[XSL]] に [CODE[direction]],
[CODE[unicode-bidi]]
が導入されたのを踏まえて
[[TTML 1.0]]
にも同義の
[CODE[tts:direction]],
[CODE[tts:unicodeBidi]]
が追加されていました。
[SRC[>>51]]

[267] 
[[TTML2]] は [[XSL]] モデルに [[CSS]] の [CODE[text-orientation]]
を追加しました (>>268)。

[REFS[
- [263] [CITE@en[Timed Text (TT) Authoring Format 1.0 Use Cases and Requirements]], [TIME[2018-10-09T13:18:23.000Z]], [TIME[2020-11-01T01:46:03.632Z]] <https://www.w3.org/TR/2003/WD-tt-af-1-0-req-20030515/#R306>
- [264] [CITE@en[Timed Text (TT) Authoring Format 1.0 – Distribution Format Exchange Profile (DFXP)]], [TIME[2020-11-01T01:50:02.000Z]], [TIME[2004-11-05T06:58:54.342Z]] <https://web.archive.org/web/20041105065833/http://www.w3.org/TR/2004/WD-ttaf1-dfxp-20041101/#style-attribute-writing-mode>
-[51] [CITE@en-us[Timed Text Markup Language 1 (TTML1) (Third Edition)]], [TIME[2020-08-20T18:38:18.000Z]], [TIME[2020-10-23T14:35:14.528Z]] <https://www.w3.org/TR/ttml1/#style-attribute-writingMode>
]REFS]

-*-*-

[295] [[SMIL]]
は、
[TIME[2006-12-20]] [[WD]]
で
[[XSL 1.1]] [CODE[direction]]
からコピーした
[CODE[textDirection]]
を追加しました。
この時点では
[[DFXP]] (後の [[TTML]])
にある
[CODE[writingMode]] と [CODE[unicodeBidi]]
は意図的に不採用とされました。
[SRC[>>294]]
(詳細は規定はなく [[XSL 1.1]] を参照。)

[297] 
[TIME[2008-01-15]] [[CR]]
で
[CODE[textDirection]]
に
[CODE[ltro]], [CODE[rtlo]]
が追加されました。
[SRC[>>296]]
(なぜか [CODE[unicode-bidi]] ではなく新しい値。)

[298] 
同時に
[[XSL 1.1]] [CODE[writing-mode]] 
からコピーした
[CODE[textWritingMode]]
が追加されました。
値は
[CODE[lr-tb]] = [CODE[lr]],
[CODE[rl-tb]] = [CODE[rl]],
[CODE[tb-lr]],
[CODE[tb-rl]]。
[SRC[>>296]]
(値の選択基準は [[DFXP]] とされました。なぜか [CODE[tb]] は除外。)

[REFS[
- [294] [CITE@en[Synchronized Multimedia Integration Language (SMIL 3.0)]], [TIME[2006-12-20T17:48:21.000Z]], [TIME[2020-11-01T03:28:12.312Z]] <https://www.w3.org/TR/2006/WD-SMIL3-20061220/smil30.html#smil-text-adef-textDirection>
- [296] [CITE@en[Synchronized Multimedia Integration Language (SMIL 3.0)]], [TIME[2008-01-11T09:24:54.000Z]], [TIME[2020-11-01T03:31:51.476Z]] <https://www.w3.org/TR/2008/CR-SMIL3-20080115/smil30.html#smil-text-adef-textDirection>
]REFS]

[354] 
[[OpenDocument]]
はかなり変則的な
[[XSL]]
モデルを採用していました。
1.0 から 1.3 までほぼ同内容です。

- [358] 
[CODE[style:writing-mode]]
は [[XSL]] を参照,
[CODE[lr-tb]] = [CODE[lr]],
[CODE[rl-tb]] = [CODE[rl]],
[CODE[tb-rl]] = [CODE[tb]],
[CODE[tb-lr]]。
独自の値 [CODE[page]]。
[SRC[>>357, >>361, >>29, >>364, >>367]]
- [359] 
[CODE[style:writing-mode-automatic]]
は編集時に 
[CODE[style:writing-mode]]
を再計算するかどうか。
[SRC[>>357, >>361, >>29, >>364, >>367]]
- [355] [CODE[style:direction]] は[[表]]の[[こま]]に指定できる。
[CODE[ltr]] (左から右),
[CODE[ttb]] (上から下、 stacked but not rotated)
[SRC[>>353, >>360, >>362, >>366]],
1.2 以降は [CODE[ltr]] は [CODE[style:writing-mode]] の方向、ともあり
(左から右、と矛盾しているが)。
- [356] [CODE[style:glyph-orientation-vertical]] は[[表]]の[[こま]]に指定できる。
[CODE[auto]],
[CODE[0]] (無効)
[SRC[>>353, >>360, >>363, >>365]],
1.2 以降は 0 に単位をつけられるように、
1.2 以降は [[SVG]] を参照するように
- [368] [CODE[text-combine]] は [[CSS]] からのコピー (参照なし)、
後に[[縦中横]]に置き換えられる前の[[組み文字]]と[[割注]]用


[REFS[
- [353] [CITE[OASIS Open Office Specification - OpenDocument-v1.0-os.pdf]], [TIME[2005-05-17T16:27:56.000Z]], [TIME[2020-11-01T12:23:19.006Z]] <https://docs.oasis-open.org/office/v1.0/OpenDocument-v1.0-os.pdf#page=607>
- [357] [CITE[OASIS Open Office Specification - OpenDocument-v1.0-os.pdf]], [TIME[2005-05-17T16:27:56.000Z]], [TIME[2020-11-01T12:26:27.853Z]] <https://docs.oasis-open.org/office/v1.0/OpenDocument-v1.0-os.pdf#page=591>
- [360] [CITE@en-US[OASIS Open Office Specification]], [TIME[2006-10-25T15:43:00.000Z]], [TIME[2020-11-01T12:29:10.591Z]] <http://docs.oasis-open.org/office/v1.1/OS/OpenDocument-v1.1-html/OpenDocument-v1.1.html#outline%3A15.11.3.Direction>
- [361] [CITE@en-US[OASIS Open Office Specification]], [TIME[2006-10-25T15:43:00.000Z]], [TIME[2020-11-01T12:29:55.066Z]] <http://docs.oasis-open.org/office/v1.1/OS/OpenDocument-v1.1-html/OpenDocument-v1.1.html#outline%3A15.5.36.Writing_Mode>
- [362] [CITE[OASIS Open Document Format for Office Applications (OpenDocument) Version 1.2 - Part 1: OpenDocument Schema]], [TIME[2011-09-29T04:00:00.000Z]], [TIME[2020-11-01T12:30:33.902Z]] <http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#property-style_direction>
- [363] [CITE[OASIS Open Document Format for Office Applications (OpenDocument) Version 1.2 - Part 1: OpenDocument Schema]], [TIME[2011-09-29T04:00:00.000Z]], [TIME[2020-11-01T12:32:32.279Z]] <http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#property-style_glyph-orientation-vertical>
-
[29] [CITE[OASIS Open Document Format for Office Applications (OpenDocument) Version 1.2 - Part 1: OpenDocument Schema]]
([TIME[2011-09-29 13:00:00 +09:00]] 版)
<http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#a20_394style_writing-mode>
- [364] [CITE[Open Document Format for Office Applications (OpenDocument) Version 1.3. Part 3: OpenDocument Schema]], [TIME[2019-12-25T17:00:00.000Z]], [TIME[2020-11-01T12:33:53.190Z]] <https://docs.oasis-open.org/office/OpenDocument/v1.3/cs01/part3-schema/OpenDocument-v1.3-cs01-part3-schema.html#property-style_writing-mode>
- [366] [CITE[Open Document Format for Office Applications (OpenDocument) Version 1.3. Part 3: OpenDocument Schema]], [TIME[2019-12-25T17:00:00.000Z]], [TIME[2020-11-01T12:35:53.294Z]] <https://docs.oasis-open.org/office/OpenDocument/v1.3/cs01/part3-schema/OpenDocument-v1.3-cs01-part3-schema.html#__RefHeading__1419958_253892949>
- [365] [CITE[Open Document Format for Office Applications (OpenDocument) Version 1.3. Part 3: OpenDocument Schema]], [TIME[2019-12-25T17:00:00.000Z]], [TIME[2020-11-01T12:35:27.620Z]] <https://docs.oasis-open.org/office/OpenDocument/v1.3/cs01/part3-schema/OpenDocument-v1.3-cs01-part3-schema.html#__RefHeading__1420026_253892949>
- [367] [CITE[Open Document Format for Office Applications (OpenDocument) Version 1.3. Part 3: OpenDocument Schema]], [TIME[2019-12-25T17:00:00.000Z]], [TIME[2020-11-01T12:36:18.256Z]] <https://docs.oasis-open.org/office/OpenDocument/v1.3/cs01/part3-schema/OpenDocument-v1.3-cs01-part3-schema.html#property-style_writing-mode>
]REFS]

** CSS3 CR モデル

[REFS[
- [97] [CITE@en[CSS3 Text Module]], [TIME[2017-10-02T10:26:32.000Z]], [TIME[2020-10-27T11:37:31.703Z]] <https://www.w3.org/TR/2003/CR-css3-text-20030514/#TextLayout>
]REFS]

[98] 
[[XSL]] モデルを若干整理したもの。

- [100] [CODE[direction]]: [CODE[ltr]], [CODE[rtl]]
- [101] [CODE[block-progression]]: [CODE[tb]], [CODE[rl]], [CODE[lr]]
- [99] [CODE[writing-mode]]: 
[CODE[lr-tb]], [CODE[rl-tb]], [CODE[tb-rl]], [CODE[tb-lr]]
-- [CODE[direction]], [CODE[block-progression]] の [[shorthand]]
- [104] [CODE[glyph-orientation-vertical]]
-- 角度: 90度単位に丸められる
-- [CODE[auto]]: 
全角漢字、全角ラテン文字: 0度。
漢字句読点など: [[縦書きグリフ]]。
モンゴル文字: 0度。
その他: 90度。
-- [CODE[upright]]: 
0度、ただし[[縦書きグリフ]]。 (詳細[[利用者エージェント]]依存)
-- [CODE[inline]]:
[[Unicode Bidirectional Algorithm]] の [[embedding level]] により決める。
全角漢字、、全角ラテン文字: 0度。
漢字句読点など: [[縦書きグリフ]]。
モンゴル文字: 0度。
その他、
[[embedding level]] 偶数: 90度、奇数: -90度。
(つまりすべて上から下に並べる)
-- [CODE[auto]] と90度が実装必須。
- [107] [CODE[glyph-orientation-horizontal]]
-- 角度: 90度単位に丸められる
全角漢字、、全角ラテン文字: 0度。
漢字句読点など: [[横書きグリフ]]。
モンゴル文字: 90度。
その他: 0度。
-- [CODE[inline]]:
[[Unicode Bidirectional Algorithm]] の [[embedding level]] により決める。
全角漢字、、全角ラテン文字: 0度。
漢字句読点など: [[横書きグリフ]]。
その他、
[[embedding level]] 偶数: 0度、奇数: 180度。
(つまりすべて左から右に並べる)
-- [CODE[auto]] と0度が実装必須。
- [105] [CODE[unicode-bidi]]
- [106] [[縦中横]]は入れ子の要素に [CODE[writing-mode]]

[127] 
[[CR]]
の[[編集者]]は
[[MS]]
の
[[Michel Suignard]]
でした。

[129] 
この
[[CR]]
は実装困難として再検討されることになりました。
この当時の
[[CSS WG]]
の議事は非公開で、
断片的な情報しかありませんが、
[TIME[西暦2004年][year:2004]]には書き直しが始まり、
[TIME[西暦2005年][year:2005]]には新しい
[CITE[CSS3 Text Effects Module]] [[WD]] が公開されました
(が[[書字方向]]関係は 
[CITE[Text Layout]] module
に分離するとして、
削除されていました)。
[SEE[ [[CSS Text]] ]]

[130] 
[TIME[2005-06-27]]の
[CITE[CSS3 Text Effects Module]]
[[WD]]
の[[編集者]]は
[[fantasai]]
でした。
[[fantasai]]
は
[TIME[2004-10-20]]に、
[CITE[CSS3 Text]]
の改訂作業中で[[縦書き]]の扱いを検討していると書いていました
[SRC[>>83]]。
この当時はまだ分離する決定がなされていなかったのでしょう。

[133] 
[[fantasai]]
は
[[CR]]
当時から技術的な懸念を指摘していました。

[REFS[
- [131] [CITE@en[Re: CSS3 Text: Multi-Directional Scripts in Vertical Inline Progression]], [[fantasai]], [TIME[2003-04-16 06:44:04 +09:00]], [TIME[2016-05-02T14:27:07.000Z]], [TIME[2020-10-29T06:12:46.196Z]] <https://lists.w3.org/Archives/Public/www-style/2003Apr/0116.html>
- [132] [CITE@en[Re: [css3-text] Before It Becomes a PR]] ([[fantasai]] 著, [TIME[2003-07-14 13:03:15 +09:00]] 版) <http://lists.w3.org/Archives/Public/www-style/2003Jul/0146.html>
]REFS]

[134] 
分離後の CSS3 Text Layout
は、
非公開の
[[CSS WG]]
内部案が
<https://www.w3.org/Style/Group/css3-src/css3-text-layout/>
にあったとされます。その内容は不明ですが、
[TIME[2007-12-15]]に
[[fantasai]]
が仕切り直しに当時の版を
[[CVS]]
に追加したものが公開されています [SRC[>>116]]。
[[CR]]
と比べると:

- [135] [CODE[writing-mode]] に [CODE[bt-rl]], [CODE[bt-lr]] 追加
- [136] [CODE[glyph-orientation-*]] 削除
-- 廃止なのかどこか他に移動されたのか不明

[137] 
[[編集者]]は
[[MS]]
の
[[Paul Nelson]]
とされていました。
[[fantasai]]
の検討は反映されなかったのでしょうか。


** fantasai モデル


[139] 
[[fantasai]]
は
[[CSS]]
の[[縦書き]]モデルを再検討し、
[TIME[西暦2004年][year:2004]]から[TIME[2005年][year:2005]]にかけて、
[[CSS]]
と
[[Unicode]]
の関係者に向けた[[論文]]として発表しました。
[[Unicode Consortium]]
では
[DFN[UTN #22]]
と呼ばれています。

[140] 
本論文は[[縦書き]]と[[横書き]]の混植事例を分析し、
適度に一般化した形で整理した上で、
これを [[CSS]] で実現する手法を提案していました。

[141] 
縦横混植を[[言語]]や[[用字系]]によらない一般化したモデルで記述し、
現実的に実現可能な手法を示したのは初めてかもしれません。
これより前に公開されたものは見当たりません。
現在からみても非常に優れた分析です。


[142] Logical Text Layout [SRC[>>138]]:

- [144] 必要な script 情報
-- script の horizontal directionality: ltr, rtl, none
-- script の vertical directionality: ttb, btt, none
-- script の orientational category: horizontal, vertical
([[蒙古文字]]など), bi-orientational ([[漢字]], [[Ogham]] など)
-- 縦書き script の bi-orientational transformation:
rotate ([[蒙古文字]]、[[Ogham]] など),
translate ([[正立]]。 [[CJK]])
- [145] block of text の設定
-- what block progression to use
-- how to orient non-native text: rotate right, rotate left, stay upright

[146] 
基本は [[script]] 本来の性質から導かれる自然な方向に組んでいき、
混在時の扱いなど2点だけ指定されたものに従えばいい。
(このモデルが導出された根拠は本文参照。)


[143] 実装案 [SRC[>>138]]:

- [[Unicode]] の制御文字、 [[HTML]] [CODE[dir=""]], [[CSS]] [CODE[direction]]:
既存 [CODE[ltr]], [CODE[rtl]] + 新
[CODE[ttb]], 
[CODE[ltr-ttb]], [CODE[ltr-btt]]
- [CODE[block-progression]]: [CODE[TB]], [CODE[RL]], [CODE[LR]]
- [CODE[text-orientation-vertical]]:  
[CODE[natural]], [CODE[left]], [CODE[right]], [CODE[upright]]
- [CODE[text-orientation-horizontal]]: 同様

[147] これを [[Unicode Bidirectional Algorithm]] といかに統合するかも述べていました。
[[bidi]] アルゴリズムとの関係性もこれまでのどの仕様案より踏み込んで検討していました。

[148] 
[[縦中横]]には言及しておらず、どう考えていたのか不明です。
CSS3 CR にも[[縦中横]]の例はあったので、
[[fantasai]]
も存在は知っていたはずです。
本[[論文]]は一次元に文字が並ぶ行を扱っていて、
[[縦中横]]以外にも[[割注]]、[[ルビ]]、[[数式]]といった構造には言及していませんでした。



[REFS[
- [83] [CITE@en[CSS3, Unicode BIDI, and Vertical Text Layout]], [[fantasai]], [TIME[2004-10-21 03:18:24 +09:00]], [TIME[2016-05-02T14:27:15.000Z]], [TIME[2020-10-27T09:48:26.849Z]] <https://lists.w3.org/Archives/Public/www-style/2004Oct/0083>
- [84] [CITE@en[Robust Vertical Text Layout]], [TIME[2010-09-28T12:16:48.000Z]], [TIME[2020-10-27T09:50:31.868Z]] <http://fantasai.inkedblade.net/style/discuss/vertical-text/>
- [85] [CITE@en[Robust Vertical Text Layout]], [TIME[2009-04-13T23:27:34.000Z]], [TIME[2020-10-27T09:52:27.241Z]] <http://fantasai.inkedblade.net/style/discuss/vertical-text/paper>
- [128] [CITE[fantasai 26: CSS and Multi-Script Text]], 
2005-02-14,
[TIME[2019-05-13T04:14:51.000Z]], [TIME[2020-10-29T05:48:02.718Z]] <http://fantasai.inkedblade.net/weblog/2005/international-text/>
- [138] [CITE@en-us[UTN #22: Robust Vertical Text Layout]], 
April 25, 2005,
[TIME[2005-04-26T00:29:12.000Z]], [TIME[2020-10-29T06:25:03.741Z]] <https://www.unicode.org/notes/tn22/>
]REFS]

** 再始動

[151] 
[[UTN #22]]
の提案はその後
[[Unicode]]
側では進展しなかったようです。
[[CSS]]
側も、
[[fantasai]]
が
[[CSS 2.1]]
など他の課題に取り組んでおり、
長らく手つかずでした。
その間[[書字方向]]は
[CITE[CSS3 Text Layout]]
として分離され別の[[編集者]]が割り当てられましたが、
ほとんど進展しませんでした (>>134)。

[152] 
[TIME[2007-12-15]]、
[[fantasai]]
は
[[CSS WG]]
の公開
[[CVS]]
で
[[ED]]
を公表しました [SRC[>>116]]。
[TIME[2008-10-08]]、
[CODE[block-progression]]
が
[CODE[block-flow]]
に改称されました
[SRC[>>174]] (その後[TIME[2010年][year:2010]]に巻き戻った後再改称)。
おそらく
[[UTN #22]]
モデルに合わせて整理しようと試みていたのでしょうが、
ほとんど進んでいませんでした。

[153] 
[TIME[西暦2010年][year:2010]]、
[[CSS]]
を使った
[[EPUB]]
の[[日本語]]対応に関与していた[[アンテナハウス]]の関係者が改善を要望しました
[SRC[>>12]]。これを契機に
[[fantasai]]
と共に[[アンテナハウス]]の関係者が[[編集者]]に加わりました。
[TIME[2010年9月][2010-09]]、
[[fantasai]]
は[[日本]]滞在中に[[アンテナハウス]]社を訪問し、
全面的な改訂に着手しました [SRC[>>115, >>118, >>149]]。

[180] 
[[EPUB]]
の日本企業の関係者らは、
この間の[TIME[6月][2010-06]]に、
当時の案から
[CODE[writing-mode]] の [CODE[lr-tb]], [CODE[tb-rl]]
への対応が
([[EPUB]] の[[日本語]]対応には)
必要であるとしていました
[SRC[>>179]]。


[154] 再始動してからの一連の作業が反映された[TIME[2020-12-02]] [[WD]]:

- [155] block flow direction: horizontal writing mode (downward/upward),
vertical writing mode (leftward/rightward)
- [156] line orientation: under/over
-- [157] glyph orientation

- [158] [CODE[direction]]. [CODE[unicode-bidi]]
- [159] [CODE[writing-mode]]:
[CODE[horizontal-tb]],
[CODE[vertical-lr]],
[CODE[vertical-rl]]
-- [160] [[SVG 1.1]] compat: 
[CODE[lr]], [CODE[lr-tb]], [CODE[rl]] = [CODE[horizontal-tb]];
[CODE[tb]], [CODE[tb-rl]] = [CODE[vertical-rl]]
- [161] [CODE[text-orientation]]
-- [162] [CODE[vertical-right]]: 
vertical writing mode: 
非縦 script: [[時計回りに90°回転]]。
それ以外: [[縦書きグリフ]]があれば採用。
-- [163] [CODE[upright]]:
vertical writing mode:
非縦 script: [[正立]]、[[孤立形]]。
それ以外: [[縦書きグリフ]]があれば採用。
(すべて[[強LTR]]扱い。)
-- [164] [CODE[rotate-right]]:
vertical writing mode:
[[時計回りに90°回転]]。
[[横書きグリフ]]。
-- [165] [CODE[rotate-left]]:
vertical writing mode:
[[反時計回りに90°回転]]。
[[横書きグリフ]]。
-- [166] [CODE[rotate-normal]]:
[CODE[vertical-rl]] なら [CODE[rotate-right]], 
[CODE[vertical-lr]] なら [CODE[rotate-left]]。
-- [167] [CODE[auto]]:
[[SVG 1.1]]: [CODE[glyph-orientation-horizontal]],
[CODE[glyph-orientation-vertical]] に従う。
それ以外: [CODE[vertical-right]]。
- [168] [CODE[text-combine]]: [CODE[none]], [CODE[horizontal]] <number>?:
vertical writing mode:
1文字分の大きさで横書き。
[[縦中横]]用。

[169] 旧 [CODE[writing-mode]] ([CODE[direction]] と [CODE[block-flow]]
の [[shorthand]])
は破棄されました。
[CODE[block-flow]] は新 [CODE[writing-mode]] に改称されました。
[CODE[writing-mode]] と [CODE[direction]] (および [[bidi]])
は分離され、
[CODE[writing-mode]] の特性値が一新されましたが、
[[SVG 1.1]] が既に旧 [CODE[writing-mode]] 
を使っていたので、
block flow direction 部分だけを読み取って読み替えることにしました。
(結果的に [[IE]] の [CODE[writing-mode]] との互換性も保たれましたが、
意図的にそうしたのか不明。)

[175] 
この [[WD]] 以前の [[ED]] に一時
[CODE[[[block-flow]]: [[bt]]]] [SRC[>>174]],
[CODE[[[writing-mode]]: [[horizontal-bt]]]]
がありましたが、削除されました。
完全性のために追加したものの、
実用性から削除したといったところでしょうか。
過去の [[CSS]] 案になく、
[[XSL]] モデルに相当するものがあるくらいです。

[178] 
[[下から上の縦書き]] (具体例は [[Ogham]]) は未対応とされました。
[CODE[text-orientation]] で一応表示させられないことはありません。

[170] 
5年前の提案と比べると text orientation
が横書き用、縦書き用が合体し、かつ [[SVG 1.1]]
との互換性のため、やや理論的整合性を欠くようになったこと、
[[縦中横]]に対応したことが違います。

[257] text orientation が縦書き時専用となったことで、
[[日本]]でたまに行われる横書き文中の倒した縦書きのようなものが扱えなくなってしまいました。

[171] 
[CODE[text-combine]] は [[CR]] 時点で[[組み文字]] ([CODE[letters]])
と[[割注]] ([CODE[lines]]) のための機能でしたが [SRC[>>97]]、
その後分離されていました (>>129)。
ただ分離後に公開された最古の ED には既に含まれていませんでした [SRC[>>116]]。
[[縦中横]]用として再追加されたとき、
[CODE[block]] ([[組み文字]])
と
[CODE[upright]]
がありました [SRC[>>172]]。
後者が[[縦中横]]用に新規追加されたものなので、
[CODE[block]] は非公開時代の最終案にでもあったのでしょうか。
(再追加時点で、 [[JLREQ]] にないので一旦削除するか?と注釈がありました。
実際その後削除されました。なお削除前に一時 [CODE[cluster]] と改称されました。)
ともかく、
この時点で
[CODE[text-combine]]
は
「複数の文字を組合せて1文字扱いにする」
機能のようです。
([[割注]]は「1文字」ではないので、分離か削除されたのでしょう。)

;; [173] 
これ以前は
[CODE[i18n-format]]
由来の
「[V[縦中横[YOKO[1996]]です。]]」
という[[横書き]]部分が[[行]]からはみ出した例が示されていました。
それがこれ以来 [[JLREQ]]
由来の
「[V[平成[YOKO[20]]年[YOKO[4]]月[YOKO[16]]日に]]」
という例に変わりました。
1文字サイズに収めない[[縦中横]]は対象外になったようです。



[REFS[
- [116] [CITE@en[csswg-drafts/Overview.html at 05a31b59dd48be7e1019b863d6d365d5d415bde9 · w3c/csswg-drafts · GitHub]],
15 Dec 2007,
[TIME[2020-10-27T13:45:15.000Z]] <https://github.com/w3c/csswg-drafts/blob/05a31b59dd48be7e1019b863d6d365d5d415bde9/css3-writing-modes/Overview.html>
-- [117] [CITE@en[CSS3 Text Layout Module]], [TIME[2020-10-27T13:45:37.000Z]] <https://rawgit.com/w3c/csswg-drafts/05a31b59dd48be7e1019b863d6d365d5d415bde9/css3-writing-modes/Overview.html>
- [115] [CITE@en[History for css3-writing-modes - w3c/csswg-drafts · GitHub]], [TIME[2020-10-27T13:43:41.000Z]] <https://github.com/w3c/csswg-drafts/commits/d8c059fc2e79f0afab09665108ebec507d997700?after=d8c059fc2e79f0afab09665108ebec507d997700+349&branch=d8c059fc2e79f0afab09665108ebec507d997700&path%5B%5D=css3-writing-modes>
-- [120] [CITE[CVS log for csswg/css3-writing-modes/Attic/Overview.src.html]], [TIME[2020-10-28T03:40:54.000Z]] <https://dev.w3.org/cvsweb/csswg/css3-writing-modes/Attic/Overview.src.html>
- [12] [CITE@en['''['''css3-text-layout''']''' writing-mode issues and requests]]
([[MURAKAMI Shinyu]] 著, [TIME[2010-04-08 18:34:47 +09:00]] 版)
<http://lists.w3.org/Archives/Public/www-style/2010Apr/0278.html>
- [150] [CITE@en['''['''CSSWG''']''' Minutes and Resolutions 2010-04-14]], [[fantasai]], [TIME[2010-04-22 04:55:46 +09:00]], [TIME[2020-01-17T22:49:40.000Z]], [TIME[2020-10-30T00:16:11.053Z]] <https://lists.w3.org/Archives/Public/www-style/2010Apr/0455.html>
- [174] [CITE@en[Improve terminology, pass 1.]], [[fantasai]], [TIME[2010-05-05 15:23:35 +09:00]], [TIME[2020-10-30T01:50:18.000Z]] <https://github.com/w3c/csswg-drafts/commit/69e1dd91f713a5d77e9fe361dfbda2176cdebb34#diff-0d4149424c02ed4b66e9c349649597ebf797fffed46c857ff115823c7934a34a>
- [179] [CITE@ja[[[EPUB]]仕様の日本語組版拡張を目指して(Version 0.8)]], 
2010年6月1日,
[TIME[2010-07-08T13:02:49.000Z]], [TIME[2020-10-30T03:09:15.397Z]] <http://nadita.com/murakami/epub/epub_JapaneseTextLayout_ja.html#Section_writing_mode_prop>
- [172] [CITE@en[Use text-combine for tate-chu-yoko per jdaggett's suggestion to have …]], [[fantasai]], [TIME[2010-09-29 02:43:41 +09:00]], [TIME[2020-10-30T01:27:07.000Z]] <https://github.com/w3c/csswg-drafts/commit/feb9c0d2181f22571ed23092dbfdde81935ae1c9#diff-368d2e06328407a95b4ef33916cd3c9edc74f7691b4bfccd3237b67e4965f64a>

[118] [CITE@ja[[[fantasai]]と日本語組版 ​思い出と功績を日本人関係者が振り返る]], 
[[小林龍生]],
[[村田真]],
[[​下川和男]],
[TIME[2020-10-28T02:19:39.000Z]] <https://www.aplab.jp/fantasai-and-japanese-text-layout>

>2010年9月25日から10月4日まで、fantasaiを新宿のイースト、4階の6坪ほどの会議室に閉じ込めて、CSS Textの第一稿(Editor’s Draft)を書いてもらった。

[119] 
流石に言葉の綾だと信じたいが、こういう表現で自分達の (手によって導いたという) 「功績」を誇る人にはなりたくないものだ。

- [149] [CITE@ja[私のゴールは世界中の言語でCSSを使えるようにすること EPUB3で縦書きを実現した、[[fantasai]](エリカ・エテマッド)に聞く]], [TIME[2020-10-29T09:41:23.000Z]] <https://www.aplab.jp/fantasai>
- [114] [CITE@en[History for css3-writing-modes - w3c/csswg-drafts · GitHub]], [TIME[2020-10-27T13:43:15.000Z]] <https://github.com/w3c/csswg-drafts/commits/d8c059fc2e79f0afab09665108ebec507d997700?after=d8c059fc2e79f0afab09665108ebec507d997700+279&branch=d8c059fc2e79f0afab09665108ebec507d997700&path%5B%5D=css3-writing-modes>
- [40] [CITE@en[CSS Writing Modes Module Level 3]]
( ([TIME[2010-12-07 23:21:12 +09:00]] 版))
<http://www.w3.org/TR/2010/WD-css3-writing-modes-20101202/>
-
[13] [CITE@en[CSS Writing Modes Module Level 3]]
( ([TIME[2011-02-02 05:10:15 +09:00]] 版))
<http://www.w3.org/TR/2011/WD-css3-writing-modes-20110201/>
]REFS]

[382] [CITE[Bug 46123 – Implement block-flow support for all of layout (master bug)]]
( ([TIME[2010-10-10 15:48:00 +09:00]] 版))
<https://bugs.webkit.org/show_bug.cgi?id=46123>

-*-*-

[312] [[WebVTT]] はちょうど新 Writing Modes と同時期に開発されました。
[CODE[canvas]] [CODE[2d]]
のテキスト描画APIは、
[[横書き]]用と[[縦書き]]用が用意されながら、
[[縦書き]]用は [[CSS]]
が未成熟であるとして正式仕様に含められませんでした。
[[WebVTT]] の[[縦書き]]対応は、
新 [CODE[writing-mode]]
に相当します。

[314] 
[[HTML5]] の[[編集者]]の [[Hixie]] は
[[fantasai]]
の師匠に当たります。
ほぼ同時期に並行して実施された両者の開発を互いにある程度関知していたことは間違いないでしょうし、
[CODE[canvas]] と [[WebVTT]]
での扱いの違いは 
[[CSS]]
側の開発進捗を反映しているようです。

[315] 
[TIME[2008-05-05]]に
[[HTML5]] (当時) [CODE[canvas]] [CODE[2d]] v3 
としてテキスト描画の [[API]]
が追加されました。
[CODE[fillText]] などは[[横書き]]用でした。
[[CSS]]
の定義を参照する形で規定されていました。
同時に
[CODE[fillVertcalText]] など[[縦書き]]用も定義されたものの、
[[CSS]]
側が不十分ということで、
規定全体が[[コメント]]化されて隠されていました。
[SRC[>>316]]

[318] この部分は canvas v4 [SRC[>>317]], v5, v6 と遅延されていきました。
実装もされないまま、
奇しくもちょうど11年と1日が経過した日、
整理のついでに消されてしまいました [SRC[>>319]]。
別案の検討すらされていないようです。

[REFS[
- [316] [CITE@en['''['''''']''' (0) Rendering text to a canvas: the fillText(), strokeText(), and …]], [[Hixie]], [TIME[2008-05-06 10:09:48 +09:00]], [TIME[2020-11-01T06:27:48.000Z]] <https://github.com/whatwg/html/commit/96b43465a8a302fe451bbf550608594415bd08f9#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947dR15034>
- [317] [CITE@en['''['''e''']''' (0) remove XXX markers for canvas v4 notes, since they probably w…]], [[Hixie]], [TIME[2009-02-19 19:20:04 +09:00]], [TIME[2020-11-01T06:35:41.000Z]] <https://github.com/whatwg/html/commit/f6a52662035b2d6dc1fca600c0c7bc6fc048ecce>
- [319] [CITE@en[Editorial: uniformize issue references]], [[domenic]], [TIME[2019-05-07 02:00:43 +09:00]], [TIME[2020-11-01T06:46:52.000Z]] <https://github.com/whatwg/html/commit/fd330a2bdf0960d7c3e82a6832a8e78abc04f2dc#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947dR15034>
-- [320] [CITE@en[Editorial: uniformize issue references by domenic · Pull Request #4579 · whatwg/html · GitHub]], [TIME[2020-11-01T06:47:12.000Z]] <https://github.com/whatwg/html/pull/4579>
]REFS]

[301] 
[[HTML5]] (当時) [[timed text track]] モデルと
[[WebSRT]] (当時) 構文は[TIME[2010-05-04]]の開発開始当初から
writing direction
の概念を有していました。
[[DOM属性]]は [CODE[direction]]。
当時は既定値が横書き、 [CODE[D:vertical]] で縦書き右左でした。 [SRC[>>299, >>302]]
[CODE[D:vertical-lr]] で縦書き左右でした [SRC[>>306]]。

[307] [[レンダリング]]は、
[[CSS]]
に写像する形で定義され、
[CODE[direction]] は文字列から決定、
[CODE[block-flow]] は [CODE[D:]] から変換することになっていました。
[SRC[>>305, >>304]]


[REFS[
- [299] [CITE@en['''['''giow''']''' (0) Captions - Stage 3: defining what a timed track and a time…]], [[Hixie]], [TIME[2010-05-04 19:05:17 +09:00]], [TIME[2020-11-01T03:52:31.000Z]] <https://github.com/whatwg/html/commit/07eb3163f3e98291077e8c605fbd4b73f4dce86b>
-- [300] [CITE@en-US-x-hixie[Web Applications 1.0]], [TIME[2020-11-01T03:55:26.000Z]] <https://rawgit.com/whatwg/html/07eb3163f3e98291077e8c605fbd4b73f4dce86b/complete.html#timed-track-cue-writing-direction>
- [302] [CITE@en['''['''c''']''' (0) Captions - Stage 11.4: Finish defining the settings and timin…]], [[Hixie]], [TIME[2010-06-26 06:40:00 +09:00]], [TIME[2020-11-01T04:56:55.000Z]] <https://github.com/whatwg/html/commit/c28fc1bf75a2291ec00bff56ce9c419691919d0a#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947dR29064>
- [303] [CITE@en['''['''c''']''' (0) Captions - Stage 11.5: Parsing WebSRT cue settings.]], [[Hixie]], [TIME[2010-06-26 09:55:41 +09:00]], [TIME[2020-11-01T04:59:13.000Z]] <https://github.com/whatwg/html/commit/62c70353e1a0ca31df8b44058772d2b721eeffaa#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947d>
- [306] [CITE@en['''['''e''']''' (0) Captions - Stage 18: domintro blocks for timed track APIs.]], [[Hixie]], [TIME[2010-07-08 08:30:24 +09:00]], [TIME[2020-11-01T05:23:24.000Z]] <https://github.com/whatwg/html/commit/1ceed00be0f8cc2a3d645e3535296bc138e624f9#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947dR29441>
- [305] [CITE@en['''['''giow''']''' (0) Captions - Stage 21.3: rendering: direction and size calcu…]], [[Hixie]], [TIME[2010-07-13 05:08:21 +09:00]], [TIME[2020-11-01T05:18:11.000Z]] <https://github.com/whatwg/html/commit/493cfa008ca92558d9a314e3ba1096552a39e65a#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947d>
- [304] [CITE@en['''['''giow''']''' (0) Captions - Stage 21.5: rendering: property mappings]], [[Hixie]], [TIME[2010-07-13 09:44:31 +09:00]], [TIME[2020-11-01T05:15:33.000Z]] <https://github.com/whatwg/html/commit/ec8a36ac95414164da32a316f209eefe0136d4f6#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947dR98615>
- [311] [CITE@en['''['''giow''']''' (0) This was equally poorly defined.]], [[Hixie]], [TIME[2011-10-03 02:19:24 +09:00]], [TIME[2020-11-01T05:39:08.000Z]] <https://github.com/whatwg/html/commit/cf4738a78162d184e5e2b99d3f39a9938137ab71>
]REFS]

[310] わかりやすくと [CODE[D]]/[CODE[direction]] は [CODE[vertical]] に、
[CODE[vertical]] は [CODE[rl]] に、
[CODE[vertical-lr]] は [CODE[lr]] に、
[CODE[horizontal]] ([[DOM属性]]値) は[[空文字列]]に改称されました。

[REFS[
- [309] [CITE@en['''['''acgiowt''']''' (1) Change the settings to be less tersely named.]], [[Hixie]], [TIME[2012-01-31 05:48:25 +09:00]], [TIME[2020-11-01T05:32:30.000Z]] <https://github.com/whatwg/html/commit/d45326a63f7303f9a450051bc3785cea871b6d17#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947dR37124>
- [308] [CITE@en['''['''e''']''' (0) rename TextTrackCue.direction to .vertical (and change the va…]], [[Hixie]], [TIME[2012-02-23 05:11:43 +09:00]], [TIME[2020-11-01T05:29:53.000Z]] <https://github.com/whatwg/html/commit/ef639fab777f7c4a0250d0989d01ed7856c6346b#diff-41cf6794ba4200b839c53531555f0f3998df4cbb01a4d5cb0b94e3ca5e23947d>
]REFS]

[313] 
その後 [CODE[block-flow]] が [CODE[writing-mode]]
に変更されたり、
[CODE[direction]] が [CODE[plaintext]] になって独自アルゴリズムは不要となったりといった形式的な変化はありましたが、
構造は変わっていません。
text orientation 相当の制御を [[WebVTT]] で記述する方法はありません。

[REFS[
- [52] [CITE@en[WebVTT: The Web Video Text Tracks Format]], [TIME[2019-12-16T16:42:48.000Z]], [TIME[2020-10-23T14:37:49.773Z]] <https://w3c.github.io/webvtt/#webvtt-cue-writing-direction>
-
[53] [CITE@en[WebVTT: The Web Video Text Tracks Format]], [TIME[2019-12-16T16:42:48.000Z]], [TIME[2020-10-23T14:39:43.246Z]] <https://w3c.github.io/webvtt/#webvtt-vertical-text-cue-setting>
]REFS]


** 向き

[177] 
[TIME[平成23(2011)年3月][2011-03]]ごろから、
これまで ([[CSS]] 以外も) 
厳密に決め(られ)なかった、
[[文字]]の向きの個別具体的な挙動が定義されるようになりました [SRC[>>176]]。

[181] 
第1案が一通り出来上がった[TIME[2011-04-28]] [[WD]] [SRC[>>14]]:

- [182] [CODE[[[text-orientation]]]] が
[CODE[vertical-right]] かつ vertical writing mode,
[CODE[upright]] かつ vertical writing mode 
のとき、
vertical typographic mode。
[CODE[rotate-right]],
[CODE[rotate-left]]
のとき、
horizontal typographic mode。
- [183] vertical typographic mode
-- 
vertical script の grapheme cluster: 文字の intrinsic orientation を使う。
--
horizontal-only script の grapheme cluster: 
[CODE[text-orientation]] 依存 (upright if [CODE[upright]], 
sideways if [CODE[vertical-right]])
-- 
[CODE[Common]],
[CODE[Inherited]],
[CODE[Unknown]]
script の文字の orientation:
UA, font 依存
--- 
[CODE[vertical-right]] で普通 upright か sideways かの判定に [[EAW]]
を使える:
[CODE[F]], [CODE[W]] は upright (vertical font settings),
[CODE[N]], [CODE[Na]], [CODE[H]] は sideways (horizontal font settings)。
([CODE[A]] の処遇は未定)
---
font & font system が mixed-orientation typosettings
に対応しているなら、
[CODE[vertical-right]] はそれを使う[SHOULD[べき]]。
upright typesetting に対応しているなら、
[CODE[upright]] はそれを使う[SHOULD[べき]]。
---
UA が合成するとき (例えば [[OpenType]] font が 
[CODE[vert]] を持ち [CODE[vrt2]] を持たないとき):
----
[CODE[vertical-right]] では、
[[EAW]] [CODE[F]], [CODE[W]] なら upright,
それ以外なら sideways
----
[CODE[upright]] では、
[[Monglian]] と [[Phags Pa]] なら sideways、
それ以外なら upright。
- [184] script orientation
-- Han など列挙した script は vertical script
--- うち Monolian と Phags Pa はrotate、それ以外は translate
-- [[UAX #11]] 全角文字は vertical script, translate
-- それ以外は horizontal-only

[185] [TIME[2011-05-31]] [[WD]] [SRC[>>15]]
時点でも基本の構造は同じで、
[[EAW]] 関係がより厳密な定義になりました。
[TIME[2011-09-01]] [[WD]] 時点までに更に微修正が入ったのに加え、
[CODE[text-orientation]] 値が改称されました。

- [186] script orientation
-- Han など列挙した script は vertical script
--- うち Monolian と Phags Pa はrotate、それ以外は translate
-- [[EAW]] [CODE[F]], [CODE[W]] は vertical script, translate
-- [[EAW]] [CODE[H]] は vertical script, rotate ([[半角カナ]]などが該当する)
-- [[EAW]] [CODE[N]], [CODE[Na]], [CODE[A]] な [CODE[L*]] の Common は horizontal-only
-- それ以外は horizontal-only
-- Ogham は[[下から上の縦書き]]に [[CSS]] が未対応なので left-ro-right 扱い
- [187] vertical typsetting synthesis ([[参考]]):
-- [CODE[text-orientation]] が [CODE[vertical-right]], [CODE[right]] のとき:
--- [[EAW]] [CODE[F]], [CODE[W]]: upright (可能なら vertical font settings)
--- [[EAW]] [CODE[H]]: sideways (可能なら vertical font settings)
--- その他で script 所属 (!= Common, Inherited, Unknown): [CODE[text-orientation]] 
に従う
--- [CODE[Zs]], [CODE[Pd]], [CODE[Pc]],
[CODE[Ps]], [CODE[Pe]], [CODE[Pi]], [CODE[Pf]]:
upright (vertical font settings が可能なら)、不可なら sideways
-- [CODE[text-orientation]] が [CODE[vertical-right]] のとき:
--- [CODE[Po]] かつ [[EAW]] [CODE[A]],
[CODE[No]] の superscript, subscript, non-Indic fractions,
[CODE[Co]]:
可能なら vertical font settings, 不可なら sideways
---
[CODE[Sc]]. [CODE[Sm]],
[CODE[No]] の Aegean numbers と North Indic fractions,
[[Box Drawing]], [[Block Elements]], [[Arrows]],
[CODE[So]] の [[Latin-1 Supplement]] と [[Letterlike Symbols]],
後述 tone mark を除く [CODE[Sk]]: sideways (horizontal font settings)
---
[CODE[Sk]] の [CODE[U+02E5]]-[CODE[U+02EB]] tone marks range と [[Modifier Tone Letters]],
先述以外の [CODE[So]],
先述以外の [CODE[No]]
upright (vertical font settings, translated)
--- その他: sideways (horizontal font settings)
-- [CODE[text-orientation]] が [ASIS[[CODE[upright]] ][[[WD]] は誤記]]のとき:
--- その他: upright (vertical font settings)
-- 以上[TIME[2011-05-31]] [[WD]]。
[TIME[2011-09-01]] [[WD]] までに細かい調整が多々あり。
-- [204] 
開発途上でこの手法に待ったがかかったため、なお十分な状態ではなかった
[SRC[>>194]]。
- [[OpenType]] では
vertical font settings は [CODE[vhea]], [CODE[vmtx]], [CODE[VORG]],
[CODE[vert]], [CODE[vrt2]] のいずれか1つ以上
- [188] [TIME[2011-06-03]] [CODE[text-orientation]] 改称
-- [CODE[vertical-right]] → [CODE[upright-right]]
-- [CODE[upright]] ママ
-- [CODE[rotate-right]],
[CODE[rotate-left]],
[CODE[rotate-normal]] → [CODE[sideways-right]],
[CODE[sideways-left]],
[CODE[sideways]]
-- [CODE[auto]] → [CODE[use-glyph-orientation]]

[189] この [[WD]] 間の改訂で、
[CODE[text-combine]] は廃止されて、
一部 (条件を記述) または全部の文字を[[縦中横]]する [CODE[text-combine-horizontal]]
と、1文字分のサイズに圧縮するかどうかと方法を指定する
[CODE[text-combine-mode]] が追加されました。

-*-*-

[205] 
このグリフ回転法には難色を示す人も多かったようです。
本手法がとても複雑に見え、理解を遠ざけたことが大きな要因にあったようにみえます。
一方で[[フォント]]依存となっていることも問題視されましたし、
[[EAW]] のような必ずしもこの目的に適していない情報を複雑に組合せていることにも批判がありました。

[206] 
ただ[[編集者]]らが説明していた通り、当時利用できた情報と実際的な制約の中で実現できることには限界がありました。
問題を突き詰めていくと、
[WEAK[(対象となる問題や解法案を十分に理解していないものを除けば、)]]
[[Unicode]] が1つにまとめた記号の[[東アジア]]と[[欧米]]での用法の違いだとか、
[[フォント]]による実装の違いだとかの、
従来 [[Unicode]] や他の[[アプリケーション]]が目を瞑ってきた難題に行き着いたようです。


[REFS[
- [176] [CITE@en[History for css3-writing-modes - w3c/csswg-drafts · GitHub]], [TIME[2020-10-30T02:48:49.000Z]] <https://github.com/w3c/csswg-drafts/commits/d8c059fc2e79f0afab09665108ebec507d997700?before=d8c059fc2e79f0afab09665108ebec507d997700+280&branch=d8c059fc2e79f0afab09665108ebec507d997700&path%5B%5D=css3-writing-modes>
-
[14] [CITE@en[CSS Writing Modes Module Level 3]]
( ([TIME[2011-04-28 23:05:20 +09:00]] 版))
<http://www.w3.org/TR/2011/WD-css3-writing-modes-20110428/>
-
[15] [CITE@en[CSS Writing Modes Module Level 3]]
( ([TIME[2011-05-31 22:58:14 +09:00]] 版))
<http://www.w3.org/TR/2011/WD-css3-writing-modes-20110531/>
-
[16] [CITE@en[CSS Writing Modes Module Level 3]]
( ([TIME[2011-08-31 20:20:00 +09:00]] 版))
<http://www.w3.org/TR/2011/WD-css3-writing-modes-20110901/>
]REFS]

[342] 
[[EPUB2]] は [[CSS2]] を使っており、
[CODE[direction]] と [CODE[unicode-bidi]] もそのまま使っていました [SRC[>>341]]。

[344] 
[[EPUB3]] は [[CSS 2.1]] と [[CSS Writing Modes]] を使っていました。
[CODE[direction]] と [CODE[unicode-bidi]]
は使ってはならず、代わりに [[HTML]] で記述しなければならないとされていました。
[SRC[>>343]]

[346] [TIME[2011-05-06]] 案以後、
(禁止されている [CODE[direction]], [CODE[unicode-bidi]] を除いた)
[[CSS Writing Modes]]
の[[特性]]は、

- [347] [[特性名]]に [CODE[-epub-]] [[vendor prefix]] をつける
- [349] 構文は
<http://www.w3.org/TR/2011/WD-css3-writing-modes-20110428/>
による
- [348] 意味は 
[CITE[CSS Writing Modes Module Level 3]]
<http://www.w3.org/TR/css3-writing-modes/>
(= 水準3の最新版)
による

... と規定されるようになりました。 [SRC[>>345]]

[350] [[CSS]] 側が未だ [[WD]] で仕様が安定していない (実際変更された)
ため、 [[EPUB]] 側の標準化スケジュールに合わせるため凍結する意図と思われます。
しかし意味だけ最新版を参照するという謎な規定になっています。
これ以後の [[CSS]] 側の変更の結果、 [[EPUB3]] は実装不能となってしまいました。

[351] 
[CODE[writing-mode]]
の指定がパッケージに書いたメタ情報の
[CODE[page-progression-direction]]
と一致していなければならないともされていました [SRC[>>343]]。
[CODE[page-progression-direction]]
は
「The global direction in which the Publication content flows.」
で値は [CODE[ltr]] と [CODE[rtl]] とされています [SRC[>>352]]。
これと
[CODE[writing-mode]]
が矛盾し得るのかどうかよくわかりません。

[REFS[
- [341] [CITE[Open Publication Structure (OPS) 2.0 v1.0]], [TIME[2020-11-01T11:12:20.000Z]], [TIME[2007-10-31T05:35:50.960Z]] <https://web.archive.org/web/20071031053407if_/http://www.idpf.org/2007/ops/OPS_2.0_final_spec.html#Section3.3>
- [343] [CITE[EPUB Content Documents 3.0]], [TIME[2019-03-27T21:11:37.000Z]], [TIME[2020-11-01T11:14:14.523Z]] <http://idpf.org/epub/30/spec/epub30-contentdocs-20110215.html#sec-css-writing-modes>
- [345] [CITE[EPUB Content Documents 3.0]], [TIME[2019-03-27T21:11:40.000Z]], [TIME[2020-11-01T11:18:15.754Z]] <http://idpf.org/epub/30/spec/epub30-contentdocs-20110506.html#sec-css-writing-modes>
- [352] [CITE[EPUB Publications 3.0]], [TIME[2019-03-27T21:11:55.000Z]], [TIME[2020-11-01T11:30:47.605Z]] <http://idpf.org/epub/30/spec/epub30-publications.html#attrdef-spine-page-progression-direction>
]REFS]

-*-*-

[191] 
グリフ回転の情報を
[[Unicode]]
側で管理するべきと考えた人々が、
[[Unicode Consortium]]
に働きかけました。
[TIME[2011-10-04]]、
[[UTR #50]]
の最初の版が公開されました。

[207] 
[[CSS]]
は
[[UTR #50]]
を使って再定義する流れとなりました。
ただ
[[UTR #50]]
は
[[JLREQ]]
をベースにしたものでしたから、
[[日本語]]以外も含めた当時の [[Unicode]] 全体を検討した
[[CSS]] の従来案の成果が含まれない不完全なものでした。
ゆえに両者の摺り合わせが必要となりました。

[209] 
[TIME[平成24(2012)年][year:2012]]に入って、
[[CSS]] 側が [[UTR #50]] を使う形に改められました。
同時に並行して各[[文字]]について、
[[UTR #50]]、
各[[フォント]]の実装状況、
[[JLREQ]]、
[[JIS X 0213]]、
書籍や漫画の実例などから個別に詳細に検討されました (>>190)。
(こうした作業が [[UTR #50]] にどの程度反映されたのかは要検証。)

[210] [[UTR #50]] への統合 & 新しい [[UTR #50]] の SVO & MVO モデルへの更新が一旦終わった時点の[TIME[2012-05-01]] 
[[WD]]
[SRC[>>17]]
の時点での概要:

- [208] [CODE[upright-right]] → [CODE[mixed-right]] に変更:
[[UTR #50]] の "mixed" orientation mode
- [211] [CODE[upright]]: 
[[UTR #50]] の "stacked" orientation mode
- [212] [CODE[mixed-right]] や [CODE[upright]] の upright character:
vertical font metrics (なければ合成) + vertical typesettings, isolated form
- [213] [CODE[mixed-right]] や [CODE[upright]] の sideways character:
horizontal font metrics
(sideways text that is typeset in vertical lines, e.g. [CODE[svrt]] 
があれば使う)
- [214] [CODE[sideways]], [CODE[sideways-right]], [CODE[sideways-left]]:
horizontal font metrics

[215] vertical typesetting synthesis は [[UTR #50]]
と統合され置き換えられると注記されており、実際次の [[WD]]
までに削除されましたが、
旧版と [[UTR #50]] の関係性 (と当時の [[CSS WG]] の分析)
を記述したものとして参考になります。  [[WD]] 
には各カテゴリーの詳しい説明もあります。

- [216] Upright (SVO=U & MVO=U) or Transforming (SVO=MVO=T):
[CODE[mixed-right]] でも [CODE[upright]] でも upright。
transforming は縦横でグリフがぜんぜん変わるので選ばないといけない。
- [217] Upright-Transforming (SVO=T & MVO=R): 
[CODE[upright]] では upright で、(理想的には) 縦書きグリフ。
[CODE[mixed-right]] では sideways。
- [218] Sideways (SVO=R & MVO=R):
[CODE[mixed-right]] でも [CODE[upright]] でも sideways。
- [219] Non-Vertical (SVO=U & MVO=R):
[CODE[mixed-right]] では sideways。
[CODE[upright]] では upright。


[REFS[
- [203] [CITE@en[Re: '''['''css3-writing-modes''']''' Character's intrinsic orientation]], [[fantasai]], [TIME[2011-06-04 09:43:01 +09:00]], [TIME[2020-01-17T22:50:01.000Z]], [TIME[2020-10-31T05:22:21.361Z]] <https://lists.w3.org/Archives/Public/www-style/2011Jun/0106.html>
- [202] [CITE@en['''['''CSSWG''']''' Minutes and Resolutions Kyoto F2F Thurs: Vertical Text, Bidi, Line Grid, Unencoded Characters]], [[fantasai]], [TIME[2011-06-11 00:48:38 +09:00]], [TIME[2020-01-17T22:50:02.000Z]], [TIME[2020-10-31T05:15:40.265Z]] <https://lists.w3.org/Archives/Public/www-style/2011Jun/0323.html>
- [201] [CITE@en['''['''css3-writing-modes''']''' bidi-style resolution of punctuation orientation]], [[fantasai]], [TIME[2011-07-01 11:32:51 +09:00]], [TIME[2020-01-17T22:50:03.000Z]], [TIME[2020-10-31T04:11:35.474Z]] <https://lists.w3.org/Archives/Public/www-style/2011Jul/0004.html>
- [200] [CITE@en['''['''css3-writing-modes''']''' transcript of text orientation discussion]], [[John Daggett]], [TIME[2011-07-14 08:21:57 +09:00]], [TIME[2020-01-17T22:50:03.000Z]], [TIME[2020-10-31T04:07:56.690Z]] <https://lists.w3.org/Archives/Public/www-style/2011Jul/0201.html>
- [199] [CITE@en[RE: '''['''css3-writing-modes''']''' text-orientation: upright (was RE: Minutes and Resolutions 2011-07-13]], [[Koji Ishii]], [TIME[2011-07-19 18:22:11 +09:00]], [TIME[2020-01-17T22:50:03.000Z]], [TIME[2020-10-31T04:04:12.281Z]] <https://lists.w3.org/Archives/Public/www-style/2011Jul/0309.html>
- [198] [CITE@en['''['''css3 writing modes''']''' text orientation discussion]], [[John Daggett]], [TIME[2011-07-24 16:15:19 +09:00]], [TIME[2020-01-17T22:50:03.000Z]], [TIME[2020-10-31T03:52:21.225Z]] <https://lists.w3.org/Archives/Public/www-style/2011Jul/0402.html>
- [197] [CITE@en['''['''css3-writing-modes''']''' "vert" OpenType feature tag and glyph orientation]], [[Koji Ishii]], [TIME[2011-08-11 15:20:18 +09:00]], [TIME[2020-01-17T22:50:05.000Z]], [TIME[2020-10-31T03:43:35.030Z]] <https://lists.w3.org/Archives/Public/www-style/2011Aug/0291.html>
- [195] [CITE@en[Strawman proposal for UTR #50: Unicode Properties for Vertical Text Layout]], [[Eric Muller]], [TIME[2011-09-01 12:25:29 +09:00]], [TIME[2020-01-17T22:50:06.000Z]], [TIME[2020-10-31T03:25:48.459Z]] <https://lists.w3.org/Archives/Public/www-style/2011Sep/0003.html>
- [196] [CITE@en['''['''css3-writing-modes''']''' The original issues of font-dependent glyph orientation]], [[Koji Ishii]], [TIME[2011-09-28 16:48:46 +09:00]], [TIME[2020-01-17T22:50:07.000Z]], [TIME[2020-10-31T03:35:30.656Z]] <https://lists.w3.org/Archives/Public/www-style/2011Sep/0473.html>
-- [193] [CITE@en[RE: '''['''css3-writing-modes''']''' The original issues of font-dependent glyph orientation]], [[Koji Ishii]], [TIME[2011-10-01 19:16:48 +09:00]], [TIME[2020-01-17T22:50:07.000Z]], [TIME[2020-10-31T03:22:08.663Z]] <https://lists.w3.org/Archives/Public/www-style/2011Oct/0024.html>
-- [194] [CITE@en[RE: '''['''css3-writing-modes''']''' The original issues of font-dependent glyph orientation]], [[Koji Ishii]], [TIME[2011-10-06 20:33:07 +09:00]], [TIME[2020-01-17T22:50:08.000Z]], [TIME[2020-10-31T03:23:44.465Z]] <https://lists.w3.org/Archives/Public/www-style/2011Oct/0211.html>
- [192] [CITE@en[Fwd: '''['''UTR50''']''' Comments on Unicode PRI207 - Unicode Properties for Vertical Text Layout]], [[fantasai]], [TIME[2011-10-24 14:01:38 +09:00]], [TIME[2020-01-17T22:41:00.000Z]], [TIME[2020-10-31T03:04:04.746Z]] <https://lists.w3.org/Archives/Public/www-international/2011OctDec/0034.html>
- [190] 
[CITE@en[UTR #50 Review Memo '''['''CSS Working Group Wiki''']''']], [TIME[2020-10-30T12:32:56.000Z]] <https://wiki.csswg.org/spec/utr50>
- [241] [CITE@en-gb[The Unicode Consortium Discussion Forum (CLOSED) • View topic - Fundamental questions]], [TIME[2020-10-31T11:57:40.000Z]], [TIME[2015-08-21T01:27:28.385Z]] <https://web.archive.org/web/20150821012028/http://www.unicode.org/forum/viewtopic.php?f=35&t=331>
-
[17] [CITE@en[CSS Writing Modes Module Level 3]]
( ([TIME[2012-05-01 07:23:33 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-css3-writing-modes-20120501/>
]REFS]

[224] 
[[UTR #50]]
の変更を反映した[TIME[2012-11-15]] [[WD]]
時点までの変更:

- [225] [CODE[mixed-right]] → [CODE[mixed]] に変更:
[[UTR #50]] orientation (旧 MVO のこと) により、
[CODE[U]], [CODE[T]] (その後の改正で消滅), [CODE[Tu]]: upright,
[CODE[R]]: sideways,
[CODE[Tr]]: upright typesetting 用 glyph がフォントにあればそれ、
なければ sideways
-- システムによっては Mongolian, Phags-pa は実際には sideways
- [226] [CODE[mixed]], [CODE[upright]] の upright:
vertical font metrics。
なければ合成 (実装依存)。
vertical typesetting 用 font features ([CODE[vert]] など)。
isolated form。
-- [230] upright といってもグリフを回転するべき場合がある
(dash や enclosing punctuation など)。
(東アジアのフォントは縦用の字形が入っていても西洋のフォントには入っていない。)
[[UTR #50]] の [[SVO]] に sideways にするべき文字のデータがあったが削除された。
- [227] [CODE[mixed]], [CODE[upright]] の sideways:
horizontal metrics,
90度回転。
フォントに
sideways text that is typeset in vertical lines
用機能があれば使う。
- [228] [CODE[sideways]], [CODE[sideways-right]], [CODE[sideways-left]]:
horizontal font metrics。
- [229] [CODE[vrt2]] はフォント依存になるので不使用。
- [231] [CODE[text-combine-horizontal]] の条件付[[縦中横]]は削除、
[CODE[text-combine-mode]] は削除。 (将来送り、としつつその後も本項執筆時点まで復活せず)

[232] 
[[UTR #50]] は従来の [[SVO]] を廃止してしまいました。
[[Unicode]] 側の認識では、 [[MVO]] は ([[UTR #50]] 編集者の思うところの) [[日本]]用、
[[SVO]] は[[英語]]用であるところ [SRC[>>241]]、
[[日本]]以外はあまり重視せず先送りすることになったようです。
(先送りといっても本項執筆時点まで10年近く何の動きもなく、
実質開発中止でしょう。)
そもそも [[Unicode]] 側は[[プレインテキスト]]で最低限の表示に必要なデータを整備できればよいとしていたようです。

[233] 
[[CSS]] は [CODE[mixed]] に [[MVO]] のデータを、
[CODE[upright]] に [[SVO]] のデータを使っていましたが、
[[SVO]] が消滅して [CODE[upright]] が宙に浮く形になりました。
本来 upright でもハイフンや括弧は縦書き用になる必要がありましたが、
根拠となるデータを [[Unicode]] が提供していないため、
常に upright な字形を使う (forced upright) ことになりました [SRC[>>220]]。
([[fantasai]] はそれでは使い物にならないと説明したものの、
[[CSS WG]] の決定には抗いませんでした。)

[234] 
forced upright といっても実際には縦書きデータがあるフォントでは縦書きデータが使われるので、
結局のところどう表示されるかは実装依存となってしまいました [SRC[>>221]]。
また変更が反映された仕様書 [SRC[>>18]] も、
[[Note]] としてダッシュや括弧は回転させなければならない、
[[SVO]] のデータが昔はあったがなくなった
(ので詳細は実装依存だが何かしないといけない)、
という感じになっていて、
forced upright 
にするという決定が反映されたのかどうかよくわからない状態になりました。
(forced upright を主張した人達のメールをみると、
アルファベットと漢字の向きが決まればあとは edge case
なのでどうでもいいという類の認識が示されていて、
[[相互運用性]]などは重視されていないようです。。。)

[258] 
[[UTN #22]] の系譜の [[CSS]] の用語と、
[[UAX #50]] の用語とは、
似ていても意味が同じでないことに注意が必要です。
現在の [[CSS]] の仕様書の説明と変更の過程から、
次のように解釈できます。

- [259] 
[[CSS]] の upright は [[UTN #22]] の transform につながるもので、
文字''列''を横書きの字形の向きをそのまま縦に並べ替えることを言っています。
並び順だけで字形は不問なので、
横書きと縦書きで字形が同じ場合 ([[UAX #50]] の [CODE[U]] = Upright) のほかに、
まったく違う場合 ([[UAX #50]] の [CODE[T]] = transformed)
や横書きを回転した字形が縦書き字形の場合 ([[UAX #50]] の [CODE[R]] = Rotated)
が含まれます。
- [260] 
[[CSS]] の sideways は [[UTN #22]] の rotate につながるもので、
文字''列''を横書きの左右の関係を保ったまま縦並びに回転させることを言っています。

[261] 
ただこの両系統の用語の意味は [[CSS]] が [[UAX #50]] を採用する過程で変質し曖昧化しており
(用語自体も両者それぞれ何度か変更されました)、
現在の規定からその意図が明確とは言い切れません。
またそれがどこまで意識的に変更されたものかも判断が難しいです。
関係する [[CSS WG]] の議論も、人によって用語と概念の解釈が違うように思われます。



[REFS[
- [384] [CITE@ja[縦組み時の文字方向について:UTR#50のSVOデフォルト、MVOデフォルト、現代方式、伝統方式、新聞方式の相違を分析する | 電子書籍、電子出版のCAS-UBブログ]], [TIME[2020-11-10T13:07:09.000Z]] <http://blog.cas-ub.com/?p=2518>
- [220] [CITE@en['''['''CSSWG''']''' Minutes and Resolutions 2012-08-15 Wed PM II: Writing Modes, Lists and Counter Styles, Case-sensitivity and Normalization]], [[fantasai]], [TIME[2012-08-30 11:28:24 +09:00]], [TIME[2020-01-17T22:50:26.000Z]], [TIME[2020-10-31T07:46:25.699Z]] <https://lists.w3.org/Archives/Public/www-style/2012Aug/0899.html>
- [221] [CITE@en['''['''css3-writing-modes''']''' text-orientation:upright]], [[MURAKAMI Shinyu]], [TIME[2012-09-15 16:15:13 +09:00]], [TIME[2020-01-17T22:50:28.000Z]], [TIME[2020-10-31T07:47:16.546Z]] <https://lists.w3.org/Archives/Public/www-style/2012Sep/0313.html>
-- [222] [CITE@en[Re: '''['''css3-writing-modes''']''' text-orientation:upright]], [[koba]], [TIME[2012-09-24 10:41:24 +09:00]], [TIME[2020-01-17T22:50:28.000Z]], [TIME[2020-10-31T07:52:59.027Z]] <https://lists.w3.org/Archives/Public/www-style/2012Sep/0444.html>
- [223] [CITE@en[Re: '''['''css3-writing-modes''']''' text-orientation:upright]], [[koba]], [TIME[2012-09-24 10:41:24 +09:00]], [TIME[2020-01-17T22:50:28.000Z]], [TIME[2020-10-31T07:52:59.027Z]] <https://lists.w3.org/Archives/Public/www-style/2012Sep/0444.html>
- [383] [CITE[Char20121022.pdf]], [TIME[2012-10-23T13:43:43.000Z]], [TIME[2020-11-10T13:04:23.654Z]] <http://www.cas-ub.com/samples/20121022/Char20121022.pdf>
-
[18] [CITE@en[CSS Writing Modes Module Level 3]]
( ([TIME[2012-11-15 23:15:29 +09:00]] 版))
<http://www.w3.org/TR/2012/WD-css3-writing-modes-20121115/>
]REFS]



[19] [[WinIE9]] は [CODE(CSS)@en[[[lr]]]], [CODE(CSS)@en[[[rl]]]], [CODE(CSS)@en[[[tb]]]],
[CODE(CSS)@en[[[lr-tb]]]], [CODE(CSS)@en[[[lr-bt]]]], [CODE(CSS)@en[[[rl-tb]]]], [CODE(CSS)@en[[[rl-bt]]]],
[CODE(CSS)@en[[[tb-lr]]]], [CODE(CSS)@en[[[rb-rl]]]], [CODE(CSS)@en[[[bt-lr]]]], [CODE(CSS)@en[[[bt-rl]]]]
に対応しています。 [CODE(CSS)@en[[[bt]]]] はなぜかありません。いずれも [[CSSOM]] 上のみならず[[レンダリング]]も変化します。

[20] [[Chrome]] は [CODE(CSS)@en[[[lr]]]], [CODE(CSS)@en[[[rl]]]], [CODE(CSS)@en[[[tb]]]],
[CODE(CSS)@en[[[lr-tb]]]], [CODE(CSS)@en[[[rl-tb]]]], [CODE(CSS)@en[[[rb-rl]]]] に対応しています。
[TIME[2013-09-07T02:21:18.00Z]]

[21] 現行 [[CSS3]] の [CODE(CSS)@en[[[horizontal-lr]]]], [CODE(CSS)@en[[[horizontal-rl]]]],
[CODE(CSS)@en[[[vertical-rl]]]] にはどのブラウザも対応していません。 [TIME[2013-09-07T02:21:51.400Z]]

[22] [[IE9]] は [CODE(CSS)@en[[[-ms-writing-mode]]]] を構文解析時に [CODE(CSS)@en[[[writing-mode]]]]
に置き換えるようです。 [CODE(CSS)@en[[[-ms-writing-mode]]]] の方には [[IDL属性]]は無いようです。

[23] [CITE[Text — SVG 2]]
( ([TIME[2013-06-13 22:56:31 +09:00]] 版))
<https://svgwg.org/svg2-draft/text.html#WritingModeProperty>

[24] [CITE@ja[日本語組版処理の要件(日本語版)]]
( ([[Japanese Layout Task Force]] 著, [TIME[2012-03-23 20:19:12 +09:00]] 版))
<http://www.w3.org/TR/jlreq/ja/#directional_factors_in_japanese_composition>

[235] 
[TIME[2013-10-24]] [[WD]] [SRC[>>25]] 時点まで:

- [236] 方向の記述が block-start/block-end, inline-start/inline-end に変更されました。
-- [237] これで [[XSL]] モデルの残滓が [CODE[writing-mode]]
という特性名くらいで後はほとんど別物になりました。
- [238] [CODE[text-combine-horizontal]] の条件のうち数字列だけ復活しました。

[255] 
[TIME[2014-03-20]] [[CR]] [SRC[>>27]] 時点までに、
[CODE[text-combine-horizontal]]
は
[CODE[text-combine-upright]]
に改称されました。

[REFS[
- [42] [CITE@en[History for css-writing-modes/Overview.src.html - w3c/csswg-drafts · GitHub]], [TIME[2020-10-27T13:40:19.000Z]] <https://github.com/w3c/csswg-drafts/commits/master?after=95ef3911fe15353351a191f320b17e06fcdac30e+69&branch=95ef3911fe15353351a191f320b17e06fcdac30e&path%5B%5D=css-writing-modes&path%5B%5D=Overview.src.html>
-
[25] [CITE@en[CSS Writing Modes Level 3]]
( ([TIME[2013-10-24 23:21:50 +09:00]] 版))
<http://www.w3.org/TR/2013/WD-css-writing-modes-3-20131024/>
-
[26] [CITE@en[CSS Writing Modes Level 3]]
( ([TIME[2013-11-23 01:24:00 +09:00]] 版))
<http://www.w3.org/TR/2013/WD-css-writing-modes-3-20131126/>
-
[27] [CITE@en[CSS Writing Modes Level 3]]
( ([TIME[2014-03-19 00:29:02 +09:00]] 版))
<http://www.w3.org/TR/2014/CR-css-writing-modes-3-20140320/>
-[41] [CITE@en[History for css-writing-modes/Overview.bs - w3c/csswg-drafts · GitHub]], [TIME[2020-10-27T13:36:37.000Z]] <https://github.com/w3c/csswg-drafts/commits/master?after=d9c2b5ae122f3cd6118f027b31aebd0f7da1f5f5+139&branch=d9c2b5ae122f3cd6118f027b31aebd0f7da1f5f5&path%5B%5D=css-writing-modes&path%5B%5D=Overview.bs>
]REFS]

[28] [CITE[IRC logs: freenode / #whatwg / 20141219]]
( ([TIME[2014-12-22 23:09:27 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20141219#l-130>

-*-*-

[377] 
[[TEI]]
は[[書字方向]]の扱いを検討し、
基本的なものは [[CSS Writing Modes]] で、
[[ワードアート]]的な特殊例は 
[[CSS]]
の
[CODE[transform]]
で記述するとの結論を得ました。

[378] 
[[下から上の縦書き]]は [CODE[[[text-orientation]]: [[sideways-left]]]]
で表現可能とされました。

[379] 
[[牛耕式]]は ([[TEI]] では行ごとに[[マーク付け]]すれば良いので)
[[CSS Writing Modes]] や [CODE[transform]]
で書けるとされました。

[380] 
渦巻状のものは [[SVG]] で扱うべきものとされました。

[381] 
用例として示されたうち[[下から上の横書き]]をどう記述するべきなのかは不明。


[REFS[
- [371] [CITE@en[Text Directionality Workgroup - TEIWiki]], [TIME[2019-02-21T19:35:51.000Z]], [TIME[2020-11-02T08:24:33.056Z]] <https://wiki.tei-c.org/index.php/Text_Directionality_Workgroup>
- [373] [CITE[Text_directionality.pdf]], [TIME[2019-02-21T17:55:36.000Z]], [TIME[2020-11-02T08:25:02.125Z]] <https://wiki.tei-c.org/images/4/48/Text_directionality.pdf>
- [372] [CITE@en[Text Directionality Draft - TEIWiki]], [TIME[2019-02-21T19:35:51.000Z]], [TIME[2020-11-02T08:24:53.769Z]] <https://wiki.tei-c.org/index.php?title=Text_Directionality_Draft>
- [376] [CITE@en-US[TEI Technical Council Meeting, 11-13 April 2013 – TEI: Text Encoding Initiative]], [TIME[2020-11-02T08:25:42.000Z]] <https://tei-c.org/activities/council/meetings/tei-technical-council-meeting-11-13-april-2013/#body.1_div.1_div.3_div.1>
- [375] [CITE['''['''tei-council''']''' Outcome of TEI Council discussion on Text Directionality]], [TIME[2013-06-20T13:27:55.000Z]], [TIME[2020-11-02T08:25:24.636Z]] <http://lists.village.virginia.edu/pipermail/tei-council/2013/017756.html>
- [374] [CITE@en[5 Characters, Glyphs, and Writing Modes - The TEI Guidelines]], [TIME[2020-08-19T17:31:05.000Z]], [TIME[2020-11-02T08:25:15.440Z]] <https://tei-c.org/release/doc/tei-p5-doc/en/html/WD.html#WDWM>
]REFS]


** sideways

[242] 
[[CR]] 後、
実装状況が芳しくなかった機能の処遇と 
[[SVG]]
との統合が問題となったようです。
[TIME[2015-12-15]] [[CR]] [SRC[>>32]] までの変更:

- [243] [CODE[text-orientation]]
-- [244] [CODE[sideways-left]] 廃止
-- [245] [CODE[sideways-right]] = [CODE[sideways]] に
-- [246] [CODE[use-glyph-orientation]] 廃止
- [247] [CODE[glyph-orientation-vertical]]
は0度と90度のみに限定され
[CODE[text-orientation]] に読み替えることに
- [248] [CODE[writing-mode]] に
[CODE[sideways-lr]],
[CODE[sideways-rl]]
追加

[249] [CODE[text-orientation]] は[[日本語]]の[[縦書き]]中の英数字などの制御にほぼ限定され、
[[英語]]などの寝かせた縦書きは [CODE[writing-mode]]
で扱うことになりました。
[[縦書き]]文中の[[アラビア文字]]の上から下への[[右横書き]]や、
下から上への [[Ogham]] のような従来カバーされていた稀な用途は、
対象外とされてしまいました [SRC[>>250]]。
ここに至って [[UTN #22]] モデルの面影もほとんど消えてなくなってしまいました。


[339] 
[[SVG2]]
は (慢性的な資源不足もあって長年放置され)
長らく [[SVG 1.1]]
の [[XSL]] ベースのモデルのままでしたが、
このとき 
[CODE[direction]], [CODE[unicode-bidi]]
も含め
[[CSS Writing Modes]]
を利用する形に改められました。
[SRC[>>338]]

[REFS[
- [30] [CITE@en[''''''[''''''css-writing-modes'''''']''''''''''''[''''''svg'''''']'''''' SVG and writing-mode]]
([[Koji Ishii]] 著, [TIME[2015-05-07 13:22:18 +09:00]] 版)
<https://lists.w3.org/Archives/Public/www-style/2015May/0092.html>
- [250] [CITE@en[Re: '''['''css-writing-modes''']''' Propose writing-mode: sideways-left]], [[fantasai]], [TIME[2015-07-05 03:21:08 +09:00]], [TIME[2020-01-17T22:52:18.000Z]], [TIME[2020-10-31T12:22:23.023Z]] <https://lists.w3.org/Archives/Public/www-style/2015Jul/0060.html>
- [240] [CITE@en['''['''CSSWG''']''' Minutes Paris F2F 2015-08-27 Part II: FXTF Meeting Part II; glyph-orientation, writing-mode Values from SVG 1.1, getTransformToElement, Path Animation,Zoom Features for Media Queries]], [[Dael Jackson]], [TIME[2015-09-15 02:59:00 +09:00]], [TIME[2020-01-17T19:49:54.000Z]], [TIME[2020-10-31T11:42:22.612Z]] <https://lists.w3.org/Archives/Public/public-fx/2015JulSep/0062.html>
- [239] [CITE[Notes on CSS Writing Modes Level 3]], [TIME[2015-10-05T14:35:45.000Z]], [TIME[2020-10-31T11:36:22.797Z]] <http://tavmjong.free.fr/SVG/WRITING_MODES/>
-[31] [CITE@en[''''''[''''''css-writing-modes'''''']'''''' Update SVG 'writing-mode' values to compute throu… · w3c/csswg-drafts@8204f4d]]
([TIME[2015-10-06 13:14:33 +09:00]] 版)
<https://github.com/w3c/csswg-drafts/commit/8204f4d5fa23f4a640bc3d08afeb42d02560bb3e>
- [32] [CITE@en[CSS Writing Modes Level 3]]
( ([TIME[2015-12-15 05:45:58 +09:00]] 版))
<http://www.w3.org/TR/2015/CR-css-writing-modes-3-20151215/>
-
[33] [CITE@en[CSS Writing Modes Level 3]]
([TIME[2015-12-15 03:08:15 +09:00]] 版)
<https://drafts.csswg.org/css-writing-modes-3/>
- [338] [CITE@en[Scalable Vector Graphics (SVG) 2]], [TIME[2016-09-14T04:07:01.000Z]], [TIME[2020-11-01T09:05:19.304Z]] <https://www.w3.org/TR/2016/CR-SVG2-20160915/single-page.html#text-WritingModeProperty>
]REFS]

[34] [CITE@en[409155 - writing-mode doesn't work on th or td elements - chromium - Monorail]]
([TIME[2016-12-11 23:44:27 +09:00]])
<https://bugs.chromium.org/p/chromium/issues/detail?id=409155>

-
[35] [CITE@en[Writing Modes PR & Testsuite]]
([[Geoffrey Sneddon]]著, [TIME[2017-01-13 07:48:24 +09:00]])
<https://lists.w3.org/Archives/Public/www-style/2017Jan/0024.html>
-
[36] [CITE@en[Re: Writing Modes PR & Testsuite]]
([[Geoffrey Sneddon]]著, [TIME[2017-02-10 01:34:25 +09:00]])
<https://lists.w3.org/Archives/Public/www-style/2017Feb/0047.html>

[251] 
[CODE[writing-mode]]
に新たに追加された
[CODE[sideways-rl]],
[CODE[sideways-lr]]
と
[CODE[text-combine-horizontal]]
の数字列の条件指定は、
Level 3 から外され
Level 4 だけになりました。

[REFS[
- [37] [CITE@en[CSS Writing Modes Level 3]]
([TIME[2017-12-06 14:47:48 +09:00]])
<https://www.w3.org/TR/2017/CR-css-writing-modes-3-20171207/>
- [38] [CITE@en[CSS Writing Modes Level 4]]
([TIME[2017-12-06 15:02:10 +09:00]])
<https://www.w3.org/TR/2017/WD-css-writing-modes-4-20171207/>
]REFS]

- 
[39] [CITE@en[Re: '''['''css-writing-modes''']''' Compatible proposal for a merge of direction  and writing-mode]]
([[fantasai]]著, [TIME[2018-01-16 07:14:57 +09:00]])
<https://lists.w3.org/Archives/Public/www-style/2018Jan/0059.html>
- [113] [CITE@en[CSS Writing Modes Level 3]], [TIME[2018-05-22T18:41:02.000Z]], [TIME[2020-10-27T12:09:23.398Z]] <https://www.w3.org/TR/2018/CR-css-writing-modes-3-20180524/>
- [112] [CITE@en[CSS Writing Modes Level 3]], [TIME[2019-07-29T07:03:19.000Z]], [TIME[2020-10-27T12:09:11.977Z]] <https://www.w3.org/TR/2019/CR-css-writing-modes-3-20190730/>
- [111] [CITE@en[CSS Writing Modes Level 3]], [TIME[2019-09-02T04:47:51.000Z]], [TIME[2020-10-27T12:08:58.501Z]] <https://www.w3.org/TR/2019/CR-css-writing-modes-3-20190903/>
- [110] [CITE@en[CSS Writing Modes Level 3]], [TIME[2019-10-22T09:47:46.000Z]], [TIME[2020-10-27T12:08:47.186Z]] <https://www.w3.org/TR/2019/PR-css-writing-modes-3-20191024/>
- [109] [CITE@en[CSS Writing Modes Level 3]], [TIME[2020-04-30T16:55:21.000Z]], [TIME[2020-10-27T12:08:25.562Z]] <https://www.w3.org/TR/2019/REC-css-writing-modes-3-20191210/>
- [108] [CITE@en[CSS Writing Modes Level 3]], [TIME[2020-10-27T11:08:23.000Z]], [TIME[2020-10-27T12:06:03.808Z]] <https://drafts.csswg.org/css-writing-modes-3/>


- [253] [CITE@en[CSS Writing Modes Level 4]], [TIME[2018-05-23T20:15:17.000Z]], [TIME[2020-10-31T12:33:40.349Z]] <https://www.w3.org/TR/2018/CR-css-writing-modes-4-20180524/>
-- [256] [CITE@en['''['''CSSWG''']''''''['''css-writing-modes''']''' CSS Writing Modes: Updated L3, CR for L4]]
([[fantasai]]著, [TIME[2018-05-30 05:36:20 +09:00]])
<https://lists.w3.org/Archives/Public/www-style/2018May/0046.html>
- [252] [CITE@en[CSS Writing Modes Level 4]], [TIME[2020-04-30T16:57:43.000Z]], [TIME[2020-10-31T12:33:22.023Z]] <https://www.w3.org/TR/2019/CR-css-writing-modes-4-20190730/>
- [43] [CITE@en[CSS Writing Modes Level 4]]
([TIME[2019-02-01 10:07:02 +09:00]])
<https://drafts.csswg.org/css-writing-modes/>






[254] 
[[Chrome]] は [CODE[writing-mode]]: [CODE[horizontal-tb]],
[CODE[vertical-lr]], [CODE[vertical-rl]];
[CODE[text-orientation]]:
[CODE[mixed]],
[CODE[sideways]],
[CODE[upright]];
[CODE[text-combine-upright]]: [CODE[all]]
に対応しています。
[TIME[2020-10-31T12:39:48.800Z]]

** TTML2

[268] 
[[TTML1]] は [[XSL]] モデルの [CODE[writing-mode]], [CODE[direction]]
をコピーした [CODE[tts:writingMode]], [CODE[tts:direction]]
を定めていました (詳細な処理モデルの規定は無し、詳しくは >>262)。

[269] 
[[TTML2]] はそれを残したまま [[CSS]] からつまみ食いする形で
[CODE[tts:textOrientation]]
を追加しました。

[271] 
[TIME[2015-02-12]] [[WD]] [SRC[>>270]] 時点では、
当時の [[CSS]] 相当の値を独自に規定していました。

- [272] [CODE[mixed]]: 
vertical writing mode では:
horizontal script なら sideways ([[時計回りに90°回転]]),
vertical script ならそのまま
- [273] [CODE[sidewaysLeft]]:
vertical writing mode では:
horizontal script なら sideways (反[[時計回りに90°回転]])
- [274] [CODE[sidewaysRight]]:
vertical writing mode では:
horizontal script なら sideways ([[時計回りに90°回転]])
- [275] [CODE[sideways]]:
vertical writing mode では:
horizontal script なら、
writing mode が [CODE[tbrl]], [CODE[tblr]] により時計回りまたは反時計回りに90度回転。
vertical scripts ならそのまま。
- [276] [CODE[upright]]:
vertical writing mode なら、
horizontal script は upright,
vertical script はそのまま。

(script 判定方法の規定はなし)

[278] 
[TIME[2017-06-30]] [[WD]] [SRC[>>277]] 時点では、
[[UTR #50]]
[CODE[Vertical_Orientation]]
を参照する形に改められていました。

- [280] horizontal writing mode では無意味
- [279] [CODE[mixed]]:
rotated glyph: sideways,
non-rotated glyph: upright
(rotated or not は VO 次第)。
sideways: block progression direction が右左か左右かにより、
時計回りか反時計回りに90度回転
(回転はグリフ置換かアフィン変換によって行われ、
どちらになるかはフォント次第)。
upright: 何もしない。
- [281] [CODE[sidewaysLeft]]: 
rotated glyph は反時計回りに90度回転。
- [282] [CODE[sidewaysRight]]: 
rotated glyph は時計回りに90度回転。
- [283] [CODE[sideways]]:
rotated glyph は 
block progression direction が右左か左右かにより、
時計回りか反時計回りに90度回転
- [284] [CODE[upright]]:
すべての文字を [CODE[Vertical_Orientation]] が [CODE[U]]
として扱い、回転しない。
グリフ置換も回転も発生しない。

[285] 慎重に読むと [[CSS]] とは違うことを言っています。
[[UTR #50]] と同じかどうかは判断が難しい。

[287]
[TIME[2018-03-13]] [[CR]] [SRC[>>286]]
時点では、規定内容はほぼ同じながら、
glyph ではなく [[glyph area]] が回転するしないという形になっていました。
[[glyph area]] は [[XSL]] と [[TTML]] がグリフごとに想定する表示上の単位。
規定はいくらか厳密になったといえますが、
現実のフォントの実装やレンダリング処理、 [[CSS]]
との関係を考えるとき、
適切な改正だったのか判断しづらい。

[289] 
[TIME[2018-10-04]] [[PR]] [SRC[>>288]]
時点では、
[[CSS]]
の変更に追随した改廃がありました。
慎重に読むと [[CSS]] と同じか怪しいのは変わらず。

- [290] horizontal writing mode では無意味
- [291] [CODE[mixed]]:
rotated glyph: sideways,
non-rotated glyph: upright
(rotated or not は VO 次第)。
sideways: [[glyph area]] 時計回りに90度回転
(回転はグリフ置換かアフィン変換によって行われ、
どちらになるかはフォント次第)。
upright: [[glyph area]] 何もしない。
- [292] [CODE[sideways]]: 
すべて [[glyph area]] 時計回りに90度回転。
- [293] [CODE[upright]]:
すべての文字を [CODE[Vertical_Orientation]] が [CODE[U]]
として扱い、 [[glyph area]] は回転しない。
グリフ置換も回転も発生しない。

([[CSS]] と違って [CODE[writing-mode]] には変更なし。)

[REFS[
- [270] [CITE@en-us[Timed Text Markup Language 2 (TTML2)]], [TIME[2017-10-02T10:51:26.000Z]], [TIME[2020-11-01T02:17:09.541Z]] <https://www.w3.org/TR/2015/WD-ttml2-20150212/#style-attribute-textOrientation>
- [277] [CITE@en-us[Timed Text Markup Language 2 (TTML2)]], [TIME[2017-06-30T02:58:52.000Z]], [TIME[2020-11-01T02:26:16.129Z]] <https://www.w3.org/TR/2017/WD-ttml2-20170630/#style-attribute-textOrientation>
- [286] [CITE@en-us[Timed Text Markup Language 2 (TTML2)]], [TIME[2018-03-12T19:38:31.000Z]], [TIME[2020-11-01T02:43:13.902Z]] <https://www.w3.org/TR/2018/CR-ttml2-20180313/#style-attribute-textOrientation>
- [288] [CITE@en-us[Timed Text Markup Language 2 (TTML2)]], [TIME[2018-09-27T11:48:59.000Z]], [TIME[2020-11-01T02:48:41.291Z]] <https://www.w3.org/TR/2018/PR-ttml2-20181004/#style-attribute-textOrientation>
- [50] [CITE@en-us[Timed Text Markup Language 2 (TTML2) (2nd Edition)]], [TIME[2020-07-28T01:59:54.000Z]], [TIME[2020-10-23T14:29:39.885Z]] <https://w3c.github.io/ttml2/#style-attribute-writingMode>
]REFS]

[369] 
なお、当初は
[[ST 428-7]]
との互換性を理由に[[下から上の縦書き]]対応が模索されましたが、
[[CSS]] にないという理由で対応されませんでした [SRC[>>370]]。
([[ST 428-7]] は [[CSS]] の系譜に連ならない独自モデル。 [SEE[ [[書字方向]] ]])

[REFS[
- [370] [CITE@en[ISSUE-232: Bottom-to-top text direction - Timed Text Working Group Tracker]], [TIME[2019-11-12T10:05:13.000Z]], [TIME[2020-11-02T08:17:33.332Z]] <https://www.w3.org/AudioVideo/TT/tracker/issues/232>
]REFS]


**


[FIG(bookmarklet)[
[385] 
<https://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20HTML%3E%0A%3Cstyle%3E%0Asection%20%7B%0A%20%20border%3A%201px%20solid%20currentcolor%3B%0A%20%20position%3A%20absolute%3B%0A%7D%0Adiv%20%7B%0A%20%20writing-mode%3A%20vertical-lr%3B%0A%20%20border%3A%201px%20solid%20gray%3B%0A%7D%0Ap%20%7B%0A%20%20writing-mode%3A%20horizontal-tb%3B%0A%7D%0A%3C%2Fstyle%3E%0A%0A%3Csection%3EX%3Cdiv%3E%3Cp%3EA%3Cp%3EB%3Cp%3EC%3C%2Fdiv%3EY%3C%2Fsection%3E%0A>
]FIG]


[386] [[Chrome]] だと [CODE[position:absolute]]
中の [CODE[writing-mode]] が違うブロックに外接するよう
[CODE[position:absolute]] 箱のサイズが決められますが、
[[Safari]] はそれを無視するので、横にはみ出してしまいます。
[TIME[2022-02-01T06:12:25.800Z]]

[CODE[div]] に [CODE[min-width]] を指定するとそこまでは広まりますが、
内容がそれより大きければはみ出します。

[387] 再現コードをうまく作れないのですが、
条件によっては幅だけではなく高さもおかしくなるみたいです。
