X Version 11, Release 7.7
Copyright © 1994 TOSHIBA Corporation, IBM Corporation
Permission to use, copy, modify, and distribute this documentation for any purpose and without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. TOSHIBA Corporation and IBM Corporation make no representations about the suitability for any purpose of the information in this document. This documentation is provided as is without express or implied warranty.
(訳)
(本文書を使用、複製、改変、および頒布することは、目的を問わず無償で許可する。但し、上記の著作権表示および本許諾表示を全ての複製に記載しなければならない。TOSHIBA Corporation および IBM Corporation は、本文書に含まれる情報のいかなる目的への適切性についても、何ら表明を行わない。本文書は現状有姿で、明示または暗黙の保証なしに提供される。)
Copyright © 1994 X Consortium
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Except as contained in this notice, the name of X Consortium shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from X Consortium.
X Window System is a trademark of The Open Group.
(訳)
(本ソフトウェアおよび関連する文書のファイル(以下「ソフトウェア」)の複製を取得した全ての人物に対し、以下の条件に従うことを前提に、ソフトウェアを無制限に扱うことを無償で許可する。これには、ソフトウェアの複製を使用、複製、改変、結合、公開、頒布、再許諾、および/または販売する権利、およびソフトウェアを提供する人物に同様の行為を許可する権利が含まれるが、これらに限定されない。)
(上記の著作権表示および本許諾表示を、ソフトウェアの全ての複製または実質的な部分に記載するものとする。 )
(ソフトウェアは「現状有姿」で提供され、明示的であるか黙示的であるかを問わず、いかなる種類の保証も行われない。ここでいう保証には、商品性、特定目的への適合性、および権利の非侵害性に関する保証も含まれるが、これらに限定されるものではない。X CONSORTIUM は、契約、不法行為、またはその他の行為であるかを問わず、ソフトウェアまたはソフトウェアの使用もしくはその他に取り扱いに起因または関連して生じるいかなる請求、損害賠償、その他の責任について、一切の責任を負わない。)
(X Consortium の名称は、この表示に記載されている場合を除き、X Consortium の事前の書面による承認を得ずに、宣伝であろうとその他の形であろうと、ソフトウェアの販売を促進するもの、またはソフトウェアの使用その他の扱いを奨励するものに使用してはならない。)
(X Window System は The Open Group の商標である。)
目次
目次
この文書では、Xlib の参考実装の内部にあるロケール依存関数の全てで利用できる「構造」、「メソッド」及びその2つの「シグネチャ」を定義する。参考実装の内部にある構成要素群を次の図 (Fig.1) のように分割することを提案する。
基本的には、Xlib の国際化されている部分(ロケール依存の X、Locale Dependent X、LDX)は、3つの部品(object)から成る。即ち、ロケール(locale、LC)、入力メソッド(input method、IM)、及び出力メソッド(output method、OM)である。LC は、ユーザの言語環境に依存する情報一式を提供する。IM はテキスト入力を管理し、OM はテキストの描画を管理する。IM と OM は、両者とも LC のデータ(LC data)に大きく依存している。
X11R5 には、Xlib の国際化を試みた参考実装が2つ存在する。Ximp と Xsi である。しかし、どちらの実装においても IM と OM は、実際には LC の非公式の拡張を利用(参照)している。これによって、Ximp と Xsi の2つの参考実装は共存できなくなっている。例えば、ユーザが特別な目的のために Ximp の一部として新たな OM を作成した場合、この OM は Xsi とは協働できない。
この問題の解決するために、上記の3つの部品の間の標準 API を定義し、それらの部品に共通の構造を定義する。
X11R6 の現在の参考実装について説明する。
複数のロケール依存インタフェイスの間に存在する共通部分(インタフェイスの共通集合)について、その情報を文書化する。
より柔軟で着脱しやすい層を作る。
この章では、ロケール・オブジェクト・バインディングに関わる関数(着脱可能な層(pluggable layer)を実装するためのもの)について説明する。
ロケール・ローダ(locale loader)は、ロケール・オブジェクトのエントリ・ポイントである。ロケール・ローダは、XLCd オブジェクトをインスタンス化し(具体的な XLCd オブジェクトを作成し)、ロケール・メソッド群を指定されたロケール名と結びつける。ローダの動作は実装依存である。また、利用できるローダの種類も実装依存である。
ローダは _XOpenLC
の中で呼び出されるが、_XOpenLC
の呼び出しを行う者は、同関数の内側のことを気にする必要は無い。例えば、ローダを実装するにあたって動的に読み込みを行う関数を使用しており、且つ、対応する XLCd を解放する時に、ローダによって動的に組み込まれた機能部品(module)を取り除く(unload)ことが期待されている場合、この取り除き処理は XLCdMethods 構造体の閉じるメソッド(close method)が行うものとする。(訳註:XLCdMethods 構造体は内部に様々な手続きを保持している構造体である。定義は X11R7.7/lib/libX11-1.5.0/src/xlibi18n/Xlcint.h にある。)
ロケール・ローダのリストを初期化する
関数 _XlcInitLoader
は、開発企業固有の方法でロケール・ローダ(locale loader)のリストを初期化するものである。各ローダの登録は、_XlcAddLoader
を呼び出して行う。リスト内のローダの数と順序は、実装依存である。
ローダを追加する
typedef XLCd (*XLCdLoadProc)(name);
char *name;
typedef int XlcPosition;
#define XlcHead
#define XlcTail
関数 _XlcAddLoader
は、引数「proc」で指定されたロケール・ローダを内部のローダ・リストに登録するものである。引数 position によって、「proc」のローダをローダ・リストの先頭に加えるべきなのか(XlcHead)、それとも末尾(XlcTail)に加えるべきなのかを指定する。
オブジェクト・ローダを呼び出す時は、ローダ・リストの先頭から順番に呼び出すことになる。
ローダを削除する
関数 _XlcRemoveLoader
は、引数「proc」で指定されたロケール・ローダをローダ・リストから削除するものである。
現在の実装では、以下のロケール・ローダが用意されている。
_XlcDefaultLoader
_XlcGenericLoader
_XlcUtfLoader
_XaixOsDynamicLoad
この章では、ロケール・メソッドの API について説明する。この API は、IM と OM の両方から利用できる関数を集めたものである。ロケール・メソッドの API は次のような機能を提供する。即ち、ロケール依存の情報を取得する機能、文字集合(charset)を操作する機能、テキストを変換する機能などである。
ロケール・オブジェクトの私的な拡張(開発企業が作ったもの)を利用する代わりに上記の API を用いることで、ロケール、IM 及び OM の3者が互いに独立している状態を保つことができるようになる。
ロケール・メソッドを開く
関数 _XOpenLC
は、指定されたロケール名に対応するロケール・メソッドを開くものである。_XOpenLC
は、ロケール・オブジェクト・ローダ(ロケール・オブジェクトを読み込む手続き)を呼び出す。このローダは、_XlcAddLoader
を通じて内部のローダ・リストに登録してあるものである。呼び出されたローダが有効であり且つロケールを開くことに成功した場合、_XOpenLC
は XLCd を返す(訳註:XLCd はメソッドとデータを併せ持つ構造体を指す。定義は X11R7.7/lib/libX11-1.5.0/src/xlibi18n/Xlcint.h にある)。呼び出されたローダが有効でなかったか、あるいはロケールを開くことに失敗した場合、_XOpenLC
は(リスト中の)次のローダを呼び出す。登録されていたローダ全てでロケールを開けなかった場合、_XOpenLC
は NULL を返す。
関数 _XlcCurrentLC
は、現在のロケールに結び付けられている XLCd を返すものである。
ロケール・メソッドを閉じる
関数 _XCloseLC
は、引数 lcd で指定されたロケール・メソッドを閉じるものである。
ロケール・メソッドの属性値(values)を取得する
関数 _XGetLCValues
は、エラーが起きなければ NULL を返す。エラーが起きた場合、取得に失敗した最初の引数の名前を返す。以下の属性が標準の引数として定義されている。これ以外の属性は実装依存である。
属性名 | 型 | 説明 |
---|---|---|
XlcNCodeset | char* | ロケール名のコードセットを表す部分 |
XlcNDefaultString | char* | XDefaultString() |
XlcNEncodingName | char* | 符号化方式の名前 |
XlcNLanguage | char* | ロケール名の言語を表す部分 |
XlcNMbCurMax | int | ANSI C MB_CUR_MAX |
XlcNStateDependentEncoding | Bool | 状態依存の符号化方式であるか否か(訳註:この文書によると、「state-dependent encoding」 = 「shift encoding」である。シングル・シフトとロッキング・シフトの2つ) |
XlcNTerritory | char* | ロケール名の地域を表す部分 |
XlcCharSet は、ロケール・オブジェクトの中にある文字集合(文字群の部分集合の中の1つ)を表す識別子である。
typedef enum { XlcUnknown, XlcC0, XlcGL, XlcC1, XlcGR, XlcGLGR, XlcOther } XlcSide; typedef struct _XlcCharSetRec *XlcCharSet; typedef struct { char *name; XPointer value; } XlcArg, *XlcArgList; typedef char* (*XlcGetCSValuesProc)(charset, args, num_args); XlcCharSet charset; XlcArgList args; int num_args; typedef struct _XlcCharSetRec { char *name; XrmQuark xrm_name; char *encoding_name; XrmQuark xrm_encoding_name; XlcSide side; int char_size; int set_size; char *ct_sequence; XlcGetCSValuesProc get_values; } XlcCharSetRec;
XlcCharSet を取得する
関数 _XlcGetCharSet
は、「name」で指定された文字集合名に対応する XlcCharSet を返すものである。指定された「name」に結び付けられた XlcCharSet が存在しない場合、 _XlcGetCharSet
は NULL を返す。
以下の文字集合が予め登録されている。
名前 | 説明 |
---|---|
ISO8859-1:GL | 7-bit ASCII graphics(図形文字) (ANSI X3.4-1968)、ISO 8859 セットの左半分 |
JISX0201.1976-0:GL | JIS X0201-1976 (1984 改訂) の左半分、8-Bit Alphanumeric-Katakana Code |
ISO8859-1:GR | ISO 8859-1 の右半分、Latin alphabet No. 1 |
ISO8859-2:GR | ISO 8859-2 の右半分、Latin alphabet No. 2 |
ISO8859-3:GR | ISO 8859-3 の右半分、Latin alphabet No. 3 |
ISO8859-4:GR | ISO 8859-4 の右半分、Latin alphabet No. 4 |
ISO8859-7:GR | ISO 8859-7 の右半分、Latin/Greek alphabet |
ISO8859-6:GR | ISO 8859-6 の右半分、Latin/Arabic alphabet |
ISO8859-8:GR | ISO 8859-8 の右半分、Latin/Hebrew alphabet |
ISO8859-5:GR | ISO 8859-5 の右半分、Latin/Cyrillic alphabet |
ISO8859-9:GR | ISO 8859-9 の右半分、Latin alphabet No. 5 |
JISX0201.1976-0:GR | JIS X0201-1976 (1984 改訂) の右半分、8-Bit Alphanumeric-Katakana Code |
GB2312.1980-0:GL | GB2312-1980, China (PRC) Hanzi defined as GL |
GB2312.1980-0:GR | GB2312-1980, China (PRC) Hanzi defined as GR |
JISX0208.1983-0:GL | JIS X0208-1983, Japanese Graphic Character Set defined as GL |
JISX0208.1983-0:GR | JIS X0208-1983, Japanese Graphic Character Set defined as GR |
KSC5601.1987-0:GL | KS C5601-1987, Korean Graphic Character Set defined as GL |
KSC5601.1987-0:GR | KS C5601-1987, Korean Graphic Character Set defined as GR |
JISX0212.1990-0:GL | JIS X0212-1990, Japanese Graphic Character Set defined as GL |
JISX0212.1990-0:GR | JIS X0212-1990, Japanese Graphic Character Set defined as GR |
XlcCharSet を追加する
関数 _XlcAddCharSet
は、「charset」で指定された XlcCharSet を登録するものである。
文字集合の属性値を取得する
関数 _XlcGetCSValues
は、エラーが起きなければ NULL を返す。エラーが起きた場合、値が取得できなかった最初の引数の名前を返す。標準の引数として以下の属性が定義されている。これ以外の属性は実装依存である。
名前 | 型 | 説明 |
---|---|---|
XlcNName | char* | 文字集合の名前 |
XlcNEncodingName | char* | XLFD の CHARSET_REGISTRY と CHARSET_ENCODING(訳註:コードを所有する組織と符号化文字集合) |
XlcNSide | XlcSide | 文字集合の範囲(GL、GR、...)。(訳註:X11R7.7/lib/libX11-1.5.0/src/xlibi18n/XlcPublic.h において、XlcSide の値として次のものが定義されている。XlcUnknown、XlcC0、XlcGL、XlcC1、XlcGR、XlcGLGR、XlcOther(unused)、XlcNONE) |
XlcNCharSize | int | 1文字あたりのバイト数 |
XlcNSetSize | int | 文字集合の大きさ(訳註:X11R7.7/lib/libX11-1.5.0/src/xlibi18n/XlcPublic.h によると、「例、94 あるいは 96」とのこと。) |
XlcNControlSequence | char* | Compound Text の制御符号列(control sequence) |
コンバータに関する共通 API 一式を用意している。この API は、入力テキストの型と出力テキストの型のどちらにも依存しないものである。
typedef struct _XlcConvRec *XlcConv; typedef void (*XlcCloseConverterProc)(conv); XlcConv conv; typedef int (*XlcConvertProc)(conv, from, from_left, to, to_left, args, num_args); XlcConv conv; XPointer *from; int *from_left; XPointer *to; int *to_left; XPointer *args; int num_args; typedef void (*XlcResetConverterProc)(conv); XlcConv conv; typedef struct _XlcConvMethodsRec { XlcCloseConverterProc close; XlcConvertProc convert; XlcResetConverterProc reset; } XlcConvMethodsRec, *XlcConvMethods; typedef struct _XlcConvRec { XlcConvMethods methods; XPointer state; } XlcConvRec;
コンバータ(変換器)を開く
関数 _XlcOpenConverter
はコンバータを開設するものである。このコンバータは、テキストを「from_type」で指定された型の符号化方式から「to_type」で指定された型の符号化方式へと変換する。関数 _XlcOpenConverter
は、適切なコンバータを見つけられなかった場合、あるいは該当する(見つけた)コンバータを開けなかった場合、NULL を返す。それ以外の場合、同関数は変換記述子(conversion descriptor)を返す。
以下の型が予め定義されている。これ以外の型は実装依存である。
名前 | 型 | 説明 | 引数 |
---|---|---|---|
XlcNMultiByte | char * | マルチバイト | - |
XlcNWideChar | wchar_t * | ワイド文字 | - |
XlcNCompoundText | char * | COMPOUND_TEXT | - |
XlcNString | char * | STRING | - |
XlcNCharSet | char * | 文字集合ごと(per charset) (訳註:意味は X11R7.7/lib/libX11-1.5.0/src/xlibi18n/lcUTF8.c を見るとわかる。) | XlcCharSet |
XlcNChar | char * | 文字ごと(per character) (訳註:意味は X11R7.7/lib/libX11-1.5.0/src/xlibi18n/lcUTF8.c を見るとわかる。) | XlcCharSet |
コンバータを閉じる
関数 _XlcCloseConverter
は、「conv」で指定されたコンバータを閉鎖するものである。
符号の変換
int _XlcConvert(
XlcConv conv, XPointer *from, int *from_left, XPointer *to, int *to_left, XPointer *args, int num_args)
;
関数 _XlcConvert
は、ある型の文字の並び(from で指定された配列に入っているもの)を別の型の対応する文字の並び(to で指定された配列に入る)へと変換するものである。型は、_XlcOpenConverter
の呼び出しの際に指定したものであり、その呼び出しで返る変換記述子「conv」を使って指定する。引数「from」「from_left」「to」「to_left」の意味(仕様)は、XPG4 iconv 関数と同じである。
状態依存の符号化方式(state-dependent encodings:訳註:shift encoding のこと)の場合、_XlcConvert
の呼び出しにおいて「from」が NULL ポインタそのものであるか、あるいは「from」が NULL ポインタを指すポインタであれば、変換記述子「conv」は初期シフト状態へと移行する。
ロケールが用意する次の2つのコンバータは、args[0] が指す領域に適切な文字集合(XlcCharSet)を返すものである。
From | To | 説明 |
---|---|---|
XlcNMultiByte | XlcNCharSet | 部分(分解済み) (訳註:要確認:Segmentation (Decomposing)) |
XlcNWideChar | XlcNCharSet | 部分(分解済み) (訳註:要確認:Segmentation (Decomposing)) |
XlcNMultiByte/XlcNWideChar から XlcNCharSet への変換では、同じ符号化文字集合の文字群を持つ部分(segment)が抽出される。この関数の呼び出し1回につき1つの部分(segment)しか変換できない。
コンバータをリセットする
関数 _XlcResetConverter
は、「conv」で指定されたコンバータをリセットするものである。
コンバータを登録する
typedef XlcConv (*XlcOpenConverterProc)(from_lcd, from_type, to_lcd, to_type); XLCd from_lcd; char *from_type; XLCd to_lcd; char *to_type;
Bool _XlcSetConverter(
XLCd from_lcd, char *from, XLCd to_lcd, char *to, XlcOpenConverterProc converter)
;
関数 _XlcSetConverter
は、(指定された XLCd の)コンバータ・リストにコンバータ1つを登録するものである。ここで登録されるコンバータは、from_type の型から to_type の型への変換を行う。
X ロケール・データベースには、言語によって定まるユーザの環境の情報の一部が入っている。以下の API は、X ロケール・データベース及びその他のロケール関連ファイルを利用するために用意されたものである。
X ロケール・データベースについて詳しく知りたければ、X ロケール・データベースの定義に関する文書を見てほしい。(訳註:「X Locale Database Specification」)
データベースからリソースを取得する
関数 _XlcGetResource
は、指定された「lcd」のロケールと結び付けられている、ロケール依存のデータを取得するものである。ロケール・データは、システム・ロケールあるいは X ロケール・データベースによって提供される。どんな種類のデータが利用可能であるかは、実装依存である。
指定された「category」と「class」は、目的のロケール・データを見つけ出すために使用するものである。
戻り値は、引数 value に文字列のリスト(配列)の形式で返る。count に返る値によって、value 内の文字列の数がわかる。
value の戻り値はロケール・メソッドが所有しているため、関数 _XlcGetResource
を呼び出した者はこれを変更したり解放したりしてはいけない。
ロケールに結びついたファイル名を取得する
関数 _XlcFileName
は、指定された「lcd」と「category」に結び付けられているファイル名を null 文字終端の文字列の形で返すものである。ファイル名が見つからなかった場合、あるいは見つけたファイル名に対応する読み込み可能なファイルが存在しなかった場合、_XlcFileName
は NULL を返す。返ってきたファイル名は、この関数を呼び出した者が解放する。
ファイル名を探す手続きは実装依存である。現在の実装では、_XlcFileName
は「{category}.dir」ファイルを対応表として使用している。この表には、完全ロケール名とそれに対応するファイル名とを表す文字列の対が並んでいる。
Latin-1 文字列を比較する
関数 _XlcCompareIsoLatin1
は、ISO-8859-1 の文字列2つを比較するものである。ASCII の小文字を表すバイトは、比較を行う前に大文字に変換される。戻り値は整数であるが、「str1」が「str2」と比べて辞書的に(1)前にあるか(2)等しいか(3)後にあるかに応じて、0 より(1)小さいか(2)等しいか(3)大きくなる。
関数 _XlcNCompareIsoLatin1
は、最大でも「len」バイトしか比較を行わない点を除き、_XlcCompareISOLatin1
と同じである。
リソース関連のユーティリティ
XtNumber
と同様のもの。
_XtCopyFromArg
及び _XtCopyToArg
と同様のもの。
_XtCountVaList
と同様のもの。
_XtVaToArgList
と同様のもの。
typedef struct _XlcResource { char *name; XrmQuark xrm_name; int size; int offset; unsigned long mask; } XlcResource, *XlcResourceList;
#define XlcCreateMask (1L<<0) #define XlcDefaultMask (1L<<1) #define XlcGetMask (1L<<2) #define XlcSetMask (1L<<3) #define XlcIgnoreMask (1L<<4)
_XtCompileResourceList
と同様のもの。
char * _XlcGetValues(
XPointer base, XlcResourceList resources, int num_resources, XlcArgList args, int num_args, unsignedlong mask)
;
XtGetSubvalues
と同様のもの。
char * _XlcSetValues(
XPointer base, XlcResourceList resources, int num_resources, XlcArgList args, int num_args, unsignedlong mask)
;
XtSetSubvalues
と同様のもの。
ANSI C 互換の関数
以下に挙げるのは、非 ANSI C 環境のための ANSI C/MSE 互換の関数群である。
関数 _Xmblen
は、「str」が指す文字の個数を返すものである。戻り値となる文字の個数を決めるにあたっては、「str」の中の「len」バイトしか使用しない。「str」が指す文字群の属するコード・セットは、現在のロケールにおける有効なコード・セットであれば何でもよい。
_Xmblen
の呼び出しは、_Xmbtowc((wchar_t*)NULL, str, len) と等価である。(訳註:原文は「_Xmbtowc(_Xmbtowc((wchar_t*)NULL, str, len))」)
関数 _Xmbtowc
は、「str」が指す文字群を(同文字群の)ワイド文字表現へと変換し、結果を「wstr」が指す領域に格納するものである。「len」は、「str」中の変換すべきバイトの数である。戻り値は、変換された文字の個数である。
_Xmbtowc
の呼び出しは、_Xlcmbtowc((XLCd)NULL, wstr, str, len) と等価である。
関数 _Xlcmbtowc
は、引数「lcd」が必要である点を除き、_Xmbtowc
と同じである。「lcd」が (XLCd) NULL である場合、_Xlcmbtowc
は現在のロケールを判断するために _XlcCurrentLC
を呼び出す。
関数 _Xwctomb
は、「wc」が指す単一のワイド文字をそのマルチバイト表現へと変換し、結果を「str」が指す領域に格納するものである。成功した場合、戻り値は 1 である。
_Xwctomb
の呼び出しは、_Xlcwctomb((XLCd)NULL, str, wstr) と等価である。
関数 _Xlcwctomb
は、引数「lcd」を必要とする点を除き、_Xwctomb
と同じである。「lcd」が (XLCd) NULL である場合、_Xlcwctomb
は現在のロケールを判断するために _XlcCurrentLC
を呼び出す。
関数 _Xmbstowcs
は、「str」が指す NULL 文字終端の文字列をそのワイド文字表現へと変換し、結果を「wstr」が指す領域へと格納するものである。「len」は、「str」中の変換すべき文字の個数である。
_Xmbstowcs
の呼び出しは、_Xlcmbstowcs((XLCd)NULL, wstr, str, len) と等価である。
関数 _Xlcmbstowcs
は、引数「lcd」が必要である点を除き、_Xmbstowcs
と同じである。「lcd」が (XLCd) NULL である場合、_Xlcmbstowcs
は現在のロケールを判断するために _XlcCurrentLC
を呼び出す。
関数 _Xwcstombs
は、 「wstr」が指す (wchar_t) NULL 文字終端のワイド文字列を NULL 文字終端のマルチバイト文字列に変換し、結果を「str」が指す領域に格納するものである。
_Xwcstombs
の呼び出しは、_Xlcwcstombs((XLCd)NULL, str, wstr, len) と等価である。
関数 _Xlcwcstombs
は、引数「lcd」が必要である点を除き、_Xwcstombs
と同じである。「lcd」が (XLCd) NULL である場合、_Xlcwcstombs
は現在のロケールを判断するために _XlcCurrentLC
を呼び出す。
関数 _Xwcslen
は、「wstr」が指す (wchar_t) NULL 文字終端のワイド文字列に入っているワイド文字の個数を返すものである。
関数 _Xwcscpy
は、「wstr2」が指す (wchar_t) NULL 文字終端のワイド文字列を「wstr1」が指す対象に複写するものである。「wstr1」も (wchar_t) NULL 文字終端である。戻り値は「wstr1」へのポインタである。
関数 _Xwcsncpy
は、「len」個のワイド文字を「wstr2」が指す対象から「wstr1」が指す対象へと複写する点を除き、_Xwcscpy
と同じである。
関数 _Xwcscmp
は、(wchar_t) NULL 文字終端のワイド文字列2つを比較するものである。戻り値は整数であるが、「wstr1」が「wstr2」と比べて辞書的に(1)前にあるか(2)等しいか(3)後にあるかに応じて、0 より(1)小さいか(2)等しいか(3)大きくなる。
関数 _Xwcsncmp
は、最大でも「len」個のワイド文字しか比較されない点を除き、_XlcCompareISOLatin1
(訳註:多分 _Xwcscmp
の間違い)と同じである。
(訳註:この章は、元となるHTML文書・PostScript文書・Text文書には載ってない。XML形式の文書にだけコメントアウトされた状態で書き込まれている。)
関数 _XlcResolveI18NPath は、X ロケール・データベースの経路名のリストを返す。取得した経路は「dir」が指す配列に格納される。この経路は、コロンで区切られた(複数の)ディレクトリ経路から成る。
環境変数 XLOCALEDIR が設定されている場合、取得した経路には同変数の内容が含まれる。
X ロケール・データベースのデフォルトの経路は実装依存である。現在の実装では、デフォルトの経路は構築(build)の時点で決まる。
_XlcResolveI18NPath では、引数「dir」が指す配列のオーバーフロー(配列の容量を超えてしまうこと)の検査は行わない。この関数を呼び出す者が、経路を表す文字列を格納するのに十分なバッファを用意しなければならない。
int _XlcResolveLocaleName(
char *lc_name, char *full_name, char *language, char *territory, char *codeset)
関数 _XlcResolveLocaleName は完全ロケール名を返す。取得した完全ロケール名は、引数「full_name」が指す配列に格納される。完全ロケール名の言語、地域、コードセットを表す部分はそれぞれ、戻り値を受け取る引数「language」「territory」「codeset」に複写される。これらの引数に NULL を指定することは可能である。
ロケール名からそれに対応する完全ロケール名を導き出す規則は、実装依存である。
_XlcResolveLocaleName では、「full_name」「language」「territory」「codeset」が指す配列のオーバーフローの検査は行わない。この関数を呼び出す者が、それらの文字列を格納するのに十分なバッファを用意しなければならない。
現在の実装では、_XlcResolveLocaleName は、ロケール名と完全ロケール名の文字列の対を記録している対応表として locale.alias ファイルを用いている。