>>>> <19990701132220F.nakaji(a)tutrp.tut.ac.jp> にて
>>>> “中治”= 中治 弘行 <nakaji(a)tutrp.tut.ac.jp> さま曰く:
中治>
>>>>> In [semi-gnus-ja : No.3522]
中治> >>>>> tomo(a)etl.go.jp (守岡 知彦 / MORIOKA Tomohiko) wrote:
中治> 残りのご説明はきちんと理解できないのですが、すご〜く大雑把に言うと、
;; 判りにくくてすみませんでした。(^_^;;;
中治> MUA が解釈して「このように表示して」とEmacsenに依頼、Emacsenは「そ
中治> のように」表示するだけ。
中治> ということですね。で、「この」や「その」は歴史的経緯からいろいろあっ
中治> て、それなりに問題が起こる(ように見える)こともある、と。
中治> 今回は、たまたま、1978 な 14dot のフォントがないからスケーリングが
中治> 行われた、と。
中間にもう一段階あります。
ご存知のように現在の MULE では各文字は ISO/IEC 2022 の 94, 96, 94×94,
96×96 図形文字集合 (MULE charset) とその中での code point という形で表
現されます。よって、
(make-char 'japanese-jisx0208-1978 33 34)
と
(make-char 'japanese-jisx0208 33 34)
は違う文字オブジェクトになります(Lisp object としてということで、本来は
両者は同じ <IDEOGRAPHIC COMMA> という文字として扱われるべきです)。
で、code point unify をするというのは
(make-char 'japanese-jisx0208-1978 33 34)
となるべき文字を
(make-char 'japanese-jisx0208 33 34)
にしてしまうということです。この例の場合、良いんですが、例えば、
(make-char 'japanese-jisx0208-1978 (+ 18 32) (+ 10 32)) = ?鴎
を
(make-char 'japanese-jisx0208 (+ 18 32) (+ 10 32)) = ?鴎
にするのはまずい訳です。
;; (make-char 'japanese-jisx0212 #x6c #x3f) = ?鷗
;; にするのは構わないといえます。
で、font の問題は文字オブジェクトの同一性の問題と関連していますが、微妙
に違う問題です。
例えば、set-charset-registry とかで japanese-jisx0208-1978 用の font と
して JIS X 0208:1978 用の font を使うことができます。この場合、内部的に
は code point unify されませんが、見た目は code point unify されます。
ついでにいうと、今時の X-tt みたいな環境だと、同じ font を異なる
encoding で利用できますので、文字オブジェクトの世界から見た目の世界に至
るまで3段階ぐらいの階層が存在することになります。
;; 現在の規格体系が想定するモデル的には、符号化文字(見た目は一切関係な
;; し)、glyph / 字体(文字の形状に関する抽象的概念)、字形(実際の見た
;; 目)という区別があることになっています。もちろん、実際の実装がこれに
;; 対応しているとは言えないんですが。
さて、歴史的経緯とは、十分な種類の font がなかったり、そもそも多くの文字
を十分に区別可能な符号空間を持たない貧乏な実装・環境がなかった昔に、
JIS X 0208:1978 / 1983 の差異を誤魔化すために、両者を符号化文字の階層で
同一視してしまうということをやってしまったということです。MULE では概ね
符号空間の問題はないので、問題は利用者の環境に font があるかどうかに落ち
ています。にも関わらず、歴史的経緯で、Emacs-MULE は両者を符号化文字の階
層で同一視するという病気を持っているということです。
そんなことは知ったこっちゃねえ、て言われると悲しいんですが、そういう場合、
(a) 頑張って JIS X 0208:1983 に変換する
(b) JIS X 0208:1978 で書かれた文字は読まない
(c) JIS X 0208:1983 用の font を使う
(d) JIS X 0208:1978 の文字を 1983 の文字に code point unify してしまう
というアプローチが考えられます。上ほどお勧めですが、今の所 XEmacs では
(a) は難しいです。(d) は知っていますがお教えしません。(^_^;;;
私としては (b) がお勧めですが:-P、(c) としては CCL で code point unify
せずに使うという激しい方法も考えられます(お勧めですが akr さん以外には
困難でしょう(^_^;)が、前述の set-charset-registry を使って code point
unify して使うのが簡単でしょう。
--
===『幾千億の分子に分かれても ========================================
決して忘れない。
この宇宙が終るまで』 守岡 知彦 (MORIOKA Tomohiko)
======================================== Email: <tomo(a)etl.go.jp> =====
;; PGP public key:
http://www.etl.go.jp/~tomo/hiko/pgp.key