の2つの記述戦略があり得ます。連綿化しがちなら原則行うこととし、 独立化しがちなら原則行わないこととするのが、当然、 記述の手間もデータ量も効率的となります。
[61] 連綿しがち、しないがちの違いは慣習によるところが大きいので、 どちらによるかは文字種 (の組み合わせ) によって決めるべきということなり、 結果両方の記述戦略が混在することとなります。
[62] 連綿するかしないかは文字種から完全に決まるわけではなく、
もあります。更に言えば、
も実は多いです。そこでフォントの制作者の裁量に委ねられたり、 マーク付け言語やワープロ・DTP ソフトウェアによる個別の指定でいちいち連綿するかしないか選べる機能が求められてきます。
[67] 具体的な記述方法として、
があって、多重で複雑な相互作用をもたらします。
[8] 用字系により、またフォントにより、 隣接する文字が互いに筆記体的に接続する形でレンダリングされることがあります。 アラビア文字ではほぼすべてのフォントで行われます。 ラテン文字では手書き風のフォントで行われることがあります。 >>7
[9] この筆記体的な接続は、 接続する形になった2つの文字のグリフを選んで組み合わせる場合のほかに、 2つの文字が一緒になったグリフを選んで使う場合があります。 (後者を合字と呼び、 筆記体的なフォントでもそうでないフォントでも起こり得ます。) 言語によっては音節をまたいで合字を使わないといった規則があるので、 合字を使うかどうかは必ずしも機械的に決められません。 >>7
[10] 次の場合のように、 著者がこのグリフの接続や合字の利用を制御したいことがあります。 >>7
[15]
U+200C
ZERO WIDTH NON-JOINER
(ZWNJ
)
と
U+200D
ZERO WIDTH JOINER
(ZWJ
)
は、
文字間の接続をより増減せしめるものです。
接続には、
単純な筆記体的な接続も、
合字の利用も含みます。
>>7
ZWJ
は、
可能なら、
隣接した文字との間に通常よりも接続されたレンダリングを生成するよう求めるものです。ZWNJ
は、
筆記体的な接続や合字を切断することを求めるものです。
ZWJ
と逆の要領で、
合字よりも2つの別のグリフ、
接続する形より接続しない形のグリフを、
可能なら使うよう求めます。[29]
ZWJ
,
ZWNJ
による筆記体的な接続の制御は、
文脈に依存してグリフを選択する処理に介入するというよりは、
グリフ選択のための文脈を変更する文字であると解されています。
>>7
例えば
<「次が同種の文字なら語中形、そうでないなら語末形」の文字, U+0020
>
という列の最初の文字は語末形が選択されることになりますが、
<「次が同種の文字なら語中形、そうでないなら語末形」の文字, ZWJ
, U+0020
>
のように
“みなし「同種の文字」”
である
ZWJ
を挿入すると語中形が選択されるという具合です。
[36]
OpenType
や
AAT
のような近代フォント技術では、
フォント開発者は
ZWJ
を適宜合字写像表に追加するべきです。
(例えば f
+ i
の写像を持つ場合には、
f
+ ZWJ
+ i
の写像をも追加するべきです。)
逆に
ZWNJ
は通常特に何もしなくても望む効果が得られます。
>>7
[37]
フォントは、
ZWJ
や
ZWNJ
(や他の format character)
自体には零幅の不可視のグリフを使うべきです。
>>7
[25]
2文字の間に
<
を挟むことで、
合字化を抑制し、
筆記体的に接続することは求めることができます。
>>7ZWJ
, ZWNJ
, ZWJ
>
[31]
後方互換性のため、
アラビア文字の間の
ZWJ
は、
<
のように機能します。
平文においてアラビア文字で合字を使うよう求める手段はありません。
>>7ZWJ
, ZWNJ
, ZWJ
>
[26]
<
のようにすれば、
前の文字は筆記体的な形、
後の文字は孤立形にすることを求められます。
>>7ZWJ
, ZWNJ
>
[35]
インド系文字では、
子音と virama の列の後に
ZWJ
を使うと、
子音の「半形」
を要求します。
ZWNJ
を使うと、
接続した形を分断することを要求するのであって、
通常は子音に明示的に virama を示すことになります。
その他特殊な用法があります。
>>7
[32]
特性
Joining_Type
= Transparent
の文字は、
筆記体的な接続に干渉するべきではありません。
これにはすべての
nonspacing mark
と、
ほとんどの
format control character
が含まれます。
>>7
[33]
従って、結合文字の有無は接続の有無に影響しません。
(ただし個別の事例で接続や合字化に結合文字の有無と種別を考慮することは認められています。
[34]
U+20DD
COMBINING ENCLOSING CICRLCE
のような囲み文字の結合文字までこれに含まれるので、
囲んだからといって前後の文字との接続が抑制されることにはなりません。
>>7
[43]
この性質が主な理由なのでしょうが、
ZWJ
,
ZWNJ
は定義上結合文字ではないにも関わらず、
結合文字列の定義では結合文字に準じるものとされています。
[44]
ZWJ
,
ZWNJ
は中置演算子のような機能を持ちますが、
結合文字列としては他の結合文字同様後置演算子的な性質を持ちます。
従って
ZWJ
,
ZWNJ
は直前の文字が語中形か語末形のどちらかを決定する
(および直後の文字の字形選択のための文脈を限定させる)
異体字セレクター的なものであると捉えることも出来ます。
[45] 文頭の
ZWJ
,
ZWNJ
は、欠陥結合文字列扱いになります。
[16]
ZWJ
,
ZWNJ
は、
平文で利用することを想定しています。
上位層プロトコルが合字化と筆記体の制御の機能を有しているときは、
使うべきではありません。
>>7
[17]
ZWJ
,
ZWNJ
はレンダリングシステムへの要望に過ぎず、
レンダリングシステムはこれを受けなくても構いません。
>>7
[18]
ZWJ
,
ZWNJ
は合字化や筆記体的な接続が必須または禁止となる例外的な場合の利用を想定しており、
必ず使うことを想定したものではありません。
通常の挙動を上書きしたいときのみ使うのがよいとされます。
>>7
[19]
ということで
Unicode
としてはいつ文字がつながり、
いつつながらないのかの挙動をほぼ実装依存としていて、
相互運用性は何も保証してくれません。
基本の状態が規定されていない上に、
ZWJ
,
ZWNJ
が挟まったときの状態も曖昧です。
アラビア文字のように原則的につながる文字が基本的につながることと、
ZWNJ
を入れるとつながらなくなることが
「可能性がかなり高い」
といえるくらいです (それすら断言できない)。
例えば「fi」がつながるか、つながらないかは何も言えません。
[27] 合字ではなく続け字の字形を連ねた時に、 2つの字形がただ並べられるだけなのか、 真に図形的に接続されるべきなのか、 Unicode は明記していません。 Unicode レベルでは記述できないと考えるべきでしょうか。 この2つの違いは普段は気づきにくいですが、 字間を空ける時や、 白抜き文字化する時などに違いがでてきます。
[46] IDS 内部では構文的に利用できません。 IDS の前後には挿入できますが、 どう機能するべきかは明らかではありません。
[38]
ZWNJ
,
ZWJ
は、
format control character
であるため、
テキスト内容を分析する処理、
例えば綴検査器や検索操作では、
一致の検査にあたって除去するのが普通です。
例外として、
インド系文字など一部用字系では、
正書法的に意味のある用法があるため、
無条件に除去するわけにはいきません。
>>7
[39]
このテキスト処理に関する要件も、
マーク付け言語など上位層プロトコルで扱うべきという要件も、
ラテン文字の
fi
の合字に代表されるような装飾的な性質の強い合字・接続の制御を念頭に置いたものだったのでしょう。
その場合は確かに無視する方が処理しやすいですし、
テキストデータそのものというよりはスタイルに関わる付加情報として分離するべきという考え方ももっともなものです。
インド系文字の記述のような、
通常の文字列の表示に必須なものまで同じ文字で制御することにしたせいで、
事情はそう簡単ではなくなってしまいました。
[40] IDNA の文脈的規則などはこれが原因でプロトコルが過剰に複雑化した事例です。
[30]
イランの文字コード規格の
ISIRI 3342
は、
ZWNJ
,
ZWJ
に相当するものを
“pseudo space”,
“pseudo connection”
としていました。
>>7
[47]
paired stateful controls である非推奨書式文字の
character shaping selector format characters
は、
Arabic presentation forms
(例えば U+FE80
- U+FEFC
)
と併用し、
表現過程にあって特定の
letter form
同士を筆記体的に接続したり合字化したりして連結する際に、
この文字字形決定 (グリフ選択)
過程を有効にするか否かを示すものです。
>>48
U+206C
INHIBIT ARABIC FORM SHAPING
は、
それ以後、
文字字形決定過程を抑制するべき (inhibited)、
該当する字形変形は行わずに表現するべきことを表します。
>>48U+206D
ACTIVATE ARABIC FORM SHAPING
は、
それ以後、
該当する字形変形を行って表現するべきことを表します。
>>48[50] 状態は inhibited か否かの2つです。 入れ子にして使うことはできません。 >>48
[51] 未使用の場合の既定の状態は、 inhibited です。 >>48 上位層プロトコルで上書きできます。
[55]
これらの文字は状態を切り替えるもので、
前後の文字に作用する
ZWJ
,
ZWNJ
とは仕組みが大きく異なります。
直前の文字に作用する結合文字、異体字セレクターとも異なります。
numeric shape selector format characters
とは似ています。
[54] これらの文字は、 非推奨であり、避けるべきです。 >>48
[53] この指定は通常のアラビア文字 U+0600
- U+06FF
には適用されず、それらは常にグリフ選択の対象となります。
>>48
[77]
calt
は、
Contextual Alternates
とされています。
>>73
[79] 特定の状況で既定グリフをよりよい joining behavior を提供する代替形に置き換えます。 >>73
[82] 任意選択で cursive style を持つ用字系で使えます。 >>73
[80] 一部または全部のグリフが join するよう設計されている script typefaces (用字系の書体) で使います。 >>73
[83]
GSUB
lookupType
6
が推奨されています。
>>73
[76] 約物前後のアキをcaltで調整するWebフォント: mottainaiDTP ( ()) http://mottainaidtp.seesaa.net/article/438438962.html
[75] GitHub - monokano/Fonts: Webフォント約味/Webフォント約猫, https://github.com/monokano/Fonts
[84]
フォント機能
curs
は
Cursive Positioning
とされています。
>>73
[85]
curs
は
cursive connection のため隣接グリフを位置付けするために使います。
>>73
[87] 常に適用されるべきです。 通常は利用者が適用可否を選択できるべきではありません。 >>73
[86]
GPOS
lookupType
3 が推奨されています。
>>73
それ以外の GPOS
や GSUB
が禁止されているわけではありません。
[88] アラビア文字その他の cursively connecting script が主に想定されており、 その他の任意選択で cursive style が使える用字系でも使えます。 >>73
[58] タグ文字を character joining に影響する指定に使える可能性があるとされていました。
[1] 米国でも筆記体は衰退の危機 ? - スラッシュドット・ジャパン ( 版) http://slashdot.jp/article.pl?sid=09/07/28/0416221
[2] 【おそロシア】ロシア人「ロシアの筆記体?普通に読めるよ?」(追記あり) - Togetterまとめ ( 版) http://togetter.com/li/783934
[4] 連綿体 - Wikipedia () https://ja.wikipedia.org/wiki/%E9%80%A3%E7%B6%BF%E4%BD%93
[5] よくあるご質問, , https://web.archive.org/web/20110128042151/http://www.nec.co.jp/bungo/10info/support/2011.html
[6] IKれんめんちっく | かなフリーフォントのダウンロード | dwuk () https://www.dwuk.jp/font/ikrenmenchic/
[72] https://ompu.repo.nii.ac.jp/record/8/files/04_masuya.pdf
<
によって合字化は抑制しつつ接続はさせることができますが、 つまりこの場合のZWJ
,ZWNJ
,ZWJ
>ZWNJ
で接続を完全に切断してしまっては都合が悪いことになります。