<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><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 glyph processing (part 1) - Typography | Microsoft Docs</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">alib-ms</anchor>, <time>2022-08-27T04:06:55.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">https://docs.microsoft.com/ja-jp/typography/develop/processing-part1</anchor-external></p><blockquote><p>A run is normally a maximum of one line in length and consists of a text string formatted in a single font at a particular size, in a single direction, in a particular script and a particular language system.</p></blockquote><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:">OTLS</anchor> の処理モデルでは</p><ul><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>変更</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>変更</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">言語系</anchor>変更</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">書字方向</anchor>変更</li><li><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">行末</anchor></li></ul><p>... が<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="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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="ja-jp">OpenType development (LEGACY INFORMATION) - 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:">nihar</anchor>, <time>2022-08-27T07:16:20.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#unicode-script-processor">https://docs.microsoft.com/ja-jp/typography/develop/otdevinfo#unicode-script-processor</anchor-external></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:">Uniscribe</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping engine</anchor> によって<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>を</p><ul><li><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>項目</anchor>群<rt xmlns="http://www.w3.org/1999/xhtml">items</rt></rubyb> - <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></li><li><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>連なり</anchor>群<rt xmlns="http://www.w3.org/1999/xhtml">runs</rt></rubyb> - 項目群のうち continuous formatting attribute を持つ部分</li><li><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>クラスター</anchor>群<rt xmlns="http://www.w3.org/1999/xhtml">clusters</rt></rubyb> - <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>定義の<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">分割できない<rt xmlns="http://www.w3.org/1999/xhtml">indivisible</rt></rubyb>文字を<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">群化<rt xmlns="http://www.w3.org/1999/xhtml">grouping</rt></rubyb>したもの</li></ul><p>に分割します。<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><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:">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>)
は自身の持つ formatting attribute と、
<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>を構築します。
<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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</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:">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:">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>がそう見なすとは限らないということになりますね。</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:">クラスター</anchor>については <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">shaping engine</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-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> には</p><blockquote><p>Obviously, in many documents, the majority of consecutive runs of text will simply equate to individual lines. In multilingual documents, however, a client may need to be able to identify and tag a number of runs within a single line of text. </p></blockquote><p>と書いてあって、著者は専門家だろうに<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>ことがわかります。混在しないのが「many documents」でそれ以外が
「multilingual documents」なのですから。
この直後で <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bidi</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>を混在させるだけで
runs になってしまう、という<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>。</p><p>詳しくない一般欧米人の認識ならともかく、専門家が詳しくない人に解説するチュートリアルにこんなこと書いてるのはよくない。</p><p><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> 
これを読んだ欧米人開発者が、ああそうなんだ多言語文書なんて滅多にないし、
a run = a line になるケースに最適化して他はパフォーマンスが落ちても仕方ないよね、
みたいな認識で設計したらどうするんか。</p><p><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>も参照。</p><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> <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="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:">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:">Unicode用字系特性値</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>Unicode用字系特性値</anchor> </sw-see></p><hr></hr><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="159" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[159]</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>に分割してから処理されるために、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">用字系</anchor>が違うと
<code>GSUB</code>
が適用されないことがあるようです。</p><ul><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>23073-irgn2581-fdbk.pdf</cite>, <time>2023-03-23T16:06:03.000Z</time>, <time>2023-07-13T08:24:27.947Z</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://www.unicode.org/L2/L2023/23073-irgn2581-fdbk.pdf#page=2">https://www.unicode.org/L2/L2023/23073-irgn2581-fdbk.pdf#page=2</anchor-external></li></ul><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-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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDS</anchor> を <code>GSUB</code> <code>ccmp</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:">IDS</anchor> 参照)。しかし
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDS</anchor> が <code>Common</code> のため、
後続の <code>Hani</code>
と別<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="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <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> は</p><blockquote><p><snip xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"></snip> the feature under the DFLT script in the font
will NOT be applied to the sequences according to the specification. Of course you
can rewrite a Shaping Engine to support the features cross the different script properties,
but that actually violates the rule, and lack of standardization.</p></blockquote><p>と書いてますけど、それがどの仕様書のどこに書いてある規則だとは教えてくれない...</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:">IDC</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> の仕様なのだから、それを無視して<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:">shaping</anchor> の仕様(というものがどこかにあるとして)の方が間違っているような。</p><p><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> 
<code>Common</code> で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">前置演算子</anchor>的に機能するものって <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IDC</anchor> 以外にもあるのだろうか?</p><hr></hr><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:">HTML</anchor> / <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> + <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSS</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>の決め方の相互作用にも注意が必要です。</p><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> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Uniscribe</anchor> モデル的には formtting attribute でこれを実現するのでしょうか。</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:">連なり</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:"> <code xmlns="http://www.w3.org/1999/xhtml">SVG </code> </sw-see></p></body></html>