この章の目次にもどる
前頁:第3章 多国語(多漢字)ライブラリにもどる
次頁:3.2 mtstring.h にすすむ

3.1 tlang.h

言語指定コードを扱うためのライブラリである。
言語指定コードの短縮形定義、言語指定コードのチェック、 変換関数を含んでいる。

□ 言語(スクリプト)指定コードの短縮形定義

    0xAABB  AA : FE の繰り返し数 - 1
            BB : FE に続くコード

    (例)    FE21      -> 0x0021
            FEFE 0021 -> 0x0121
            FEFE FE21 -> 0x0221

    typedef UH      TLANG;

    #define TSC_SYS         0x0021  /* システム */
    #define TSC_JPN1        0x0022  /* 日本1    */
    #define TSC_JPN2        0x0023  /* 日本2    */

    #define TSC_MIN         0x0021
    #define TSC_MAX         0x003f
isValidTLANG
 
TLANG の値の有効性確認

【形式】

Bool isValidTLANG( W lang )

【パラメータ】

W       lang    チェック対象の値(TLANG)

【リターン値】

TLANGの値の場合:True
TLANGの値ではない場合:False

【解説】

言語 ( スクリプト ) 指定コードとして有効であれば True を返す。

isZone
 
ゾーン判定

【形式】

Bool inZone( TC c, TC lt, TC rb )

【パラメータ】

TC      c       チェック対象文字
TC      lt      文字範囲指定
TC      rb      文字範囲指定

【リターン値】

指定範囲に含まれている場合  :True      
指定範囲に含まれていない場合:False

【解説】

文字が指定のゾーン内に含まれていれば True を返す。

#define isAZone(c)      inZone(c, 0x2121, 0x7e7e) /* A ゾーン内 */
#define isBZone(c)      inZone(c, 0x8021, 0xfd7e) /* B ゾーン内 */
#define isCZone(c)      inZone(c, 0x2180, 0x7efd) /* C ゾーン内 */
#define isDZone(c)      inZone(c, 0x8080, 0xfdfd) /* D ゾーン内 */
Inline Bool isADZone( TC c )                      /* A〜D ゾーン内 */
{
        UW      c1 = c >> 8;
        UW      c2 = c & 0xff;
        return (   c1 >= 0x21 && c1 != 0x7f && c1 <= 0xfd
                && c2 >= 0x21 && c2 != 0x7f && c2 <= 0xfd );
}
isTLANG, isTLANGce
 
言語(スクリプト)指定コード判定

【形式】

W isTLANG( TC *tp, W len, TC **ntp );
W isTLANGce( TC *tp, W len, TC **ntp );

【パラメータ】

TC      *tp     対象文字列へのポインタ
W       len     tp の文字列の有効最大長(TC 単位)
TC      **ntp   NULLでない場合に言語指定コードの次の文字の位置を返す

【リターン値】

>  0    言語指定コード (TLANG が戻る)
=  0    言語指定コードでない
= -1    不正言語指定コード
= -2    未確定言語指定コード (言語指定コードが途中で終っている)

【解説】

tp の文字列が言語指定コードであるか判定する。
tpから最大len ( TC 単位 ) までのデータに関して言語指定コードの判定を行う。
len = 0 を指定すると len は無効となり TNULL までが対象となる。

(例)    FE21                    戻値 = 0x0021   *ntp = tp + 1
        FEFE 0021               戻値 = 0x0121   *ntp = tp + 2
        2121                    戻値 = 0        *ntp = tp
        FE00                    戻値 = -1       *ntp = tp + 1
        FEFE 2121               戻値 = -1       *ntp = tp + 2
        FEFE 0000               戻値 = -2       *ntp = tp + 1
        FEFE 0021  (len = 1)    戻値 = -2       *ntp = tp + 1

isTLANGce() は、tp の文字列を ConvEndianH() によりエンディアン変換して判定する。 それ以外は isTLANG() と同様である。

isTLANGch
 
言語(スクリプト)指定コード判定

【形式】

W isTLANGch( TC ch, W *n )

【パラメータ】

TC      ch      対象文字/言語(スクリプト)指定コード
W       *n      言語指定のカウンタ領域へのポインタ

【リターン値】

>  0    言語指定コード (TLANG が戻る)
=  0    言語指定コードでない
= -1    不正言語指定コード
= -2    未確定言語指定コード (言語指定コードの途中)

【解説】

1文字 ( TC ) ずつ言語指定コードを判定する。

初回の呼出時に *n = 0 に初期化しておく。 以後は、返された *n の値を変更せずに繰り返し呼び出すことで、 言語指定コードを判定する。

(使用例)
        n = 0;
        while ( (lang = isTLANGch(*tp++, &n)) == -2 );
TLANGtoTC
 
言語指定コード(TLANG)を TC 列へ変換

【形式】

W TLANGtoTC( TC *tp, W max, TLANG lang )

【パラメータ】

TC      *tp     言語指定コード格納先へのポインタ
W       max     格納先の領域サイズ(TC単位)
TLANG   lang    言語指定(TLANG)

【リターン値】

langTC 列へ変換するために必要な長さ ( TC 単位 )。

【解説】

lang の言語指定コードを TC 列に変換して tp へ格納する。 最後に TNULL が付く。 戻値に langTC 列へ変換するために必要な長さ ( TC 単位 ) を返す。 最後の TNULL の分は含まれない。 TC 列の長さが max を超えた場合は max まで格納される。 したがって、戻値 > max の場合は、 格納しきれていないことを示す。 ただし、max < 0 の場合は max は無視される。 tp = NULL の場合、TC 列は格納されず、 TC 列の長さのみを戻値に返す。 不正な lang を指定した場合の結果は保証されない。


この章の目次にもどる
前頁:第3章 多国語(多漢字)ライブラリにもどる
次頁:3.2 mtsring.h にすすむ