[14] OpenType Layout では shaping によってフォントから探索する文字や適用するべき機能を決定するという想定になっています。 >>13
[15] OpenType で扱うのは低水準の機能だけで、 shaping の詳細は仕様書の適用範囲外とされています。 >>13
[20] OpenType は多数の機能を利用可能としていますが、 それら (の lookup) は同時適用もできますし、分けて適用もできます。 どの機能 (の lookup) をどのタイミングで適用するか、 その適用と適用の合間にグリフ列を入れ替える等の操作をするかは、 OpenType 仕様としては定めない (が多くの用字系ではそのような操作が必要となる)、 とされています。 >>19
[16] OpenType フォントファイルに格納されるのは shaping された結果からグリフへの対応関係なので、 外部から与えられたUnicode文字列から shaping された結果への変換方法 (つまり shaping の方法) が決められないことにはフォントの相互運用性は保証されないと言わざるを得ません。 つまり OpenType 仕様は相互運用性を半ば放棄しているようです。
[21] OpenType Layout では特定のフォントのグリフ固有の情報を機能 / lookup として格納し、言語や用字系の共通の情報はフォントに入れずに実装側で持つ、 としています。 >>19 妥当な設計方針でしょう。問題はそれが文字のレンダリングの実装にもフォント開発にも必須の情報なのに仕様外とされていることです。
[17] Windows は Uniscribe で shaping を実装しています。 Uniscribe は独占ソフトウェアですが、その処理の概要は公式サイトに載っていますし、 おおむね The Unicode Standard に従っているようなことが書かれています。 その情報と実在のフォントファイル、それに Windows その他の実装から挙動を推測するしかありません。
[2] Uniscribe は用字系ごとに shaping engine を持っています。 >>1, >>3
[6] また, 特別に対応していない用字系用の OpenType Layout shaping engine も持っています。 >>1
[4]
Uniscribe は入力の文字列を項目群, 連なり群, クラスター群の3階層に分割します。
[5] クラスターは用字系によって決まる、文字群の基本的な要素です。 >>3 Unicode でいう書記素クラスターに近い単位と思われますが、 同じかどうかは不明。
[7] Uniscribe は文字の前処理も行います。 入力 (Unicode の文字列) は論理順になっていますが、 前処理でグリフ処理に都合の良い順序に並べ替えます。 具体的には Unicode の規定によります。 >>3
[11]
GSUB
を駆使すれば文字前処理の並べ替えをしなくてもフォント側でグリフ決定をすべて行うこともできるのでしょうが、
それではフォント開発が大変になるようです。
文字前処理があるのでフォント開発で複雑な条件をたくさん記述しなくてもよいのです
>>3。
[9] 結果得られたUnicode文字の列が OTLS に渡されます。 適宜機能を適用します。 >>3
[58] タグ文字による指定を character shaping に影響する指定に使える可能性があるとされていました。
[18] HarfBuzz Manual: HarfBuzz Manual, , https://harfbuzz.github.io/
[24] GitHub - harfbuzz/harfbuzzjs: Providing HarfBuzz shaping library for client/server side JavaScript projects, https://github.com/harfbuzz/harfbuzzjs
[22] GitHub - prezi/harfbuzz-js: JavaScript port of the HarfBuzz OpenType text shaping engine, https://github.com/prezi/harfbuzz-js
[23] GitHub - simoncozens/crowbar: A text shaping debugger, https://github.com/simoncozens/crowbar
[25] Crowbar, , http://www.corvelsoftware.co.uk/crowbar/
[27] GitHub - n8willis/opentype-shaping-documents: Documentation of OpenType shaping behavior, https://github.com/n8willis/opentype-shaping-documents/tree/master