UTF-2000 の歴史

Last modified: Mon Oct 23 17:44:49 JST 2000
1996 冬頃? 守岡、akr さんと bitmap 計算を使ったり color pallet のように文字符号を扱うような、汎用文字符号に依存しない text 処理系に関して議論する
1997 春頃? 守岡、おそばやさんで 中島秀之さんや錦見さんらにこの話をするが受けない この頃、g新部さんが“My Symbolic System”の名を提案する
1998 春頃? 守岡、g新部さんや himi さんらと同様の議論をして盛り上がる g新部さんが“UTF-2000”の名を提案する
1998-04-13utf-2000 mailing list 開設
1998-04-16 g新部さんによる UTF-2000 based on GNU Emacs 20.2.90 の release (現在の XEmacs UTF-2000 とは直接のつながりはない)
1999-03 Olivier Galibert 氏、XEmacs の内部表現として「可変固定長方式」(*1)を提案 ((*1) この名称は守岡が付けたもの) (ちなみに、その頃、守岡は JAIST から AIST への引っ越し作業中 (で m17n99: Symposium on Multilingual Information Processing '99 には行けなかった(;_;)))
1999-05 頃 守岡、XEmacs の内部表現を UTF-8 化する作業に着手する
1999-06 頃 守岡、XEmacs の内部表現の UTF-8 化に成功
1999-06-17 XEmacs 21.2.16 UTF-2000 Version 0.2 (JR 難波)
1999-06-18 XEmacs 21.2.16 UTF-2000 Version 0.3 (今宮)
  • --with-mule だけ付けると従来式 MULE 表現になる
  • --with-mule と --with-ucs4(新設)を指定すると文字表現のみ UCS-4 になる
  • --with-mule と --with-utf-2000 を付けると、文字表現が UCS-4, buffer / 文字列表現が UTF-8 になる
1999-06〜07 頃 XEmacs の内部表現の「可変固定長方式」化に着手するが挫折
1999-08-25 XEmacs 21.2.19 UTF-2000 Version 0.4 (新今宮)
  • 上野さんの Shift_JIS 対応 patch を当てただけ(^_^;;;
  • もと版 XEmacs 21.2.19 に sync (coding: cookie が効きます)
1999-09頃 utf-2000 mailing list が m17n.org に移転する
1999-09-09 XEmacs 21.2.19 UTF-2000 Version 0.6 (東部市場前)
  • character.h, mule-charset.h, buffer.h 等に散在していた文 字表現、文字列表現に関する部分を
    • 文字表現: character.h
      • char-1byte.h: unibyte 表現 (非 MULE 用)
      • char-lb.h: leading-byte 表現 (従来式 MULE 用)
      • char-ucs.h: UCS-2000 表現
      (従来の character.h の中身の大部分は char-ucs.h に移動した)
    • multibyte.h: 多byte文字列界面
      • mb-1byte.h: unibyte 表現 (非 MULE 用)
      • mb-lb.h: leading-byte 表現 (従来式 MULE 用)
      • mb-utf-8.h: UTF-2000 表現
    に整理した(けれど、mule-charset.h はあんまりいじっていない)。
  • ucs-bmp も make-char できるようにしてみた(256 文字集合での問題を修正したつもり)
  • latin-iso8859-2, -3, -4, -9, latin-jisx0201, vietnamese-viscii-upper, -lower 用の変換表を作って、BMP に写像するようにした。これにより(FULLWIDTH 系を除く) Latin 文字に関する重複符号化は解消された
  • 上記を実現するために、簡単な UCS 用の文字→byte 表管理機構を作った(これにより、gmalloc の bug に遭遇したが、とりあえず見なかったことにする(^_^;)
  • coding-system の encoder の内部表現依存部を小さくすべく、 coding-system encoder を再実装した (text-coding.c)
1999-09-14 XEmacs 21.2.19 UTF-2000 Version 0.7 (平野)
  • charset に変換表関連の slot を設けた。また、 latin-iso8859-2, -3, -4, -9, latin-jisx0201, vietnamese-viscii-upper, -lower 用の変換表を charset の属性として指定するようにした
  • Latin Extended-A 用の決め打ち変換表を廃止した
  • 変数 default-coded-charset-priority-list の追加: 文字の属する符号化文字集合を選択する際の既定値として用いる
  • text-coding.c において UCS-4, BIG-5, Shift_JIS 用の generic-encoder 用実装を追加した
  • text-coding.c の Shift_JIS において、JIS-Latin 用変換表 を用い、7bit の領域を JIS-Latin として解釈するようにした
  • text-coding.c の generic-encoder での UTF-8 の parse の switch を if に書き換えた (でも、順番を逆にすべきだろうな)
1999-10-05 XEmacs 21.2.19 UTF-2000 Version 0.8 (加美)
  • coded-charset (Mule-charset) の変換表を文字符号 (Emchar) の配列から Lisp_Object の vector (Lisp_Object) に変更し た。vector の要素は文字 (Lisp_Object) か vector (Lisp_Object) であり、 これにより入れ子状の変換表を表現できるようになった
  • 変換表を Lisp の世界で参照・定義するための関数 charset-mapping-table, set-charset_mapping_table を追加した
  • 変換表の定義を lisp/utf-2000/ccs-*.el に移した
  • hiragana-jisx0208, katakana-jisx0208 を追加した (ものの、これを default-coded-charset-priority-list の japanese-jisx0208 よりも前に入れると禁則処理等がおかしく なるので、実際の利用は char-category(しいては char-table, char-property 等)の再実装の実現まで断念)
  • japanese-jisx0208 が JIS X 0208:1983 であることを明確化した(EUC-JP や Shift_JIS 等の 1990 年版に基づく符号に対してはこれとは別に coded-charset を追加する予定)
  • coded-charset の文字符号の領域表現(CHARSET_UCS_MIN から CHARSET_UCS_MAX の範囲で定義域を表す)を用いる場合の変換に於いて、従来 CHARSET_CODE_OFFSET と呼んでいたものを CHARSET_BYTE_OFFSET と改名し、新たに CHARSET_CODE_OFFSET を追加した。新定義では変換は次の通り:
          	UCS = (byte_1 - CHARSET_BYTE_OFFSET)
    	      * CHARSET_CHARS ^ (CHARSET_DIMENSION - 1)
    	    + (byte_2 - CHARSET_BYTE_OFFSET)
    	      * CHARSET_CHARS ^ (CHARSET_DIMENSION - 2)
    	    :
    	    + byte_(CHARSET_DIMENSION)
    	    - CHARSET_CODE_OFFSET + CHARSET_UCS_MIN
    	      
    但し、UCS は文字の内部表現(文字符号)、 byte_1 ... byte_(CHARSET_DIMENSION) は外部表現での各 byte を表す。 また、UCS は CHARSET_UCS_MAX でなければならない。
  • text-coding.c の ISO 2022 系 encoder に於いて、既に指示されている図形文字集合 (coded-charset) に符号化する文字が含まれている場合、 もしくは、 既に指示されている図形文字集合の指示シーケンスと 符号化する文字が属する図形文字集合の指示シーケンスが 同一である場合に指示シーケンスを出さないようにした。 これにより、例えば、iso-8859-2 で符号化できるテキストをちゃんと iso-8859-2 で符号化できるようになった(ESC-sequence は入らない。ISO 8859-1 に unify されている文字が ISO 8859-1 にならず、 ISO 8859-2 になる)
1999-10-12 XEmacs 21.2.19 UTF-2000 Version 0.9 (久宝寺)
  • code-charset の 文字 → 符号位置 変換表を実装しなおす
  • なんとなく `vietnamese-viscii-*' を `latin-viscii-*' に変える(どうして、`vietnamese-*' なんだろう?クオッグーはもはや Latin script とはいえないという立場なんだろうか?)
  • とはいえ、define-charset-alias を付け、 `vietnamese-viscii-*' を alias として残す
  • 『本物』の VISCII 1.1 を表現する coded-charset `latin-viscii' を定義する(`*-viscii-{upper|lower}' は所詮 Mule との互換のためなんだから、 `vietnamese-viscii-*' でも良いのかも;ISO/IEC 2022 系で使う場合は、TCVN 5712 を用いるべき)
  • text-coding.c の ISO 2022 encoder において、ISO 2022 の符号構造に適合しない coded-charset を無視するようにした(この場合、 default-coded-charset-priority-list の順序に従い、探索を続ける)
  • ucs-bmp に対し標準で font-registry を付けた(とりあえず、 "\\(ISO10646.*-1\\|UNICODE[23]?-0\\)" としたが自信なし;本当は、ISO10646.1993-1 には match しちゃいけないと思う。UNICODE3.0-0 などと書きたい所だけど、年じゃないとまずいんだったっけ?)
  • ISO 2022 の図形文字の構造に適合し、final byte を指定した coded-charset を定義する時、Lisp から行う場合も charset-id を final byte に offset を足したものになるようにした
  • そうでない場合の charset-id を 1 byte 系と 2 byte 系で区別するのをやめた
  • ついに charset-id に関する unsigned char の呪いを全て解くことに成功した(^_^)
  • で、なんとなく、
    • 0 以上は ISO 2022 系
    • 負の場合は非 ISO 2022 系
    という振り方をするようにした
  • で、発覚した (format "%03d" -1) → "0-1" となる bug を dirty fix する
1999-10-29 XEmacs 21.2.19 UTF-2000 Version 0.10 (八尾)
  • なんとなく ISO/IEC 2022 の国際登記簿にある符号化文字集合の charset-ID を ISO-IR 番号に変えた(ISO/IEC 2022 系の私的集合の ID を特別扱いせず allocation を単純化した)
    [TODO] elisp で定義する時に ISO-IR 番号を渡せるようにする
  • 文字オブジェクトの属性を表現する変数 Vcharacter_attribute_table を設けた
  • 文字オブジェクトの属性に関する以下の API を設けた
    	char-attribute-alist (CHARACTER)
    
    		CHARACTER の全ての属性を連想リストにして返す
    
    	get-char-attribute (CHARACTER ATTRIBUTE)
    
    		CHARACTER の ATTRIBUTE の値を返す
    
    	put-char-attribute (CHARACTER ATTRIBUTE VALUE)
    
    		CHARACTER の ATTRIBUTE の値を VALUE にする      
    	      
  • 文字を charset と code-point に分解する際、code-point の長さ制限を撤廃できるようにするために、結果を list で返す SPLIT_CHAR を設け、これを分解用 primitive とした(でも、効率悪そう(^_^;;;)
  • coded-charset の encoding_table を廃止し、文字オブジェクトの属性を用いるようにした (coded-charset に持つのが良いのか 文字オブジェクトに持つのが良いのかは迷う所;でも API 的には両方 OK にすれば良いのでどっちでも良いかも)
1999-11-01 Fifth Tokyo GNU Technical Seminar 守岡、三菱総研に GNU goods とともに置き去りにされる
その後、g新部さんと守岡、RMS の note-PC の復旧作業をする羽目になる
1999-11-02 守岡、 GNOME BOF in Japan で UTF-2000 Project に関して話す。 前日の疲れと準備不足のために判りやすく話すことに失敗する
1999-11-11 XEmacs 21.2.19 UTF-2000 Version 0.11 (志紀) における変更点
  • 文字属性として coded-charset の名前を用いた場合、常に coded-charset に正規化するようにした
    [TODO] coded-charset は別空間に置く
  • 関数 put-char-attribute で coded-charset もしくはその名前に値を設定した時、その coded-charset の変換表にも反映するようにした
  • 関数 define-char を新設した
  • define-char 形式の文字定義 file: utf-2000/u00000-C0.el, utf-2000/u00020-Basic-Latin.el, utf-2000/u00080-C1.el, utf-2000/u000A0-Latin-1-Supplement.el, utf-2000/u00180-Latin-Extended-B.el, utf-2000/u00100-Latin-Extended-A.el, utf-2000/u00250-IPA-Extensions.el, utf-2000/u002B0-Spacing-Modifier-Letters.el, utf-2000/u00300-Combining-Diacritical-Marks.el, utf-2000/u00370-Greek.el を追加した
    [邪悪系] ラテン・ギリシア文字系で fullwidth/halfwidth を区別した設定にした(簡単な program で unify することもできます)。これに伴い大量の『代替名称』を導入した (^_^;;;。 これらは私的領域の文字 ID を与えられる
  • utf-2000/ccs-iso8859-2.el, utf-2000/ccs-iso8859-3.el, utf-2000/ccs-iso8859-4.el, utf-2000/ccs-iso8859-9.el を削除した
  • Mule-IPA に関してn高橋さんの定義を用いるようにした(UCS に含まれない部分に関する文字定義 file はまだ作成していない)
  • SPLIT_CHAR での cell の発生を抑制した(つもり) (文字定義を持たない文字に関しては依然として cell ができる (文字定義を与えた方が効率が良くなれば文字定義を行うだろう という教育的効果があるかも(^_^;;;))
1999-11-15 XEmacs 21.2.19 UTF-2000 Version 0.12 (柏原) における変更点
  • 文字定義が存在しない文字の encode に関する問題を修正した
  • 文字結合に関する表 Vcharacter_composition_table を追加した (文字属性 `->decomposition' の逆を記述する。文字属性 `->decomposition' の値から作成する)。
    また、これに伴い、関数 get-composite-char (LIST) を追加した。 LIST に対応する結合文字が存在すればその文字を返す関数である。 LIST の要素は、文字、UCS-4 の文字符号、``symbolic character''(後述)の名前 (symbol) である
  • これに伴い "symbolic character" を導入する。これは symbol で表現され、通常の符号表現を持たない『文字のようなもの』で、 主に結合文字を表現するために用いる。例えば `circle' を使って `(circle ?1)' で丸の中に1が入った文字を表現できる。 現在の実装では内部的には負の文字番号を持つ(UCS-4 の範囲外の値になる)
    [TODO] 任意の "symbolic character" を定義・利用できるようにする (SGML/XML の実体参照のように利用できると良いかも)
  • 異体字に関する表 Vcharacter_variant_table を追加した。またこれを参照するための関数 char-variants (CHARACTER) を追加した。これは文字の異体字の list を返す
  • coded-charset `ethiopic-ucs' を新設した。これにより、CCL を使わずにエチオピア(ゲーズ)文字が表示できるようになった
  • coded-charset `lao' を新設した。intlfonts-1.2 等にある Mule-Lao font を入れていれば UCS のラオ文字を表示できる (しかし、文字結合ができる訳ではないので ラオ語が扱えるようになった訳ではない)
  • put-char-attribute/define-char で GR 表現の符号化文字集合の符号位置を受理するようにした(内部的には GL 表現に正規化される)
  • M-x what-char-definition [CR] で現在位置の文字定義を表示できるようにした。この他文字定義 file の開発用 utility を含んだ utf-2000/char-db-util.el を追加した (あんまりちゃんとしてませんが)
    [TODO] ucs-conv の what-character を置き換える
  • 文字定義 file utf-2000/u00400-Cyrillic.el, utf-2000/u00530-Armenian.el, utf-2000/u00590-Hebrew.el, utf-2000/u00600-Arabic.el, utf-2000/u00700-Syriac.el, utf-2000/u00780-Thaana.el, utf-2000/u00900-Devanagari.el, utf-2000/u00980-Bengali.el, utf-2000/u00A00-Gurmukhi.el, utf-2000/u00A80-Gujarati.el, utf-2000/u00B00-Oriya.el, utf-2000/u00B80-Tamil.el, utf-2000/u00C00-Telugu.el, utf-2000/u00C80-Kannada.el, utf-2000/u00D00-Malayalam.el, utf-2000/u00D80-Sinhala.el, utf-2000/u00E00-Thai.el, utf-2000/u00E80-Lao.el, utf-2000/u00F00-Tibetan.el, utf-2000/u01000-Myanmar.el, utf-2000/u010A0-Georgian.el, utf-2000/u01100-Hangul-Jamo.el, utf-2000/u01200-Ethiopic.el, utf-2000/u013A0-Cherokee.el, utf-2000/u01400-Canadian.el, utf-2000/u01680-Ogham.el, utf-2000/u016A0-Runic.el, utf-2000/u01780-Khmer.el, utf-2000/u01800-Mongolian.el, utf-2000/u01E00-Latin-Extended-Additional.el, utf-2000/u01F00-Greek-Extended.el, utf-2000/u02000-General-Punctuation.el, utf-2000/u02070-Superscripts.el, utf-2000/u02080-Subscripts.el, utf-2000/u020A0-Currency-Symbols.el, utf-2000/u020D0-Combining-Diacritical-Marks-for-Symbols.el utf-2000/u02100-Letterlike-Symbols.el, utf-2000/u02150-Number-Forms.el, utf-2000/u02190-Arrows.el, utf-2000/u02200-Mathematical-Operators.el, utf-2000/u02300-Miscellaneous-Technical.el, utf-2000/u02400-Control-Pictures.el, utf-2000/u02440-OCR.el, utf-2000/u02460-Enclosed-Alphanumerics.el, utf-2000/u02500-Box-Drawing.el, utf-2000/u02580-Block-Elements.el, utf-2000/u025A0-Geometric-Shapes.el, utf-2000/u02600-Miscellaneous-Symbols.el, utf-2000/u02700-Dingbats.el, utf-2000/u02800-Braille-Patterns.el, utf-2000/u02E00-CJK-Radical-Supplement.el, utf-2000/u02F00-Kangxi-Radicals.el, utf-2000/u02FF0-Ideographic-Description-Characters.el, utf-2000/u03000-CJK-Symbols-and-Punctuation.el, utf-2000/u03040-Hiragana.el, utf-2000/u030A0-Katakana.el, utf-2000/u03100-Bopomofo.el, utf-2000/u03130-Hangul-Compatibility-Jamo.el, utf-2000/u03190-Kanbun.el, utf-2000/u031A0-Extended-Bopomofo.el, utf-2000/u03200-Enclosed-CJK-Letters-and-Months.el, utf-2000/u03300-CJK-Compatibility.el を追加した
  • coded-charset `latin-viscii' の情報を utf-2000/u00020-Basic-Latin.el, utf-2000/u000A0-Latin-1-Supplement.el, utf-2000/u00100-Latin-Extended-A.el, utf-2000/u00180-Latin-Extended-B.el に merge した。これに伴い、 utf-2000/ccs-viscii.el を廃止した
  • bytecomp.el で file に非 Latin-1 文字が存在する時、comment 中の非 Latin-1 文字を無視して coding-system を反対するようにした (comment を削除するという大技を使っているので心配; きっともっと良い方法があるに違いない(とマーチンも書いていた (^_^;))。
    また、raw-text で符号化する時、`byte-compile-dynamic' と `byte-compile-dynamic-docstrings' を利用できるようにした(つもり)
    ;; 本当にうまくいっているのか自信無し(^_^;;;
2000-01-20 XEmacs 21.2.27 UTF-2000 Version 0.13 (高井田)
  • 諸橋大漢和辞典収録文字 (ideograph-daikanwa) を追加した
  • e-漢字 大漢和 をとりあえず使えるようにした
  • 自己言及問題を回避すべく、mule/mule-conf.el を新設した
  • utf-2000/ccs-jisx0201-latin.el を削除した(変換表形式の coded-charset 定義を完全撤廃した)
  • 文字定義 file utf-2000/Ideograph-R001-One.el 〜 utf-2000/Ideograph-R214-Flute.el および utf-2000/u0A000-Yi-Syllables.el, utf-2000/u0AC00-Hangul-Syllables.el, utf-2000/u0FB00-Alphabetic-Presentation-Forms.el, utf-2000/u0FB50-Arabic-Presentation-Forms-A.el, utf-2000/u0FE20-Combining-Half-Marks.el, utf-2000/u0FE30-CJK-Compatibility-Forms.el, utf-2000/u0FE50-Small-Form-Variants.el, utf-2000/u0FE70-Arabic-Presentation-Forms-B.el, utf-2000/u0FF00-Halfwidth-and-Fullwidth-Forms.el, utf-2000/u0FFF0-Specials.el を追加した
  • string-to-number が 16 進数をちゃんと変換できない bug の修正
  • coded-charset `hiragana-jisx0208', `katakana-jisx0208' の廃止
  • coded-charset `japanese-jisx0208-1990' の新設
  • 今昔文字鏡フォント用 coded-charset の新設(但し、実際に利用するための設定はまだ行っていない)
  • coded-charset `katakana-jisx0201' の builtin-support の廃止
  • UCS-4 私用領域における XEmacs-UCS 互換領域の builtin-support の廃止
  • japanese-jisx0213-1, japanese-jisx0213-2 の新設(上述の漢字定義にはこれらの定義も入っているので (フォントが利用可能な)他の coded-charset に収録された文字は、新 JIS の font が無くても表示可能)
  • XEmacs 21.2.27 に sync up した(つもり)
2000-02-01 XEmacs 21.2.27 UTF-2000 Version 0.14 (河内堅上)
  • 文字定義における coded-charset の code-point の表現を変更し、記憶容量を少し節約した
  • 今昔文字鏡用の font 用の定義を dump した (これにより、上記の削減分を食い潰した(^_^;;;)
  • やっぱり builtin-character などの解釈時に一時 cell が発生しないようにした
  • 内部的な coded-charset の code-point の上限を 4 byte かつ表現可能な整数の上限に制限した
  • 3, 4 byte の coded-charset を定義可能にした
  • UCS-4 を表現する coded-charset `ucs' を追加した
  • 組込み関数 decode-char を追加した
  • what-char-definition 等での文字定義表示における code-point の表示法を変更した