JLReq の国際化に向けて、JLReq 第二版 (11 August 2020) が定義している文字クラスを再構成し、文字間の空き量および行の調整処理のための新たなクラスのセットを定義した。目的はUnicode への拡張、およびよりシンプルにすることである。再構成されたクラスは文字に対して一意に定まるため、これをこの文章ではこれを字間プロパティと呼ぶ。
実際の字間量、調整量、それらを確保するためのなど方法については、新たに書かれるであろう組版要件のドキュメントに譲る(「簡便な行組版ルール(案)」をベースとしたものになろう)。
Unicode 全体を対象に定義する
特に、第二版の文字クラス定義では全角互換文字が除外されているが、これらを陽に扱う
機能別にプロパティを定義する
JLReq 第二版において文字クラスは、文字間の空き量 (Appendix B)、文字間での分割の可否 (Appendix C)、行の調整処理で詰める処理が可能な箇所 (Appendix D)、行の調整処理で空ける処理が可能な箇所 (Appendix E)、の四つの機能全てを記述できるように設計されている。この再構成ではクラス分けをシンプルにするため、機能ごとに分割して必要なプロパティを定義する。調査の結果、行の調整処理で空ける処理が可能な箇所 (Appendix E) に必要なプロパティは、文字間の空き量 (Appendix B) に必要なプロパティのサブセットであることが判明した。ゆえ、字間プロパティはこの両方の機能をサポートする。行の調整処理で詰める処理が可能な箇所、は「簡便な行組版ルール(案)」において削除されているので対象外。また、文字間での分割の可否に対応するプロパティは別の定義となる。
高レベルの構造に依存する組版機能のためのクラスを別に扱う
2020年に JLReq TF において文字クラスの見直しを行ない、高レベルの構造に依存する組版機能のためのクラスを別に扱うこととした。これらは各々の組版機能の項で振る舞いを定義する、もしくは仮想のクラス用いるなどの方法で定義する。この切り離しによりクラスを文字に対して一意に定まるプロパティとして定義することが可能になった。下記「除外するクラス」参照。
なお、最後の方針は「簡便な行組版ルール(案)」においても示されており、除外しているクラスは同一である。この文書で表すクラスは、「簡便な行組版ルール(案)」に示されたクラスを機能別に分け、Unicode に拡張したものと考えることができる。
プレーンテキストでは存在せず、高レベルの構造に依存する組版機能のために定義されているJLReq文字クラスを除外する。これらは各々の組版機能の項で振る舞いを定義する。これらのクラスに属する全ての文字は、存続するクラスに含まれているためこれらのクラスは単に考慮から除外することができる。
下記 cl-24 連数字中の文字は、コンピュータ組版が開発された当時に和文と組み合わせて使用された半角のアラビア数字であり、現代のシステムではほとんど用いられない。ゆえ、クラス、組版機能共に廃止する。文字コードとしては通常の数字であり、属する文字は全て存続するクラスに含まれる。また、cl-12 前置省略記号、cl-13 後置省略記号は cl-24 連数字中の文字と共に用いられるべきクラスであり、これらを同時に除外する。含まれる文字は全て下記に解説する字間プロパティにおいて、どの文字ともベタとなるクラスOとして扱う。
従って以下のクラスが再構成の考慮対象となる。
文字間の空き量、および行の調整処理で空ける処理が可能な箇所の定義に必要なクラスを7つに単純化することができた。それぞれのクラスは空き要求の性質だけで簡潔に説明することができる。
以下にそのクラスのプロパティ値、空き要求の簡潔な説明、およびJLReq第2版の文字クラスの文字がどこに属するかを示す。
ここで、B / A / BA に属する文字は、デジタルフォントの実装において、グリフ内部に必要な空間が埋め込まれているので、組版の際に文字の組み合わせによってそのスペースを削除するというレイアウト動作が必要になる。 また、これらの約物に対しB / A / BA以外の非CJKな約物が連続するという文字の組み合わせの場合にも同様のレイアウト操作が必要とされるため、これらの定義のためにB / A / BA / Sの各文字クラスに対応する非CJK文字の文字クラスとして以下の4つを追加する。
また、典型的なデジタルフォントの実装では、B / A / BA / S / J の文字は全角幅、L の文字はプロポーショナル幅で実装されるが、そのような実装を必要とするわけではない。
この字間プロパティと、小林敏先生の著された「簡便な行組版ルール(案)」とを比較すると、cl-19 / 27 の分割、および行の折り返しをサポートするために J と O がさらに分割されている部分を除いて、一致している。
cl-19 / 27 の文字と記号への分離は、JLReq TF での議論の中で提案された方法である。記号類は全角であってもラテンアルファベットとの間に空間をとることの必要性が薄いことによる。この点が、JIS X 4051 や JLReq 第二版に沿った組版と、この字間プロパティを使用した組版の大きな違いである。今後具体例を見ながら熟成させる必要があろう。
JLReq 文字クラスの見直しの議論の結果若干の文字の移動があった。字間プロパティに影響のあるもののみ以下に示す。
また、以下のコードポイントは和文書体であってもプロポーショナルで実装されているゆえ、cl-01 / cl-02 から除外して取り扱い、結果クラス O となる。これらのコードポイントに対応する和文文字をどのようにするかの議論が必要である。注
注: 同様な問題のある文字には他に、U+2010 HYPHEN(ハイフン)、U+2013 EN DASH(ダッシュ(二分))、U+2014 EM DASH(ダッシュ(全角))、U+2025 TWO DOT LEADER(二点リーダ)、U+2026 HORIZONTAL ELLIPSIS(三点リーダ)がある。これらは字間プロパティの定義に影響はなく、和字グリフであろうと欧文グリフであろうと、クラス O となる。
JLReq 第二版 Appendix B の表を、新たなクラスで表現したものを参考のためここに示す。数値がマイナスの場合、それは文字の組み合わせの間に含まれるグリフ由来の空間を指定量だけ削除することを意味する。 なお、Bp / Ap / BAp / Sp については対応する B / A / BA / S と同様の処理となるが、その文字自体にグリフ由来の空間が含まれないため、前後に来る文字の側のグリフ由来の空間のみ指定量だけ削除する。行頭・行末についてはCJK文字との組み合わせでないため適用しない。
ここに示した数字は JLReq 第2版が示している空き量を新しい字間プロパティで表現するとどうなるかを示すための参考であって、実際の量やそれを確保するための方法については、新たに書かれるであろう組版要件のドキュメントに譲る。
クラスをよりシンプルにするため、以下の文字の組み合わせに対し空き量の変更を行った。以下に JLReq の記述に沿って和文約物を半角と考えた場合の空き量で変更点を示す。 句読点|中点:3/4 アキ→ 終わり括弧に合わせて四分アキ 句読点|和字間隔:二分アキ→ 終わり括弧に合わせてベタ 区切り約物|欧文:四分空き→ ベタ cl-19 を漢字と非漢字に分離。漢字のみがアルファベットと空間を作り J、非漢字はどの文字ともベタで O cl-27 をラテンアルファベットと記号に分離。ラテンアルファベットは漢字と空間を作るので L、記号はどの文字ともベタで O 上から三点は、「簡便な行組版ルール(案)」でも同じ変更がなされており、一致する。
上記の表で削除量を一般的な全角文字での実装を前提に示しているが、一般にどの量の空間を削除するのが適切かは書体デザインに依存する。そのため、組版要件のドキュメントを参考にしつつ、フォントが適切な削除可能量をアプリケーションに伝える方法での実装が期待される。(i.e. halt & chws)
空間の追加の必要な箇所は、J と L の間、つまり和欧文間である。上記に示された四分の量は、過去の技術的制約からきており、実際には大きすぎるとの意見が多い。
和欧文間の空間に関して、長期間にわたって空間が適切に確保されない実装が続いているため、この空間を確保する目的で U+0020 などのスペースが挿入されているテキストデータが多く存在し、また、コンテキストによって U+0020 を挿入するかどうかを切り替えてある例も見受けられる。
また、html のSegment Break Transformation Rules において、欧文との界面などに自動的に U+0020 が挿入される(”和欧文間の空き or Segment Break Transformation Rules”のメールスレッド参照)。欧文空白は通常全角の1/3ほどであるから、四分よりもさらに大きく空くことになり見かけが悪い。
我々は和欧文間に欧文空白 U+0020 が挿入されているデータと向き合う必要がある。U+0020 などが挿入されている場合に、どのような組版になるべきかの議論が必要であろう。
高レベルの構造に依存する組版機能を表す仮想クラスを作った場合、この表に対してどのようなものになるか調べてみた。
同様に、調整処理で空ける処理が可能な箇所の表を、新たなクラスで表現したものを参考のためここに示す。こちらは「簡便な行組版ルール(案)」の表をベースとしている。U+0020 SPACE を空ける処理はこの表の前に最優先で行われる(が、本当にそれが最適?)。
ここに示した数字は JLReq 第2版が示している「調整処理で空ける処理が可能な箇所の表」を新しい字間プロパティで表現するとどうなるかを示すための参考であって、実際の調整量は、新たに書かれるであろう組版要件のドキュメントに譲る。
上記のように JLReq の文字クラスを通じて定義した字間プロパティの Unicode への拡張を試みた。アプローチとして、各々のクラスの Unicode プロパティによる記述を試みた。この方法は、以下の議論に見るように、各クラスの性質を理解し、現在 JLReq で対象となっていない文字がどのクラスに属するべきかの考察に有用であった。
最終的に字間プロパティを Unicode に対して定義する方法は、字間プロパティを独立のプロパティとする方法や、ここで試みたように複数のプロパティの組み合わせとして定義する方法などが考えられるが、それは今後の議論にゆずる。
「普通の全角」とは、 East Asian Width = W/F(全角)かつ Decomposition Type が vertical や small でない
また、B / A / BA / Sに対応する普通の全角でない文字クラスについて、「非全角」を EAWがWideでもFullwidthでない かつ Decomposition TypeがVerticalやSmallでない と定義する。
普通の全角かつ General Category = Ps (Open_Punctuation: an opening punctuation mark (of a pair))
新規に下二つの文字が加わる。どれもEAW全角で、手元の環境ではグリフ前半に半角空白があり、クラス B に含めて問題がなさそうだが、要確認。
非全角かつ General Category = Ps (Open_Punctuation: an opening punctuation mark (of a pair))
普通の全角かつ
[
General Category = Pe(終わり括弧類)
または
PropList に Terminal_Punctuation がある (cl-06, 07)(これらは GC=Po)(句読点)
]
新規に下三つの文字が加わる。どれもEAW全角で、手元の環境ではグリフ後半に半角空白があり、クラス A に含めて問題がなさそうだが、要確認。
注:上の条件で区切り約物 cl-04 と中点類 cl-05 の全角コロン、セミコロンが混入する。これらはどれも句読点と同様に文を区切る役割があり、約物の役割としては同一なので既存 Unicode プロパティで見分けることができない。cl-06, 07 を独特にしているのはアキの必要量だけだと考えられるので、これらを見分けるには、アキの必要量を示す属性が Unicode に必要なことになる。が、字間プロパティ自体をプロパティにする方がスマートかもしれない。
非全角かつ
[
General Category = Pe(終わり括弧類)
または
PropList に Terminal_Punctuation がある(これらは GC=Po)(句読点)
]
普通の全角かつ
[
PropList に Hyphen があり、かつ General Category = Po (Other_Punctuation) (中点)
または
PropList に Terminal_Punctuation がある(全角コロン、セミコロン)
]
注:A で述べたように上の全角コロン、セミコロンを捕まえる条件で cl-04 区切り約物、cl-05/06 句読点も捕まってしまう。議論は A を参照。
なし
非全角かつ
[
PropList に Hyphen があり、かつ General Category = Po (Other_Punctuation)
または
PropList に Terminal_Punctuation がある
]
属する文字は一文字なので U+3000 決め打ち。
なし
非全角かつ
PropListにSpace_separatorがある
・平仮名:全角、GC=L*, Script=Katakana(ヽヾが Lm、その他は Lo)
・片仮名:全角、GC=L*, Script=Katakana(ゝゞが Lm、その他は Lo)
・漢字、および仮名漢字に準じる文字:全角、GC=L*/Nl, Script=Han/Common、ただし長音とU+16FE3を除く(漢字、〆々〻〱〲〳〴〵〼〇、蘇州号碼)
・漢字を含む象形文字:全角、PropList=Ideographic, GC=Lo/Nl (漢字、〆〇、蘇州号碼、女真文字、西夏文字、契丹文字)
全角でも半角でもない、かつ GC=L* または GC=Nd
上のどれでもないもの
新しい分類なので全ての文字が新しい。