この章の目次にもどる
前頁:3.1 tlang.h にもどる
次頁:3.3 wtstring.h にすすむ

3.2 mtstring.h

言語(スクリプト)指定コードを含む TC 文字列の各種操作ライブラリである。

□ 一意表現

文字列の先頭のデフォルトの言語指定がシステムスクリプトであり、 冗長な言語 / スクリプト指定を含まない TRON 多国語文字列を一意表現と呼ぶ。

mtc_unique
 
一意表現への変換

【形式】

 W mtc_unique( TC *dst, TC *src, W len )

【パラメータ】

TC      *dst 変換先
TC      *src 変換元
W       len 変換元(src)のデータ長(TC単位)

【リターン値】

変換結果データ長(TC単位)

【解説】

src の文字列を一意表現に変換して dst へ格納する。
src の文字列を TNULL まで変換する。
TNULL に出会う前に len 文字 ( TC 単位 ) に達した場合は、len 文字まで変換される。 ただし、len < 0 の場合は len は無視される。
dst の長さが len 文字に満たない場合は、 len 文字まで TNULL で埋められる。
変換結果がちょうど len 文字の場合は、 TNULL が付加されない。
len < 0 の場合は、必ず TNULL が 1 つ付加される。
戻値に変換結果の文字列 ( dst ) の TNULL を含まない長さ ( TC 単位 ) を返す。 dstsrc に同一のメモリー ( dst == src ) を指定することができる。 それ以外で領域の重複があった場合の動作は保証されない。

tc_chcmp
 
文字コード比較

【形式】

W tc_chcmp( TC c1, TC c2 )

【パラメータ】

TC      c1
TC      c2

【リターン値】

> 0 : c1 > c2
= 0 : c1 = c2
< 0 : c1 < c2

【解説】

文字 c1c2 を言語(スクリプト)指定を考慮せずに比較する。
下図の (1)〜(6) の各領域に分類し、 c1c2 が異なる領域に属している場合は、 領域番号 ( 1 〜 6 ) の数値で比較する。 同じ領域に属している場合は、c1c2 の文字コードを数値として比較する。

領域
図 6 : 領域

 

mtc_strcmp, mtc_strncmp
 
文字列比較

【形式】

W mtc_strcmp( TC *s1, TC *s2 )
W mtc_strncmp( TC *s1, TC *s2, W len )

【パラメータ】

TC      *s1, *s2 比較対象文字列へのポインタ
W       len     文字列長(TC数)

【リターン値】

> 0 : s1 > s2
= 0 : s1 = s2
< 0 : s1 < s2

【解説】

文字列 s1s2 を比較する。 s1, s2 は一意表現でなければならない。 s1s2 の先頭から 1 文字ずつ比較し、 最初に不一致となった文字の大小が比較結果として返される。
s1 または s2TNULL に出会うまで比較される。
TNULL に出会うまで s1s2 の文字列が一致していた場合は、先に TNULL に出会った方が小さいと判断される。 比較は、言語 ( スクリプト ) 指定を含む文字として比較される。 異なる言語 ( スクリプト ) に属す場合は、 TLANG の値によって比較される。 同じ言語 ( スクリプト ) に属す場合は、tc_chcmp() によって比較される。

mtc_strncmp() は、最大 len 文字 ( TC 単位 ) まで比較する。
それ以外は mtc_strcmp() と同じ。

(例)    s1 = [FE22]○○●
        s2 = [FE22]○○[FE21]●
        この場合は、[Fe22]● と [FE21]● が比較され、s1 > s2 となる。
mtc_strcat, mtc_strncat
 
文字列の連結

【形式】

TC* mtc_strcat( TC *dst, TC *src )
TC* mtc_strncat( TC *dst, TC *src, W len )

【パラメータ】

TC      *dst 連結先の文字列へのポインタ
TC      *src 連結対象文字列へのポインタ

W       連結する最大文字列長(TC単位)

【リターン値】

        TC      *dst

【解説】

文字列 dst の後ろに src を追加する。 dst, src は一意表現でなければならない。 連結された結果の dst は一意表現となる。 dstTNULL の位置に src が追加され、必ず終端に TNULL が付加される。 dst の最後の文字がシステムスクリプトの文字でなければ、 システムスクリプトの言語 ( スクリプト ) 指定コードを付加した後、 src を追加する。 したがって、dst の文字列は、 最大で dst + [FE21] + src + TNULL となる。 戻り値に dst を返す。

mtc_strncat() は、src の文字列を最大 len 文字 ( TC 単位 ) まで連結する。
それ以外は mtc_strcat() と同じ。

mtc_strjoin
 
複数文字列の連結

【形式】

W mtc_strjoin( TC *dst, W len, TC *s1, ... )

【パラメータ】

TC      *dst     連結先の文字列へのポインタ
W       len      連結文字列長(TC数)
TC      *s1, ... 連結対象文字列へのポインタ(複数)

【リターン値】

連結後のデータ長(TC単位)

【解説】

文字列 s1, ... を最大 len 文字 ( TC 単位 ) まで連結して dst へ格納する。 連結する文字列の数は任意で、最後に NULL を指定する。 s1, ... は一意表現でなくてもよい。 結果の dst は一意表現となる。 lenTNULL を含まない長さを指定する。 dst の終端には必ず TNULL を付加する。 したがって、dstlen + 1 文字 ( TC ) 分の領域が必要である。
結果の文字列の TNULL を除く長さ ( TC 単位 ) を戻値に返す。 dsts1 に同一のメモリー ( dst == s1 ) を指定することができる。 それ以外で領域の重複があった場合の動作は保証されない。 2 番目以降の文字列と dst の領域に重複があった場合の動作は保証されない。

(例)    mtc_strjoin(dst, len, s1, s2, s3, NULL);
mtc_strapd
 
文字列の追加

【形式】

W       mtc_strapd( TC *dst, TC *apd, W len )

【パラメータ】

TC      *dst    連結先の文字列へのポインタ
TC      *apd    連結対象文字列へのポインタ
W       len     連結後の最大文字列長(TC数)

【リターン値】

連結後の文字列のデータ長 ( TC 数 )

【解説】

文字列 dst の後ろに apdlen 文字 ( TC 単位 ) を超えないように追加する。 len 文字を超えてしまう場合は、 dst の後ろの文字を削除して、apd を追加する。 lenTNULL を含めない長さ。 dst の終端には必ず TNULL を付加するので、 dstlen + 1 文字 ( TC ) 分の領域が必要。 dst, apd は一意表現でなければならない。 結果の dst は一意表現となる。 戻値に結果の TNULL を含めない文字数 ( TC 単位 ) を返す。 apdlen 文字より長い場合の結果は保証されない。

mtc_strlen, mtc_strnlen
 
文字数を数える

【形式】

W mtc_strlen( TC *str )
W mtc_strnlen( TC *str, W n )

【パラメータ】

        TC      *str    対象文字列へのポインタ

        W       n       対象データ長(TC数)

【リターン値】

文字数

【解説】

str の文字列に含まれる文字数を数える。
言語(スクリプト)指定コードは、文字数に含めない。

mtc_strnlen() は、str の最大 n TC 個までに含まれる文字数を数える。

mtc_strchr, mtc_strrchr
 
文字の検索

【形式】

TC* mtc_strchr( TC *str, TC ch, W lang )
TC* mtc_strrchr( TC *str, TC ch, W lang )

【パラメータ】

TC      *str    検索対象文字列へのポインタ
TC      ch      検索対象文字
W       lang    検索対象言語指定(TLANG)

【リターン値】

検索が成功した場合:    検索した文字のアドレス
検索が失敗した場合:    NULL

【解説】

str の文字列から、 lang で指定した言語 ( スクリプト ) の ch の文字を探す。 文字列終端の TNULL も検索対象となる。 str は一意表現でなければならない。 mtc_strchr() は、str の先頭から終端へ向かって探す。 mtc_strrchr() は、str の終端から先頭へ向かって探す。 最初に見つかった位置を戻値に返す。 見つからなかった場合は NULL を返す。

lang = 0 または ch = TNULL の場合は lang は無視され、すべての言語 ( スクリプト ) を対象に ch の文字を探す。

mtc_strchr2
 
一意表現でない文字列を対象とした文字の検索

【形式】

TC* mtc_strchr2( TC *str, W *slang, TC ch, W clang )

【パラメータ】

TC      *str    検索対象文字列へのポインタ
W       *slang  検索対象文字列の先頭の言語指定(TLANG)
TC      ch      検索対象文字
W       clang   検索対象言語指定(TLANG)

【リターン値】

検索が成功した場合:    検索した文字のアドレス
検索が失敗した場合:    NULL

W       *slang  検索対象結果の言語指定(TLANG)

【解説】

str の文字列から、clang で指定した言語 ( スクリプト ) の ch の文字を探す。 文字列終端の TNULL も検索対象となる。 str の文字列は *slang で指定した言語 ( スクリプト ) で始まるものとする。 検索は str の先頭から終端へ向かって行われる。 最初に見つかった位置を戻値に返し、その文字の言語 ( スクリプト ) を *slangに返す。 見つからなかった場合は戻値に NULL を返し、 *slang には文字列終端の言語 ( スクリプト ) が返される。

clang = 0 または ch = TNULL の場合は clang は無視され、 すべての言語 ( スクリプト ) を対象に ch の文字を探す。

mtc_strpos
 
文字位置を得る

【形式】

TC mtc_strpos( TC *str, W n, W *lang )

【パラメータ】

TC      *str    対象文字列へのポインタ
W       n       対象文字位置(0-)
W       *lang   対象文字の言語指定(TLANG)の格納先ポインタ

【リターン値】

文字があった場合  :    文字へのポインタ
文字がなかった場合:    NULL

W       *lang   対象文字の言語指定(TLANG)

【解説】

str の文字列の n 文字目の文字の位置と言語(スクリプト)を調べる。 str は一意表現でなければならない。 戻値に文字位置、*lang にその文字の言語 ( スクリプト ) が返る。n は、言語 ( スクリプト ) 指定コードを含めずに数えた文字数。 最初の文字が 0 となる。nstr に含まれる文字を超えていた場合、 および n < 0 の場合は、 戻値が NULL となる。 この場合、*lang には str の終端の言語 ( スクリプト ) が返る。

mtc_poslang
 
文字位置の言語(スクリプト)を得る

【形式】

W mtc_poslang( TC *str, TC *p )

【パラメータ】

TC      *str    対象文字列へのポインタ
TC      *p      対象文字列中の文字へのポインタ

【リターン値】

指定位置が文字であった場合        :言語指定(TLANG)

指定位置が言語指定コードまたは
strの文字列に含まれていない場合   : 0

【解説】

str の文字列の p の位置の文字の言語 ( スクリプト ) を調べる。 str は一意表現でなければならない。 戻値にその文字の言語 ( スクリプト ) を返す。 p の位置が言語 ( スクリプト ) 指定コードであった場合、 および p の位置が str の文字列に含まれていない場合は、戻値に 0 が返る。


この章の目次にもどる
前頁:3.1 tlang.h にもどる
次頁:3.3 wtstring.h にすすむ