[2] 
[[OpenType]] 
の[[機能][フォント機能]]では、
[[文字]] ([[グリフ]])
の体系は[DFN[[RUBYB[[RUBY[用][よう]][RUBY[字][じ]][RUBY[系][けい]]][script]]]]と[DFN[[RUBYB[[RUBY[言][げん]][RUBY[語][ご]][RUBY[系][けい]]][language system]]]]の2段階で識別されます。
[SRC[>>1]]

* 仕様書

[REFS[
-
[11] 
[CITE@ja-jp[Advanced typographic tables - OpenType Layout (OpenType 1.9) - Typography | [[Microsoft]] Docs]], [[PeterCon]], [TIME[2022-08-28T02:06:41.000Z]] <https://docs.microsoft.com/ja-jp/typography/opentype/spec/ttochap1#scripts>
-
[15] 
[CITE@ja-jp[Advanced typographic tables - OpenType Layout (OpenType 1.9) - Typography | [[Microsoft]] Docs]], [[PeterCon]], [TIME[2022-08-28T02:09:49.000Z]] <https://docs.microsoft.com/ja-jp/typography/opentype/spec/ttochap1#language-systems>
-
[18] 
[CITE@ja-jp[OpenType layout common table formats (OpenType 1.9) - Typography | [[Microsoft]] Docs]], [[PeterCon]], [TIME[2022-08-29T10:17:57.000Z]] <https://docs.microsoft.com/ja-jp/typography/opentype/spec/chapter2#script-list-table-and-script-record>
-
[28] 
[CITE@ja-jp[[[GPOS]] — Glyph Positioning Table (OpenType 1.9) - Typography | Microsoft Docs]], [[PeterCon]], [TIME[2022-09-07T06:10:12.000Z]] <https://docs.microsoft.com/ja-jp/typography/opentype/spec/gpos>
-
[33] 
[CITE@en-us[Script tags (OpenType 1.9.1) - Typography | [[Microsoft Learn]]]], [[PeterCon]], [TIME[2024-05-31T17:42:26.000Z]], [TIME[2024-12-03T06:35:39.344Z]] <https://learn.microsoft.com/en-us/typography/opentype/spec/scripttags>
-
[60] 
[CITE@en-us[Language system tags (OpenType 1.9.1) - Typography | [[Microsoft Learn]]]], [[PeterCon]], [TIME[2024-07-07T00:58:54.000Z]], [TIME[2024-12-03T07:08:48.561Z]] <https://learn.microsoft.com/en-us/typography/opentype/spec/languagetags>



]REFS]

* 用字系

[12] 
[DFN[[RUBYB[[RUBY[用][よう]][RUBY[字][じ]][RUBY[系][けい]]][script]]]]は、
関連する[[文字]]を集めたものです。
[[用字系]]は1つかいくつかの[[言語]]で使われるかもしれないものです。
[SRC[>>11]]

[13] 
[[フォント]]は1つの[[用字系]]にだけ対応することもできますし、
いくつもの[[用字系]]に対応することもできます。
[SRC[>>11]]

[14] 
[[OpenType Layout]] [[フォント]]においては、
[[用字系]]は[[タグ][OpenTypeタグ]]で識別されます。

** 既定用字系

[20] 
[CODE[GSUB]] [[表][OpenType表]]や
[CODE[GPOS]] [[表][OpenType表]]では[[用字系タグ]]に
[DFN[[CODE[DFLT]]]]
を指定できます。
[RUBYB[[[用字系]]特有][script-specific]]ではない[[機能][フォント機能]]を定義するために使います。
[SRC[>>18]]

[21] 
[[応用]]は、
対象[[テキスト]]の[[用字系]]についての[[用字系]]表が存在していない場合や、
対象[[テキスト]]が特定の[[用字系]]を持たないとき (例えば[[記号]]のみ含む場合)
に、
[CODE[DFLT]] [[用字系]]表を使う[RUBYB[べき][should]]です。
[SRC[>>18]]

;; [22] 
[[記号]]等の[[文字]]の [[UCD特性]]の[[用字系]]が [CODE[Common]] であるとしても、
必ずしも [CODE[DFLT]] を適用するべきとは限りません。
前後の[[文字]]の[[用字系]]でまとめて処理するのが効率的なら、
そうしても構いません [SRC[>>18]]。

;; [23] 
つまり[[文字]]やその[[連なり]]の[[用字系]]を決定する具体的な方法は
[[Unicode]] も [[OpenType]] も定めておらず、
[[実装依存]]になります。
[[相互運用性]]とは。


[24] 
[[OpenType]] は、[[言語]]は[[用字系]]を使って書かれるものだから 
[CODE[DFLT]] [[用字系]]には既定以外の[[言語系]]用の指定はある[RUBYB[べきではない][should not]]、
としつつも、そのような指定は認められるもので、
[[応用]]もそれに対応する[RUBYB[べき][should]]だとしています。
[SRC[>>18]]

;; [25] 
[[記号]]等が[[用字系]]に属すると判定されるかどうか不定なら、
[CODE[DFLT]] [[用字系]]の指定に従って処理される可能性があるわけですから、
[[フォント]]は[[相互運用性]]のため [CODE[DFLT]] [[用字系]]にも[[言語系]]依存の指定を含めておくべきということになる気がしますが。

** 注意を要するもの

[49] 
ほとんどは[[小文字]]4文字で構成されます。

[50] 
[CODE[DFLT]] のみ[[大文字]]が使われています。


[36] 
Bangla が [CODE[beng]], 	
Bangla v.2 が [CODE[bng2]]
のように、
「v.2」に別の[[用字系タグ]]が割り当てられたものがいくつかあります。
[SRC[>>33]]

- [37] [[Bangla]]: [CODE[beng]], [CODE[bng2]]
- [38] [[Devanagari]]: [CODE[deva]], [CODE[dev2]]
- [39] [[Gujarati]]: [CODE[gujr]], [CODE[gjr2]]
- [40] [[Gurmukhi]]: [CODE[guru]], [CODE[gur2]]
- [41] [[Kannada]]: [CODE[knda]], [CODE[knd2]]
- [42] [[Malayalam]]: [CODE[mlym]], [CODE[mlm2]]
- [43] [[Myanmar]]: [CODE[mymr]], [CODE[mym2]]
- [44] [[Odia]]: [CODE[orya]], [CODE[ory2]]
- [45] [[Tamil]]: [CODE[taml]], [CODE[tml2]]
- [46] [[Telugu]]: [CODE[telu]], [CODE[tel2]]

[47] 
このうち
[CODE[mymr]]
は[RUBYB[推奨されず][not recommended]]、
[[Myanmar]]
の [[Unicode]] 符号化に対応する[[フォント]]は
[CODE[mym2]]
を使う[RUBYB[べき][should]]とされます。
[SRC[>>33]]

;; [48] 他には特にそうした規定はありません。

[51] 
[CODE[lao ]],
[CODE[nko ]],
[CODE[vai ]]
は [CN[SPACE]] を使います。

;; [52] [[用字系]]の名前が4文字なければ必ず [CH[ ]] を使うわけでもなく、
[[漢字]] ([[Han]]) は [CODE[hani]] です。

[53] 
[CODE[vi  ]]
は [CN[SPACE]] を2つ使います。

;; [54] [[OpenType]] 仕様書には [CODE['yi  ']] (空欄に見える部分は [CC[U+00A0]]
[CC[U+00A0]]) と提示されていて、
2つの[[空白文字]]が表示されるように [CN[NBSP]] を使うが、実際には [CN[SP]]
であると説明されています。 [SRC[>>33]]

[55] 
Musical Symbols を表す [CODE[musc]] があります。 [SRC[>>33]]

;; [57] 
Musical としか説明がありませんが、 [[Unicode]] にある[[西洋音楽]]系の[[音楽記号]]群を指すのでしょうか。
他に Byzantine Music を表す [CODE[byzm]] があります [SRC[>>33]]。

[56] 
Mathematical text layout を表す [CODE[math]] があります。
math layout に関連する[[機能]]のため math layout engine が使う想定であり、
[CODE[MATH]] [[表]]の説明を参照するようにと説明があります。
[SRC[>>33]]

[58] 
Hangul Jamo を表す [CODE[jamo]] は、
[RUBYB[推奨されない][not recommended]]とされ、
[[Unicode]] conjoining jamo 文字に対応する[[フォント]]は
[CODE[hang]]
を使う[RUBYB[べき][should]]とされます。
[SRC[>>33]]

[59] 
Hiragana
と
Katakana
のどちらも同じ
[CODE[kana]]
が割り当てられています。
[SRC[>>33]]

-*-*-

[74] 追加については [[OpenTypeタグ]]を参照。


** 用字系を使った文字列分割

[SEE[ [[連なり]] ]]

** 関連

[34] 
[[用字系タグ]]は通常 [[Unicode]] の[[用字系]]に対応しますが、
必ずしも[[1対1対応]]ではありません。
[SRC[>>33]]

[35] 
[[用字系タグ]]は [[ISO 15924]] [[用字系符号]]や [[Unicode]] の [CODE[Script]]
より前からあるため、
異なる考え方で登録されたものもありますし、
特定の [[OpenType Layout]] 実装と関係して登録されたものもあります。
[SRC[>>33]]

;; [84] 
[[言語系]]の方は完全な対応関係にはないにも関わらず [[ISO 639]] [[言語符号]]との関係が提示されているのですから、
[[用字系]]も [[Unicode]] [CODE[Script]] との対応関係を示してくれればいいのに。
そうすれば >>55 のような曖昧性は生じなそうなものですけど。


* 言語系

[4] 
[DFN[[RUBYB[[RUBY[言][げん]][RUBY[語][ご]][RUBY[系][けい]]][language system]]]]は、
ある[[用字系]]を利用する[[言語]]の体系によって区別するものです。
[[用字系]]は[[言語系]]で細分することができます [SRC[>>15]]。 


[61] 
ここでの[[言語系]]とは、
ある[[用字系]]の[RUBYB[文章][text]]がどう[RUBYB[表示][presented]]される[RUBYB[べき][should]]かの
typographic convention の集合を表します。
[SRC[>>60]]

[62] 
そのような convention は特定の[[言語]]だったり、
[RUBYB[利用][usage]]の[RUBYB[分野][genre]]だったり、
[RUBYB[異なる出版][different publications]]だったり、
その他の要因に関連付いているかも[RUBYB[しれません][may]]。
[SRC[>>60]]

[EG[

[63] 
例えばあるの[[文字]]の特定の[[グリフ]]の[RUBYB[[[異体]]][variant]]が特定の[[言語]]だったり、
[[phonetic transcription]]
や[RUBYB[数学的記法][mathematical notation]]だったりのために[RUBYB[必須][required]]である[RUBYB[かもしれません][may]]。
[SRC[>>60]]

]EG]

[EG[

[5] 
[[漢字]]を使う[[日本語]]と[[中文]]のように、
同じ[[文字]]を使っていても異なる慣習で運用されている実態を反映するために使われています。

]EG]

[27] 
[[OpenType Layout]] [[フォント]]においては、
[[言語系]]は[[タグ][OpenTypeタグ]]で識別されます。

[64] 
convention の[[集合]]は、複数の[RUBYB[場面][scenario]]にわたて共有される[RUBYB[かもしれません][may]]。
例えば2つの別の (無関係の) [[言語]]が同じ convention に従っている[RUBYB[かもしれません][may]]。
しかし[[言語系タグ]]は必要性が認識され次第の登録となるので、
[[タグ]]それぞれが convention の[RUBYB[異なる固有][distnct and unique]]の集合を表すという保証はありません。
[SRC[>>60]]

[65] 
[[言語系タグ]]は、複数の[[言語]]に適用される convention を表現するとの意図で登録することが[RUBYB[できます][can]]。
その場合は[[言語系タグ]]の説明にその意図を反映させる[RUBYB[べきです][should]]。
[SRC[>>60]]

[66] 
ある特定の[[言語]]に複数の別の typographic convention の[[集合]]が存在する[RUBYB[こともあります][may]]。
[SRC[>>60]]

[67] 
これらより、
[[言語系タグ]]は必ずしも[[言語]]と[[1対1対応]]の関係にはありません。
[SRC[>>60]]

[68] 
しかし多くの登録済みの[[言語系タグ]]は特定の[[言語]]の typographic convention
の[[集合]]を表すことを意図したものであります。
そのように[[言語系タグ]]と1つ[[以上]]の[[言語]]に関係性があるときは、
[[言語系タグ]]の登録簿に [[ISO 639]] [[言語符号]]が示されています。
[SRC[>>60]]

;; [77] 実際、1個だけ [[ISO 639]] [[言語符号]]が示されているものもあれば、
数十個の[[言語符号]]が列挙されているものもいくつかあります。

;; [80] 
多くの[[言語系タグ]]には [[ISO 639]] [[言語符号]]が示されていますが、
1つも示されていないものもいくつかあります。


[76] 
[[BCP 47]] [[言語タグ]]の[[異体部分タグ]]が参照される形で説明されているものもあります。
[SRC[>>60]]

[81] 
[[ISO 15924]] [[用字系符号]]の対応が示されているものもいくつかあります。

[82] 
説明として [[UTC]] 文書が示されているものがあります。

[83] 
他の[[言語系タグ]]への参照が示されているものがいくつかあります。
(見よとあるだけでどういう関係性なのかは書かれていません。)

** 言語系の選択

[69] 
text content の[[言語]]を宣言する情報が[[応用]]に利用可能なときは、
[[応用]]は当該 text の表示時に適用する default language system tag
の選択にその情報を使うことが[RUBYB[できます][may]]。
[SRC[>>60]]

[70] 
しかし[[応用]]によっては利用する[[言語系タグ]]の選択権を[[利用者]]に与えることを[RUBYB[好むかもしれません][could be preferable]]。
[[応用]]の[RUBYB[使い方][scenario]]次第で、
選択権を内容の[[著者]]に与えることにしても、
内容の読者に与えても、両方に与えても[RUBYB[構いません][may]]。
[SRC[>>60]]

[16] 
[[言語系]]は[[用字系]]とは違って[RUBYB[文章処理クライアント][text-processing client]]が[[文字]]だけを見て確定させられるとは限りません。
[[利用者]]や [[OS]] が[[言語系]]を指定する必要があります。
[SRC[>>15]]
それがない場合は文章処理クライアントは[[用字系]]ごとの既定の言語系の情報を使うことになります
[SRC[>>15, >>28]]。


[17] 
[[フォント]]は、
[[用字系]]や[[言語系]]やその両方に[[仕立て]]た情報を記述できます。
[SRC[>>15]]

** 既定言語系

[6] 
[[用字系]]だけが指定され[[言語系]]が指定されない状態は[DFN[[RUBYB[[RUBY[既][き]][RUBY[定][てい]][RUBY[言][げん]][RUBY[語][ご]][RUBY[系][けい]]][default language system]]]]とされます。

[10] これを表すために [DFN[[CODE[dflt]]]]
という[[言語系タグ]]が使われています。
[SRC[>>1]]

[7] 
何を[[既定言語系]]にするかは[[フォント]]設計者の裁量に委ねられています。
[SRC[>>1]]

[EG[
[8] 
[[中華人民共和国]]市場を対象とした[[フォント]]は[[簡体字中文]]を[[既定言語系]]にすればよく、
[[日本]]市場を対象にした[[フォント]]は[[日本語]] ([[常用漢字]]の体系) を[[既定言語系]]にすればよい、
ということです。
]EG]

[9] ただしどれを[[既定言語系]]に選ぶかによって既定でない[[言語系]]に対応するための
[[lookup]] 等の記述が複雑になってしまうことがあります。
対応したい[[言語系]]のうちで最大公約数的な方法を使っている[[言語系]]を既定とし、
それ以外はそこからの差分で記述するのが賢いのかも知れません。
[SRC[>>1]]

** 注意を要するもの

[71] 
[[言語系タグ]]は[[大文字]]3文字と [CN[SPACE]] か、[[大文字]]4文字のものだけが登録される
convention となっています。 [SRC[>>60]]

[78] 
実際には[[数字]]も使われています。

[72] 
[CODE[dflt]] と [CODE[DFLT]] は[RUBYB[恒久的に予約][permanently reserved]]されています。
[[OpenType]] [[フォント]]は[[言語系]]記録 ([CODE[LangSysRecord]])
で[[言語系タグ]] [CODE[dflt]], [CODE[DFLT]]
を含む[RUBYB[べきではありません][should never]]。
[SRC[>>60 ([I[Note]])]]

[73] 
[[フォント開発工具]]によっては [CODE[dflt]] や [CODE[DFLT]] を[[既定言語系]]を表すために使う[RUBYB[ことがあります][may]]。
これはそのような工具の固有の慣習に過ぎず、
[[OpenType]] [[フォント]]としては専用の[[表]]で表され、
[[言語系タグ]]としては使いません。
工具はそのように適切に変換を行う責任があります。
[SRC[>>60]]

[79] 
Divehi (Dhivehi, Maldivian)
と説明されている
[CODE[DHV ]]
には
(deprecated)
とも書かれています。
[SRC[>>60]]



-*-*-

[75] 追加については [[OpenTypeタグ]]を参照。



* 文脈

[19] 
[CODE[GSUB]] [[表][OpenType表]]や
[CODE[GPOS]] [[表][OpenType表]]は、
[[用字系タグ]]と[[言語系タグ]]の組み合わせに対して適用されるべき[[機能][フォント機能]]を記述します。

[29] 
[CODE[JSTF]] [[表][OpenType表]]は、
[[用字系タグ]]と[[言語系タグ]]の組み合わせに対して適用されるべき事項を記述します。

[26] 
[CODE[BASE][BASE (OpenType)]] [[表][OpenType表]]は、
[[用字系タグ]]と[[言語系タグ]] (と他の要素) の組み合わせに対して適用されるべき[[基線]]を記述します。

[32] 
これらを通して[[言語情報によるグリフ選択]]等が実現されます。

* 処理

[SEE[ [[GPOS]], [[GSUB]], [[BASE]], [[JSTF]], [[文字のレンダリング]] ]]

* 関連

[3] 
[[IETF言語タグ]]や[[Unicodeロケール識別子]]は[[言語]]中心の[[識別子]]なので[[言語]]の下位分類に[[用字系]]が入っていますが、
[[OpenType]] では[[用字系]]の下位分類に[[言語]]があります。

[30] 
[[[CODE[meta]]表][meta (OpenType)]]では
[[IETF言語タグ]]から派生した
[CODE[ScriptLangTag]] が使われます。

[31] 
[[[CODE[name]]表][name (OpenType)]]や
[[[CODE[cmap]]表][cmap (OpenType)]]には[[言語ID]]欄があって、
[[言語]]を数値識別子で指定できます。
[[[CODE[name]]表][name (OpenType)]]では[[IETF言語タグ]]も指定できます。
これらの[[表][OpenType表]]の[[言語指定]]は[[文字コード]]の指定と絡み合っています。
[SEE[ [[OpenTypeにおける文字コード]] ]]


* メモ

[1] [CITE@ja-jp[OpenType glyph processing (part 2) - Typography | [[Microsoft]] Docs]], [[alib-ms]], [TIME[2022-08-27T09:52:50.000Z]] <https://docs.microsoft.com/ja-jp/typography/develop/processing-part2#scripts-and-language-systems>
