JLReq の文字クラスと Unicode の文字クラスとの関係

先日のミーティングにおいて、文字セットを Unicode に移そうよ(大賛成!)、amendment でやりたいね(うっそ ー!)と言う会話がありました。

文字コードを Unicode 全体に拡張するには、文字クラスも拡張する必要があります。そのためには、独自に文字を列挙するのではなく、Unicode に文字が足されてもそれに応じてメンテナンスされ続けている Unicode の文字プロパティを使うべきでしょう。この変更が見かけほど単純ではなく、作業の量だけではなく、議論すべき項目がたくさん出てきそうだとの印象を持っていたので、短期的には無理だろうと思ったわけです。

ただ、ひょっとして案ずるより産むが易しだったりして?JLReq の文字クラスと Unicode の文字プロパティの間に、意外に綺麗な包含関係にあるなんてことがひょっとしてひょっとしたらあったりして? と思ってちょっと予備的調査をしてみました。


予備的調査
JLReq の文字クラスを見ると、文字が本来的に持っている性質ではなく、その文字が現れたコンテキストを表しているものがいくつかあります。これらはそもそも「文字クラス」ではなく、Unicode の文字プロパティで表すことができません。故にこれらは文字プロパティとは別の方法で記述する必要があります。まずこれらのクラスを省いて考えることにします。期待通り、これらのクラスにのみ含まれる文字はありませんので、これらを省いても分類から漏れる文字はありません。
A.20 合印中の文字(cl-20)
A.21 親文字群中の文字(添え字付き)(cl-21)
A.22 親文字群中の文字(熟語ルビ以外のルビ付き)(cl-22)
A.23 親文字群中の文字(熟語ルビ付き)(cl-23)
A.30 縦中横中の文字(cl-30)
A.24 連数字中の文字(cl-24)
A.25 単位記号中の文字(cl-25)
A.28 割注始め括弧類(cl-28)
A.29 割注終わり括弧類(cl-29)

これで JLReq 文字クラスが本来の文字クラスに近づきました。残った JLReq 文字クラスと Unicode General Category の対応を調べてみました。cl-nn が JLReq 文字クラス、アルファベット大文字と小文字の組み合わせがそこに含まれる文字の General Category です。
cl-01	Pi Ps
cl-02 Pe Pf
cl-03 Pd
cl-04 Po
cl-05 Po
cl-06 Po
cl-07 Po
cl-08 Lm Pd Po
cl-09 Lm
cl-10 Lm
cl-11 Lo
cl-12 Po Sc So
cl-13 Ll Po Sc So
cl-14 Zs
cl-15 Lo
cl-16 Lo
cl-17 Sm So
cl-18 Sm
cl-19 Ll Lo Lu Nd Nl No Po Sm So
cl-26 Zs
cl-27 Cf Ll Lm Lo Lu Mn Nd No Pc Pd Pe Pf Pi Po Ps Sc Sk Sm So Zs

やっぱりな結論
多くの General Category プロパティが複数の JLReq 文字クラスに現れていますので、General Category だけを用いて JLReq 文字クラスを表すことはできないことがわかります。Unicode には他にもたくさん文字プロパティがありますのでとりあえず悲観しなくても大丈夫ですが、それほど単純でないことがわかります。

加えて、今まで JLReq で扱ってこなかった文字たち(アラビア文字、ハングル、絵文字などなど)がどの文字クラスに入るべきなのかを議論して決め、それらを包含した定義にする必要があります。また bi-di との関わりは何か考える必要があるでしょうか?(ないといいな)

やはり、JLReq の JIS X 4051 的文字クラスから、Unicode 的な世界への移行にはそれなりの議論と作業量が必要そうです。

また、Unicode への移行は、自分の世界だけで閉じていた JLReq を、他の言語も混じる多言語処理の一部として定義し直す良いチャンスです。例えば、JLReq で添字について記述する必要はあるでしょうか? とすると、これはデジタルテキストのための次世代 JLreq と一緒にやった方が効率が良いのではないか、とそんな風に思うわけです。

いかがでしょうね?

木田

Received on Friday, 31 January 2020 18:14:38 UTC