%% -*- coding: euc-jp; -*-
\item 「m17n Xライブラリ」の基本機能の設計 

従来、英語以外のテキストを表示したり入力したりするためには、各アプリケー
ションプログラムがそのための複雑なコードを持つ必要があった。「m17n Xラ
イブラリ」では、英語以外をも含む多言語テキストを簡便に表示し入力するこ
とができる API を設計することを目標とした。

入出力に関しては、使用しているウィンドウシステムに応じたライブラリが必
要となる。本技術開発では、現在 Unix/Linux 利用者に広く用いられているX 
ウィンドウシステム上 で M-text で表わされる多言語テキストを表示し、入力
する機能の基本部分のための API を設計した。設計にあたっては、 X ライブ
ラリや、過去に我々自身が行なってきたエディタの多言語化の経験に基づいて検
討を行なった。検討の結果得られた API は、新たに定義された構造体 M-text 
に対応するために X ライブラリのテキスト処理機能を拡張したものと、
M-text のテキストプロパティという仕組みを用いて表示に関する情報を保持
するものに大別できる。

多言語テキストの表示を行なうための API では、表示に必要な情報を自動的に
決定することができ、かつアプリケーションプログラムからその決定をコント
ロールできることを目標として設計した。表示に必要な情報とは、テキストの
各文字がどのフォントを用いれば表示できるか、複雑な文字合成が必要なスク
リプトを表示する際にはどのようなルーティンが必要か、などである。

多言語テキストの入力を行なうための API では、アプリケーションプログラム
が複数の言語それぞれに対応した各入力メソッドを、同時に使用することがで
きることを目標として設計した。

\begin{enumerate}

\item 従来のXライブラリのfontsetを扱う関数をM-text用に拡張する機能の設計

Xライブラリのfontsetを扱う関数をM-text用に拡張するために、以下のものを
設計した。

     \begin{itemize}
     \item M-text表示用に拡張されたfontsetの構造体\par 
       構造体 \IPAref{MFontset}を設計した。
     \item fontsetの構造体を生成する機能\par 
       関数 \IPAref{mfontset}を設計した。
     \end{itemize}
     
\item M-textにおける表示上必要なテキストプロパティを付加する機能の設計

ある M-textを X Window 上で表示する際には、M-text に適切なテキストプロ
パティを付加する必要がある。このために以下の関数を設計した。

     \begin{itemize}
     \item 「m17n言語情報ベース」から得られる情報を元に、M-text
       中の各文字を表示するために使用するフォントの情報を、テキストプ
       ロパティとして付加する機能\par 関数 \IPAref{mdraw_add_font}を設
       計した。

      \item 「m17n言語情報ベース」から得られる情報を元にM-textを表示す
	る場合に、行分割可能点を判断するための関数を、テキストプロパティ
	として付加する機能\par 関数 
	\IPAref{mtext_put_linebreaker_prop}を設計した。（ライブラリ全
	体の設計を検討した結果、m17n 基本Cライブラリの一部として設計し
	た。）

     \end{itemize}
     
\item 従来のXライブラリの文字列表示関数をM-text用に拡張する機能の設計

従来のXライブラリの文字列表示関数は、M-text にそのまま適用することがで
きない。そこでM-textで表現された文字列に対して同等の表示ができるよう拡
張するために、以下のものを設計した。

     \begin{itemize}
     \item Xライブラリの構造体TextItemをM-text用に拡張した構造体\par 
	構造体 \IPAref{MTextItem}を設計した。
      \item M-textの指定した範囲の文字を、ディスプレイの指定した位置に表示する機能\par 
	関数 \IPAref{mdraw_text}を設計した。
      \item M-textの指定した範囲の文字を、ディスプレイの指定した位置にイメージとして表示する機能\par 
	関数 \IPAref{mdraw_image_text}を設計した。
      \item 複数のM-textをディスプレイの指定した位置に表示する機能\par 
	関数 \IPAref{mdraw_text_items}を設計した。 
      \item M-textを表示する際の表示エリアの大きさを返す機能\par 
	関数 \IPAref{mdraw_text_extents}を設計した。
      \item M-textを表示する際の各文字毎の表示エリアの大きさを返す機能\par 
	関数 \IPAref{mdraw_per_char_extents}を設計した。 
     \end{itemize}
     
\item 従来のXライブラリの文字列入力関数をM-text用に拡張する機能の設計

従来のXライブラリの文字列入力関数は、M-text にそのまま適用することがで
きない。そこでM-textで表現される文字列入力用に拡張するために、以下のも
のを設計した。

     \begin{itemize}
     \item Xの入力メソッドを使用して入力されたテキストを、M-textとして
 	返す機能\par 関数 \IPAref{mim_lookup_text}を設計した。
     \end{itemize}
     
\end{enumerate}
