<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1>OpenType と shaping</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType Layout</anchor> では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>から探索する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>や適用するべき<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機能<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">フォント機能</title></anchor>を決定するという想定になっています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;13</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType</anchor> で扱うのは<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">低水準<rt xmlns="http://www.w3.org/1999/xhtml">low-level</rt></rubyb>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機能<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">フォント機能</title></anchor>だけで、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> の詳細は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">仕様書</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">適用範囲外</anchor>とされています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;13</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType</anchor> は多数の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機能<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">フォント機能</title></anchor>を利用可能としていますが、
それら (の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookup</anchor>) は同時適用もできますし、分けて適用もできます。
どの機能 (の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookup</anchor>) をどのタイミングで適用するか、
その適用と適用の合間に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>列を入れ替える等の操作をするかは、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType</anchor> 仕様としては定めない
(が多くの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>ではそのような操作が必要となる)、
とされています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>ファイルに格納されるのは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> された結果から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>への対応関係なので、
外部から与えられた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode文字列</anchor>から <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> された結果への変換方法
(つまり <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> の方法) が決められないことには<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性</anchor>は保証されないと言わざるを得ません。
つまり <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType</anchor> 仕様は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性</anchor>を半ば放棄しているようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType Layout</anchor> 
では特定の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>固有の情報を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機能<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">フォント機能</title></anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">lookup</anchor>
として格納し、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>の共通の情報は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>に入れずに実装側で持つ、
としています。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;19</anchor-internal></src> 
妥当な設計方針でしょう。問題はそれが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字のレンダリング</anchor>の実装にも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>開発にも必須の情報なのに仕様外とされていることです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Windows</anchor> は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Uniscribe</anchor> で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> を実装しています。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Uniscribe</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">独占ソフトウェア</anchor>ですが、その処理の概要は公式サイトに載っていますし、
おおむね <cite>The Unicode Standard</cite> に従っているようなことが書かれています。
その情報と実在の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>ファイル、それに <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Windows</anchor>
その他の実装から挙動を推測するしかありません。</p><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<cite xml:lang="ja-jp">OpenType specification overview (OpenType 1.9) - Typography | <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Microsoft</anchor> Docs</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PeterCon</anchor>, <time>2022-08-27T13:06:23.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.microsoft.com/ja-jp/typography/opentype/spec/overview">https://docs.microsoft.com/ja-jp/typography/opentype/spec/overview</anchor-external></li><li>
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> <cite xml:lang="ja-jp">OpenType layout common table formats (OpenType 1.9) - Typography | <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Microsoft</anchor> Docs</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PeterCon</anchor>, <time>2022-08-29T14:14:32.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.microsoft.com/ja-jp/typography/opentype/spec/chapter2#features-and-lookups">https://docs.microsoft.com/ja-jp/typography/opentype/spec/chapter2#features-and-lookups</anchor-external></li></ul></refs></section><section><h1>Uniscribe の処理モデル</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Uniscribe</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>ごとに <dfn>shaping engine</dfn>
を持っています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> また, 特別に対応していない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>用の
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OpenType Layout</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping engine</anchor> も持っています。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Uniscribe</anchor> は入力の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">項目</anchor>群, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">連なり</anchor>群, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クラスター</anchor>群の3階層に分割します。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>連なり</anchor> </sw-see></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クラスター</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>によって決まる、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>群の基本的な要素です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> でいう<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">書記素クラスター</anchor>に近い単位と思われますが、
同じかどうかは不明。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Uniscribe</anchor> は<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字の前処理<rt xmlns="http://www.w3.org/1999/xhtml">character preprocessing</rt></rubyb>も行います。
入力 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>) は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">論理順</anchor>になっていますが、
前処理で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>処理に都合の良い順序に並べ替えます。
具体的には <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> の規定によります。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src></p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 
例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基底文字</anchor>の左右に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">結合文字</anchor>が表示されるような場合でも
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> では必ず<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基底文字</anchor>が先になりますが、
ここで左、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基底文字</anchor>、右の順序に並べ替えたりすることがあります。</p></example><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> 
<code>GSUB</code> を駆使すれば文字前処理の並べ替えをしなくても<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>側で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">グリフ</anchor>決定をすべて行うこともできるのでしょうが、
それでは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>開発が大変になるようです。
文字前処理があるので<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>開発で複雑な条件をたくさん記述しなくてもよいのです
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src>。</p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> そのかわり <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Uniscribe</anchor> 相当の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> をしていなかった古い実装で
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> 前提の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>を使っても正しく表示されないのです。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 
結果得られた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode文字</anchor>の列が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OTLS</anchor> に渡されます。
適宜<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機能<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">フォント機能</title></anchor>を適用します。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;3</anchor-internal></src></p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> 
例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">アラビア文字</anchor>の場合は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">単語</anchor>の単位を検出して、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">語頭形</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">語中形</anchor>などを表す<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">機能<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">フォント機能</title></anchor>を各<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">クラスター</anchor>に適宜指定することになります。</p></example><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li>
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="ja-jp">OpenType development (LEGACY INFORMATION) - Typography | Microsoft Docs</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nihar</anchor>, <time>2022-08-27T06:22:28.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.microsoft.com/ja-jp/typography/develop/otdevinfo">https://docs.microsoft.com/ja-jp/typography/develop/otdevinfo</anchor-external></li><li>
<anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="ja-jp">OpenType glyph processing (part 1) - Typography | <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Microsoft</anchor> Docs</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">alib-ms</anchor>, <time>2022-08-27T07:59:48.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.microsoft.com/ja-jp/typography/develop/processing-part1#uniscribe">https://docs.microsoft.com/ja-jp/typography/develop/processing-part1#uniscribe</anchor-external></li></ul></refs></section><section><h1>用字系との関係</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>単位で実装されるようです。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>連なり</anchor> </sw-see></p></section><section><h1>歴史</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="58" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[58]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">タグ文字</anchor>による指定を
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">character shaping</anchor>
に影響する指定に使える可能性があるとされていました。</p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <cite>HarfBuzz Manual: HarfBuzz Manual</cite>, <time>2022-07-31T13:57:21.000Z</time>, <time>2022-08-28T13:56:02.521Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://harfbuzz.github.io/">https://harfbuzz.github.io/</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> <cite xml:lang="en">GitHub - harfbuzz/harfbuzzjs: Providing HarfBuzz shaping library for client/server side JavaScript projects</cite>, <time>2022-08-29T14:25:23.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/harfbuzz/harfbuzzjs">https://github.com/harfbuzz/harfbuzzjs</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <cite xml:lang="en">GitHub - prezi/harfbuzz-js: JavaScript port of the HarfBuzz OpenType text shaping engine</cite>, <time>2022-08-29T14:23:59.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/prezi/harfbuzz-js">https://github.com/prezi/harfbuzz-js</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> <cite xml:lang="en">GitHub - simoncozens/crowbar: A text shaping debugger</cite>, <time>2022-08-29T14:25:01.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/simoncozens/crowbar">https://github.com/simoncozens/crowbar</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> <cite xml:lang="en">Crowbar</cite>, <time>2022-07-22T22:05:22.000Z</time>, <time>2022-08-29T14:30:50.604Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.corvelsoftware.co.uk/crowbar/">http://www.corvelsoftware.co.uk/crowbar/</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> 
<cite xml:lang="en">GitHub - n8willis/opentype-shaping-documents: Documentation of OpenType shaping behavior</cite>, <time>2023-11-06T08:53:06.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/n8willis/opentype-shaping-documents/tree/master">https://github.com/n8willis/opentype-shaping-documents/tree/master</anchor-external></p></section></body></html>