[FIG(short list)[ [3] [[続け字]]
- [[合字]]
- [CODE(charname)@en[ZWJ]]
- [CODE(charname)@en[ZWNJ]]
]FIG]

* 仕様書

[REFS[
- [7] [CITE[The Unicode Standard, Version 13.0 - ch23.pdf]], [TIME[2020-03-09T17:53:52.000Z]], [TIME[2020-12-12T09:09:59.629Z]] <https://www.unicode.org/versions/latest/ch23.pdf#G23126>
- [48] [CITE[The Unicode Standard, Version 13.0 - ch23.pdf]], [TIME[2020-03-09T17:53:52.000Z]], [TIME[2020-12-13T09:35:29.457Z]] <https://www.unicode.org/versions/latest/ch23.pdf#G19593>

]REFS]

* 連綿の記述

[57] [[合字]]化、[[連綿]]化は、

- [59] 原則として行われることとし、行われない時に明記する
- [60] 原則として行われないこととし、行われる時に明記する

の2つの記述戦略があり得ます。[[連綿]]化しがちなら原則行うこととし、
独立化しがちなら原則行わないこととするのが、当然、
記述の手間もデータ量も効率的となります。

[61] 
[[連綿]]しがち、しないがちの違いは慣習によるところが大きいので、
どちらによるかは[[文字種]] (の組み合わせ) によって決めるべきということなり、
結果両方の記述戦略が混在することとなります。


[62] 
[[連綿]]するかしないかは[[文字種]]から完全に決まるわけではなく、

- [63] [[言語]]、[[方言]]、時代等の慣習的[[位相]]や準拠[[正書法]]の違いで変わる場合
- [64] [[書体]]の選択によって変わる場合
- [65] その場の流れや個人的嗜好で変わる場合

もあります。更に言えば、

- [66] [[連綿]]するかしないかにこれといった判断基準がない場合

も実は多いです。そこで[[フォント]]の制作者の裁量に委ねられたり、
[[マーク付け言語]]や[[ワープロ]]・[[DTP]] ソフトウェアによる個別の指定でいちいち[[連綿]]するかしないか選べる機能が求められてきます。

[67] 
具体的な記述方法として、 

- [68] [CODE(chraname)@en[ZWJ]] など[[文字コード]]層の機構によるもの
- [69] [CODE[GSUB]] など[[フォント]]層の機構によるもの
- [70] [[マーク付け言語]]等[[文書形式]]や[[スタイル言語]]の機構によるもの

があって、多重で複雑な[[相互作用]]をもたらします。


[FIG(short list)[ [71] [[合字]]化、[[連綿]]の記述

- [CODE(charname)@en[ZWJ]]
- [CODE(charname)@en[ZWNJ]]
- [CODE[liga]]
- [CODE[clig]]
- [CODE[rlig]]
- [[[CODE[rb]] (コーパス)]]

]FIG]


* Unicode における続け字

[8] 
[[用字系]]により、また[[フォント]]により、
隣接する[[文字]]が互いに[RUBYB[筆記体的に接続する][cursively join]]形で[[レンダリング]]されることがあります。
[[アラビア文字]]ではほぼすべての[[フォント]]で行われます。
[[ラテン文字]]では[[手書き]]風の[[フォント]]で行われることがあります。
[SRC[>>7]]

[9] 
この筆記体的な接続は、
接続する形になった2つの[[文字]]の[[グリフ]]を選んで組み合わせる場合のほかに、
2つの[[文字]]が一緒になった[[グリフ]]を選んで使う場合があります。
(後者を[RUBYB[[[合字]]][ligature]]と呼び、
[[筆記体]]的な[[フォント]]でもそうでない[[フォント]]でも起こり得ます。)
[[言語]]によっては[[音節]]をまたいで[[合字]]を使わないといった規則があるので、
[[合字]]を使うかどうかは必ずしも機械的に決められません。
[SRC[>>7]]

[10] 
次の場合のように、
[[著者]]がこの[[グリフ]]の接続や[[合字]]の利用を制御したいことがあります。
[SRC[>>7]]

- [11] 既定とは違う[RUBYB[連結の表示][joining appearance]]が必要な場合。
例えば[[アラビア文字]]の[[ペルシャ語]]の表記には時にこれが必須となる。
- [12] [RUBYB[連結した異体字][joining-variant glyph]]を単独で示したい場合。
- [13] 通常は[[合字]]化しないところで[[合字]]を使いたい場合。
- [14] 通常は[[合字]]化するところで[[合字]]を使いたくない場合。

-*-*-

[15] 
[CODE[U+200C]] [CODE(charname)@en[ZERO WIDTH NON-JOINER]] ([CODE(charname)@en[ZWNJ]])
と
[CODE[U+200D]] [CODE(charname)@en[ZERO WIDTH JOINER]] ([CODE(charname)@en[ZWJ]])
は、
[[文字]]間の[RUBYB[接続][connection]]をより増減せしめるものです。
接続には、
単純な[RUBYB[筆記体的な接続][cursive link]]も、
[[合字]]の利用も含みます。
[SRC[>>7]]

- [20] 
[CODE(charname)@en[ZWJ]]
は、
可能なら、
隣接した[[文字]]との間に通常よりも[RUBYB[接続された][connected]]レンダリングを生成するよう求めるものです。
-- [21] 
2文字が[[合字]]化できるものであって、
通常は[[合字]]化しない場合には、
[[合字]]を使うことを求めます。
-- [22] 
それ以外で、
一方の[[文字]]が[RUBYB[筆記体的に接続][cursively connect]]できるものであって、
通常はそうしない場合、
各[[文字]]を[RUBYB[筆記体的に接続した形][cursive-connection form]]にすることを求めます。
一方に筆記体的な形があって他方には無い場合でも、ある方だけはそれを使うよう求めます。
-- [23] 
それ以外の場合、効果を持ちません。
通常の形が使われます。
- [24] 
[CODE(charname)@en[ZWNJ]]
は、
筆記体的な接続や[[合字]]を切断することを求めるものです。
[CODE(charname)@en[ZWJ]]
と逆の要領で、
[[合字]]よりも2つの別の[[グリフ]]、
接続する形より接続しない形の[[グリフ]]を、
可能なら使うよう求めます。

[29] 
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
による筆記体的な接続の制御は、
文脈に依存して[[グリフ]]を選択する処理に介入するというよりは、
[[グリフ]]選択のための文脈を変更する[[文字]]であると解されています。
[SRC[>>7]]
例えば
<「次が同種の文字なら語中形、そうでないなら語末形」の文字, [CODE[U+0020]]>
という列の最初の文字は語末形が選択されることになりますが、
<「次が同種の文字なら語中形、そうでないなら語末形」の文字, [CODE(charname)@en[ZWJ]], [CODE[U+0020]]>
のように
“みなし「同種の文字」”
である
[CODE(charname)@en[ZWJ]]
を挿入すると語中形が選択されるという具合です。

[36] 
[[OpenType]]
や
[[AAT]]
のような近代フォント技術では、
フォント開発者は
[CODE(charname)@en[ZWJ]]
を適宜[[合字]]写像表に追加する[RUBYB[べき][should]]です。
(例えば [CODE[f]] + [CODE[i]]
の写像を持つ場合には、
[CODE[f]] + [CODE(charname)@en[ZWJ]] + [CODE[i]]
の写像をも追加するべきです。)
逆に
[CODE(charname)@en[ZWNJ]]
は通常特に何もしなくても望む効果が得られます。
[SRAC[>>7]]

[37] 
[[フォント]]は、
[CODE(charname)@en[ZWJ]]
や
[CODE(charname)@en[ZWNJ]]
(や他の [[format character]])
自体には[[零幅]]の不可視の[[グリフ]]を使うべきです。
[SRC[>>7]]



[25] 
2文字の間に 
[CODE[<[CODE(charname)@en[ZWJ]], [CODE(charname)@en[ZWNJ]], [CODE(charname)@en[ZWJ]]>]]
を挟むことで、
[[合字]]化を抑制し、
筆記体的に接続することは求めることができます。
[SRC[>>7]]

[31] 
[[後方互換性]]のため、
[[アラビア文字]]の間の
[CODE(charname)@en[ZWJ]]
は、
[CODE[<[CODE(charname)@en[ZWJ]], [CODE(charname)@en[ZWNJ]], [CODE(charname)@en[ZWJ]]>]]
のように機能します。
[[平文]]において[[アラビア文字]]で[[合字]]を使うよう求める手段はありません。
[SRC[>>7]]



[26] 
[CODE[<[CODE(charname)@en[ZWJ]], [CODE(charname)@en[ZWNJ]]>]]
のようにすれば、
前の[[文字]]は筆記体的な形、
後の[[文字]]は孤立形にすることを求められます。
[SRC[>>7]]


[35] 
[[インド系文字]]では、
[[子音]]と [[virama]] の列の後に
[CODE(charname)@en[ZWJ]]
を使うと、
[[子音]]の「[RUBYB[半形][half-form]]」
を要求します。
[CODE(charname)@en[ZWNJ]]
を使うと、
[RUBYB[接続した形][conjunct formation]]を分断することを要求するのであって、
通常は[[子音]]に明示的に [[virama]] を示すことになります。
その他特殊な用法があります。
[SRC[>>7]]

-*-*-

[32] 
[[特性][文字特性]]
[CODE[Joining_Type]] = [CODE[Transparent]]
の[[文字]]は、
筆記体的な接続に干渉する[RUBYB[べきではありません][should not]]。
これにはすべての
[[nonspacing mark]]
と、
ほとんどの
[[format control character]]
が含まれます。
[SRC[>>7]]

[33] 
従って、[[結合文字]]の有無は接続の有無に影響しません。
(ただし個別の事例で接続や[[合字]]化に[[結合文字]]の有無と種別を考慮することは認められています。 [SEE[ [[結合文字]] ]])

[34] 
[CODE[U+20DD]] [CODE(charname)@en[COMBINING ENCLOSING CICRLCE]]
のような[[囲み文字]]の[[結合文字]]までこれに含まれるので、
囲んだからといって前後の[[文字]]との接続が抑制されることにはなりません。
[SRC[>>7]]

[43] 
この性質が主な理由なのでしょうが、
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は定義上[[結合文字]]ではないにも関わらず、
[[結合文字列]]の定義では[[結合文字]]に準じるものとされています。
[SEE[ [[結合文字]] ]]
[[書記素クラスター]] (や[[カーソル]]位置の決定)
でも[[結合文字]]と似たような挙動を示します。

[44] 
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は[[中置演算子]]のような機能を持ちますが、
[[結合文字列]]としては他の[[結合文字]]同様[[後置演算子]]的な性質を持ちます。
従って
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は直前の[[文字]]が[[語中形]]か[[語末形]]のどちらかを決定する
(および直後の[[文字]]の字形選択のための文脈を限定させる)
[[異体字セレクター]]的なものであると捉えることも出来ます。

[45] 文頭の
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は、[[欠陥結合文字列]]扱いになります。
[SEE[ [[欠陥結合文字列]] ]]


[REFS[
- [41] 
[CODE[Joining_Type]] = [CODE[Transparent]]
の文字一覧
<https://chars.suikawiki.org/set/%24unicode%3AJoining_Type%3ATransparent>
- [42] 
[CODE[Joining_Type]] = [CODE[Transparent]]
な、[[結合文字]]以外の文字一覧
<https://chars.suikawiki.org/set?expr=%24unicode%3AJoining_Type%3ATransparent+-+%24unicode%3AM>
]REFS]

-*-*-

[16] 
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は、
[[平文]]で利用することを想定しています。
[[上位層プロトコル]]が[[合字]]化と[RUBYB[筆記体][cursive]]の制御の機能を有しているときは、
使う[RUBYB[べきではありません][should not]]。
[SRC[>>7]]

[17] 
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は[[レンダリング]]システムへの要望に過ぎず、
[[レンダリング]]システムはこれを受けなくても構いません。
[SRC[>>7]]

[18] 
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
は[[合字]]化や筆記体的な接続が必須または禁止となる例外的な場合の利用を想定しており、
必ず使うことを想定したものではありません。
通常の挙動を上書きしたいときのみ使うのがよいとされます。
[SRC[>>7]]

[19] 
ということで
[[Unicode]]
としてはいつ[[文字]]がつながり、
いつつながらないのかの挙動をほぼ実装依存としていて、
[[相互運用性]]は何も保証してくれません。
基本の状態が規定されていない上に、
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
が挟まったときの状態も曖昧です。

[[アラビア文字]]のように原則的につながる[[文字]]が基本的につながることと、
[CODE(charname)@en[ZWNJ]]
を入れるとつながらなくなることが
「可能性がかなり高い」
といえるくらいです (それすら断言できない)。
例えば「fi」がつながるか、つながらないかは何も言えません。

[27] 
[[合字]]ではなく続け字の字形を連ねた時に、
2つの字形がただ並べられるだけなのか、
真に図形的に接続されるべきなのか、
[[Unicode]]
は明記していません。
[[Unicode]]
レベルでは記述できないと考えるべきでしょうか。
この2つの違いは普段は気づきにくいですが、
[[字間]]を空ける時や、
[[白抜き文字]]化する時などに違いがでてきます。

;;
[28] 
[CODE[<[CODE(charname)@en[ZWJ]], [CODE(charname)@en[ZWNJ]], [CODE(charname)@en[ZWJ]]>]]
によって[[合字]]化は抑制しつつ接続はさせることができますが、
つまりこの場合の
[CODE(charname)@en[ZWNJ]]
で接続を完全に切断してしまっては都合が悪いことになります。

[46] 
[[IDS]] 内部では構文的に利用できません。
[[IDS]] の前後には挿入できますが、
どう機能するべきかは明らかではありません。

-*-*-

[38] 
[CODE(charname)@en[ZWNJ]],
[CODE(charname)@en[ZWJ]]
は、
[[format control character]]
であるため、
テキスト内容を分析する処理、
例えば[[綴検査器]]や[[検索]]操作では、
[[一致]]の検査にあたって除去するのが普通です。
例外として、
[[インド系文字]]など一部[[用字系]]では、
[[正書法]]的に意味のある用法があるため、
無条件に除去するわけにはいきません。
[SRC[>>7]]


[39] 
このテキスト処理に関する要件も、
[[マーク付け言語]]など[[上位層プロトコル]]で扱うべきという要件も、
[[ラテン文字]]の
[CODE[fi]]
の[[合字]]に代表されるような装飾的な性質の強い[[合字]]・接続の制御を念頭に置いたものだったのでしょう。
その場合は確かに無視する方が処理しやすいですし、
テキストデータそのものというよりはスタイルに関わる付加情報として分離するべきという考え方ももっともなものです。
[[インド系文字]]の記述のような、
通常の文字列の表示に必須なものまで同じ[[文字]]で制御することにしたせいで、
事情はそう簡単ではなくなってしまいました。


[40] 
[[IDNA]]
の[[文脈的規則]]などはこれが原因でプロトコルが過剰に複雑化した事例です。

-*-*-

[30] 
[[イラン]]の[[文字コード]]規格の
[[ISIRI 3342]]
は、
[CODE(charname)@en[ZWNJ]],
[CODE(charname)@en[ZWJ]]
に相当するものを
“pseudo space”,
“pseudo connection”
としていました。
[SRC[>>7]]

** character shaping selector format characters

[47] 
[[paired stateful controls]] である[[非推奨書式文字]]の
[DFN[character shaping selector format characters]]
は、
[[Arabic presentation forms]]
(例えば [CODE[U+FE80]] - [CODE[U+FEFC]])
と併用し、
[RUBYB[表現][presentation]]過程にあって特定の 
[[letter form]]
同士を[RUBYB[筆記体的に接続][cursive connection]]したり[[合字]]化したりして連結する際に、
この[RUBYB[文字字形決定][character shape determination]] ([RUBYB[グリフ選択][glyph selection]])
過程を有効にするか否かを示すものです。
[SRC[>>48]]

- [49] 
[DFN[[CODE[U+206C]]]] [DFN[[CODE(charname)@en[INHIBIT ARABIC FORM SHAPING]]]]
は、
それ以後、
文字字形決定過程を抑制するべき ([DFN[inhibited]])、
該当する[RUBYB[字形変形][shape modification]]は行わずに表現するべきことを表します。
[SRC[>>48]]
- [52] 
[DFN[[CODE[U+206D]]]] [DFN[[CODE(charname)@en[ACTIVATE ARABIC FORM SHAPING]]]]
は、
それ以後、
該当する字形変形を行って表現するべきことを表します。
[SRC[>>48]]

[50] 
状態は [[inhibited]] か否かの2つです。 
[[入れ子]]にして使うことはできません。
[SRC[>>48]]

[51] 
未使用の場合の既定の状態は、 [[inhibited]] です。 
[SRC[>>48]]
[[上位層プロトコル]]で上書きできます。 

[55] 
これらの[[文字]]は状態を切り替えるもので、
前後の[[文字]]に作用する
[CODE(charname)@en[ZWJ]],
[CODE(charname)@en[ZWNJ]]
とは仕組みが大きく異なります。
直前の[[文字]]に作用する[[結合文字]]、[[異体字セレクター]]とも異なります。
[[numeric shape selector format characters]]
とは似ています。


[54] これらの[[文字]]は、
[[[RUBYB[非推奨][deprecated]]であり、避ける[RUBYB[べき][should]]][Unicodeの非推奨の文字]]です。
[SRC[>>48]]


[53] この指定は通常の[[アラビア文字]] [CODE[U+0600]] - [CODE[U+06FF]]
には適用されず、それらは常にグリフ選択の対象となります。
[SRC[>>48]]


[REFS[
- [56] [[character shaping selector]] 文字の一覧
<https://chars.suikawiki.org/set/%24unicode%3Acharacter-shaping-selectors>
]REFS]

* フォント機能


[77] 
[DFN[[CODE[calt]]]]
は、
Contextual Alternates
とされています。
[SRC[>>73]]

[79] 
[RUBYB[特定の状況][specified situations]]で既定グリフをよりよい joining behavior
を提供する[RUBYB[代替形][alternate forms]]に置き換えます。
[SRC[>>73]]

[82] 
[RUBYB[任意選択][optional]]で cursive style を持つ[[用字系]]で使えます。
[SRC[>>73]]

[80] 
一部または全部の[[グリフ]]が join するよう設計されている script typefaces
([[用字系]]の[[書体]]) で使います。
[SRC[>>73]]

[81] 
既定の状態で有効にする[RUBYB[べき][should]]です。
[SRC[>>73]]

[83] 
[CODE[GSUB]] [F[[CODE[lookupType]]]] [N[6]]
が[RUBYB[[[推奨]]][recommended]]されています。
[SRC[>>73]]



[76] [CITE@ja[約物前後のアキをcaltで調整するWebフォント: mottainaiDTP]]
( ([TIME[2016-06-03 07:03:30 +09:00]]))
<http://mottainaidtp.seesaa.net/article/438438962.html>

[75] [CITE@en[GitHub - monokano/Fonts: Webフォント約味/Webフォント約猫]], [TIME[2023-05-24T11:51:44.000Z]] <https://github.com/monokano/Fonts>

[74] 
[[BabelStone Han]]

[78] 
関連: [[*alt]]

-*-*-

[84] 
[[フォント機能]]
[DFN[[CODE[curs]]]]
は
Cursive Positioning
とされています。
[SRC[>>73]]

[85] 
[CODE[curs]]
は
cursive connection のため隣接[[グリフ]]を[RUBYB[位置付け][position]]するために使います。
[SRC[>>73]]

[87]
常に適用される[RUBYB[べきです][should]]。
通常は[[利用者]]が適用可否を選択できる[RUBYB[べきではありません][should not]]。
[SRC[>>73]]

[86] 
[CODE[GPOS]] [F[[CODE[lookupType]]]] [N[3]] が[RUBYB[[[推奨]]][recommended]]されています。
[SRC[>>73]]
それ以外の [CODE[GPOS]] や [CODE[GSUB]] が禁止されているわけではありません。

[88] 
[[アラビア文字]]その他の cursively connecting script が主に想定されており、
その他の[RUBYB[任意選択][optionally]]で cursive style
が使える[[用字系]]でも使えます。
[SRC[>>73]]



[REFS[

- [73] 
[CITE@en-us[Registered features, a-e (OpenType 1.9.1) - Typography | [[Microsoft Learn]]]], [[PeterCon]], [TIME[2024-07-07T00:58:54.000Z]], [TIME[2024-12-04T11:36:49.309Z]] <https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae>

]REFS]


* 言語


[HISTORY[
[58] [[タグ文字]]を
[[character joining]]
に影響する指定に使える可能性があるとされていました。
]HISTORY]


* 関連


[SEE[ [[組み合わせて使う文字]] ]]

* メモ

[1] [CITE@ja[米国でも筆記体は衰退の危機 ? - スラッシュドット・ジャパン]]
([TIME[2009-07-29 08:19:58 +09:00]] 版)
<http://slashdot.jp/article.pl?sid=09/07/28/0416221>

[2] [CITE@ja[【おそロシア】ロシア人「ロシアの筆記体?普通に読めるよ?」(追記あり) - Togetterまとめ]]
([TIME[2015-02-17 19:50:24 +09:00]] 版)
<http://togetter.com/li/783934>

[4] [CITE@ja[連綿体 - Wikipedia]]
([TIME[2019-07-16 10:30:15 +09:00]])
<https://ja.wikipedia.org/wiki/%E9%80%A3%E7%B6%BF%E4%BD%93>

[5] [CITE[よくあるご質問]], [TIME[2020-10-25T06:45:37.000Z]], [TIME[2011-01-28T04:23:18.962Z]] <https://web.archive.org/web/20110128042151/http://www.nec.co.jp/bungo/10info/support/2011.html>

[6] [CITE@ja[IKれんめんちっく | かなフリーフォントのダウンロード | dwuk]]
([TIME[2020-11-07T10:49:29.000Z]])
<https://www.dwuk.jp/font/ikrenmenchic/>

[72] 
[TIME[2024-02-07T11:44:24.700Z]]
<https://ompu.repo.nii.ac.jp/record/8/files/04_masuya.pdf>

