Main Page   Modules   Data Structures   Globals   Appendix  

テキストプロパティ
[コア API]

テキストプロパティを操作するための関数. [詳細]

型定義

typedef MPlist *(*) MTextPropSerializeFunc (void *val)
 シリアライザ関数の型宣言.
typedef void *(*) MTextPropDeserializeFunc (MPlist *plist)
 デシリアライザ関数の型宣言.
typedef MTextProperty MTextProperty
 テキストプロパティの型宣言.

列挙型

enum  MTextPropertyControl {
  MTEXTPROP_FRONT_STICKY = 0x01,
  MTEXTPROP_REAR_STICKY = 0x02,
  MTEXTPROP_VOLATILE_WEAK = 0x04,
  MTEXTPROP_VOLATILE_STRONG = 0x08,
  MTEXTPROP_NO_MERGE = 0x10,
  MTEXTPROP_CONTROL_MAX = 0x1F
}
 テキストプロパティを制御するフラグビット. [詳細]

関数

void * mtext_get_prop (MText *mt, int pos, MSymbol key)
 テキストプロパティの一番上の値を得る.
int mtext_get_prop_values (MText *mt, int pos, MSymbol key, void **values, int num)
 テキストプロパティの値を複数個得る.
int mtext_get_prop_keys (MText *mt, int pos, MSymbol **keys)
 M-text の指定した位置のテキストプロパティのキーのリストを得る.
int mtext_put_prop (MText *mt, int from, int to, MSymbol key, void *val)
 テキストプロパティを設定する.
int mtext_put_prop_values (MText *mt, int from, int to, MSymbol key, void **values, int num)
 同じキーのテキストプロパティを複数設定する.
int mtext_push_prop (MText *mt, int from, int to, MSymbol key, void *val)
 テキストプロパティをプッシュする.
int mtext_pop_prop (MText *mt, int from, int to, MSymbol key)
 テキストプロパティをポップする.
int mtext_prop_range (MText *mt, MSymbol key, int pos, int *from, int *to, int deeper)
 テキストプロパティが同じ値をとる範囲を調べる.
MTextPropertymtext_property (MSymbol key, void *val, int control_bits)
 テキストプロパティを生成する.
MTextmtext_property_mtext (MTextProperty *prop)
 あるテキストプロパティを持つ M-text を返す.
MSymbol mtext_property_key (MTextProperty *prop)
 テキストプロパティのキーを返す.
void * mtext_property_value (MTextProperty *prop)
 テキストプロパティの値を返す.
int mtext_property_start (MTextProperty *prop)
 テキストプロパティの開始位置を返す.
int mtext_property_end (MTextProperty *prop)
 テキストプロパティの終了位置を返す.
MTextPropertymtext_get_property (MText *mt, int pos, MSymbol key)
 一番上のテキストプロパティを得る.
int mtext_get_properties (MText *mt, int pos, MSymbol key, MTextProperty **props, int num)
 複数のテキストプロパティを得る.
int mtext_attach_property (MText *mt, int from, int to, MTextProperty *prop)
 M-textにテキストプロパティを付加する.
int mtext_detach_property (MTextProperty *prop)
 M-text からテキストプロパティを分離する.
int mtext_push_property (MText *mt, int from, int to, MTextProperty *prop)
 M-text にテキストプロパティをプッシュする.
MTextmtext_serialize (MText *mt, int from, int to, MPlist *property_list)
 M-text 中のテキストプロパティをシリアライズする.
MTextmtext_deserialize (MText *mt)
 M-text 中のテキストプロパティをデシリアライズする.

変数

MSymbol Mtext_prop_serializer
 シリアライザ関数を指定するシンボル.
MSymbol Mtext_prop_deserializer
 デシリアライザ関数を指定するシンボル.

説明

M-text 内の各文字は、テキストプロパティ と呼ばれるプロパティを 持つことができる。テキストプロパティは、M-text の各部位に付加され たさまざまな情報を保持しており、アプリケーションプログラムはそれら の情報を統一的に扱うことができる。M-text 自体が豊富な情報を持つた め、アプリケーションプログラム中の関数を簡素化することができる。

テキストプロパティは キー からなる。キーはシンボルであ り、値は (void *) 型にキャストできるものなら何でもよい。 他のタイプのプロパティと異なり、一つのテキストプロパティが複数の値 を持つことが許される。「キーが K であるテキストプロパティ」のこと を簡単に「K プロパティ」と呼ぶことがある。


型定義

typedef MPlist*(*) MTextPropSerializeFunc(void *val)

シリアライザ関数の型である。 あるシンボルのプロパティのキーが Mtext_prop_serializer であるとき、 値はこの型でなくてはならない。

参照:
mtext_serialize(), Mtext_prop_serializer

typedef void*(*) MTextPropDeserializeFunc(MPlist *plist)

デシリアライザ関数の型である。 あるシンボルのプロパティのキーが Msymbol_prop_deserializer であるとき、 値はこの型でなくてはならない。

参照:
Mtext_prop_deserialize(), Mtext_prop_deserializer

typedef struct MTextProperty MTextProperty

MTextPropertyテキストプロパティ オブジェクトの型である。 内部構造はアプリケーションプログラムからは見えない。


列挙型

enum MTextPropertyControl

関数 mtext_property() は以下のフラグビットの論理 OR を引数としてとることができる。 フラグビットは生成されたテキストプロパティの振舞いを制御する。 詳細は各フラグビットの説明を参照。

列挙型の値:
MTEXTPROP_FRONT_STICKY  このビットが on ならば、このテキストプロパティの始まる点あるいは中間に挿入された M-text はこのテキストプロパティを継承する。
MTEXTPROP_REAR_STICKY  このビットが on ならば、このテキストプロパティの終わる点あるいは中間に挿入された M-text はこのテキストプロパティを継承する。
MTEXTPROP_VOLATILE_WEAK  このビットが on ならば、このテキストプロパティの範囲内のテキストが変更された場合テキストプロパティは取り除かれる。
MTEXTPROP_VOLATILE_STRONG  このビットが on ならば、このテキストプロパティの範囲内のテキストあるいは別のテキストプロパティが変更された場合このテキ ストプロパティは取り除かれる。
MTEXTPROP_NO_MERGE  このビットが on ならば、このテキストプロパティは他のプロパティと自動的にはマージされない。
MTEXTPROP_CONTROL_MAX 


関数

void* mtext_get_prop ( MText mt,
int  pos,
MSymbol  key 
)

関数 mtext_get_prop() は、M-text mt 内の位置 pos にある文字のテ キストプロパティのうち、キーが key であるものを探す。

戻り値:
テキストプロパティがみつかれば、mtext_get_prop() はそのプロパティ の値を返す。値が複数存在するときは、一番上の値を返す。見つからなけ れば外部変数 merror_code を変更することなく NULL を返す。
エラーが検出された場合 mtext_get_prop()NULL を返し、外部変 数 merror_code にエラーコードを設定する。

覚え書き:
エラーなしで NULL が返された場合には二つの可能性がある。
この二つを区別する必要がある場合には、関数 mtext_get_prop_values() を代わりに使用すること。

エラー:
MERROR_RANGE, MERROR_SYMBOL
参照:
mtext_get_prop_values(), mtext_put_prop(), mtext_put_prop_values(), mtext_push_prop(), mtext_pop_prop(), mtext_prop_range()

int mtext_get_prop_values ( MText mt,
int  pos,
MSymbol  key,
void **  values,
int  num 
)

関数 mtext_get_prop_values() は、M-text mt 内で pos という位置 にある文字のプロパティのうち、キーが key であるものを探す。もしそ のようなプロパティが見つかれば、それが持つ値 (複数可) を values の指すメモリ領域に格納する。num は格納する値の数の上限である。

戻り値:
処理が成功すれば、mtext_get_prop_values() は実際にメモリに格納さ れた値の数を返す。pos の位置の文字が key をキーとするプロパティ を持たなければ 0 を返す。エラーが検出された場合は -1 を返し、外部 変数 merror_code にエラーコードを設定する。

エラー:
MERROR_RANGE, MERROR_SYMBOL
参照:
mtext_get_prop(), mtext_put_prop(), mtext_put_prop_values(), mtext_push_prop(), mtext_pop_prop(), mtext_prop_range()

int mtext_get_prop_keys ( MText mt,
int  pos,
MSymbol **  keys 
)

関数 mtext_get_prop_keys() は、M-text mt 内で pos の位置にある すべてのテキストプロパティのキーを要素とする配列を作り、その配列の アドレスを *keys に設定する。この配列のために確保されたメモリを解 放するのはユーザの責任である。

戻り値:
処理が成功すれば mtext_get_prop_keys() は得られたリストの長さを返 す。そうでなければ -1 を返し、外部変数 merror_code にエラーコードを 設定する。
エラー:
MERROR_RANGE
参照:
mtext_get_prop(), mtext_put_prop(), mtext_put_prop_values(), mtext_get_prop_values(), mtext_push_prop(), mtext_pop_prop()

int mtext_put_prop ( MText mt,
int  from,
int  to,
MSymbol  key,
void *  val 
)

関数 mtext_put_prop() は、M-text mtfrom (含まれる)から to (含まれない)の範囲の文字に、キーが key で値が val であるよ うなテキストプロパティを設定する。この関数によって

                         FROM                    TO
M-text:      |<------------|-------- MT ---------|------------>|
PROP:         <------------------ OLD_VAL -------------------->

は次のようになる。

                         FROM                    TO
M-text:       |<------------|-------- MT ---------|------------>|
PROP:          <-- OLD_VAL-><-------- VAL -------><-- OLD_VAL-->

戻り値:
処理が成功すれば mtext_put_prop() は 0 を返す。そうでなければ -1 を返し、外部変数 merror_code にエラーコードを設定する。

エラー:
MERROR_RANGE, MERROR_SYMBOL
参照:
mtext_put_prop_values(), mtext_get_prop(), mtext_get_prop_values(), mtext_push_prop(), mtext_pop_prop(), mtext_prop_range()

int mtext_put_prop_values ( MText mt,
int  from,
int  to,
MSymbol  key,
void **  values,
int  num 
)

関数 mtext_put_prop_values() は、M-Text mtfrom (含まれる) から to (含まれない)の範囲の文字に、テキストプロパティを設定す る。テキストプロパティのキーは key によって、値(複数可)は values によって指定される。num は設定される値の個数である。

戻り値:
処理が成功すれば、mtext_put_prop_values() は 0 を返す。そうでなけ れば -1 を返し、外部変数 merror_code にエラーコードを設定する。

エラー:
MERROR_RANGE, MERROR_SYMBOL
参照:
mtext_put_prop(), mtext_get_prop(), mtext_get_prop_values(), mtext_push_prop(), mtext_pop_prop(), mtext_prop_range()

int mtext_push_prop ( MText mt,
int  from,
int  to,
MSymbol  key,
void *  val 
)

関数 mtext_push_prop() は、キーが key で値が val であるテキスト プロパティを、M-text mt 中の from (含まれる)から to (含まれな い)の範囲の文字にプッシュする。この関数によって

                    FROM                    TO
M-text: |<------------|-------- MT ---------|------------>|
PROP  :  <------------------ OLD_VAL -------------------->
は次のようになる。
                    FROM                    TO
M-text: |<------------|-------- MT ---------|------------>|
PROP  :  <------------------- OLD_VAL ------------------->
PROP  :               <-------- VAL ------->

戻り値:
処理が成功すれば、mtext_push_prop() は 0 を返す。そうでなければ -1 を返し、外部変数 merror_code にエラーコードを設定する。

エラー:
MERROR_RANGE, MERROR_SYMBOL
参照:
mtext_put_prop(), mtext_put_prop_values(), mtext_get_prop(), mtext_get_prop_values(), mtext_pop_prop(), mtext_prop_range()

int mtext_pop_prop ( MText mt,
int  from,
int  to,
MSymbol  key 
)

関数 mtext_pop_prop() は、キーが key であるテキストプロパティの うち一番上のものを、M-text mtfrom (含まれる)から to(含ま れない)の範囲の文字から取り除く。

指定範囲の文字がそのようなプロパティを持たないならば、この関数は何 もしない。この関数によって、

                    FROM                    TO
M-text: |<------------|-------- MT ---------|------------>|
PROP  :  <------------------ OLD_VAL -------------------->
は以下のようになる。
                    FROM                    TO
M-text: |<------------|-------- MT ---------|------------>|
PROP  :  <--OLD_VAL-->|                     |<--OLD_VAL-->|

戻り値:
処理が成功すれば、mtext_pop_prop() は 0 を返す。そうでなければ -1 を返し、外部変数 merror_code にエラーコードを設定する。

エラー:
MERROR_RANGE, MERROR_SYMBOL
参照:
mtext_put_prop(), mtext_put_prop_values(), mtext_get_prop(), mtext_get_prop_values(), mtext_push_prop(), mtext_prop_range()

int mtext_prop_range ( MText mt,
MSymbol  key,
int  pos,
int *  from,
int *  to,
int  deeper 
)

関数 mtext_prop_range() は、指定したテキストプロパティの値が同じ である連続した文字の範囲を調べる。まず M-text mtpos の位置に ある文字のプロパティのうち、キー key で指定されたもの値を見つけ る。そして前後の文字も key のプロパティの値が同じであるかどうかを 調べる。見つけた範囲の最初と最後を、それぞれ fromto にポイン トされる変数に保存する。from に保存される文字の位置は見つけた範囲 に含まれるが、to は含まれない。(to の前で同じ値をとる範囲は終わ る。)この範囲指定法は、関数 mtext_put_prop() などと共通である。

deeper が 0 でなければ、key というキーを持つプロパティのうち一番 上のものだけでなく、スタック中のすべてのものが比較される。

fromNULL ならば、範囲の始まりは探索しない。toNULL ならば、範囲の終りは探索しない。

戻り値:
処理が成功すれば、mtext_prop_range() は key プロパティの値の数を 返す。そうでなければ-1 を返し、 外部変数 merror_code にエラーコー ドを設定する。

エラー:
MERROR_RANGE, MERROR_SYMBOL
参照:
mtext_put_prop(), mtext_put_prop_values(), mtext_get_prop(), mtext_get_prop_values(), mtext_pop_prop(), mtext_push_prop()

MTextProperty* mtext_property ( MSymbol  key,
void *  val,
int  control_bits 
)

関数 mtext_property()key をキー、val を値とする新しく割り当 てられたテキストプロパティを返す。生成したテキストプロパティはいか なる M-text にも付加されていない、すなわち分離して (detached) いる。

control_bits は 0 であるか enum MTextPropertyControl の論理 OR でなくてはならない。

MText* mtext_property_mtext ( MTextProperty prop  ) 

関数 mtext_property_mtext() は、テキストプロパティprop が付加さ れている M-text を返す。その時点で prop が分離していれば NULL を 返す。

MSymbol mtext_property_key ( MTextProperty prop  ) 

関数 mtext_property_key() は、テキストプロパティ prop のキー(シ ンボル)を返す。

void* mtext_property_value ( MTextProperty prop  ) 

関数 mtext_property_value() は、テキストプロパティ prop の値を返 す。

int mtext_property_start ( MTextProperty prop  ) 

関数 mtext_property_start() は、テキストプロパティ prop の開始位 置を返す。開始位置とは M-text 中で prop が始まる文字位置である。 prop が分離されていれば、-1 を返す。

int mtext_property_end ( MTextProperty prop  ) 

関数 mtext_property_end() は、テキストプロパティ prop の終了位置 を返す。終了位置とは M-text 中で prop が終る文字位置である。prop が分離されていれば、-1 を返す。

MTextProperty* mtext_get_property ( MText mt,
int  pos,
MSymbol  key 
)

関数 mtext_get_property() は M-text mt の位置 pos の文字がキー が key であるテキストプロパティを持つかどうかを調べる。

戻り値:
テキストプロパティが見つかれば、mtext_get_property() はそれを返す。 複数ある場合には、一番上のものを返す。見つからなければ、外部変数 merror_code を変えることなく NULL を返す。
エラーが検出された場合 mtext_get_property()NULL を返し、外 部変数 merror_code にエラーコードを設定する。

int mtext_get_properties ( MText mt,
int  pos,
MSymbol  key,
MTextProperty **  props,
int  num 
)

関数 mtext_get_properties() は M-text mt の位置 pos の文字がキー が key であるテキストプロパティを持つかどうかを調べる。そのような プロパティがみつかれば、props が指すメモリ領域に保存する。num は 保存されるプロパティの数の上限である。

戻り値:
処理が成功すれば、mtext_get_properties() は実際に保存したプロパティ の数を返す。pos の位置の文字がキーが key であるプロパティを持た なければ、0 が返る。エラーが検出された場合には、 mtext_get_properties() は -1 を返し、外部変数 merror_code にエラー コードを設定する。

int mtext_attach_property ( MText mt,
int  from,
int  to,
MTextProperty prop 
)

関数 mtext_attach_property() は、M-text mtfrom から to ま での領域にテキストプロパティ prop を付加する。もし prop が既に M-text に付加されていれば、mt に付加する前に分離される。

戻り値:
処理に成功すれば、mtext_attach_property() は 0 を返す。そうでなけ れば -1 を返して外部変数merror_code にエラーコードを設定する。

int mtext_detach_property ( MTextProperty prop  ) 

関数 mtext_detach_property() はテキストプロパティ prop を分離する。

戻り値:
この関数は常に 0 を返す。

int mtext_push_property ( MText mt,
int  from,
int  to,
MTextProperty prop 
)

関数 mtext_push_property() は、テキストプロパティ prop を、 M-text mt 中の from (含まれる)から to (含まれない)の範囲の 文字にプッシュする。

戻り値:
処理に成功すれば、mtext_push_property() は 0 を返す。そうでなけ れば -1 を返して外部変数merror_code にエラーコードを設定する。

MText* mtext_serialize ( MText mt,
int  from,
int  to,
MPlist property_list 
)

関数 mtext_serialize() は M-text mtfrom から to までのテキ ストをシリアライズする。シリアライズした結果は XML 形式の M-text で ある。 property_list はシリアライズされるテキストプロパティを限定 する。対象となるテキストプロパティは、そのキーが

もののみである。この条件を満たすテキストプロパティは、生成される XML 表現中で "property" 要素にシリアライズされる。

生成される XML の DTD は以下の通り:

<!DOCTYPE mtext [
  <!ELEMENT mtext (property*,body+)>
  <!ELEMENT property EMPTY>
  <!ELEMENT body (#PCDATA)>
  <!ATTLIST property key CDATA #REQUIRED>
  <!ATTLIST property value CDATA #REQUIRED>
  <!ATTLIST property from CDATA #REQUIRED>
  <!ATTLIST property to CDATA #REQUIRED>
  <!ATTLIST property control CDATA #REQUIRED>
 ]>

この関数は libxml2 ライブラリに依存する。m17n ライブラリがlibxml2 無しに設定されている場合、この関数は常に失敗する。

戻り値:
処理に成功すれば、mtext_serialize() は XML 形式で M-text を返す。 そうでなければ NULL を返して外部変数merror_code にエラーコード を設定する。
参照:
mtext_deserialize(), Mtext_prop_serializer

MText* mtext_deserialize ( MText mt  ) 

関数 mtext_deserialize() は M-text mt をデシリアライズする。mt は次の DTD を持つ XML でなくてはならない。

<!DOCTYPE mtext [
  <!ELEMENT mtext (property*,body+)>
  <!ELEMENT property EMPTY>
  <!ELEMENT body (#PCDATA)>
  <!ATTLIST property key CDATA #REQUIRED>
  <!ATTLIST property value CDATA #REQUIRED>
  <!ATTLIST property from CDATA #REQUIRED>
  <!ATTLIST property to CDATA #REQUIRED>
  <!ATTLIST property control CDATA #REQUIRED>
 ]>

この関数は libxml2 ライブラリに依存する。m17n ライブラリがlibxml2 無しに設定されている場合、この関数は常に失敗する。

戻り値:
処理に成功すれば、mtext_serialize() は得られた M-text を 返す。そうでなければ NULL を返して外部変数 merror_code にエラー コードを設定する。
参照:
mtext_serialize(), Mtext_prop_deserializer


変数

MSymbol Mtext_prop_serializer

テキストプロパティをシリアライズするためには、そのテキストプロパ ティ用のシリアライザ関数を与えなくてはならない。具体的には、 Mtext_prop_serializer をキーとし、適切なシリアライズ関数へのポイ ンタを値とするシンボルプロパティを指定する。

参照:
mtext_serialize(), MTextPropSerializeFunc

MSymbol Mtext_prop_deserializer

テキストプロパティをデシリアライズするためには、そのテキストプロ パティ用のデシリアライザ関数を与えなくてはならない。具体的には、 Mtext_prop_deserializer をキーとし、適切なデシリアライズ関数への ポインタを値とするシンボルプロパティを指定する。

参照:
mtext_deserialize(), MTextPropSerializeFunc


このページの先頭

Main Page   Modules   Data Structures   Globals   Appendix  

mulemark