From d2758df0a0091496717fe7a65c3e7563e7c82785 Mon Sep 17 00:00:00 2001 From: marha <marha@users.sourceforge.net> Date: Mon, 2 Aug 2010 08:29:58 +0000 Subject: xserver libX11 libXdmcp git update 2-8-2010 --- libX11/specs/i18n/Framework.ms | 1564 ----------------------- libX11/specs/i18n/LocaleDB.ms | 499 -------- libX11/specs/i18n/Makefile.am | 8 +- libX11/specs/i18n/Trans.ms | 1146 ----------------- libX11/specs/i18n/framework/Makefile.am | 32 + libX11/specs/i18n/framework/framework.svg | 703 ++++++++++ libX11/specs/i18n/framework/framework.xml | 1620 +++++++++++++++++++++++ libX11/specs/i18n/localedb/Makefile.am | 32 + libX11/specs/i18n/localedb/localedb.xml | 777 +++++++++++ libX11/specs/i18n/trans/Makefile.am | 32 + libX11/specs/i18n/trans/trans.xml | 1979 +++++++++++++++++++++++++++++ 11 files changed, 5177 insertions(+), 3215 deletions(-) delete mode 100644 libX11/specs/i18n/Framework.ms delete mode 100644 libX11/specs/i18n/LocaleDB.ms delete mode 100644 libX11/specs/i18n/Trans.ms create mode 100644 libX11/specs/i18n/framework/Makefile.am create mode 100644 libX11/specs/i18n/framework/framework.svg create mode 100644 libX11/specs/i18n/framework/framework.xml create mode 100644 libX11/specs/i18n/localedb/Makefile.am create mode 100644 libX11/specs/i18n/localedb/localedb.xml create mode 100644 libX11/specs/i18n/trans/Makefile.am create mode 100644 libX11/specs/i18n/trans/trans.xml (limited to 'libX11/specs/i18n') diff --git a/libX11/specs/i18n/Framework.ms b/libX11/specs/i18n/Framework.ms deleted file mode 100644 index 98a61f930..000000000 --- a/libX11/specs/i18n/Framework.ms +++ /dev/null @@ -1,1564 +0,0 @@ -.\" To print this out, type tbl macros.t ThisFile | troff -ms -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.TL -\s+3\fBX11R6 Sample Implementation Frame Work\fP\s-3 -.sp 2 -.AU -Katsuhisa Yano -.AI -TOSHIBA Corporation -.AU -Yoshio Horiuchi -.AI -IBM Japan -.LP -.bp -.br -\& -.sp 15 -.ps 9 -.nr PS 9 -.LP -Copyright \(co 1994 by TOSHIBA Corporation -.br -Copyright \(co 1994 by IBM Corporation -.LP -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. -.sp 5 -Copyright \(co 1994 X Consortium -.LP -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: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -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. -.LP -Except as contained in this notice, the name of the 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 the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.ps 11 -.nr PS 11 -.bp 1 -.EH '\fBSample Implementation Frame Work\fP''\fB\*(xV\fP' -.OH '\fBSample Implementation Frame Work\fP''\fB\*(xV\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Preface -.XS \*(SN Preface -.XE -.LP -This document proposes to define the structures, methods and their -signatures that are expected to be common to all locale dependent -functions within the Xlib sample implementation. The following -illustration (Fig.1) is proposed to outline the separating of -the components within the sample implementation. -.LP -.\" figure start -.in +1c -\^... 0.237 5.796 5.24 10.14 -\^... 0.000i 4.344i 5.003i 0.000i -.nr 00 \n(.u -.nf -.PS 4.344i 5.003i -.br -.ps 11 -\h'1.753i'\v'2.130i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'1.753i'\v'1.130i'\l'1.500i' -.sp -1 -\h'3.253i'\v'1.130i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'3.253i'\v'2.130i'\l'-1.500i' -.sp -1 -\h'1.751i'\v'1.628i'\l'1.499i' -.sp -1 -\h'2.500i'\v'1.128i'\v'-.13m'\L'0.500i\(br'\v'.13m' -.sp -1 -\h'1.875i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fRInput\fP -.sp -1 -\h'1.875i'\v'1.532i'\h'-0.0m'\v'0.2m'\s12\fRMethod\fP -.sp -1 -\h'2.625i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fROutput\fP -.sp -1 -\h'2.625i'\v'1.532i'\h'-0.0m'\v'0.2m'\s12\fRMethod\fP -.sp -1 -\h'1.938i'\v'1.844i'\h'-0.0m'\v'0.2m'\s12\fR<Locl. Serv. API>\fP -.sp -1 -\h'2.000i'\v'2.032i'\h'-0.0m'\v'0.2m'\s12\fRX Locale Object\fP -.sp -1 -\h'3.503i'\v'1.630i'\v'-.13m'\L'-0.500i\(br'\v'.13m' -.sp -1 -\h'3.503i'\v'1.130i'\l'1.500i' -.sp -1 -\h'5.003i'\v'1.130i'\v'-.13m'\L'0.500i\(br'\v'.13m' -.sp -1 -\h'5.003i'\v'1.630i'\l'-1.500i' -.sp -1 -\h'3.625i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fRC Library\fP -.sp -1 -\h'4.250i'\v'1.532i'\h'-0.0m'\v'0.2m'\s12\fRANSI impl.\fP -.sp -1 -\h'0.003i'\v'1.630i'\v'-.13m'\L'-0.500i\(br'\v'.13m' -.sp -1 -\h'0.003i'\v'1.130i'\l'1.500i' -.sp -1 -\h'1.503i'\v'1.130i'\v'-.13m'\L'0.500i\(br'\v'.13m' -.sp -1 -\h'1.503i'\v'1.630i'\l'-1.500i' -.sp -1 -\h'0.125i'\v'1.344i'\h'-0.0m'\v'0.2m'\s12\fRLocale Library\fP -.sp -1 -\h'0.438i'\v'1.507i'\h'-0.0m'\v'0.2m'\s12\fRnon-AnSI impl.\fP -.sp -1 -\h'3.500i'\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR<< ANSI/MSE API >>\fP -.sp -1 -\h'4.250i'\v'0.969i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fR(X Contrib)\fP'u/2u'\s12\fR(X Contrib)\fP\h'-\w'\s12\fR(X Contrib)\fP'u/2u' -.sp -1 -\h'0.125i'\v'3.094i'\h'-0.0m'\v'0.2m'\s12\fRXLC_XLOCALE\fP -.sp -1 -\h'0.125i'\v'3.282i'\h'-0.0m'\v'0.2m'\s12\fR- MB_CUR_MAX\fP -.sp -1 -\h'0.125i'\v'3.444i'\h'-0.0m'\v'0.2m'\s12\fR- codeset info\fP -.sp -1 -\h'0.125i'\v'3.607i'\h'-0.0m'\v'0.2m'\s12\fRo char/charset\fP -.sp -1 -\h'0.125i'\v'3.769i'\h'-0.0m'\v'0.2m'\s12\fRo conv/charset\fP -.sp -1 -\h'0.003i'\v'3.880i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'0.003i'\v'2.880i'\l'1.500i' -.sp -1 -\h'1.503i'\v'2.880i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'1.503i'\v'3.880i'\l'-1.500i' -.sp -1 -\h'1.875i'\v'3.094i'\h'-0.0m'\v'0.2m'\s12\fRXLC_FONTSET\fP -.sp -1 -\h'1.875i'\v'3.282i'\h'-0.0m'\v'0.2m'\s12\fR- fonset info\fP -.sp -1 -\h'1.875i'\v'3.444i'\h'-0.0m'\v'0.2m'\s12\fR- charset info\fP -.sp -1 -\h'1.875i'\v'3.607i'\h'-0.0m'\v'0.2m'\s12\fR- font/charset\fP -.sp -1 -\h'1.875i'\v'3.769i'\h'-0.0m'\v'0.2m'\s12\fR- XLFD, GL/GR\fP -.sp -1 -\h'1.753i'\v'3.880i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'1.753i'\v'2.880i'\l'1.500i' -.sp -1 -\h'3.253i'\v'2.880i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'3.253i'\v'3.880i'\l'-1.500i' -.sp -1 -\h'3.625i'\v'3.444i'\h'-0.0m'\v'0.2m'\s12\fR- codeset info\fP -.sp -1 -\h'3.625i'\v'3.607i'\h'-0.0m'\v'0.2m'\s12\fRo char/charset\fP -.sp -1 -\h'3.625i'\v'3.769i'\h'-0.0m'\v'0.2m'\s12\fRo conv/charset\fP -.sp -1 -\h'3.625i'\v'3.282i'\h'-0.0m'\v'0.2m'\s12\fR- MB_CUR_MAX\fP -.sp -1 -\h'3.625i'\v'3.094i'\h'-0.0m'\v'0.2m'\s12\fRlocaledef DB\fP -.sp -1 -\h'3.503i'\v'3.880i'\v'-.13m'\L'-1.000i\(br'\v'.13m' -.sp -1 -\h'3.503i'\v'2.880i'\l'1.500i' -.sp -1 -\h'5.003i'\v'2.880i'\v'-.13m'\L'1.000i\(br'\v'.13m' -.sp -1 -\h'5.003i'\v'3.880i'\l'-1.500i' -.sp -1 -\h'0.753i'\v'0.250i'\D'l0.000i -0.250i' -.sp -1 -\h'0.753i'\l'3.500i' -.sp -1 -\h'4.253i'\D'l0.000i 0.250i' -.sp -1 -\h'4.253i'\v'0.250i'\l'-3.500i' -.sp -1 -\h'2.500i'\v'0.157i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRApplication\fP'u/2u'\s12\fRApplication\fP\h'-\w'\s12\fRApplication\fP'u/2u' -.sp -1 -\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR<< ANSI/MSE API >>\fP -.sp -1 -\h'0.751i'\v'0.969i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fR(X Contrib)\fP'u/2u'\s12\fR(X Contrib)\fP\h'-\w'\s12\fR(X Contrib)\fP'u/2u' -.sp -1 -\h'2.500i'\v'2.128i'\v'-.13m'\L'0.749i\(br'\v'.13m' -.sp -1 -\h'2.475i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'2.525i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.500i'\v'2.315i'\D'l-0.250i 0.187i' -.sp -1 -\h'2.250i'\v'2.502i'\l'-1.124i' -.sp -1 -\h'1.126i'\v'2.502i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'1.101i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'1.151i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.500i'\v'2.315i'\D'l0.250i 0.187i' -.sp -1 -\h'2.750i'\v'2.502i'\l'1.125i' -.sp -1 -\h'3.875i'\v'2.502i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'3.850i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'3.900i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'0.376i'\v'1.628i'\v'-.13m'\L'1.249i\(br'\v'.13m' -.sp -1 -\h'0.351i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'0.401i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'4.625i'\v'1.628i'\v'-.13m'\L'1.249i\(br'\v'.13m' -.sp -1 -\h'4.600i'\v'2.777i'\D'l0.025i 0.100i' -.sp -1 -\h'4.650i'\v'2.777i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.125i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'2.100i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'2.150i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\h'2.875i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'2.850i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'2.900i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\h'1.126i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'1.101i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'1.151i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\h'3.875i'\v'0.253i'\v'-.13m'\L'0.375i\(br'\v'.13m' -.sp -1 -\h'3.850i'\v'0.528i'\D'l0.025i 0.100i' -.sp -1 -\h'3.900i'\v'0.528i'\D'l-0.025i 0.100i' -.sp -1 -\v'4.002i'\D'l0.125i 0.125i' -.sp -1 -\h'0.125i'\v'4.127i'\l'3.000i' -.sp -1 -\h'3.125i'\v'4.127i'\D'l0.125i -0.125i' -.sp -1 -\h'3.500i'\v'4.002i'\D'l0.125i 0.125i' -.sp -1 -\h'3.625i'\v'4.127i'\l'1.250i' -.sp -1 -\h'4.875i'\v'4.127i'\D'l0.125i -0.125i' -.sp -1 -\h'1.626i'\v'4.344i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRXLocale Source (X Core)\fP'u/2u'\s12\fRXLocale Source (X Core)\fP\h'-\w'\s12\fRXLocale Source (X Core)\fP'u/2u' -.sp -1 -\h'4.250i'\v'4.344i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRSystem LOcale Source\fP'u/2u'\s12\fRSystem LOcale Source\fP\h'-\w'\s12\fRSystem LOcale Source\fP'u/2u' -.sp -1 -\h'2.500i'\v'0.782i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fRXLib API\fP'u/2u'\s12\fRXLib API\fP\h'-\w'\s12\fRXLib API\fP'u/2u' -.sp -1 -\h'2.500i'\v'0.969i'\h'-0.0m'\v'0.2m'\h'-\w'\s12\fR(X Core)\fP'u/2u'\s12\fR(X Core)\fP\h'-\w'\s12\fR(X Core)\fP'u/2u' -.sp -1 -\h'1.751i'\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR<<\fP -.sp -1 -\h'3.063i'\v'0.782i'\h'-0.0m'\v'0.2m'\s12\fR>>\fP -.sp -1 -.sp 1+4.344i -.in -1c -.PE -.if \n(00 .fi -.\" figure end -.LP -.ce -.sp 6p -Fig.1 : Frame Work of Locale Service API Proposal -.LP -Generally speaking, the internationalized portion of Xlib (Locale -Dependent X, LDX) consists of three objects; -locale (LC) , input method (IM) and output method (OM). -The LC provides a set of information that depends on user's language -environment. The IM manages text inputing, and the OM manages text -drawing. Both IM and OM highly depend on LC data. -.LP -In X11R5, there are two sample implementations, Ximp and Xsi, for -Xlib internationalization. But in both implementations, IM and OM -actually refer the private extension of LC. It breaks coexistence -of these two sample implementations. For example, if a user creates -a new OM for special purpose as a part of Ximp, it will not work with -Xsi. -.LP -As a solution of this problem, we propose to define the standard -APIs between these three objects, and define the structure that are -common to these objects. -.LP -.NH 1 -Objective -.XS \*(SN Objective -.XE -.LP -.IP \(bu -Explain the current X11R6 sample implementation -.IP \(bu -Document the common set of locale dependent interfaces -.IP \(bu -Provide more flexible pluggable layer -.LP -.NH 1 -Locale Object Binding Functions -.XS \*(SN Locale Object Binding Functions -.XE -.LP -This chapter describes functions related locale object binding for -implementing the pluggable layer. -.LP -A locale loader is an entry point for locale object, which -instantiates XLCd object and binds locale methods with specified -locale name. The behavior of loader is implementation dependent. -And, what kind of loaders are available is also implementation -dependent. -.LP -The loader is called in -.PN _XOpenLC, -but caller of -.PN _XOpenLC -does not need to care about its inside. For example, if the loader is -implemented with dynamic load functions, and the dynamic module is -expected to be unloaded when the corresponding XLCd is freed, -close methods of XLCdMethods should handle unloading. -.LP -.sp -\fBInitializing a locale loader list\fP -.LP -.FD 0 -void _XlcInitLoader() -.FN -The -.PN _XlcInitLoader -function initializes the locale loader list with vendor specific -manner. Each loader is registered with calling -.PN _XlcAddLoader. -The number of loaders and their order in the loader list is -implementation dependent. -.sp -.LP -\fBAdd a loader\fP -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef XLCd (*XLCdLoadProc)(\fIname\fP); - char \fI*name\fP; - -typedef int XlcPosition; -.De -.TS -lw(.5i) lw(2i) lw(2i). -T{ -#define -T} T{ -XlcHead -T} T{ - 0 -T} -T{ -#define -T} T{ -XlcTail -T} T{ --1 -T} -.TE -.LP -.FD 0 -Bool _XlcAddLoader(\fIproc, position\fP) -.br - XLCdLoadProc \fIproc\fP; -.br - XlcPosition \fIposition\fP; -.FN -.LP -The -.PN _XlcAddLoader -function registers the specified locale loader ``\fIproc\fP'' to the -internal loader list. The position specifies that the loader -``\fIproc\fP'' should be placed in the top of the loader list(XlcHead) -or last(XlcTail). -.LP -The object loader is called from the top of the loader list in order, -when calling time. -.sp -.LP -\fBRemove a loader\fP -.LP -.FD 0 -void _XlcRemoveLoader(\fIproc\fP) -.br - XLCdLoadProc \fIproc\fP; -.FN -.LP -The -.PN _XlcRemoveLoader -function removes the locale loader specified by ``\fIproc\fP'' from the -loader list. -.LP -Current implementation provides following locale loaders; -.DS -.PN _XlcDefaultLoader -.PN _XlcGenericLoader -.PN _XlcEucLoader -.PN _XlcSjisLoader -.PN _XlcUtfLoader -.PN _XaixOsDynamicLoad -.DE -.LP -.NH 1 -Locale Method Interface -.XS \*(SN Locale Method Interface -.XE -.LP -This chapter describes the locale method API, which is a set of -accessible functions from both IM and OM parts. -The locale method API provides the functionalities; obtaining locale -dependent information, handling charset, converting text, etc. -.LP -As a result of using these APIs instead of accessing vender private -extension of the locale object, we can keep locale, IM and OM -independently each other. -.LP -.NH 1 -Locale Method Functions -.XS \*(SN Locale Method Functions -.XE -.LP -\fBOpen a Locale Method\fP -.LP -.FD 0 -XLCd _XOpenLC(\fIname\fP) -.br - char \fI*name\fP; -.FN -.LP -The -.PN _XOpenLC -function opens a locale method which corresponds to the -specified locale name. -.PN _XOpenLC -calls a locale object loader, which is registered via -.PN _XlcAddLoader into the internal loader list. If the called loader -is valid and successfully opens a locale, -.PN _XOpenLC -returns the XLCd. If the loader is invalid or failed to open a locale, -.PN _XOpenLC -calls the next loader. If all registered loaders cannot open a locale, -.PN _XOpenLC -returns NULL. -.LP -.FD 0 -XLCd _XlcCurrentLC() -.FN -.LP -The -.PN _XlcCurrentLC -function returns an XLCd that are bound to current locale. -.sp -.LP -\fBClose a Locale Method\fP -.LP -.FD 0 -void _XCloseLC(\fIlcd\fP) -.br - XLCd \fIlcd\fP; -.FN -.LP -The -.PN _XCloseLC -function close a locale method the specified lcd. -.sp -.LP -\fBObtain Locale Method values\fP -.LP -.FD 0 -char * _XGetLCValues(\fIlcd\fP, ...) -.br - XLCd \fIlcd\fP; -.FN -.LP -The -.PN _XGetLCValues -function returns NULL if no error occurred; otherwise, it returns the -name of the first argument that could not be obtained. -The following values are defined as standard arguments. Other values -are implementation dependent. -.LP -.TS H -tab(:); -l l l. -_ -.sp 6p -.B -Name:Type:Description -.sp 6p -_ -.sp 6p -.TH -.R -XlcNCodeset:char*:codeset part of locale name -XlcNDefaultString:char*:XDefaultString() -XlcNEncodingName:char*:encoding name -XlcNLanguage:char*:language part of locale name -XlcNMbCurMax:int:ANSI C MB_CUR_MAX -XlcNStateDependentEncoding:Bool:is state-dependent encoding or not -XlcNTerritory:char*:territory part of locale name -.sp 6p -_ -.TE -.LP -.NH 1 -Charset functions -.XS \*(SN -Charset functions -.XE -.LP -The XlcCharSet is an identifier which represents a subset of characters -(character set) in the locale object. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -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)(\fIcharset\fP, \fIargs\fP, \fInum_args\fP); - XlcCharSet \fIcharset\fP; - XlcArgList \fIargs\fP; - int \fInum_args\fP; - -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; -.De -.sp -.LP -\fBGet an XlcCharSet\fP -.LP -.FD 0 -XlcCharSet _XlcGetCharSet(\fIname\fP) -.br - char \fI*name\fP; -.FN -.LP -The -.PN _XlcGetCharSet -function gets an XlcCharSet which corresponds to the charset name -specified by ``\fIname\fP''. -.PN _XlcGetCharSet -returns NULL, if no XlcCharSet bound to specified ``\fIname\fP''. -.LP -The following character sets are pre-registered. -.LP -.TS H -tab(@); -l l. -_ -.sp 6p -.B -Name@Description -.sp 6p -_ -.sp 6p -.TH -.R -ISO8859-1:GL@7-bit ASCII graphics (ANSI X3.4-1968), -@Left half of ISO 8859 sets -JISX0201.1976-0:GL@Left half of JIS X0201-1976 (reaffirmed 1984), -@8-Bit Alphanumeric-Katakana Code -.sp -ISO8859-1:GR@Right half of ISO 8859-1, Latin alphabet No. 1 -ISO8859-2:GR@Right half of ISO 8859-2, Latin alphabet No. 2 -ISO8859-3:GR@Right half of ISO 8859-3, Latin alphabet No. 3 -ISO8859-4:GR@Right half of ISO 8859-4, Latin alphabet No. 4 -ISO8859-7:GR@Right half of ISO 8859-7, Latin/Greek alphabet -ISO8859-6:GR@Right half of ISO 8859-6, Latin/Arabic alphabet -ISO8859-8:GR@Right half of ISO 8859-8, Latin/Hebrew alphabet -ISO8859-5:GR@Right half of ISO 8859-5, Latin/Cyrillic alphabet -ISO8859-9:GR@Right half of ISO 8859-9, Latin alphabet No. 5 -JISX0201.1976-0:GR@Right half of JIS X0201-1976 (reaffirmed 1984), -@8-Bit Alphanumeric-Katakana Code -.sp -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 -.\" CNS11643.1986-0:GL -.\" CNS11643.1986-1:GL -.\" TIS620-0:GR -.sp 6p -_ -.TE -.LP -.sp -\fBAdd an XlcCharSet\fP -.LP -.FD 0 -Bool _XlcAddCharSet(\fIcharset\fP) - XlcCharSet \fIcharset\fP; -.FN -.LP -The -.PN _XlcAddCharSet -function registers XlcCharSet specified by ``\fIcharset\fP''. -.LP -.sp -\fBObtain Character Set values\fP -.LP -.FD 0 -char * _XlcGetCSValues(\fIcharset\fP, ...) -.br - XlcCharSet \fIcharset\fP; -.FN -.LP -The -.PN _XlcGetCSValues -function returns NULL if no error occurred; -otherwise, it returns the name of the first argument that could not -be obtained. The following values are defined as standard arguments. -Other values are implementation dependent. -.LP -.TS H -tab(:); -l l l. -_ -.sp 6p -.B -Name:Type:Description -.sp 6p -_ -.sp 6p -.TH -.R -XlcNName:char*:charset name -XlcNEncodingName:char*:XLFD CharSet Registry and Encoding -XlcNSide:XlcSide:charset side (GL, GR, ...) -XlcNCharSize:int:number of octets per character -XlcNSetSize:int:number of character sets -XlcNControlSequence:char*:control sequence of Compound Text -.sp 6p -_ -.TE -.LP -.NH 1 -Converter Functions -.XS \*(SN Converter Functions -.XE -.LP -We provide a set of the common converter APIs, that are independent -from both of source and destination text type. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XlcConvRec *XlcConv; - -typedef void (*XlcCloseConverterProc)(\fIconv\fP); - XlcConv \fIconv\fP; - -typedef int (*XlcConvertProc)(\fIconv\fP, \fIfrom\fP, \fIfrom_left\fP, \fIto\fP, \fIto_left\fP, \fIargs\fP, \fInum_args\fP); - XlcConv \fIconv\fP; - XPointer \fI*from\fP; - int \fI*from_left\fP; - XPointer \fI*to\fP; - int \fI*to_left\fP; - XPointer \fI*args\fP; - int \fInum_args\fP; - -typedef void (*XlcResetConverterProc)(\fIconv\fP); - XlcConv \fIconv\fP; - -typedef struct _XlcConvMethodsRec { - XlcCloseConverterProc close; - XlcConvertProc convert; - XlcResetConverterProc reset; -} XlcConvMethodsRec, *XlcConvMethods; - -typedef struct _XlcConvRec { - XlcConvMethods methods; - XPointer state; -} XlcConvRec; -.De -.LP -.sp -\fBOpen a converter\fP -.LP -.FD 0 -XlcConv _XlcOpenConverter(\fIfrom_lcd\fP, \fIfrom_type\fP, \fIto_lcd\fP, \fIto_type\fP) -.br - XLCd \fIfrom_lcd\fP; -.br - char \fI*from_type\fP; -.br - XLCd \fIto_lcd\fP; -.br - char \fI*to_type\fP; -.FN -.LP -.PN _XlcOpenConverter -function opens the converter which converts a text from specified -``\fIfrom_type\fP'' to specified ``\fIto_type\fP'' encoding. If the -function cannot find proper converter or cannot open a corresponding -converter, it returns NULL. Otherwise, it returns the conversion -descriptor. -.LP -The following types are pre-defined. Other types are implementation -dependent. -.LP -.TS H -tab(:); -l l l l. -_ -.sp 6p -.B -Name:Type:Description:Arguments -.sp 6p -_ -.sp 6p -.TH -.R -XlcNMultiByte:char *:multibyte:- -XlcNWideChar:wchar_t *:wide character:- -XlcNCompoundText:char *:COMPOUND_TEXT:- -XlcNString:char *:STRING:- -XlcNCharSet:char *:per charset:XlcCharSet -XlcNChar:char *:per character:XlcCharSet -.sp 6p -_ -.TE -.LP -.sp -\fBClose a converter\fP -.LP -.FD 0 -void _XlcCloseConverter(\fIconv\fP) -.br - XlcConv \fIconv\fP; -.FN -.LP -The -.PN _XlcCloseConverter -function closes the specified converter ``\fIconv\fP''. -.LP -.sp -\fBCode conversion\fP -.LP -.FD 0 -int _XlcConvert(\fIconv\fP, \fIfrom\fP, \fIfrom_left\fP, \fIto\fP, \fIto_left\fP, \fIargs\fP, \fInum_args\fP) -.br - XlcConv \fIconv\fP; -.br - XPointer \fI*from\fP; -.br - int \fI*from_left\fP; -.br - XPointer \fI*to\fP; -.br - int \fI*to_left\fP; -.br - XPointer \fI*args\fP; -.br - int \fInum_args\fP; -.FN -.LP -The -.PN _XlcConvert -function converts a sequence of characters from one type, in the array -specified by ``\fIfrom\fP'', into a sequence of corresponding characters -in another type, in the array specified by ``\fIto\fP''. The types are -those specified in the -.PN _XlcOpenConverter() -call that returned the conversion descriptor, ``\fIconv\fP''. -The arguments ``\fIfrom\fP'', ``\fIfrom_left\fP'', ``\fIto\fP'' and -``\fIto_left\fP'' have the same specification of XPG4 iconv function. -.LP -For state-dependent encodings, the conversion descriptor ``\fIconv\fP'' -is placed into its initial shift state by a call for which ``\fIfrom\fP'' -is a NULL pointer, or for which ``\fIfrom\fP'' points to a null pointer. -.LP -The following 2 converters prepared by locale returns appropriate -charset (XlcCharSet) in an area pointed by args[0]. -.LP -.TS -tab(:); -l l l. -_ -.sp 6p -.B -From:To:Description -.sp 6p -_ -.sp 6p -.R -XlcNMultiByte:XlcNCharSet:Segmentation (Decomposing) -XlcNWideChar:XlcNCharSet:Segmentation (Decomposing) -.sp 6p -_ -.TE -.LP -The conversion, from XlcNMultiByte/XlcNWideChar to XlcNCharSet, -extracts a segment which has same charset encoding characters. -More than one segment cannot be converted in a call. -.LP -.sp -\fBReset a converter\fP -.LP -.FD 0 -void _XlcResetConverter(\fIconv\fP) -.br - XlcConv \fIconv\fP; -.FN -.LP -The -.PN _XlcResetConverter -function reset the specified converter ``\fIconv\fP''. -.LP -.sp -\fBRegister a converter\fP -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef XlcConv (*XlcOpenConverterProc)(\fIfrom_lcd\fP, \fIfrom_type\fP, \fIto_lcd\fP, \fIto_type\fP); - XLCd \fIfrom_lcd\fP; - char \fI*from_type\fP; - XLCd \fIto_lcd\fP; - char \fI*to_type\fP; -.De -.LP -.FD 0 -Bool _XlcSetConverter(\fIfrom_lcd\fP, \fIfrom\fP, \fIto_lcd\fP, \fIto\fP, \fIconverter\fP) -.br - XLCd \fIfrom_lcd\fP; -.br - char \fI*from\fP; -.br - XLCd \fIto_lcd\fP; -.br - char \fI*to\fP; -.br - XlcOpenConverterProc \fIconverter\fP; -.FN -.LP -The \fBXlcSetConverter\fP function registers a converter which convert -from ``\fIfrom_type\fP'' to ``\fIto_type\fP'' into the converter list -(in the specified XLCd). -.LP -.NH 1 -X Locale Database functions -.XS \*(SN X Locale Database functions -.XE -.LP -X Locale Database contains the subset of user's environment that -depends on language. The following APIs are provided for accessing -X Locale Database and other locale relative files. -.LP -For more detail about X Locale Database, please refer -X Locale Database Definition document. -.LP -.sp -\fBGet a resource from database\fP -.LP -.FD 0 -void _XlcGetResource(\fIlcd\fP, \fIcategory\fP, \fIclass\fP, \fIvalue\fP, \fIcount\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*category\fP; -.br - char \fI*class\fP; -.br - char \fI***value\fP; -.br - int \fI*count\fP; -.FN -.LP -The -.PN _XlcGetResource -function obtains a locale dependent data which is associated with the -locale of specified ``\fIlcd\fP''. -The locale data is provided by system locale or by X Locale Database -file, and what kind of data is available is implementation dependent. -.LP -The specified ``\fIcategory\fP'' and ``\fIclass\fP'' are used for -finding out the objective locale data. -.LP -The returned value is returned in value argument in string list form, -and the returned count shows the number of strings in the value. -.LP -The returned value is owned by locale method, and should not be modified -or freed by caller. -.LP -.sp -\fBGet a locale relative file name\fP -.LP -.FD 0 -char * _XlcFileName(\fIlcd\fP, \fIcategory\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*category\fP; -.FN -.LP -The -.PN _XlcFileName -functions returns a file name which is bound to the specified ``\fIlcd\fP'' -and ``\fIcategory\fP'', as a null-terminated string. If no file name can -be found, or there is no readable file for the found file name, -.PN _XlcFileName -returns NULL. The returned file name should be freed by caller. -.LP -The rule for searching a file name is implementation dependent. -In current implementation, -.PN _XlcFileName -uses ``{category}.dir'' file as mapping table, which has pairs of -strings, a full locale name and a corresponding file name. -.LP -.NH 1 -Utility Functions -.XS \*(SN Utility Functions -.XE -.LP -\fBCompare Latin-1 strings\fP -.LP -.FD 0 -int _XlcCompareISOLatin1(\fIstr1\fP, \fIstr2\fP) -.br - char \fI*str1\fP, \fI*str2\fP; -.FN -.FD 0 -int _XlcNCompareISOLatin1(\fIstr1\fP, \fIstr2\fP, \fIlen\fP) -.br - char \fI*str1\fP, \fI*str2\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _XlcCompareIsoLatin1 -function to compares two ISO-8859-1 strings. Bytes representing ASCII lower -case letters are converted to upper case before making the comparison. -The value returned is an integer less than, equal to, or greater than -zero, depending on whether ``\fIstr1\fP'' is lexicographicly less than, -equal to, or greater than ``\fIstr2\fP''. -.LP -The -.PN _XlcNCompareIsoLatin1 -function is identical to -.PN _XlcCompareISOLatin1, -except that at most ``\fIlen\fP'' bytes are compared. -.LP -.sp -\fBResource Utility\fP -.LP -.FD 0 -int XlcNumber(\fIarray\fP) - ArrayType \fIarray\fP; -.FN -.LP -Similar to XtNumber. -.LP -.FD 0 -void _XlcCopyFromArg(\fIsrc\fP, \fIdst\fP, \fIsize\fP) -.br - char \fI*src\fP; -.br - char \fI*dst\fP; -.br - int \fIsize\fP; -.FN -.FD 0 -void _XlcCopyToArg(\fIsrc\fP, \fIdst\fP, \fIsize\fP) -.br - char \fI*src\fP; -.br - char \fI**dst\fP; -.br - int \fIsize\fP; -.FN -.LP -Similar to -.PN _XtCopyFromArg -and -.PN _XtCopyToArg. -.LP -.FD 0 -void _XlcCountVaList(\fIvar\fP, \fIcount_ret\fP) -.br - va_list \fIvar\fP; -.br - int \fI*count_ret\fP; -.FN -.LP -Similar to -.PN _XtCountVaList. -.LP -.FD 0 -void _XlcVaToArgList(\fIvar\fP, \fIcount\fP, \fIargs_ret\fP) -.br - va_list \fIvar\fP; -.br - int \fIcount\fP; -.br - XlcArgList \fI*args_ret\fP; -.FN -.LP -Similar to -.PN _XtVaToArgList. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct _XlcResource { - char *name; - XrmQuark xrm_name; - int size; - int offset; - unsigned long mask; -} XlcResource, *XlcResourceList; -.De -.LP -.TS -lw(.5i) lw(2i) lw(2i). -T{ -#define -T} T{ -XlcCreateMask -T} T{ -(1L<<0) -T} -T{ -#define -T} T{ -XlcDefaultMask -T} T{ -(1L<<1) -T} -T{ -#define -T} T{ -XlcGetMask -T} T{ -(1L<<2) -T} -T{ -#define -T} T{ -XlcSetMask -T} T{ -(1L<<3) -T} -T{ -#define -T} T{ -XlcIgnoreMask -T} T{ -(1L<<4) -T} -.TE -.LP -.FD 0 -void _XlcCompileResourceList(\fIresources\fP, \fInum_resources\fP) -.br - XlcResourceList \fIresources\fP; -.br - int \fInum_resources\fP; -.FN -.LP -Similar to -.PN _XtCompileResourceList. -.LP -.FD 0 -char * _XlcGetValues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \fIargs\fP, \fInum_args\fP, \fImask\fP) -.br - XPointer \fIbase\fP; -.br - XlcResourceList \fIresources\fP; -.br - int \fInum_resources\fP; -.br - XlcArgList \fIargs\fP; -.br - int \fInum_args\fP; -.br - unsigned long \fImask\fP; -.FN -.LP -Similar to XtGetSubvalues. -.LP -.FD 0 -char * _XlcSetValues(\fIbase\fP, \fIresources\fP, \fInum_resources\fP, \fIargs\fP, \fInum_args\fP, \fImask\fP) -.br - XPointer \fIbase\fP; -.br - XlcResourceList \fIresources\fP; -.br - int \fInum_resources\fP; -.br - XlcArgList \fIargs\fP; -.br - int \fInum_args\fP; -.br - unsigned long \fImask\fP; -.FN -.LP -Similar to XtSetSubvalues. -.LP -.sp -\fBANSI C Compatible Functions\fP -.LP -The following are ANSI C/MSE Compatible Functions for non-ANSI C environment. -.LP -.FD 0 -int _Xmblen(\fIstr\fP, \fIlen\fP) -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xmblen -function returns the number of characters pointed to by ``\fIstr\fP''. -Only ``\fIlen\fP'' bytes in ``\fIstr\fP'' are used in determining the -character count returned. ``\fIStr\fP'' may point at characters from -any valid codeset in the current locale. -.LP -The call -.PN _Xmblen -is equivalent to -.RS -_Xmbtowc(_Xmbtowc((\fIwchar_t*\fP)NULL, \fIstr\fP, \fIlen\fP)) -.RE -.LP -.FD 0 -int _Xmbtowc(\fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xmbtowc -function converts the character(s) pointed to by ``\fIstr\fP'' -to their wide character representation(s) pointed to by ``\fIwstr\fP''. -``\fILen\fP'' is the number of bytes in ``\fIstr\fP'' to be converted. -The return value is the number of characters converted. -.LP -The call -.PN _Xmbtowc -is equivalent to -.RS -_Xlcmbtowc((XLCd)NULL, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.RE -.LP -.FD 0 -int _Xlcmbtowc(\fIlcd\fP, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - XLCd \fIlcd\fP; -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xlcmbtowc -function is identical to -.PN _Xmbtowc, -except that it requires the ``\fIlcd\fP'' argument. If ``\fIlcd\fP'' -is (XLCd) NULL, -.PN _Xlcmbtowc, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xwctomb(\fIstr\fP, \fIwc\fP) -.br - char \fI*str\fP; -.br - wchar_t \fIwc\fP; -.FN -.LP -The -.PN _Xwctomb -function converts a single wide character pointed to by ``\fIwc\fP'' to -its multibyte representation pointed to by ``\fIstr\fP''. -On success, the return value is 1. -.LP -The call -.PN _Xwctomb -is equivalent to -.RS -_Xlcwctomb((XLCd)NULL, \fIstr\fP, \fIwstr\fP) -.RE -.LP -.FD 0 -int _Xlcwctomb(\fIlcd\fP, \fIstr\fP, \fIwc\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*str\fP; -.br - wchar_t \fIwc\fP; -.FN -.LP -The -.PN _Xlcwctomb -function is identical to _Xwctomb, except that it requires the -``\fIlcd\fP'' argument. If ``\fIlcd\fP'' is (XLCd) NULL, -.PN _Xlcwctomb, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xmbstowcs(\fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xmbstowcs -function converts the NULL-terminated string pointed to by ``\fIstr\fP'' -to its wide character string representation pointed to by ``\fIwstr\fP''. -``\fILen\fP'' is the number of characters in ``\fIstr\fP'' to be converted. -.LP -The call -.PN _Xmbstowcs -is equivalent to -.RS -_Xlcmbstowcs((XLCd)NULL, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.RE -.LP -.FD 0 -int _Xlcmbstowcs(\fIlcd\fP, \fIwstr\fP, \fIstr\fP, \fIlen\fP) -.br - XLCd \fIlcd\fP; -.br - wchar_t \fI*wstr\fP; -.br - char \fI*str\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xlcmbstowcs -function is identical to _Xmbstowcs, except that it requires the -``\fIlcd\fP'' argument. If ``\fIlcd\fP'' is (XLCd) NULL, -.PN _Xlcmbstowcs, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xwcstombs(\fIstr\fP, \fIwstr\fP, \fIlen\fP) -.br - char \fI*str\fP; -.br - wchar_t \fI*wstr\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xwcstombs -function converts the (wchar_t) NULL terminated wide character string -pointed to by ``\fIwstr\fP'' to the NULL terminated multibyte string -pointed to by ``\fIstr\fP''. -.LP -The call -.PN _Xwcstombs -is equivalent to -.RS -_Xlcwcstombs((XLCd)NULL, \fIstr\fP, \fIwstr\fP, \fIlen\fP) -.RE -.LP -.FD 0 -int _Xlcwcstombs(\fIlcd\fP, \fIstr\fP, \fIwstr\fP, \fIlen\fP) -.br - XLCd \fIlcd\fP; -.br - char \fI*str\fP; -.br - wchar_t \fI*wstr\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xlcwcstombs -function is identical to _Xwcstombs, except that it requires the -``\fIlcd\fP'' argument. If ``\fIlcd\fP'' is (XLCd) NULL, -.PN _Xlcwcstombs, -calls -.PN _XlcCurrentLC -to determine the current locale. -.LP -.FD 0 -int _Xwcslen(\fIwstr\fP) -.br - wchar_t \fI*wstr\fP; -.FN -.LP -The -.PN _Xwcslen -function returns the count of wide characters in the (wchar_t) NULL -terminated wide character string pointed to by ``\fIwstr\fP''. -.LP -.FD 0 -wchar_t * _Xwcscpy(\fIwstr1\fP, \fIwstr2\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.FN -.FD 0 -wchar_t * _Xwcsncpy(\fIwstr1\fP, \fIwstr2\fP, \fIlen\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xwcscpy -function copies the (wchar_t) NULL terminated wide character string -pointed to by ``\fIwstr2\fP'' to the object pointed at by ``\fIwstr1\fP''. -``\fIWstr1\fP'' is (wchar_t) NULL terminated. The return value is a -pointer to ``\fIwstr1\fP''. -.LP -The -.PN _Xwcsncpy -function is identical to -.PN _Xwcscpy, -except that it copies ``\fIlen\fP'' wide characters from the object -pointed to by ``\fIwstr2\fP'' to the object pointed to ``\fIwstr1\fP''. -.LP -.FD 0 -int _Xwcscmp(\fIwstr1\fP, \fIwstr2\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.FN -.FD 0 -int _Xwcsncmp(\fIwstr1\fP, \fIwstr2\fP, \fIlen\fP) -.br - wchar_t \fI*wstr1\fP, \fI*wstr2\fP; -.br - int \fIlen\fP; -.FN -.LP -The -.PN _Xwcscmp -function compares two (wchar_t) NULL terminated wide character strings. -The value returned is an integer less than, equal to, or greater than zero, -depending on whether ``\fIwstr1\fP'' is lexicographicly less then, equal to, -or greater than ``\fIstr2\fP''. -.LP -The -.PN _Xwcsncmp -function is identical to -.PN _XlcCompareISOLatin1, -except that at most ``\fIlen\fP'' wide characters are compared. -.sp -.\" -------------------------------------------------------------------- -.\" .LP -.\" \fBLocale Method Internal Functions\fP -.\" .LP -.\" .FD 0 -.\" XlcCharSet _XlcCreateDefaultCharSet(\fIname\fP, \fIct_sequence\fP) -.\" .br -.\" char \fI*name\fP; -.\" .br -.\" char \fI*ct_sequence\fP; -.\" .FN -.\" .FD 0 -.\" Bool _XlcParseCharSet(\fIcharset\fP) -.\" .br -.\" XlcCharSet \fIcharset\fP; -.\" .FN -.\" .FD 0 -.\" void _XlcGetLocaleDataBase(\fIlcd\fP, \fIcategory\fP, \fIname\fP, \fIvalue\fP, \fIcount\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .br -.\" char \fI*category\fP; -.\" .br -.\" char \fI*name\fP; -.\" .br -.\" char \fI***value\fP; -.\" .br -.\" int \fI*count\fP; -.\" .FN -.\" .FD 0 -.\" void _XlcDestroyLocaleDataBase(\fIlcd\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .FN -.\" .FD 0 -.\" XPointer _XlcCreateLocaleDataBase(\fIlcd\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .FN -.\" .LP -.\" .sp -.\" \fBObtain an locale database path\fP -.\" .LP -.\" .FD 0 -.\" int _XlcResolveI18NPath(\fIdir\fP) -.\" .br -.\" char \fI*dir\fP; -.\" .FN -.\" .LP -.\" The -.\" .PN _XlcResolveI18NPath -.\" function returns path name list that is related to X Locale Database. -.\" The obtained path is stored into the array which is pointed by -.\" specified ``\fIdir\fP''. The path consists of directory paths which -.\" are separated with colon. -.\" If the environment variable XLOCALEDIR is specified, the path -.\" contains its contents. -.\" .LP -.\" The default path of X Locale Database is implementation dependent. -.\" In current implementation, it's determined in build time. -.\" .LP -.\" .PN _XlcResolveI18NPath -.\" does not check overflow of the array to which the ``\fIdir\fP'' -.\" parameter points. Caller should provide enough buffer to store this -.\" string. -.\" .LP -.\" .sp -.\" \fBObtain a full locale name\fP -.\" .LP -.\" .FD 0 -.\" int _XlcResolveLocaleName(\fIlc_name\fP, \fIfull_name\fP, \fIlanguage\fP, \fIterritory\fP, \fIcodeset\fP) -.\" .br -.\" char \fI*lc_name\fP; -.\" .br -.\" char \fI*full_name\fP; -.\" .br -.\" char \fI*language\fP; -.\" .br -.\" char \fI*territory\fP; -.\" .br -.\" char \fI*codeset\fP; -.\" .FN -.\" .LP -.\" The -.\" .PN _XlcResolveLocaleName -.\" function returns a full locale name. -.\" The obtained full locale name is stored into the array which is -.\" pointed by specified ``\fIfull_name\fP''. -.\" The language, territory and codeset part of the full locale name -.\" are copied to the return arguments, ``\fIlanguage\fP'', -.\" ``\fIterritory\fP'' and ``\fIcodeset\fP'', respectively. -.\" NULL can be specified for these arguments. -.\" .LP -.\" The rule for mapping from locale name to full locale name is -.\" implementation dependent. -.\" .LP -.\" .PN _XlcResolveLocaleName -.\" does not check overflow of the array to which -.\" ``\fIfull_name\fP'', ``\fIlanguage\fP'', ``\fIterritory\fP'' and -.\" ``\fIcodeset\fP'' parameter point. -.\" Caller should provide enough buffer to store those string. -.\" .LP -.\" In current implementation, -.\" .PN _XlcResolveLocaleName -.\" uses locale.alias file as mapping table, which has pairs of strings, -.\" a locale name and a full locale name. -.\" .LP -.\" .FD 0 -.\" int _XlcResolveDBName(\fIlc_name\fP, \fIfile_name\fP) -.\" .br -.\" char \fI*lc_name\fP; -.\" .br -.\" char \fI*file_name\fP; -.\" .FN -.\" .FD 0 -.\" XLCd _XlcCreateLC(\fIname\fP, \fImethods\fP) -.\" .br -.\" char \fI*name\fP; -.\" .br -.\" XLCdMethods \fImethods\fP; -.\" .FN -.\" .FD 0 -.\" void _XlcDestroyLC(\fIlcd\fP) -.\" .br -.\" XLCd \fIlcd\fP; -.\" .FN -.\" .LP -.\" - diff --git a/libX11/specs/i18n/LocaleDB.ms b/libX11/specs/i18n/LocaleDB.ms deleted file mode 100644 index 4592879d1..000000000 --- a/libX11/specs/i18n/LocaleDB.ms +++ /dev/null @@ -1,499 +0,0 @@ -.\" To print this out, type tbl macros.t ThisFile | troff -ms -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -\& -.TL -\s+3\fBX Locale Database Definition\fP\s-3 -.sp 2 -.AU -Yoshio Horiuchi -.AI -IBM Japan -.LP -.bp -.br -\& -.ps 9 -.nr PS 9 -.sp 2 -.LP -Copyright \(co IBM Corporation 1994 -.LP -All Rights Reserved -.LP -License to use, copy, modify, and distribute this software and its -documentation for any purpose and without fee is hereby granted, -provided that the above copyright notice appear in all copies and that -both that copyright notice and this permission notice appear in -supporting documentation, and that the name of IBM not be -used in advertising or publicity pertaining to distribution of the -software without specific, written prior permission. -.LP -IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING -ALL IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS, AND -NONINFRINGEMENT OF THIRD PARTY RIGHTS, IN NO EVENT SHALL -IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR -ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS -SOFTWARE. -.sp 5 -Copyright \(co 1994 X Consortium -.LP -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: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -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. -.LP -Except as contained in this notice, the name of the 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 the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.LP -.bp 1 -.ps 11 -.nr PS 11 -.EH '\fBX Locale Database Definition\fP''\fB\*(xV\fP' -.OH '\fBX Locale Database Definition\fP''\fB\*(xV\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -General -.XS -\*(SN General -.XE -.LP -An X Locale Database contains the subset of a user's environment that -depends on language, in X Window System. It is made up from one or more -categories. Each category consists of some classes and sub-classes. -.LP -It is provided as a plain ASCII text file, so a user can change its -contents easily. It allows a user to customize the behavior of -internationalized portion of Xlib without changing Xlib itself. -.LP -This document describes; -.RS -.IP -Database Format Definition -.IP -Contents of Database in sample implementation -.RE -.LP -Since it is hard to define the set of required information for all -platforms, only the flexible database format is defined. -The available entries in database are implementation dependent. -.LP -.NH 1 -Database Format Definition -.XS -\*(SN Database Format Definition -.XE -.LP -The X Locale Database contains one or more category definitions. -This section describes the format of each category definition. -.LP -The category definition consists of one or more class definitions. -Each class definition has a pair of class name and class value, or -has several subclasses which are enclosed by the left brace ({) and -the right brace (}). -.LP -Comments can be placed by using the number sign character (#). -Putting the number sign character on the top of the line indicates -that the entire line is comment. Also, putting any whitespace character -followed by the number sign character indicates that a part of the line -(from the number sign to the end of the line) is comment. -A line can be continued by placing backslash (\\) character as the -last character on the line; this continuation character will be -discarded from the input. Comment lines cannot be continued on -a subsequent line using an escaped new line character. -.LP -X Locale Database only accepts XPCS, the X Portable Character Set. -The reserved symbols are; the quotation mark("), the number sign (#), -the semicolon(;), the backslash(\\), the left brace({) and -the right brace(}). -.LP -The format of category definition is; -.RS -.TS -tab(@); -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l l l -l r l -l r l -l l l. -CategoryDefinition@::=@CategoryHeader CategorySpec CategoryTrailer -CategoryHeader@::=@CategoryName NL -CategorySpec@::=@{ ClassSpec } -CategoryTrailer@::=@"END" Delimiter CategoryName NL -CategoryName@::=@String -ClassSpec@::=@ClassName Delimiter ClassValue NL -ClassName@::=@String -ClassValue@::=@ValueList | "{" NL { ClassSpec } "}" -ValueList@::=@Value | Value ";" ValueList -Value@::=@ValuePiece | ValuePiece Value -ValuePiece@::=@String | QuotedString | NumericString -String@::=@Char { Char } -QuotedString@::=@""" QuotedChar { QuotedChar } """ -NumericString@::=@"\\\\o" OctDigit { OctDigit } -@|@"\\\\d" DecDigit { DecDigit } -@|@"\\\\x" HexDigit { HexDigit } -Char@::=@<XPCS except NL, Space or unescaped reserved symbols> -QuotedChar@::=@<XPCS except unescaped """> -OctDigit@::=@<character in the range of "0" - "7"> -DecDigit@::=@<character in the range of "0" - "9"> -HexDigit@::=@<character in the range of "0" - "9", "a" - "f", "A" - "F"> -Delimiter@::=@ Space { Space } -Space@::=@<space> | <horizontal tab> -NL@::=@<newline> -.TE -.RE -.LP -Elements separated by vertical bar (|) are alternatives. Curly -braces ({...}) indicate zero or more repetitions of the enclosed -elements. Square brackets ([...]) indicate that the enclosed element -is optional. Quotes ("...") are used around literal characters. -.LP -The backslash, which is not the top character of the NumericString, is -recognized as an escape character, so that the next one character is -treated as a literal character. For example, the two-character -sequence, ``\\"''(the backslash followed by the quotation mark) is -recognized and replaced with a quotation mark character. -Any whitespace character, that is not the Delimiter, unquoted and -unescaped, is ignored. -.LP -.NH 1 -Contents of Database -.XS -\*(SN Contents of Database -.XE -.LP -The available categories and classes depend on implementation, because -different platform will require different information set. -For example, some platform have system locale but some platform don't. -Furthermore, there might be a difference in functionality even if the -platform has system locale. -.LP -In current sample implementation, categories listed below are available. -.RS -.TS -tab(:); -l l. -XLC_FONTSET:XFontSet relative information -XLC_XLOCALE:Character classification and conversion information -.TE -.RE -.LP -.NH 1 -XLC_FONTSET Category -.XS -\*(SN XLC_FONTSET Category -.XE -.LP -The XLC_FONTSET category defines the XFontSet relative information. -It contains the CHARSET_REGISTRY-CHARSET_ENCODING name and character -mapping side (GL, GR, etc), and is used in Output Method (OM). -.RS -.TS H -tab(:); -lw(1.5i) l l. -_ -.sp 6p -.B -class:super class:description -.sp 6p -_ -.sp 6p -.TH -.R -fsN::Nth fontset (N=0,1,2, ...) -.sp -charset:fsN:list of encoding name -font:fsN:list of font encoding name -.sp 6p -_ -.TE -.RE -.LP -.IP "fsN" -.br -Includes an encoding information for Nth charset, where N is -the index number (0,1,2,...). If there are 4 charsets available -in current locale, 4 fontsets, fs0, fs1, fs2 and fs3, should be -defined. -This class has two subclasses, `charset' and `font'. -.IP "charset" -Specifies an encoding information to be used internally in Xlib -for this fontset. The format of value is; -.RS -.TS -tab(;); -l l l. -EncodingInfo;::=;EncodingName [ ":" EncodingSide ] -EncodingName;::=;CHARSET_REGISTRY-CHARSET_ENCODING -EncodingSide;::=;"GL" | "GR" -.TE -.RE -For detail definition of CHARSET_REGISTRY-CHARSET_ENCODING, refer -"X Logical Font Descriptions" document. -.IP -example: -.br - ISO8859-1:GL -.IP "font" -.br -Specifies a list of encoding information which is used for searching -appropriate font for this fontset. The left most entry has highest -priority. -.LP -.NH 1 -XLC_XLOCALE Category -.XS -\*(SN XLC_XLOCALE Category -.XE -.LP -The XLC_XLOCALE category defines character classification, conversion -and other character attributes. -.RS -.TS H -tab(:); -lw(1.5i) l l. -_ -.sp 6p -.B -class:super class:description -.sp 6p -_ -.sp 6p -.TH -.R -encoding_name::codeset name -mb_cur_max::MB_CUR_MAX -state_depend_encoding::state dependent or not -wc_encoding_mask::for parsing wc string -wc_shift_bits::for conversion between wc and mb -csN::Nth charset (N=0,1,2,...) -.sp -side:csN:mapping side (GL, etc) -length:csN:length of a character -mb_encoding:csN:for parsing mb string -wc_encoding:csN:for parsing wc string -ct_encoding:csN:list of encoding name for ct -.sp 6p -_ -.TE -.RE -.LP -.IP "encoding_name" -Specifies a codeset name of current locale. -.IP "mb_cur_max" -Specifies a maximum allowable number of bytes in a multi-byte character. -It is corresponding to MB_CUR_MAX of "ISO/IEC 9899:1990 C Language Standard". -.IP "state_depend_encoding" -Indicates a current locale is state dependent. The value should be -specified "True" or "False". -.IP "wc_encoding_mask" -Specifies a bit-mask for parsing wide-char string. Each wide character is -applied bit-and operation with this bit-mask, then is classified into -the unique charset, by using `wc_encoding'. -.IP "wc_shift_bits" -Specifies a number of bit to be shifted for converting from a multi-byte -character to a wide character, and vice-versa. -.IP "csN" -.br -Includes a character set information for Nth charset, where N is the -index number (0,1,2,...). If there are 4 charsets available in current -locale, cs0, cs1, cs2 and cs3 should be defined. This class has five -subclasses, `side', `length', `mb_encoding' `wc_encoding' and `ct_encoding'. -.IP "side" -.br -Specifies a mapping side of this charset. The format of this value is; -.RS -.TS -tab(@); -l l l. -Side@::=@EncodingSide [``:Default''] -.TE -.RE -The suffix ":Default" can be specified. It indicates that a character -belongs to the specified side is mapped to this charset in initial state. -.IP "length" -.br -Specifies a number of bytes of a multi-byte character of this charset. -It should not contain the length of any single-shift sequence. -.IP "mb_encoding" -Specifies a list of shift sequence for parsing multi-byte string. -The format of this value is; -.RS -.TS -tab(@); -l l l -l r l -l l l -l l l -l l l -l l l -c l s -c l s. -MBEncoding@::=@ShiftType ShiftSequence -@|@ShiftType ShiftSequence ";" MBEncoding -ShiftType@::=@"<SS>" | "<LSL>" | "<LSR>" -ShiftSequence@::=@SequenceValue | SequenceValue ShiftSequence -SequenceValue@::=@NumericString -.sp -shift types: -<SS>@Indicates single shift sequence -<LSL>@Indicates locking shift left sequence -<LSR>@Indicates locking shift right sequence -.TE -.RE -example: -.br - <LSL> \\x1b \\x28 \\x4a; <LSL> \\x1b \\x28 \\x42 -.LP -.IP "wc_encoding" -Specifies an integer value for parsing wide-char string. -It is used to determine the charset for each wide character, after -applying bit-and operation using `wc_encoding_mask'. -This value should be unique in all csN classes. -.IP "ct_encoding" -Specifies a list of encoding information that can be used for Compound -Text. -.LP -.NH 1 -Sample of X Locale Database -.XS -\*(SN Sample of X Locale Database -.XE -.LP -The following is sample X Locale Database file. -.LP -.sp -.RS -.nf -# XLocale Database Sample for ja_JP.euc -# - -# -# XLC_FONTSET category -# -XLC_FONTSET -# fs0 class (7 bit ASCII) -fs0 { - charset ISO8859-1:GL - font ISO8859-1:GL; JISX0201.1976-0:GL -} -# fs1 class (Kanji) -fs1 { - charset JISX0208.1983-0:GL - font JISX0208.1983-0:GL -} -# fs2 class (Half Kana) -fs2 { - charset JISX0201.1976-0:GR - font JISX0201.1976-0:GR -} -# fs3 class (User Defined Character) -# fs3 { -# charset JISX0212.1990-0:GL -# font JISX0212.1990-0:GL -# } -END XLC_FONTSET - -# -# XLC_XLOCALE category -# -XLC_XLOCALE - -encoding_name ja.euc -mb_cur_max 3 -state_depend_encoding False - -wc_encoding_mask \\x00008080 -wc_shift_bits 8 - -# cs0 class -cs0 { - side GL:Default - length 1 - wc_encoding \\x00000000 - ct_encoding ISO8859-1:GL; JISX0201.1976-0:GL -} -# cs1 class -cs1 { - side GR:Default - length 2 - - wc_encoding \\x00008080 - - ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\\ - JISX0208.1983-1:GL; JISX0208.1983-1:GR -} - -# cs2 class -cs2 { - side GR - length 1 - mb_encoding <SS> \\x8e - - wc_encoding \\x00000080 - - ct_encoding JISX0201.1976-0:GR -} - -# cs3 class -# cs3 { -# side GL -# length 2 -# mb_encoding <SS> \\x8f -# #if HasWChar32 -# wc_encoding \\x20000000 -# #else -# wc_encoding \\x00008000 -# #endif -# ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR -# } - -END XLC_XLOCALE -.fi -.RE -.LP -.NH 1 -Reference -.XS -\*(SN Reference -.XE -.LP -.XP -[1] \fIISO/IEC 9899:1990 C Language Standard\fP -.XP -[2] \fIX Logical Font Descriptions\fP -.LP diff --git a/libX11/specs/i18n/Makefile.am b/libX11/specs/i18n/Makefile.am index 9f5d51e9a..1fd341f21 100644 --- a/libX11/specs/i18n/Makefile.am +++ b/libX11/specs/i18n/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2009 Sun Microsystems, Inc. All rights reserved. +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a # copy of this software and associated documentation files (the "Software"), @@ -21,8 +21,4 @@ # DEALINGS IN THE SOFTWARE. # -# Based on xc/doc/specs/i18n/Makefile from X11R6.9 - -doc_sources = Framework.ms LocaleDB.ms Trans.ms - -include $(top_srcdir)/specs/troffrules.in +SUBDIRS=framework localedb trans diff --git a/libX11/specs/i18n/Trans.ms b/libX11/specs/i18n/Trans.ms deleted file mode 100644 index 1216ef254..000000000 --- a/libX11/specs/i18n/Trans.ms +++ /dev/null @@ -1,1146 +0,0 @@ -.\" To print this out, type tbl macros.t This File | troff -ms -.EH '''' -.OH '''' -.EF '''' -.OF '''' -.ps 11 -.nr PS 11 -.\" .nr PD 1v -.\" .nr DD 1v -\& -.sp 8 -.TL -\s+3\fBThe XIM Transport Specification\s-3\fP -.sp -.sp -\fBRevision 0.1\fP -.sp -\fBX Version 11, Release 7\fP -.sp -\fB\*(xV\fP -.sp 3 -.AU -Takashi Fujiwara -.AI -FUJITSU LIMITED -.sp 3 -.AB -.LP -This specification describes the transport layer interfaces between -Xlib and IM Server, which makes various channels usable such as X -protocol or, TCP/IP, DECnet and etc. -.AE -.ce 0 -.br -.LP -.bp -\& -.ps 9 -.nr PS 9 -.sp 8 -.LP -Copyright \(co 1994 by FUJITSU LIMITED -.LP -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. -Fujitsu makes 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. -.sp 5 -Copyright \(co 1994 X Consortium -.LP -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: -.LP -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. -.LP -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. -.LP -Except as contained in this notice, the name of the 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 the X Consortium. -.sp 3 -\fIX Window System\fP is a trademark of The Open Group. -.ps 11 -.nr PS 11 -.bp 1 -.EH '\fBXIM Transport Specification\fP''\fB\*(xV\fP' -.OH '\fBXIM Transport Specification\fP''\fB\*(xV\fP' -.EF ''\fB % \fP'' -.OF ''\fB % \fP'' -.NH 1 -Introduction -.XS -\*(SN Introduction -.XE -.LP -The Xlib XIM implementation is layered into three functions, a protocol -layer, an interface layer and a transport layer. The purpose of this -layering is to make the protocol independent of transport implementation. -Each function of these layers are: -.RS 3 -.IP "\fIThe protocol layer\fP" -.br -implements overall function of XIM and calls the interface layer -functions when it needs to communicate to IM Server. -.IP "\fIThe interface layer\fP" -.br -separates the implementation of the transport layer from the protocol -layer, in other words, it provides implementation independent hook for -the transport layer functions. -.IP "\fIThe transport layer\fP" -.br -handles actual data communication with IM Server. It is done by a set -of several functions named transporters. -.RE -.LP -This specification describes the interface layer and the transport -layer, which makes various communication channels usable such as -X protocol or, TCP/IP, DECnet, STREAM, etc., and provides -the information needed for adding another new transport layer. -In addition, sample implementations for the transporter using the -X connection is described in section 4. -.NH 1 -Initialization -.XS -\*(SN Initialization -.XE -.NH 2 -Registering structure to initialize -.XS -\*(SN Registering structure to initialize -.XE -.LP -The structure typed as TransportSW contains the list of the transport -layer the specific implementations supports. -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -typedef struct { -.br - char *transport_name; -.br - Bool (*config); -} TransportSW; -.De -.LP -.IP "\fItransport_name\fP" 15 -name of transport(*1) -.FS -(*1) Refer to "The Input Method Protocol: Appendix B" -.FE -.IP "\fIconfig\fP" 15 -initial configuration function -.LP -A sample entry for the Xlib supporting transporters is shown below: -.LP -.Ds 0 -.TA .5i 2.5i -.ta .5i 2.5i -TransportSW _XimTransportRec[] = { -.sp 3p -/* char \fI*: -\ * transport_name\fP, Bool \fI(*config)()\fP -\ */ - ``X'', _XimXConf, - ``tcp'', _XimTransConf, - ``local'', _XimTransConf, - ``decnet'', _XimTransConf, - ``streams'', _XimTransConf, - (char *)NULL, (Bool (*)())NULL, -}; -.De -.LP -.NH 2 -Initialization function -.XS -\*(SN Initialization function -.XE -.LP -The following function will be called once when Xlib configures the -transporter functions. -.sp 6p -.FD 0 -Bool (*config)(\fIim\fP, \fItransport_data\fP) -.br - XIM \fIim\fP; -.br - char \fI*transport_data\fP; -.br -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fItransport_data\fP 1i -Specifies the data specific to the transporter, in IM Server address. (*1) -.FS -(*1) Refer to "The Input Method Protocol: Appendix B" -.FE -.sp 6p -.LP -This function must setup the transporter function pointers. -.LP -The actual \fIconfig\fP function will be chosen by IM Server at the -pre-connection time, matching by the \fItransport_name\fP specified -in the \fB_XimTransportRec\fP array; The specific members of XimProto -structure listed below must be initialized so that point they -appropriate transporter functions. -.LP -If the specified transporter has been configured successfully, this -function returns True. There is no Alternative Entry for config -function itself. -.LP -The structure XimProto contains the following function pointers: -.DS -.TA .5i 2.5i -.ta .5i 2.5i -Bool (*connect)(); /* Open connection */ -Bool (*shutdown)(); /* Close connection */ -Bool (*write)(); /* Write data */ -Bool (*read)(); /* Read data */ -Bool (*flush)(); /* Flush data buffer */ -Bool (*register_dispatcher)(); /* Register asynchronous data handler */ -Bool (*call_dispatcher)(); /* Call dispatcher */ -.DE -These functions are called when Xlib needs to communicate the -IM Server. These functions must process the appropriate procedure -described below. -.LP -.NH 1 -The interface/transport layer functions -.XS -\*(SN The interface/transport layer functions -.XE -.LP -Following functions are used for the transport interface. -.LP -.ce -Table 3-1; The Transport Layer Functions. -.SM -.TS -tab(:) center box; -cw(4c) | cw(4c) | c -c | c | c -l | l | c. -.B -Alternative Entry:XimProto member:Section -(Interface Layer):(Transport Layer):\^ -= -.R -\fB_XimConnect\fP:connect:3.1 -_ -\fB_XimShutdown\fP:shutdown:3.2 -_ -\fB_XimWrite\fP:write:3.3 -_ -\fB_XimRead\fP:read:3.4 -_ -\fB_XimFlush\fP:flush:3.5 -_ -\fB_XimRegisterDispatcher\fP:register_dispatcher:3.6 -_ -\fB_XimCallDispatcher\fP:call_dispatcher:3.7 -.TE -.NL -.LP -The Protocol layer calls the above functions using the Alternative -Entry in the left column. The transport implementation defines -XimProto member function in the right column. The Alternative Entry is -provided so as to make easier to implement the Protocol Layer. -.LP -.NH 2 -Opening connection -.XS -\*(SN Opening connection -.XE -.LP -When \fBXOpenIM\fP is called, the following function is called to connect -with the IM Server. -.sp 6p -.FD 0 -Bool (*connect)(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.sp 6p -.LP -This function must establishes the connection to the IM Server. If the -connection is established successfully, this function returns True. -The Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimConnect(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.LP -.NH 2 -Closing connection -.XS -\*(SN Closing connection -.XE -.LP -When \fBXCloseIM\fP is called, the following function is called to -disconnect the connection with the IM Server. The Alternative Entry -for this function is: -.sp 6p -.FD 0 -Bool (*shutdown)(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.sp 6p -.LP -This function must close connection with the IM Server. If the -connection is closed successfully, this function returns True. The -Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimShutdown(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP -Specifies XIM structure address. -.LP -.NH 2 -Writing data -.XS -\*(SN Writing data -.XE -.LP -The following function is called, when Xlib needs to write data to the -IM Server. -.sp 6p -.FD 0 -Bool (*write)(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the length of writing data. -.IP \fIdata\fP 1i -Specifies the writing data. -.sp 6p -.LP -This function writes the \fIdata\fP to the IM Server, regardless -of the contents. The number of bytes is passed to \fIlen\fP. The -writing data is passed to \fIdata\fP. If data is sent successfully, -the function returns True. Refer to "The Input Method Protocol" for -the contents of the writing data. The Alternative Entry for this -function is: -.sp 6p -.FD 0 -Bool _XimWrite(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the length of writing data. -.IP \fIdata\fP 1i -Specifies the writing data. -.LP -.NH 2 -Reading data -.XS -\*(SN Reading data -.XE -.LP -The following function is called when Xlib waits for response from IM -server synchronously. -.sp 6p -.FD 0 -Bool (*read)(\fIim\fP, \fIread_buf\fP, \fIbuf_len\fP, \fIret_len\fP) -.br - XIM \fIim\fP; -.br - XPointer \fIread_buf\fP; -.br - int \fIbuf_len\fP; -.br - int \fI*ret_len\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIread_buf\fP 1i -Specifies the buffer to store data. -.IP \fIbuf_len\fP 1i -Specifies the size of the \fIbuffer\fP -.IP \fIret_len\fP -Specifies the length of stored data. -.sp 6p -.LP -This function stores the read data in \fIread_buf\fP, which size is -specified as \fIbuf_len\fP. The size of data is set to \fIret_len\fP. -This function return True, if the data is read normally or reading -data is completed. -.LP -The Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimRead(\fIim\fP, \fIret_len\fP, \fIbuf\fP, \fIbuf_len\fP, \fIpredicate\fP, \fIpredicate_arg\fP) -.br - XIM \fIim\fP; -.br - INT16 \fI*ret_len\fP; -.br - XPointer \fIbuf\fP; -.br - int \fIbuf_len\fP; -.br - Bool \fI(*predicate)()\fP; -.br - XPointer \fIpredicate_arg\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIret_len\fP 1i -Specifies the size of the \fIdata\fP buffer. -.IP \fIbuf\fP 1i -Specifies the buffer to store data. -.IP \fIbuf_len\fP 1i -Specifies the length of \fIbuffer\fP. -.IP \fIpredicate\fP 1i -Specifies the predicate for the XIM data. -.IP \fIpredicate_arg\fP 1i -Specifies the predicate specific data. -.sp 6p -.LP -The predicate procedure indicates whether the \fIdata\fP is for the -XIM or not. \fIlen\fP -This function stores the read data in \fIbuf\fP, which size is specified -as \fIbuf_len\fP. The size of data is set to \fIret_len\fP. -If \fIpreedicate()\fP returns True, this function returns True. -If not, it calls the registered callback function. -.LP -The procedure and its arguments are: -.LP -.sp 6p -.FD 0 -Bool (*predicate)(\fIim\fP, \fIlen\fP, \fIdata\fP, \fIpredicate_arg\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.br - XPointer \fIpredicate_arg\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the size of the \fIdata\fP buffer. -.IP \fIdata\fP 1i -Specifies the buffer to store data. -.IP \fIpredicate_arg\fP 1i -Specifies the predicate specific data. -.LP -.NH 2 -Flushing buffer -.XS -\*(SN Flushing buffer -.XE -.LP -The following function is called when Xlib needs to flush the data. -.sp 6p -.FD 0 -void (*flush)(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.sp 6p -.LP -This function must flush the data stored in internal buffer on the -transport layer. If data transfer is completed, the function returns -True. The Alternative Entry for this function is: -.sp 6p -.FD 0 -void _XimFlush(\fIim\fP) -.br - XIM \fIim\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.LP -.NH 2 -Registering asynchronous data handler -.XS -\*(SN Registering asynchronous data handler -.XE -.LP -Xlib needs to handle asynchronous response from IM Server. This is -because some of the XIM data occur asynchronously to X events. -.LP -Those data will be handled in the \fIFilter\fP, and the \fIFilter\fP -will call asynchronous data handler in the protocol layer. Then it -calls dispatchers in the transport layer. The dispatchers are -implemented by the protocol layer. This function must store the -information and prepare for later call of the dispatchers using -\fB_XimCallDispatcher\fP. -.LP -When multiple dispatchers are registered, they will be called -sequentially in order of registration, on arrival of asynchronous -data. The register_dispatcher is declared as following: -.sp 6p -.FD 0 -Bool (*register_dispatcher)(\fIim\fP, \fIdispatcher\fP, \fIcall_data\fP) -.br - XIM \fIim\fP; -.br - Bool \fI(*dispatcher)()\fP; -.br - XPointer \fIcall_data\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIdispatcher\fP 1i -Specifies the dispatcher function to register. -.IP \fIcall_data\fP 1i -Specifies a parameter for the \fIdispatcher\fP. -.LP -The dispatcher is a function of the following type: -.sp 6p -.FD 0 -Bool (*dispatcher)(\fIim\fP, \fIlen\fP, \fIdata\fP, \fIcall_data\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.br - XPointer \fIcall_data\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the size of the \fIdata\fP buffer. -.IP \fIdata\fP 1i -Specifies the buffer to store data. -.IP \fIcall_data\fP 1i -Specifies a parameter passed to the register_dispatcher. -.sp 6p -.LP -The dispatcher is provided by the protocol layer. They are called once -for every asynchronous data, in order of registration. If the data is -used, it must return True. otherwise, it must return False. -.LP -If the dispatcher function returns True, the Transport Layer assume -that the data has been processed by the upper layer. The Alternative -Entry for this function is: -.sp 6p -.FD 0 -Bool _XimRegisterDispatcher(\fIim\fP, \fIdispatcher\fP, \fIcall_data\fP) -.br - XIM \fIim\fP; -.br - Bool \fI(*dispatcher)()\fP; -.br - XPointer \fIcall_data\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIdispatcher\fP 1i -Specifies the dispatcher function to register. -.IP \fIcall_data\fP 1i -Specifies a parameter for the \fIdispatcher\fP. -.LP -.NH 2 -Calling dispatcher -.XS -\*(SN Calling dispatcher -.XE -.LP -The following function is used to call the registered dispatcher -function, when the asynchronous response from IM Server has arrived. -.sp 6p -.FD 0 -Bool (*call_dispatcher)(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIdata\fP; -.FN -.IP \fIim\fP 1i -Specifies XIM structure address. -.IP \fIlen\fP 1i -Specifies the size of \fIdata\fP buffer. -.IP \fIdata\fP 1i -Specifies the buffer to store data. -.LP -The call_dispatcher must call the dispatcher function, in order of -their registration. \fIlen\fP and \fIdata\fP are the data passed to -register_dispatcher. -.LP -The return values are checked at each invocation, and if it finds -True, it immediately return with true for its return value. -.LP -It is depend on the upper layer whether the read data is XIM -Protocol packet unit or not. -The Alternative Entry for this function is: -.sp 6p -.FD 0 -Bool _XimCallDispatcher(\fIim\fP, \fIlen\fP, \fIdata\fP) -.br - XIM \fIim\fP; -.br - INT16 \fIlen\fP; -.br - XPointer \fIcall_data\fP; -.FN -.LP -.bp -.NH 1 -Sample implementations for the Transport Layer -.XS -\*(SN Sample implementations for the Transport Layer -.XE -.LP -Sample implementations for the transporter using the X connection is -described here. -.LP -.NH 2 -X Transport -.XS -\*(SN X Transport -.XE -.LP -At the beginning of the X Transport connection for the XIM transport -mechanism, two different windows must be created either in an Xlib XIM -or in an IM Server, with which the Xlib and the IM Server exchange the -XIM transports by using the ClientMessage events and Window Properties. -In the following, the window created by the Xlib is referred as the -"client communication window", and on the other hand, the window created -by the IM Server is referred as the "IMS communication window". -.LP -.NH 3 -Connection -.XS -\*(SN X Connection -.XE -.LP -In order to establish a connection, a communication window is created. -A ClientMessage in the following event's format is sent to the owner -window of XIM_SERVER selection, which the IM Server has created. -.LP -Refer to "The Input Method Protocol" for the XIM_SERVER atom. -.LP -.ce -Table 4-1; The ClientMessage sent to the IMS window. -.TS H -tab(:); -l s|l -l l|l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:IMS Window ID -Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) -int:format:32 -long:data.l[0]:client communication window ID -long:data.l[1]:client-major-transport-version (*1) -long:data.l[2]:client-major-transport-version (*1) -.sp 6p -_ -.TE -.LP -In order to establish the connection (to notify the IM Server communication -window), the IM Server sends a ClientMessage in the following event's -format to the client communication window. -.LP -.ce -Table 4-2; The ClientMessage sent by IM Server. -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:client communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_XCONNECT'', False) -int:format:32 -long:data.l[0]:IMS communication window ID -long:data.l[1]:server-major-transport-version (*1) -long:data.l[2]:server-minor-transport-version (*1) -long:data.l[3]:dividing size between ClientMessage and Property (*2) -.sp 6p -_ -.TE -.LP -.IP (*1) -major/minor-transport-version -.RS -The read/write method is decided by the combination of -major/minor-transport-version, as follows: -.LP -.ce -Table 4-3; The read/write method and the major/minor-transport-version -.TS -center, tab(:); -| c s | l | -| c | c | l |. -_ -.sp 6p -.B -Transport-version:read/write -.sp 6p -_ -.sp 6p -major:minor: -.sp 6p -_ -.sp 6p -.R -0:0:only-CM & Property-with-CM -:1:only-CM & multi-CM -:2:only-CM & multi-CM & Property-with-CM -.sp 6p -_ -.sp 6p -1:0:PropertyNotify -.sp 6p -_ -.sp 6p -2:0:only-CM & PropertyNotify -:1:only-CM & multi-CM & PropertyNotify -.sp 6p -_ -.TE -.LP -.RS -.TS -center, tab(;); -l n l. -only-CM;:;data is sent via a ClientMessage -multi-CM;:;data is sent via multiple ClientMessages -Property-with-CM;:;T{ -data is written in Property, and its Atom is send via ClientMessage -T} -PropertyNotify;:;T{ -data is written in Property, and its Atom is send via PropertyNotify -T} -.TE -.RE -.LP -The method to decide major/minor-transport-version is as follows: -.LP -.IP (1) -The client sends 0 as major/minor-transport-version to the IM Server. -The client must support all methods in Table 4-3. -The client may send another number as major/minor-transport-version to -use other method than the above in the future. -.IP (2) -The IM Server sends its major/minor-transport-version number to -the client. The client sends data using the method specified by the -IM Server. -.IP (3) -If major/minor-transport-version number is not available, it is regarded -as 0. -.RE -.LP -.IP (*2) -dividing size between ClientMessage and Property -.RS -If data is sent via both of multi-CM and Property, specify the dividing -size between ClientMessage and Property. The data, which is smaller than -this size, is sent via multi-CM (or only-CM), and the data, which is -lager than this size, is sent via Property. -.RE -.LP -.NH 3 -read/write -.XS -\*(SN read/write -.XE -.LP -The data is transferred via either ClientMessage or Window Property in -the X Window System. -.LP -.NH 4 -Format for the data from the Client to the IM Server -.XS -\*(SN Format for the data from the Client to the IM Server -.XE -.LP -.B -ClientMessage -.LP -.RS -If data is sent via ClientMessage event, the format is as follows: -.LP -.ce -Table 4-4; The ClientMessage event's format (first or middle) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event;Set by the X Window System -Display;*display;The display to which connects -Window;window;IMS communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) -int;format;8 -char;data.b[20];(read/write DATA : 20 byte) -.sp 6p -_ -.TE -.LP -.ce -Table 4-5; The ClientMessage event's format (only or last) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event;Set by the X Window System -Display;*display;The display to which connects -Window;window;IMS communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) -int;format;8 -char;data.b[20];(read/write DATA : MAX 20 byte) (*1) -.sp 6p -_ -.TE -.IP (*1) -If the data is smaller than 20 byte, all data other than available data -must be 0. -.RE -.LP -.B -Property -.LP -.RS -In the case of large data, data will be sent via the Window Property -for the efficiency. There are the following two methods to notify -Property, and transport-version is decided which method is used. -.LP -.IP (1) -The XChangeProperty function is used to store data in the client -communication window, and Atom of the stored data is notified to the -IM Server via ClientMessage event. -.IP (2) -The XChangeProperty function is used to store data in the client -communication window, and Atom of the stored data is notified to the -IM Server via PropertyNotify event. -.LP -The arguments of the XChangeProperty are as follows: -.LP -.ce -Table 4-6; The XChangeProperty event's format -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Argument:Contents -.sp 6p -_ -.sp 6p -.TH -.R -Display:*display:The display to which connects -Window:window:IMS communication window ID -Atom:property:read/write property Atom (*1) -Atom:type:XA_STRING -int:format:8 -int:mode:PropModeAppend -u_char:*data:read/write DATA -int:nelements:length of DATA -.sp 6p -_ -.TE -.LP -.IP (*1) -The read/write property ATOM allocates the following strings by -\fBXInternAtom\fP. -.RS -``_clientXXX'' -.RE -.LP -The client changes the property with the mode of PropModeAppend and -the IM Server will read it with the delete mode i.e. (delete = True). -.LP -If Atom is notified via ClientMessage event, the format of the ClientMessage -is as follows: -.LP -.ce -Table 4-7; The ClientMessage event's format to send Atom of property -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:IMS communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) -int:format:32 -long:data.l[0]:length of read/write property Atom -long:data.l[1]:read/write property Atom -.sp 6p -_ -.TE -.RE -.LP -.NH 4 -Format for the data from the IM Server to the Client -.XS -\*(SN Format for the data from the Client to the Client -.XE -.LP -.B -ClientMessage -.LP -.RS -The format of the ClientMessage is as follows: -.LP -.ce -Table 4-8; The ClientMessage event's format (first or middle) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event ;Set by the X Window System -Display;*display;The display to which connects -Window;window;client communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_MOREDATA'', False) -int;format;8 -char;data.b[20];(read/write DATA : 20 byte) -.sp 6p -_ -.TE -.LP -.ce -Table 4-9; The ClientMessage event's format (only or last) -.TS H -tab(;); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member;Contents -.sp 6p -_ -.sp 6p -.TH -.R -int;type;ClientMessage -u_long;serial;Set by the X Window System -Bool;send_event ;Set by the X Window System -Display;*display;The display to which connects -Window;window;client communication window ID -Atom;message_type;XInternAtom(display, ``_XIM_PROTOCOL'', False) -int;format;8 -char;data.b[20];(read/write DATA : MAX 20 byte) (*1) -.sp 6p -_ -.TE -.LP -.IP (*1) -If the data size is smaller than 20 bytes, all data other than available -data must be 0. -.RE -.LP -.B -Property -.LP -.RS -In the case of large data, data will be sent via the Window Property -for the efficiency. There are the following two methods to notify -Property, and transport-version is decided which method is used. -.LP -.IP (1) -The XChangeProperty function is used to store data in the IMS -communication window, and Atom of the property is sent via the -ClientMessage event. -.IP (2) -The XChangeProperty function is used to store data in the IMS -communication window, and Atom of the property is sent via -PropertyNotify event. -.LP -The arguments of the XChangeProperty are as follows: -.LP -.ce -Table 4-10; The XChangeProperty event's format -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Argument:Contents -.sp 6p -_ -.sp 6p -.TH -.R -Display:*display:The display which to connects -Window:window:client communication window ID -Atom:property:read/write property Atom (*1) -Atom:type:XA_STRING -int:format:8 -int:mode:PropModeAppend -u_char:*data:read/write DATA -int:nelements:length of DATA -.sp 6p -_ -.TE -.LP -.IP (*1) -The read/write property ATOM allocates some strings, which are not -allocated by the client, by \fBXInternAtom\fP. -.LP -The IM Server changes the property with the mode of PropModeAppend and -the client reads it with the delete mode, i.e. (delete = True). -.LP -If Atom is notified via ClientMessage event, the format of the ClientMessage -is as follows: -.LP -.ce -Table 4-11; The ClientMessage event's format to send Atom of property -.TS H -tab(:); -l s | l -l l | l. -_ -.sp 6p -.B -Structure Member:Contents -.sp 6p -_ -.sp 6p -.TH -.R -int:type:ClientMessage -u_long:serial:Set by the X Window System -Bool:send_event:Set by the X Window System -Display:*display:The display to which connects -Window:window:client communication window ID -Atom:message_type:XInternAtom(display, ``_XIM_PROTOCOL'', False) -int:format:32 -long:data.l[0]:length of read/write property ATOM -long:data.l[1]:read/write property ATOM -.sp 6p -_ -.TE -.RE -.LP -.NH 3 -Closing Connection -.XS -\*(SN Closing Connection -.XE -.LP -If the client disconnect with the IM Server, shutdown function should -free the communication window properties and etc.. -.LP -.NH 1 -References -.XS -\*(SN References -.XE -.LP -[1] Masahiko Narita and Hideki Hiura, \fI``The Input Method Protocol''\fP -.LP - diff --git a/libX11/specs/i18n/framework/Makefile.am b/libX11/specs/i18n/framework/Makefile.am new file mode 100644 index 000000000..8f6364a03 --- /dev/null +++ b/libX11/specs/i18n/framework/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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 (including the next +# paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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. +# + +if ENABLE_SPECS + +specdir = $(docdir)/$(subdir) +doc_sources = framework.xml +dist_spec_DATA = $(doc_sources) framework.svg + +include $(top_srcdir)/specs/xmlrules.in + +endif ENABLE_SPECS diff --git a/libX11/specs/i18n/framework/framework.svg b/libX11/specs/i18n/framework/framework.svg new file mode 100644 index 000000000..7adfc1404 --- /dev/null +++ b/libX11/specs/i18n/framework/framework.svg @@ -0,0 +1,703 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> + +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="540.32245" + height="530.98114" + id="svg2" + version="1.1" + inkscape:version="0.47 r22583" + sodipodi:docname="framework.svg"> + <defs + id="defs4"> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend" + style="overflow:visible"> + <path + id="path3656" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 526.18109 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="744.09448 : 526.18109 : 1" + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" + id="perspective10" /> + <inkscape:perspective + id="perspective2824" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2844" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2874" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2874-0" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective2915" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <inkscape:perspective + id="perspective4106" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-8" + style="overflow:visible"> + <path + id="path3656-9" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4134" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-6" + style="overflow:visible"> + <path + id="path3656-3" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4162" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-2" + style="overflow:visible"> + <path + id="path3656-1" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4190" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-4" + style="overflow:visible"> + <path + id="path3656-91" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4218" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-3" + style="overflow:visible"> + <path + id="path3656-30" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4246" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-83" + style="overflow:visible"> + <path + id="path3656-2" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4274" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-35" + style="overflow:visible"> + <path + id="path3656-5" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4302" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + <marker + inkscape:stockid="Arrow1Lend" + orient="auto" + refY="0" + refX="0" + id="Arrow1Lend-20" + style="overflow:visible"> + <path + id="path3656-0" + d="M 0,0 5,-5 -12.5,0 5,5 0,0 z" + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none" + transform="matrix(-0.8,0,0,-0.8,-10,0)" /> + </marker> + <inkscape:perspective + id="perspective4332" + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" + inkscape:vp_z="1 : 0.5 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 0.5 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="1.5911958" + inkscape:cx="236.83428" + inkscape:cy="268.26412" + inkscape:document-units="px" + inkscape:current-layer="layer1" + showgrid="false" + inkscape:window-width="1280" + inkscape:window-height="752" + inkscape:window-x="-3" + inkscape:window-y="-3" + inkscape:window-maximized="1" /> + <metadata + id="metadata7"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Layer 1" + inkscape:groupmode="layer" + id="layer1" + transform="translate(-78.35714,-45.862183)"> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2830" + width="451.42856" + height="38.57143" + x="128.85715" + y="46.362183" + ry="0" /> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2832" + width="125.71429" + height="67.14286" + x="98.571426" + y="186.07646" + ry="0" /> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2834" + width="65.714287" + height="45.714287" + x="274.85715" + y="188.55154" + ry="0" /> + <rect + style="fill:none;stroke:#000000;stroke-width:1.02407026;stroke-opacity:1" + id="rect2858" + width="133.40337" + height="48.547359" + x="274.86917" + y="235.23137" + ry="0" /> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2860" + width="157.14285" + height="62.857143" + x="443.71429" + y="188.93361" + ry="0" /> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2862" + width="167.14285" + height="130" + x="78.85714" + y="387.79074" + ry="0" /> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2862-6" + width="167.14285" + height="130" + x="261.57141" + y="388.50504" + ry="0" /> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2862-9" + width="167.14285" + height="130" + x="443.57141" + y="388.50504" + ry="0" /> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="303.85651" + y="72.885086" + id="text2897"><tspan + sodipodi:role="line" + id="tspan2899" + x="303.85651" + y="72.885086" + style="font-size:20px">Application</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="170.05533" + y="154.5576" + id="text2901"><tspan + sodipodi:role="line" + id="tspan2903" + x="170.05533" + y="154.5576" + style="font-size:16px;text-align:center;text-anchor:middle"><<ANSI/MSE API>></tspan><tspan + sodipodi:role="line" + x="170.05533" + y="174.5576" + id="tspan2905" + style="font-size:16px;text-align:center;text-anchor:middle">(X Contrib)</tspan></text> + <rect + style="fill:none;stroke:#000000;stroke-opacity:1" + id="rect2834-6" + width="65.714287" + height="45.714287" + x="341.6012" + y="188.55154" + ry="0" /> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="344.00778" + y="155.16107" + id="text2929"><tspan + sodipodi:role="line" + id="tspan2931" + x="344.00778" + y="155.16107" + style="font-size:16px;text-align:center;text-anchor:middle"><<XLib API>></tspan><tspan + sodipodi:role="line" + x="344.00778" + y="175.16107" + id="tspan2933" + style="font-size:16px;text-align:center;text-anchor:middle">(X Core)</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="524.94836" + y="155.33501" + id="text2935"><tspan + sodipodi:role="line" + id="tspan2937" + x="524.94836" + y="155.33501" + style="font-size:16px;text-align:center;text-anchor:middle"><<ANSI/MSE API>></tspan><tspan + sodipodi:role="line" + x="524.94836" + y="175.33501" + id="tspan2939" + style="font-size:16px;text-align:center;text-anchor:middle">(X Contrib)</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="278.00778" + y="205.31915" + id="text2941"><tspan + sodipodi:role="line" + id="tspan2943" + x="278.00778" + y="205.31915" + style="font-size:16px">Input</tspan><tspan + sodipodi:role="line" + x="278.00778" + y="225.31915" + id="tspan2945" + style="font-size:16px">Method</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="343.88126" + y="205.31915" + id="text2947"><tspan + sodipodi:role="line" + id="tspan2949" + x="343.88126" + y="205.31915" + style="font-size:16px">Output</tspan><tspan + sodipodi:role="line" + x="343.88126" + y="225.31915" + id="tspan2951" + style="font-size:16px">Method</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="280.57693" + y="253.82504" + id="text2953"><tspan + sodipodi:role="line" + id="tspan2955" + x="280.57693" + y="253.82504" + style="font-size:14px"><Locl. Serv. API></tspan><tspan + sodipodi:role="line" + x="280.57693" + y="271.32504" + id="tspan2957" + style="font-size:14px">X Locale Object</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="450.71121" + y="207.0899" + id="text2959"><tspan + sodipodi:role="line" + id="tspan2961" + x="450.71121" + y="207.0899" + style="font-size:16px">C Library</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="517.04321" + y="241.71439" + id="text2963"><tspan + sodipodi:role="line" + id="tspan2965" + x="517.04321" + y="241.71439" + style="font-size:16px">ANSI impl</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="104.89322" + y="419.56409" + id="text2967"><tspan + sodipodi:role="line" + id="tspan2969" + x="104.89322" + y="419.56409" + style="font-size:16px">XLC_XLOCALE</tspan><tspan + sodipodi:role="line" + x="104.89322" + y="439.56409" + id="tspan2971" + style="font-size:16px">- MB_CUR_MAX</tspan><tspan + sodipodi:role="line" + x="104.89322" + y="459.56409" + id="tspan2973" + style="font-size:16px">codeset info</tspan><tspan + sodipodi:role="line" + x="104.89322" + y="479.56409" + id="tspan2975" + style="font-size:16px">o char/charset</tspan><tspan + sodipodi:role="line" + x="104.89322" + y="499.56409" + id="tspan2977" + style="font-size:16px">o conv/charset</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="290.68759" + y="414.07794" + id="text2979"><tspan + sodipodi:role="line" + id="tspan2981" + x="290.68759" + y="414.07794" + style="font-size:16px">XLC_FONTSET</tspan><tspan + sodipodi:role="line" + x="290.68759" + y="434.07794" + id="tspan2983" + style="font-size:16px">- fontset info</tspan><tspan + sodipodi:role="line" + x="290.68759" + y="454.07794" + id="tspan2985" + style="font-size:16px">- charset info</tspan><tspan + sodipodi:role="line" + x="290.68759" + y="474.07794" + id="tspan2987" + style="font-size:16px">- font/charset</tspan><tspan + sodipodi:role="line" + x="290.68759" + y="494.07794" + id="tspan2989" + style="font-size:16px">- XLFD,GL/GR</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="469.39896" + y="416.07794" + id="text2991"><tspan + sodipodi:role="line" + id="tspan2993" + x="469.39896" + y="416.07794" + style="font-size:16px">localedef DB</tspan><tspan + sodipodi:role="line" + x="469.39896" + y="436.07794" + id="tspan2995" + style="font-size:16px">- MB_CUR_MAX</tspan><tspan + sodipodi:role="line" + x="469.39896" + y="456.07794" + id="tspan2997" + style="font-size:16px">- codset info</tspan><tspan + sodipodi:role="line" + x="469.39896" + y="476.07794" + id="tspan2999" + style="font-size:16px">o char/charset</tspan><tspan + sodipodi:role="line" + x="469.39896" + y="496.07794" + id="tspan3001" + style="font-size:16px">o conv/charset</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="106.83789" + y="204.34682" + id="text3026"><tspan + sodipodi:role="line" + id="tspan3028" + x="106.83789" + y="204.34682" + style="font-size:16px">Locale Library</tspan><tspan + sodipodi:role="line" + x="106.83789" + y="224.34682" + id="tspan3030" + style="font-size:16px" /></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="105.69164" + y="229.71439" + id="text3032"><tspan + sodipodi:role="line" + id="tspan3034" + x="105.69164" + y="229.71439" + style="font-size:16px">non-ANSI impl.</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 204.87737,342.20444 c 101.81022,0 101.81022,0 101.81022,0" + id="path4322" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 378.16996,341.36655 c 101.81022,0 101.81022,0 101.81022,0" + id="path4322-3" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 306.17376,342.94753 c 34.5652,-34.5652 33.93674,-33.93675 33.93674,-33.93675" + id="path4346" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 379.58874,342.20444 C 343.13816,305.75387 342.50971,305.12541 342.50971,305.12541" + id="path4348" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 81.699563,531.99881 c 16.339913,16.33991 16.339913,16.33991 16.339913,16.33991 312.972174,0 312.972174,0 312.972174,0" + id="path4350" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 411.01165,547.08181 426.7231,531.37035" + id="path4352" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="m 442.43456,533.25573 c 10.13348,17.55171 10.67774,18.49439 10.67774,18.49439 l 142.66605,0 0,-2.15448 13.82608,-13.82608" + id="path4354" /> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="170.25287" + y="574.73395" + id="text4356"><tspan + sodipodi:role="line" + id="tspan4358" + x="170.25287" + y="574.73395" + style="font-size:16px">XLocale Source (X Core)</tspan></text> + <text + xml:space="preserve" + style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans" + x="443.34363" + y="572.22015" + id="text4360"><tspan + sodipodi:role="line" + id="tspan4362" + x="443.34363" + y="572.22015" + style="font-size:16px">System Locale Source</tspan></text> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-20)" + d="m 46.505905,206.69672 1.256917,131.97622" + id="path3948" + transform="translate(78.35714,45.862183)" + inkscape:connector-type="polyline" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-20)" + d="m 482.65588,204.18289 0,135.74696" + id="path3950" + transform="translate(78.35714,45.862183)" + inkscape:connector-type="polyline" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend-20)" + d="m 110.60864,39.526842 0,43.992073" + id="path3952" + transform="translate(78.35714,45.862183)" + inkscape:connector-type="polyline" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend-20)" + d="m 218.70345,38.269926 0,43.992073" + id="path3954" + transform="translate(78.35714,45.862183)" + inkscape:connector-type="polyline" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-end:url(#Arrow1Lend-20)" + d="m 290.34768,38.269926 0,43.992073" + id="path3956" + transform="translate(78.35714,45.862183)" + inkscape:connector-type="polyline" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-20)" + d="m 400.95632,34.499177 0,46.505905" + id="path3958" + transform="translate(78.35714,45.862183)" + inkscape:connector-type="polyline" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-20)" + d="m 124.43472,293.42395 -1.25692,45.24899" + id="path4960" + transform="translate(78.35714,45.862183)" + inkscape:connector-type="polyline" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-20)" + d="m 395.92865,292.16703 0,49.01974" + id="path4962" + inkscape:connector-type="polyline" + transform="translate(78.35714,45.862183)" /> + <path + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend-20);opacity:1" + d="m 258.92477,238.11963 1.25692,99.29639" + id="path4964" + inkscape:connector-type="polyline" + transform="translate(78.35714,45.862183)" /> + </g> +</svg> diff --git a/libX11/specs/i18n/framework/framework.xml b/libX11/specs/i18n/framework/framework.xml new file mode 100644 index 000000000..ab1dac6b6 --- /dev/null +++ b/libX11/specs/i18n/framework/framework.xml @@ -0,0 +1,1620 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> + +<book id="framework"> + +<bookinfo> + <title>X11R6 Sample Implementation Frame Work</title> + <releaseinfo>X Version 11, Release 7</releaseinfo> + <authorgroup> + <othercredit> + <firstname>Katsuhisa</firstname><surname>Yano</surname> + <affiliation><orgname>TOSHIBA Corporation</orgname></affiliation> + </othercredit> + <othercredit> + <firstname>Yoshio</firstname><surname>Horiuchi</surname> + <affiliation><orgname>IBM Japan</orgname></affiliation> + </othercredit> + </authorgroup> + <copyright><year>1994</year><holder>TOSHIBA Corporation</holder></copyright> + <copyright><year>1994</year><holder>IBM Corporation</holder></copyright> + +<legalnotice> + +<para> +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. +</para> + +<para> +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: +</para> + +<para> +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +</para> + +<para> +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. +</para> + +<para> +Except as contained in this notice, the name of The Open Group 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. +</para> + +<para>X Window System is a trademark of The Open Group.</para> + +</legalnotice> +</bookinfo> + +<chapter id="framework_"> +<title>Framework</title> +<sect1 id="preface"> +<title>Preface</title> +<para> +This document proposes to define the structures, methods and their +signatures that are expected to be common to all locale dependent +functions within the Xlib sample implementation. The following +illustration (Fig.1) <!-- xref --> is proposed to outline the separating of +the components within the sample implementation. +</para> + +<para> +Preface drawing. +</para> + +<mediaobject id="framework_locale_service_api_proposal"> + <imageobject> + <imagedata width="540px" depth="530px" contentwidth="560px" contentdepth="550px" format="SVG" fileref="framework.svg"/> + </imageobject> + <caption>Frame work of Locale Service API Proposal</caption> +</mediaobject> + +<para> +Generally speaking, the internationalized portion of Xlib (Locale +Dependent X, LDX) consists of three objects; +locale (LC) , input method (IM) and output method (OM). +The LC provides a set of information that depends on user's language +environment. The IM manages text inputing, and the OM manages text +drawing. Both IM and OM highly depend on LC data. +</para> + +<para> +In X11R5, there are two sample implementations, Ximp and Xsi, for +Xlib internationalization. But in both implementations, IM and OM +actually refer the private extension of LC. It breaks coexistence +of these two sample implementations. For example, if a user creates +a new OM for special purpose as a part of Ximp, it will not work with +Xsi. +</para> + +<para> +As a solution of this problem, we propose to define the standard +APIs between these three objects, and define the structure that are +common to these objects. +</para> +</sect1> + +<sect1 id="Objective"> +<title>Objective</title> + +<itemizedlist> + <listitem> + <para> +Explain the current X11R6 sample implementation + </para> + </listitem> + <listitem> + <para> +Document the common set of locale dependent interfaces + </para> + </listitem> + <listitem> + <para> +Provide more flexible pluggable layer + </para> + </listitem> +</itemizedlist> +</sect1> + +<sect1 id="Locale_Object_Binding_Functions"> +<title>Locale Object Binding Functions</title> +<!-- .XS (SN Locale Object Binding Functions --> +<!-- .XE --> +<para> +This chapter describes functions related locale object binding for +implementing the pluggable layer. +</para> + +<para> +A locale loader is an entry point for locale object, which +instantiates XLCd object and binds locale methods with specified +locale name. The behavior of loader is implementation dependent. +And, what kind of loaders are available is also implementation +dependent. +</para> + +<para> +<!-- .LP --> +The loader is called in +<function>_XOpenLC, </function> +but caller of +<function>_XOpenLC </function> +does not need to care about its inside. For example, if the loader is +implemented with dynamic load functions, and the dynamic module is +expected to be unloaded when the corresponding XLCd is freed, +close methods of XLCdMethods should handle unloading. +</para> + +<para> +<emphasis role="bold">Initializing a locale loader list</emphasis> +</para> + +<para>void _XlcInitLoader</para> + + +<para> +The +<function>_XlcInitLoader</function> +function initializes the locale loader list with vendor specific +manner. Each loader is registered with calling +<function>_XlcAddLoader.</function> +The number of loaders and their order in the loader list is +implementation dependent. +</para> + +<para> +<emphasis role="bold">Add a loader</emphasis> +</para> + +<literallayout> +typedef XLCd (*XLCdLoadProc)(<emphasis remap='I'>name</emphasis>); + char <emphasis remap='I'>*name</emphasis>; + +typedef int XlcPosition; + +#define XlcHead +#define XlcTail +</literallayout> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XlcAddLoader</function></funcdef> + <paramdef>XLCdLoadProc<parameter> proc</parameter></paramdef> + <paramdef>XlcPosition<parameter> position</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcAddLoader</function> +function registers the specified locale loader "<emphasis remap='I'>proc</emphasis>" to the +internal loader list. The position specifies that the loader +"<emphasis remap='I'>proc</emphasis>" should be placed in the top of the loader list(XlcHead) +or last(XlcTail). +</para> + +<para> +The object loader is called from the top of the loader list in order, +when calling time. +</para> + +<para> +<function>Remove a loader</function> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcRemoveLoader</function></funcdef> + <paramdef>XLCdLoadProc<parameter> proc</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcRemoveLoader</function> +function removes the locale loader specified by "<emphasis remap='I'>proc</emphasis>" from the +loader list. +</para> + +<para> +Current implementation provides following locale loaders; +</para> + +<literallayout> +<function>_XlcDefaultLoader</function> +<function>_XlcGenericLoader</function> +<function>_XlcEucLoader</function> +<function>_XlcSjisLoader</function> +<function>_XlcUtfLoader</function> +<function>_XaixOsDynamicLoad</function> +</literallayout> + +</sect1> + +<sect1 id="Locale_Method_Interface"> +<title>Locale Method Interface</title> + +<para> +This chapter describes the locale method API, which is a set of +accessible functions from both IM and OM parts. +The locale method API provides the functionalities; obtaining locale +dependent information, handling charset, converting text, etc. +</para> + +<para> +As a result of using these APIs instead of accessing vender private +extension of the locale object, we can keep locale, IM and OM +independently each other. +</para> + +</sect1> + +<sect1 id="Locale_Method_Functions"> +<title>Locale Method Functions</title> +<para> +<function>Open a Locale Method</function> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>XLCd <function> _XOpenLC</function></funcdef> + <paramdef>char<parameter> *name</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XOpenLC</function> +function opens a locale method which corresponds to the +specified locale name. +<function>_XOpenLC</function> +calls a locale object loader, which is registered via +<function>_XlcAddLoader into the internal loader list. If the called loader </function> +is valid and successfully opens a locale, +<function>_XOpenLC</function> +returns the XLCd. If the loader is invalid or failed to open a locale, +<function>_XOpenLC</function> +calls the next loader. If all registered loaders cannot open a locale, +<function>_XOpenLC</function> +returns NULL. +</para> + +<para>XLCd _XlcCurrentLC</para> + +<para> +The +<function>_XlcCurrentLC</function> +function returns an XLCd that are bound to current locale. +</para> + +<para> +<emphasis role="bold">Close a Locale Method</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XCloseLC</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +<!-- .LP --> +The +<function>_XCloseLC</function> +function close a locale method the specified lcd. +</para> + +<para> +<emphasis role="bold">Obtain Locale Method values</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>char *<function>_XGetLCValues</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XGetLCValues</function> +function returns NULL if no error occurred; otherwise, it returns the +name of the first argument that could not be obtained. +The following values are defined as standard arguments. Other values +are implementation dependent. +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="3*" colsep="0"/> + <thead> + <row> + <entry>Name</entry> + <entry>Type</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>XlcNCodeset</entry> + <entry>char*</entry> + <entry>codeset part of locale name</entry> + </row> + <row rowsep="0"> + <entry>XlcNDefaultString</entry> + <entry>char*</entry> + <entry>XDefaultString()</entry> + </row> + <row rowsep="0"> + <entry>XlcNEncodingName</entry> + <entry>char*</entry> + <entry>encoding name</entry> + </row> + <row rowsep="0"> + <entry>XlcNLanguage</entry> + <entry>char*</entry> + <entry>language part of locale name</entry> + </row> + <row rowsep="0"> + <entry>XlcNMbCurMax</entry> + <entry>int</entry> + <entry>ANSI C MB_CUR_MAX</entry> + </row> + <row rowsep="0"> + <entry>XlcNStateDependentEncoding</entry> + <entry>Bool</entry> + <entry>is state-dependent encoding or not</entry> + </row> + <row rowsep="0"> + <entry>XlcNTerritory</entry> + <entry>char*</entry> + <entry>territory part of locale name</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +</sect1> + +<sect1 id="Charset_functions"> +<title>Charset functions</title> +<para> +The XlcCharSet is an identifier which represents a subset of characters +(character set) in the locale object. +</para> + +<literallayout class="monospaced"> +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)(<emphasis remap='I'>charset</emphasis>, <emphasis remap='I'>args</emphasis>, <emphasis remap='I'>num_args</emphasis>); + XlcCharSet <emphasis remap='I'>charset</emphasis>; + XlcArgList <emphasis remap='I'>args</emphasis>; + int <emphasis remap='I'>num_args</emphasis>; + +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; +</literallayout> + +<para> +<emphasis role="bold">Get an XlcCharSet</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>XlcCharSet <function> _XlcGetCharSet</function></funcdef> + <paramdef>char<parameter> *name</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcGetCharSet</function> +function gets an XlcCharSet which corresponds to the charset name +specified by "<emphasis remap='I'>name</emphasis>". +<function>_XlcGetCharSet </function> +returns NULL, if no XlcCharSet bound to specified "<emphasis remap='I'>name</emphasis>". +</para> + +<para> +The following character sets are pre-registered. +</para> + +<informaltable frame="none"> + <tgroup cols='2' align='left'> + <colspec colname='c1' colwidth="1*" colsep="0"/> + <colspec colname='c2' colwidth="2*" colsep="0"/> + <thead> + <row> + <entry>Name</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>ISO8859-1:GL</entry> + <entry>7-bit ASCII graphics (ANSI X3.4-1968),</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>Left half of ISO 8859 sets</entry> + </row> + <row rowsep="0"> + <entry>JISX0201.1976-0:GL</entry> + <entry>Left half of JIS X0201-1976 (reaffirmed 1984),</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>8-Bit Alphanumeric-Katakana Code</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-1:GR</entry> + <entry>Right half of ISO 8859-1, Latin alphabet No. 1</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-2:GR</entry> + <entry>Right half of ISO 8859-2, Latin alphabet No. 2</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-3:GR</entry> + <entry>Right half of ISO 8859-3, Latin alphabet No. 3</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-4:GR</entry> + <entry>Right half of ISO 8859-4, Latin alphabet No. 4</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-7:GR</entry> + <entry>Right half of ISO 8859-7, Latin/Greek alphabet</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-6:GR</entry> + <entry>Right half of ISO 8859-6, Latin/Arabic alphabet</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-8:GR</entry> + <entry>Right half of ISO 8859-8, Latin/Hebrew alphabet</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-5:GR</entry> + <entry>Right half of ISO 8859-5, Latin/Cyrillic alphabet</entry> + </row> + <row rowsep="0"> + <entry>ISO8859-9:GR</entry> + <entry>Right half of ISO 8859-9, Latin alphabet No. 5</entry> + </row> + <row rowsep="0"> + <entry>JISX0201.1976-0:GR</entry> + <entry>Right half of JIS X0201-1976 (reaffirmed 1984),</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>8-Bit Alphanumeric-Katakana Code</entry> + </row> + <row rowsep="0"> + <entry>GB2312.1980-0:GL</entry> + <entry>GB2312-1980, China (PRC) Hanzi defined as GL</entry> + </row> + <row rowsep="0"> + <entry>GB2312.1980-0:GR</entry> + <entry>GB2312-1980, China (PRC) Hanzi defined as GR</entry> + </row> + <row rowsep="0"> + <entry>JISX0208.1983-0:GL</entry> + <entry>JIS X0208-1983, Japanese Graphic Character Set</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>defined as GL</entry> + </row> + <row rowsep="0"> + <entry>JISX0208.1983-0:GR</entry> + <entry>JIS X0208-1983, Japanese Graphic Character Set</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>defined as GR</entry> + </row> + <row rowsep="0"> + <entry>KSC5601.1987-0:GL</entry> + <entry>KS C5601-1987, Korean Graphic Character Set</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>defined as GL</entry> + </row> + <row rowsep="0"> + <entry>KSC5601.1987-0:GR</entry> + <entry>KS C5601-1987, Korean Graphic Character Set</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>defined as GR</entry> + </row> + <row rowsep="0"> + <entry>JISX0212.1990-0:GL</entry> + <entry>JIS X0212-1990, Japanese Graphic Character Set</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>defined as GL</entry> + </row> + <row rowsep="0"> + <entry>JISX0212.1990-0:GR</entry> + <entry>JIS X0212-1990, Japanese Graphic Character Set</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>defined as GR</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +<emphasis role="bold">Add an XlcCharSet</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XlcAddCharSet</function></funcdef> + <paramdef>XlcCharSet<parameter> charset</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcAddCharSet</function> +function registers XlcCharSet specified by "<emphasis remap='I'>charset</emphasis>". +</para> + +<para> +<!-- .LP --> +<!-- .sp --> +<function>Obtain Character Set values</function> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>char * <function> _XlcGetCSValues</function></funcdef> + <paramdef>XlcCharSet<parameter> charset</parameter></paramdef> + <paramdef><parameter> ...</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcGetCSValues</function> +function returns NULL if no error occurred; +otherwise, it returns the name of the first argument that could not +be obtained. The following values are defined as standard arguments. +Other values are implementation dependent. +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="3*" colsep="0"/> + <thead> + <row> + <entry>Name</entry> + <entry>Type</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>XlcNName</entry> + <entry>char*</entry> + <entry>charset name</entry> + </row> + <row rowsep="0"> + <entry>XlcNEncodingName</entry> + <entry>char*</entry> + <entry>XLFD CharSet Registry and Encoding</entry> + </row> + <row rowsep="0"> + <entry>XlcNSide</entry> + <entry>XlcSide</entry> + <entry>charset side (GL, GR, ...)</entry> + </row> + <row rowsep="0"> + <entry>XlcNCharSize</entry> + <entry>int</entry> + <entry>number of octets per character</entry> + </row> + <row rowsep="0"> + <entry>XlcNSetSize</entry> + <entry>int</entry> + <entry>number of character sets</entry> + </row> + <row rowsep="0"> + <entry>XlcNControlSequence</entry> + <entry>char*</entry> + <entry>control sequence of Compound Text</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +</sect1> + +<sect1 id="Converter_Functions"> +<title>Converter Functions</title> +<para> +We provide a set of the common converter APIs, that are independent +from both of source and destination text type. +</para> + +<literallayout class="monospaced"> +typedef struct _XlcConvRec *XlcConv; + +typedef void (*XlcCloseConverterProc)(<emphasis remap='I'>conv</emphasis>); + XlcConv <emphasis remap='I'>conv</emphasis>; + +typedef int (*XlcConvertProc)(<emphasis remap='I'>conv</emphasis>, <emphasis remap='I'>from</emphasis>, <emphasis remap='I'>from_left</emphasis>, <emphasis remap='I'>to</emphasis>, <emphasis remap='I'>to_left</emphasis>, <emphasis remap='I'>args</emphasis>, <emphasis remap='I'>num_args</emphasis>); + XlcConv <emphasis remap='I'>conv</emphasis>; + XPointer <emphasis remap='I'>*from</emphasis>; + int <emphasis remap='I'>*from_left</emphasis>; + XPointer <emphasis remap='I'>*to</emphasis>; + int <emphasis remap='I'>*to_left</emphasis>; + XPointer <emphasis remap='I'>*args</emphasis>; + int <emphasis remap='I'>num_args</emphasis>; + +typedef void (*XlcResetConverterProc)(<emphasis remap='I'>conv</emphasis>); + XlcConv <emphasis remap='I'>conv</emphasis>; + +typedef struct _XlcConvMethodsRec { + XlcCloseConverterProc close; + XlcConvertProc convert; + XlcResetConverterProc reset; +} XlcConvMethodsRec, *XlcConvMethods; + +typedef struct _XlcConvRec { + XlcConvMethods methods; + XPointer state; +} XlcConvRec; +</literallayout> + +<para> +<function>Open a converter</function> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>XlcConv <function> _XlcOpenConverter</function></funcdef> + <paramdef>XLCd<parameter> from_lcd</parameter></paramdef> + <paramdef>char<parameter> *from_type</parameter></paramdef> + <paramdef>XLCd<parameter> to_lcd</parameter></paramdef> + <paramdef>char<parameter> *to_type</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +<function>_XlcOpenConverter </function> +function opens the converter which converts a text from specified +"<emphasis remap='I'>from_type</emphasis>" to specified "<emphasis remap='I'>to_type</emphasis>" encoding. If the +function cannot find proper converter or cannot open a corresponding +converter, it returns NULL. Otherwise, it returns the conversion +descriptor. +</para> + +<para> +The following types are pre-defined. Other types are implementation +dependent. +</para> + +<informaltable> + <tgroup cols='4' align='left'> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="3*" colsep="0"/> + <colspec colname='c4' colwidth="2*" colsep="0"/> + <thead> + <row> + <entry>Name</entry> + <entry>Type</entry> + <entry>Description</entry> + <entry>Arguments</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>XlcNMultiByte</entry> + <entry>char *</entry> + <entry>multibyte</entry> + <entry>-</entry> + </row> + <row rowsep="0"> + <entry>XlcNWideChar</entry> + <entry>wchar_t *</entry> + <entry>wide character</entry> + <entry>-</entry> + </row> + <row rowsep="0"> + <entry>XlcNCompoundText</entry> + <entry>char *</entry> + <entry>COMPOUND_TEXT</entry> + <entry>-</entry> + </row> + <row rowsep="0"> + <entry>XlcNString</entry> + <entry>char *</entry> + <entry>STRING</entry> + <entry>-</entry> + </row> + <row rowsep="0"> + <entry>XlcNCharSet</entry> + <entry>char *</entry> + <entry>per charset</entry> + <entry>XlcCharSet</entry> + </row> + <row rowsep="0"> + <entry>XlcNChar</entry> + <entry>char *</entry> + <entry>per character</entry> + <entry>XlcCharSet</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +<emphasis role="bold">Close a converter</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcCloseConverter</function></funcdef> + <paramdef>XlcConv<parameter> conv</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcCloseConverter</function> +function closes the specified converter "<emphasis remap='I'>conv</emphasis>". +</para> + +<para> +<emphasis role="bold">Code conversion</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _XlcConvert</function></funcdef> + <paramdef>XlcConv<parameter> conv</parameter></paramdef> + <paramdef>XPointer<parameter> *from</parameter></paramdef> + <paramdef>int<parameter> *from_left</parameter></paramdef> + <paramdef>XPointer<parameter> *to</parameter></paramdef> + <paramdef>int<parameter> *to_left</parameter></paramdef> + <paramdef>XPointer<parameter> *args</parameter></paramdef> + <paramdef>int<parameter> num_args</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcConvert</function> +function converts a sequence of characters from one type, in the array +specified by "<emphasis remap='I'>from</emphasis>", into a sequence of corresponding characters +in another type, in the array specified by "<emphasis remap='I'>to</emphasis>". The types are +those specified in the +<function>_XlcOpenConverter() </function> +call that returned the conversion descriptor, "<emphasis remap='I'>conv</emphasis>". +The arguments "<emphasis remap='I'>from</emphasis>", "<emphasis remap='I'>from_left</emphasis>", "<emphasis remap='I'>to</emphasis>" and +"<emphasis remap='I'>to_left</emphasis>" have the same specification of XPG4 iconv function. +</para> + +<para> +For state-dependent encodings, the conversion descriptor "<emphasis remap='I'>conv</emphasis>" +is placed into its initial shift state by a call for which "<emphasis remap='I'>from</emphasis>" +is a NULL pointer, or for which "<emphasis remap='I'>from</emphasis>" points to a null pointer. +</para> + +<para> +The following 2 converters prepared by locale returns appropriate +charset (XlcCharSet) in an area pointed by args[0]. +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="1*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="2*" colsep="0"/> + <thead> + <row> + <entry>From</entry> + <entry>To</entry> + <entry>Description</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>XlcNMultiByte</entry> + <entry>XlcNCharSet</entry> + <entry>Segmentation (Decomposing)</entry> + </row> + <row rowsep="0"> + <entry>XlcNWideChar</entry> + <entry>XlcNCharSet</entry> + <entry>Segmentation (Decomposing)</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +The conversion, from XlcNMultiByte/XlcNWideChar to XlcNCharSet, +extracts a segment which has same charset encoding characters. +More than one segment cannot be converted in a call. +</para> + +<para> +<emphasis role="bold">Reset a converter</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcResetConverter</function></funcdef> + <paramdef>XlcConv<parameter> conv</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcResetConverter </function> +function reset the specified converter "<emphasis remap='I'>conv</emphasis>". +</para> + +<para> +<emphasis role="bold">Register a converter</emphasis> +</para> + +<literallayout class="monospaced"> +typedef XlcConv (*XlcOpenConverterProc)(<emphasis remap='I'>from_lcd</emphasis>, <emphasis remap='I'>from_type</emphasis>, <emphasis remap='I'>to_lcd</emphasis>, <emphasis remap='I'>to_type</emphasis>); + XLCd <emphasis remap='I'>from_lcd</emphasis>; + char <emphasis remap='I'>*from_type</emphasis>; + XLCd <emphasis remap='I'>to_lcd</emphasis>; + char <emphasis remap='I'>*to_type</emphasis>; +</literallayout> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XlcSetConverter</function></funcdef> + <paramdef>XLCd<parameter> from_lcd</parameter></paramdef> + <paramdef>char<parameter> *from</parameter></paramdef> + <paramdef>XLCd<parameter> to_lcd</parameter></paramdef> + <paramdef>char<parameter> *to</parameter></paramdef> + <paramdef>XlcOpenConverterProc<parameter> converter</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The <function>XlcSetConverter</function> function registers a converter which convert +from "<emphasis remap='I'>from_type</emphasis>" to "<emphasis remap='I'>to_type</emphasis>" into the converter list +(in the specified XLCd). +</para> +</sect1> + +<sect1 id="X_Locale_Database_functions"> +<title>X Locale Database functions</title> +<para> +X Locale Database contains the subset of user's environment that +depends on language. The following APIs are provided for accessing +X Locale Database and other locale relative files. +</para> + +<para> +For more detail about X Locale Database, please refer +X Locale Database Definition document. +</para> + +<para> +<emphasis role="bold">Get a resource from database</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcGetResource</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> + <paramdef>char<parameter> *category</parameter></paramdef> + <paramdef>char<parameter> *class</parameter></paramdef> + <paramdef>char<parameter> ***value</parameter></paramdef> + <paramdef>int<parameter> *count</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcGetResource</function> +function obtains a locale dependent data which is associated with the +locale of specified "<emphasis remap='I'>lcd</emphasis>". +The locale data is provided by system locale or by X Locale Database +file, and what kind of data is available is implementation dependent. +</para> + +<para> +The specified "<emphasis remap='I'>category</emphasis>" and "<emphasis remap='I'>class</emphasis>" are used for +finding out the objective locale data. +</para> + +<para> +The returned value is returned in value argument in string list form, +and the returned count shows the number of strings in the value. +</para> + +<para> +The returned value is owned by locale method, and should not be modified +or freed by caller. +</para> + +<para> +<emphasis role="bold">Get a locale relative file name</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>char *<function>_XlcFileName</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> + <paramdef>char<parameter> *category</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcFileName</function> +functions returns a file name which is bound to the specified "<emphasis remap='I'>lcd</emphasis>" +and "<emphasis remap='I'>category</emphasis>", as a null-terminated string. If no file name can +be found, or there is no readable file for the found file name, +<function>_XlcFileName</function> +returns NULL. The returned file name should be freed by caller. +</para> + +<para> +The rule for searching a file name is implementation dependent. +In current implementation, +<function>_XlcFileName </function> +uses "{category}.dir" file as mapping table, which has pairs of +strings, a full locale name and a corresponding file name. +</para> + +</sect1> + +<sect1 id="Utility_Functions"> +<title>Utility Functions</title> + +<para> +<emphasis role="bold">Compare Latin-1 strings</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _XlcCompareISOLatin1</function></funcdef> + <paramdef>char*str1,<parameter> *str2</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _XlcNCompareISOLatin1</function></funcdef> + <paramdef>char*str1,<parameter> *str2</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_XlcCompareIsoLatin1 </function> +function to compares two ISO-8859-1 strings. Bytes representing ASCII lower +case letters are converted to upper case before making the comparison. +The value returned is an integer less than, equal to, or greater than +zero, depending on whether "<emphasis remap='I'>str1</emphasis>" is lexicographicly less than, +equal to, or greater than "<emphasis remap='I'>str2</emphasis>". +</para> + +<para> +The +<function>_XlcNCompareIsoLatin1</function> +function is identical to +<function>_XlcCompareISOLatin1,</function> +except that at most "<emphasis remap='I'>len</emphasis>" bytes are compared. +</para> + +<para> +<emphasis role="bold">Resource Utility</emphasis> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> XlcNumber</function></funcdef> + <paramdef>ArrayType<parameter> array</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +Similar to XtNumber. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcCopyFromArg</function></funcdef> + <paramdef>char<parameter> *src</parameter></paramdef> + <paramdef>char<parameter> *dst</parameter></paramdef> + <paramdef>int<parameter> size</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcCopyToArg</function></funcdef> + <paramdef>char<parameter> *src</parameter></paramdef> + <paramdef>char<parameter> **dst</parameter></paramdef> + <paramdef>int<parameter> size</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +Similar to +<function>_XtCopyFromArg </function> +and +<function>_XtCopyToArg.</function> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcCountVaList</function></funcdef> + <paramdef>va_list<parameter> var</parameter></paramdef> + <paramdef>int<parameter> *count_ret</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +Similar to +<function>_XtCountVaList.</function> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcVaToArgList</function></funcdef> + <paramdef>va_list<parameter> var</parameter></paramdef> + <paramdef>int<parameter> count</parameter></paramdef> + <paramdef>XlcArgList<parameter> *args_ret</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +Similar to +<function>_XtVaToArgList.</function> +</para> + +<literallayout class="monospaced"> +typedef struct _XlcResource { + char *name; + XrmQuark xrm_name; + int size; + int offset; + unsigned long mask; +} XlcResource, *XlcResourceList; +</literallayout> + +<literallayout class="monospaced"> +#define XlcCreateMask (1L<<0) +#define XlcDefaultMask (1L<<1) +#define XlcGetMask (1L<<2) +#define XlcSetMask (1L<<3) +#define XlcIgnoreMask (1L<<4) +</literallayout> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XlcCompileResourceList</function></funcdef> + <paramdef>XlcResourceList<parameter> resources</parameter></paramdef> + <paramdef>int<parameter> num_resources</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +Similar to +<function>_XtCompileResourceList.</function> +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>char * <function> _XlcGetValues</function></funcdef> + <paramdef>XPointer<parameter> base</parameter></paramdef> + <paramdef>XlcResourceList<parameter> resources</parameter></paramdef> + <paramdef>int<parameter> num_resources</parameter></paramdef> + <paramdef>XlcArgList<parameter> args</parameter></paramdef> + <paramdef>int<parameter> num_args</parameter></paramdef> + <paramdef>unsignedlong<parameter> mask</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +Similar to XtGetSubvalues. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>char * <function> _XlcSetValues</function></funcdef> + <paramdef>XPointer<parameter> base</parameter></paramdef> + <paramdef>XlcResourceList<parameter> resources</parameter></paramdef> + <paramdef>int<parameter> num_resources</parameter></paramdef> + <paramdef>XlcArgList<parameter> args</parameter></paramdef> + <paramdef>int<parameter> num_args</parameter></paramdef> + <paramdef>unsignedlong<parameter> mask</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +Similar to XtSetSubvalues. +</para> + +<para> +<emphasis role="bold">ANSI C Compatible Functions</emphasis> +</para> + +<para> +The following are ANSI C/MSE Compatible Functions for non-ANSI C environment. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xmblen</function></funcdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xmblen </function> +function returns the number of characters pointed to by "<emphasis remap='I'>str</emphasis>". +Only "<emphasis remap='I'>len</emphasis>" bytes in "<emphasis remap='I'>str</emphasis>" are used in determining the +character count returned. "<emphasis remap='I'>Str</emphasis>" may point at characters from +any valid codeset in the current locale. +</para> + +<para> +The call +<function>_Xmblen</function> +is equivalent to +_Xmbtowc(_Xmbtowc((<emphasis remap='I'>wchar_t*</emphasis>)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>)) +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xmbtowc</function></funcdef> + <paramdef>wchar_t<parameter> *wstr</parameter></paramdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xmbtowc</function> +function converts the character(s) pointed to by "<emphasis remap='I'>str</emphasis>" +to their wide character representation(s) pointed to by "<emphasis remap='I'>wstr</emphasis>". +"<emphasis remap='I'>Len</emphasis>" is the number of bytes in "<emphasis remap='I'>str</emphasis>" to be converted. +The return value is the number of characters converted. +</para> + +<para> +The call +<function>_Xmbtowc</function> +is equivalent to +_Xlcmbtowc((XLCd)NULL, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>) +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xlcmbtowc</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> + <paramdef>wchar_t<parameter> *wstr</parameter></paramdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xlcmbtowc</function> +function is identical to +<function>_Xmbtowc, </function> +except that it requires the "<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" +is (XLCd) NULL, +<function>_Xlcmbtowc, </function> +calls +<function>_XlcCurrentLC </function> +to determine the current locale. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xwctomb</function></funcdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>wchar_t<parameter> wc</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xwctomb </function> +function converts a single wide character pointed to by "<emphasis remap='I'>wc</emphasis>" to +its multibyte representation pointed to by "<emphasis remap='I'>str</emphasis>". +On success, the return value is 1. +</para> + +<para> +The call +<function>_Xwctomb</function> +is equivalent to +_Xlcwctomb((XLCd)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>wstr</emphasis>) +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xlcwctomb</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>wchar_t<parameter> wc</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xlcwctomb</function> +function is identical to _Xwctomb, except that it requires the +"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL, +<function>_Xlcwctomb, </function> +calls +<function>_XlcCurrentLC </function> +to determine the current locale. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xmbstowcs</function></funcdef> + <paramdef>wchar_t<parameter> *wstr</parameter></paramdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xmbstowcs</function> +function converts the NULL-terminated string pointed to by "<emphasis remap='I'>str</emphasis>" +to its wide character string representation pointed to by "<emphasis remap='I'>wstr</emphasis>". +"<emphasis remap='I'>Len</emphasis>" is the number of characters in "<emphasis remap='I'>str</emphasis>" to be converted. +</para> + +<para> +The call +<function>_Xmbstowcs</function> +is equivalent to +_Xlcmbstowcs((XLCd)NULL, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>len</emphasis>) +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xlcmbstowcs</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> + <paramdef>wchar_t<parameter> *wstr</parameter></paramdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xlcmbstowcs </function> +function is identical to _Xmbstowcs, except that it requires the +"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL, +<function>_Xlcmbstowcs, </function> +calls +<function>_XlcCurrentLC</function> +to determine the current locale. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xwcstombs</function></funcdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>wchar_t<parameter> *wstr</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xwcstombs </function> +function converts the (wchar_t) NULL terminated wide character string +pointed to by "<emphasis remap='I'>wstr</emphasis>" to the NULL terminated multibyte string +pointed to by "<emphasis remap='I'>str</emphasis>". +</para> + +<para> +The call +<function>_Xwcstombs </function> +is equivalent to +_Xlcwcstombs((XLCd)NULL, <emphasis remap='I'>str</emphasis>, <emphasis remap='I'>wstr</emphasis>, <emphasis remap='I'>len</emphasis>) +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xlcwcstombs</function></funcdef> + <paramdef>XLCd<parameter> lcd</parameter></paramdef> + <paramdef>char<parameter> *str</parameter></paramdef> + <paramdef>wchar_t<parameter> *wstr</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xlcwcstombs </function> +function is identical to _Xwcstombs, except that it requires the +"<emphasis remap='I'>lcd</emphasis>" argument. If "<emphasis remap='I'>lcd</emphasis>" is (XLCd) NULL, +<function>_Xlcwcstombs, </function> +calls +<function>_XlcCurrentLC </function> +to determine the current locale. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xwcslen</function></funcdef> + <paramdef>wchar_t<parameter> *wstr</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xwcslen </function> +function returns the count of wide characters in the (wchar_t) NULL +terminated wide character string pointed to by "<emphasis remap='I'>wstr</emphasis>". +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>wchar_t *<function> _Xwcscpy</function></funcdef> + <paramdef>wchar_t<parameter> *wstr1</parameter></paramdef> + <paramdef>wchar_t<parameter> *wstr2</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<funcsynopsis> +<funcprototype> + <funcdef>wchar_t * <function> _Xwcsncpy</function></funcdef> + <paramdef>wchar_t<parameter> *wstr1</parameter></paramdef> + <paramdef>wchar_t<parameter> *wstr2</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xwcscpy </function> +function copies the (wchar_t) NULL terminated wide character string +pointed to by "<emphasis remap='I'>wstr2</emphasis>" to the object pointed at by "<emphasis remap='I'>wstr1</emphasis>". +"<emphasis remap='I'>Wstr1</emphasis>" is (wchar_t) NULL terminated. The return value is a +pointer to "<emphasis remap='I'>wstr1</emphasis>". +</para> + +<para> +The +<function>_Xwcsncpy</function> +function is identical to +<function>_Xwcscpy, </function> +except that it copies "<emphasis remap='I'>len</emphasis>" wide characters from the object +pointed to by "<emphasis remap='I'>wstr2</emphasis>" to the object pointed to "<emphasis remap='I'>wstr1</emphasis>". +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xwcscmp</function></funcdef> + <paramdef>wchar_t*wstr1,<parameter> *wstr2</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<funcsynopsis> +<funcprototype> + <funcdef>int <function> _Xwcsncmp</function></funcdef> + <paramdef>wchar_t*wstr1,<parameter> *wstr2</parameter></paramdef> + <paramdef>int<parameter> len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<para> +The +<function>_Xwcscmp </function> +function compares two (wchar_t) NULL terminated wide character strings. +The value returned is an integer less than, equal to, or greater than zero, +depending on whether "<emphasis remap='I'>wstr1</emphasis>" is lexicographicly less then, equal to, +or greater than "<emphasis remap='I'>str2</emphasis>". +</para> + +<para> +The +<function>_Xwcsncmp </function> +function is identical to +<function>_XlcCompareISOLatin1, </function> +except that at most "<emphasis remap='I'>len</emphasis>" wide characters are compared. +</para> + + +<!-- .sp --> +<!-- .\" .LP --> +<!-- .\" <function>Locale Method Internal Functions</function> --> +<!-- .\" .LP --> +<!-- .\" .FD 0 --> +<!-- .\" XlcCharSet _XlcCreateDefaultCharSet(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>ct_sequence</emphasis>) --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*name</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*ct_sequence</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .FD 0 --> +<!-- .\" Bool _XlcParseCharSet(<emphasis remap='I'>charset</emphasis>) --> +<!-- .\" .br --> +<!-- .\" XlcCharSet <emphasis remap='I'>charset</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .FD 0 --> +<!-- .\" void _XlcGetLocaleDataBase(<emphasis remap='I'>lcd</emphasis>, <emphasis remap='I'>category</emphasis>, <emphasis remap='I'>name</emphasis>, <emphasis remap='I'>value</emphasis>, <emphasis remap='I'>count</emphasis>) --> +<!-- .\" .br --> +<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*category</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*name</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>***value</emphasis>; --> +<!-- .\" .br --> +<!-- .\" int <emphasis remap='I'>*count</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .FD 0 --> +<!-- .\" void _XlcDestroyLocaleDataBase(<emphasis remap='I'>lcd</emphasis>) --> +<!-- .\" .br --> +<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .FD 0 --> +<!-- .\" XPointer _XlcCreateLocaleDataBase(<emphasis remap='I'>lcd</emphasis>) --> +<!-- .\" .br --> +<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .LP --> +<!-- .\" .sp --> +<!-- .\" <function>Obtain an locale database path</function> --> +<!-- .\" .LP --> +<!-- .\" .FD 0 --> +<!-- .\" int _XlcResolveI18NPath(<emphasis remap='I'>dir</emphasis>) --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*dir</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .LP --> +<!-- .\" The --> +<!-- .\" .PN _XlcResolveI18NPath --> +<!-- .\" function returns path name list that is related to X Locale Database. --> +<!-- .\" The obtained path is stored into the array which is pointed by --> +<!-- .\" specified "<emphasis remap='I'>dir</emphasis>". The path consists of directory paths which --> +<!-- .\" are separated with colon. --> +<!-- .\" If the environment variable XLOCALEDIR is specified, the path --> +<!-- .\" contains its contents. --> +<!-- .\" .LP --> +<!-- .\" The default path of X Locale Database is implementation dependent. --> +<!-- .\" In current implementation, it's determined in build time. --> +<!-- .\" .LP --> +<!-- .\" .PN _XlcResolveI18NPath --> +<!-- .\" does not check overflow of the array to which the "<emphasis remap='I'>dir</emphasis>" --> +<!-- .\" parameter points. Caller should provide enough buffer to store this --> +<!-- .\" string. --> +<!-- .\" .LP --> +<!-- .\" .sp --> +<!-- .\" <function>Obtain a full locale name</function> --> +<!-- .\" .LP --> +<!-- .\" .FD 0 --> +<!-- .\" int _XlcResolveLocaleName(<emphasis remap='I'>lc_name</emphasis>, <emphasis remap='I'>full_name</emphasis>, <emphasis remap='I'>language</emphasis>, <emphasis remap='I'>territory</emphasis>, <emphasis remap='I'>codeset</emphasis>) --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*lc_name</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*full_name</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*language</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*territory</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*codeset</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .LP --> +<!-- .\" The --> +<!-- .\" .PN _XlcResolveLocaleName --> +<!-- .\" function returns a full locale name. --> +<!-- .\" The obtained full locale name is stored into the array which is --> +<!-- .\" pointed by specified "<emphasis remap='I'>full_name</emphasis>". --> +<!-- .\" The language, territory and codeset part of the full locale name --> +<!-- .\" are copied to the return arguments, "<emphasis remap='I'>language</emphasis>", --> +<!-- .\" "<emphasis remap='I'>territory</emphasis>" and "<emphasis remap='I'>codeset</emphasis>", respectively. --> +<!-- .\" NULL can be specified for these arguments. --> +<!-- .\" .LP --> +<!-- .\" The rule for mapping from locale name to full locale name is --> +<!-- .\" implementation dependent. --> +<!-- .\" .LP --> +<!-- .\" .PN _XlcResolveLocaleName --> +<!-- .\" does not check overflow of the array to which --> +<!-- .\" "<emphasis remap='I'>full_name</emphasis>", "<emphasis remap='I'>language</emphasis>", "<emphasis remap='I'>territory</emphasis>" and --> +<!-- .\" "<emphasis remap='I'>codeset</emphasis>" parameter point. --> +<!-- .\" Caller should provide enough buffer to store those string. --> +<!-- .\" .LP --> +<!-- .\" In current implementation, --> +<!-- .\" .PN _XlcResolveLocaleName --> +<!-- .\" uses locale.alias file as mapping table, which has pairs of strings, --> +<!-- .\" a locale name and a full locale name. --> +<!-- .\" .LP --> +<!-- .\" .FD 0 --> +<!-- .\" int _XlcResolveDBName(<emphasis remap='I'>lc_name</emphasis>, <emphasis remap='I'>file_name</emphasis>) --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*lc_name</emphasis>; --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*file_name</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .FD 0 --> +<!-- .\" XLCd _XlcCreateLC(<emphasis remap='I'>name</emphasis>, <emphasis remap='I'>methods</emphasis>) --> +<!-- .\" .br --> +<!-- .\" char <emphasis remap='I'>*name</emphasis>; --> +<!-- .\" .br --> +<!-- .\" XLCdMethods <emphasis remap='I'>methods</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .FD 0 --> +<!-- .\" void _XlcDestroyLC(<emphasis remap='I'>lcd</emphasis>) --> +<!-- .\" .br --> +<!-- .\" XLCd <emphasis remap='I'>lcd</emphasis>; --> +<!-- .\" .FN --> +<!-- .\" .LP --> +<!-- .\" --> + +</sect1> +</chapter> +</book> diff --git a/libX11/specs/i18n/localedb/Makefile.am b/libX11/specs/i18n/localedb/Makefile.am new file mode 100644 index 000000000..99b5086da --- /dev/null +++ b/libX11/specs/i18n/localedb/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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 (including the next +# paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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. +# + +if ENABLE_SPECS + +specdir = $(docdir)/$(subdir) +doc_sources = localedb.xml +dist_spec_DATA = $(doc_sources) + +include $(top_srcdir)/specs/xmlrules.in + +endif ENABLE_SPECS diff --git a/libX11/specs/i18n/localedb/localedb.xml b/libX11/specs/i18n/localedb/localedb.xml new file mode 100644 index 000000000..e5b96ab84 --- /dev/null +++ b/libX11/specs/i18n/localedb/localedb.xml @@ -0,0 +1,777 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> + +<book id="localedbspec"> + +<bookinfo> + <title>X Locale Database Specification</title> + <authorgroup> + <author> + <firstname>Yoshio</firstname><surname>Horiuchi</surname> + <affiliation><orgname>IBM Japan</orgname></affiliation> + </author> + </authorgroup> + <copyright><year>1994</year><holder>IBM Corporation</holder></copyright> + <copyright><year>1994</year><holder>X Consortium</holder></copyright> + + +<legalnotice> + +<para> +License to use, copy, modify, and distribute this software and its documentation for +any purpose and without fee is hereby granted, provided that the above copyright notice +appear in all copies and that both that copyright notice and this permission notice +appear in supporting documentation, and that the name of IBM not be used in advertising +or publicity pertaining to distribution of the software without specific, written +prior permission. +</para> +<para> +IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY, FITNESS, AND NONINFRINGEMENT OF THIRD PARTY RIGHTS, +IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES +OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +</para> + +<para> +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: +</para> + +<para> +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +</para> + +<para> +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. +</para> + +<para> +Except as contained in this notice, the name of The Open Group 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. +</para> + +<para>X Window System is a trademark of The Open Group.</para> + +</legalnotice> +</bookinfo> + +<chapter id="localedb"> +<title>LocaleDB</title> + +<sect1 id="General"> +<title>General</title> +<para> +An X Locale Database contains the subset of a user's environment that +depends on language, in X Window System. It is made up from one or more +categories. Each category consists of some classes and sub-classes. +</para> + +<para> +It is provided as a plain ASCII text file, so a user can change its +contents easily. It allows a user to customize the behavior of +internationalized portion of Xlib without changing Xlib itself. +</para> + +<para> +This document describes; +</para> + +<itemizedlist> + <listitem> + <para> +Database Format Definition + </para> + </listitem> + <listitem> + <para> +Contents of Database in sample implementation +<!-- .RE --> + </para> + </listitem> +</itemizedlist> + +<para> +Since it is hard to define the set of required information for all +platforms, only the flexible database format is defined. +The available entries in database are implementation dependent. +</para> + +</sect1> +<sect1 id="Database_Format_Definition"> +<title>Database Format Definition</title> +<para> +The X Locale Database contains one or more category definitions. +This section describes the format of each category definition. +</para> + +<para> +The category definition consists of one or more class definitions. +Each class definition has a pair of class name and class value, or +has several subclasses which are enclosed by the left brace ({) and +the right brace (}). +</para> + +<para> +Comments can be placed by using the number sign character (#). +Putting the number sign character on the top of the line indicates +that the entire line is comment. Also, putting any whitespace character +followed by the number sign character indicates that a part of the line +(from the number sign to the end of the line) is comment. +A line can be continued by placing backslash (\) character as the +last character on the line; this continuation character will be +discarded from the input. Comment lines cannot be continued on +a subsequent line using an escaped new line character. +</para> + +<para> +X Locale Database only accepts XPCS, the X Portable Character Set. +The reserved symbols are; the quotation mark("), the number sign (#), +the semicolon(;), the backslash(\), the left brace({) and +the right brace(}). +</para> + +<para> +The format of category definition is; +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="6*" colsep="0"/> + <tbody> + <row rowsep="0"> + <entry>CategoryDefinition</entry> + <entry>::=</entry> + <entry>CategoryHeader CategorySpec CategoryTrailer</entry> + </row> + <row rowsep="0"> + <entry>CategoryHeader</entry> + <entry>::=</entry> + <entry>CategoryName NL</entry> + </row> + <row rowsep="0"> + <entry>CategorySpec</entry> + <entry>::=</entry> + <entry>{ ClassSpec }</entry> + </row> + <row rowsep="0"> + <entry>CategoryTrailer</entry> + <entry>::=</entry> + <entry>"END" Delimiter CategoryName NL</entry> + </row> + <row rowsep="0"> + <entry>CategoryName</entry> + <entry>::=</entry> + <entry>String</entry> + </row> + <row rowsep="0"> + <entry>ClassSpec</entry> + <entry>::=</entry> + <entry>ClassName Delimiter ClassValue NL</entry> + </row> + <row rowsep="0"> + <entry>ClassName</entry> + <entry>::=</entry> + <entry>String</entry> + </row> + <row rowsep="0"> + <entry>ClassValue</entry> + <entry>::=</entry> + <entry>ValueList | "{" NL { ClassSpec } "}"</entry> + </row> + <row rowsep="0"> + <entry>ValueList</entry> + <entry>::=</entry> + <entry>Value | Value ";" ValueList</entry> + </row> + <row rowsep="0"> + <entry>Value</entry> + <entry>::=</entry> + <entry>ValuePiece | ValuePiece Value</entry> + </row> + <row rowsep="0"> + <entry>ValuePiece</entry> + <entry>::=</entry> + <entry>String | QuotedString | NumericString</entry> + </row> + <row rowsep="0"> + <entry>String</entry> + <entry>::=</entry> + <entry>Char { Char }</entry> + </row> + <row rowsep="0"> + <entry>QuotedString</entry> + <entry>::=</entry> + <entry>""" QuotedChar { QuotedChar } """</entry> + </row> + <row rowsep="0"> + <entry>NumericString</entry> + <entry>::=</entry> + <entry>"\\o" OctDigit { OctDigit }</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>|</entry> + <entry>"\\d" DecDigit { DecDigit }</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>|</entry> + <entry>"\\x" HexDigit { HexDigit }</entry> + </row> + <row rowsep="0"> + <entry>Char</entry> + <entry>::=</entry> + <entry><XPCS except NL, Space or unescaped reserved symbols></entry> + </row> + <row rowsep="0"> + <entry>QuotedChar</entry> + <entry>::=</entry> + <entry><XPCS except unescaped """></entry> + </row> + <row rowsep="0"> + <entry>OctDigit</entry> + <entry>::=</entry> + <entry><character in the range of "0" - "7"></entry> + </row> + <row rowsep="0"> + <entry>DecDigit</entry> + <entry>::=</entry> + <entry><character in the range of "0" - "9"></entry> + </row> + <row rowsep="0"> + <entry>HexDigit</entry> + <entry>::=</entry> + <entry><character in the range of "0" - "9", "a" - "f", "A" - "F"></entry> + </row> + <row rowsep="0"> + <entry>Delimiter</entry> + <entry>::=</entry> + <entry>Space { Space }</entry> + </row> + <row rowsep="0"> + <entry>Space</entry> + <entry>::=</entry> + <entry><space> | <horizontal tab></entry> + </row> + <row rowsep="0"> + <entry>NL</entry> + <entry>::=</entry> + <entry><newline></entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +Elements separated by vertical bar (|) are alternatives. Curly +braces ({...}) indicate zero or more repetitions of the enclosed +elements. Square brackets ([...]) indicate that the enclosed element +is optional. Quotes ("...") are used around literal characters. +</para> + +<para> +The backslash, which is not the top character of the NumericString, is +recognized as an escape character, so that the next one character is +treated as a literal character. For example, the two-character +sequence, ""\"""(the backslash followed by the quotation mark) is +recognized and replaced with a quotation mark character. +Any whitespace character, that is not the Delimiter, unquoted and +unescaped, is ignored. +</para> + +</sect1> +<sect1 id="Contents_of_Database_"> +<title>Contents of Database </title> +<para> +The available categories and classes depend on implementation, because +different platform will require different information set. +For example, some platform have system locale but some platform don't. +Furthermore, there might be a difference in functionality even if the +platform has system locale. +</para> + +<para> +In current sample implementation, categories listed below are available. +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="2*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <tbody> + <row rowsep="0"> + <entry>XLC_FONTSET:XFontSet relative information</entry> + </row> + <row rowsep="0"> + <entry>XLC_XLOCALE:Character classification and conversion information</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +</sect1> +<sect1 id="XLC_FONTSET_Category"> +<title>XLC_FONTSET Category</title> +<para> +The XLC_FONTSET category defines the XFontSet relative information. +It contains the CHARSET_REGISTRY-CHARSET_ENCODING name and character +mapping side (GL, GR, etc), and is used in Output Method (OM). +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <thead> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="3*" colsep="0"/> + <row> + <entry>class</entry> + <entry>super class</entry> + <entry>description</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>fsN</entry> + <entry></entry> + <entry>Nth fontset (N=0,1,2, ...)</entry> + </row> + <row rowsep="0"> + <entry>charset</entry> + <entry>fsN</entry> + <entry>list of encoding name</entry> + </row> + <row rowsep="0"> + <entry>font</entry> + <entry>fsN</entry> + <entry>list of font encoding name</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<variablelist> + <varlistentry> + <term>fsN</term> + <listitem> + <para> +Includes an encoding information for Nth charset, where N is +the index number (0,1,2,...). If there are 4 charsets available +in current locale, 4 fontsets, fs0, fs1, fs2 and fs3, should be +defined. +This class has two subclasses, 'charset' and 'font'. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>charset</term> + <listitem> + <para> +Specifies an encoding information to be used internally in Xlib +for this fontset. The format of value is; + </para> +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="4*" colsep="0"/> + <tbody> + <row rowsep="0"> + <entry>EncodingInfo</entry> + <entry>::=</entry> + <entry>EncodingName [ ":" EncodingSide ]</entry> + </row> + <row rowsep="0"> + <entry>EncodingName</entry> + <entry>::=</entry> + <entry>CHARSET_REGISTRY-CHARSET_ENCODING</entry> + </row> + <row rowsep="0"> + <entry>EncodingSide</entry> + <entry>::=</entry> + <entry>"GL" | "GR"</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +For detail definition of CHARSET_REGISTRY-CHARSET_ENCODING, refer +"X Logical Font Descriptions" document. +</para> +<literallayout> +example: + ISO8859-1:GL +</literallayout> + </listitem> + </varlistentry> + <varlistentry> + <term>font</term> + <listitem> + <para> +Specifies a list of encoding information which is used for searching +appropriate font for this fontset. The left most entry has highest +priority. + </para> + </listitem> + </varlistentry> +</variablelist> + +</sect1> +<sect1 id="XLC_XLOCALE_Category"> +<title>XLC_XLOCALE Category</title> +<para> +The XLC_XLOCALE category defines character classification, conversion +and other character attributes. +</para> + +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="3*" colsep="0"/> + <thead> + <row> + <entry>class</entry> + <entry>super class</entry> + <entry>description</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>encoding_name</entry> + <entry></entry> + <entry>codeset name</entry> + </row> + <row rowsep="0"> + <entry>mb_cur_max</entry> + <entry></entry> + <entry>MB_CUR_MAX</entry> + </row> + <row rowsep="0"> + <entry>state_depend_encoding</entry> + <entry></entry> + <entry>state dependent or not</entry> + </row> + <row rowsep="0"> + <entry>wc_encoding_mask</entry> + <entry></entry> + <entry>for parsing wc string</entry> + </row> + <row rowsep="0"> + <entry>wc_shift_bits</entry> + <entry></entry> + <entry>for conversion between wc and mb</entry> + </row> + <row rowsep="0"> + <entry>csN</entry> + <entry></entry> + <entry>Nth charset (N=0,1,2,...)</entry> + </row> + <row rowsep="0"> + <entry>side</entry> + <entry>csN</entry> + <entry>mapping side (GL, etc)</entry> + </row> + <row rowsep="0"> + <entry>length</entry> + <entry>csN</entry> + <entry>length of a character</entry> + </row> + <row rowsep="0"> + <entry>mb_encoding</entry> + <entry>csN</entry> + <entry>for parsing mb string</entry> + </row> + <row rowsep="0"> + <entry>wc_encoding</entry> + <entry>csN</entry> + <entry>for parsing wc string</entry> + </row> + <row rowsep="0"> + <entry>ct_encoding</entry> + <entry>csN</entry> + <entry>list of encoding name for ct</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<variablelist> + <varlistentry> + <term>encoding_name</term> + <listitem> + <para> +Specifies a codeset name of current locale. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>mb_cur_max</term> + <listitem> + <para> +Specifies a maximum allowable number of bytes in a multi-byte character. +It is corresponding to MB_CUR_MAX of "ISO/IEC 9899:1990 C Language Standard". + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>state_depend_encoding</term> + <listitem> + <para> +Indicates a current locale is state dependent. The value should be +specified "True" or "False". + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>wc_encoding_mask</term> + <listitem> + <para> +Specifies a bit-mask for parsing wide-char string. Each wide character is +applied bit-and operation with this bit-mask, then is classified into +the unique charset, by using 'wc_encoding'. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>wc_shift_bits</term> + <listitem> + <para> +Specifies a number of bit to be shifted for converting from a multi-byte +character to a wide character, and vice-versa. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>csN</term> + <listitem> + <para> +<!-- .br --> +Includes a character set information for Nth charset, where N is the +index number (0,1,2,...). If there are 4 charsets available in current +locale, cs0, cs1, cs2 and cs3 should be defined. This class has five +subclasses, 'side', 'length', 'mb_encoding' 'wc_encoding' and 'ct_encoding'. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>side</term> + <listitem> + <para> +Specifies a mapping side of this charset. The format of this value is; + </para> + <literallayout> + Side ::= EncodingSide[":Default"] + </literallayout> + <para> +The suffix ":Default" can be specified. It indicates that a character +belongs to the specified side is mapped to this charset in initial state. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>length</term> + <listitem> + <para> +<!-- .br --> +Specifies a number of bytes of a multi-byte character of this charset. +It should not contain the length of any single-shift sequence. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>mb_encoding</term> + <listitem> + <para> +Specifies a list of shift sequence for parsing multi-byte string. +The format of this value is; + </para> +<informaltable frame="none"> + <tgroup cols='3' align='left'> + <colspec colname='c1' colwidth="3*" colsep="0"/> + <colspec colname='c2' colwidth="1*" colsep="0"/> + <colspec colname='c3' colwidth="5*" colsep="0"/> + <tbody> + <row rowsep="0"> + <entry>MBEncoding</entry> + <entry>::=</entry> + <entry>ShiftType ShiftSequence</entry> + </row> + <row rowsep="0"> + <entry></entry> + <entry>|</entry> + <entry>ShiftType ShiftSequence ";" MBEncoding</entry> + </row> + <row rowsep="0"> + <entry>ShiftType</entry> + <entry>::=</entry> + <entry>"<SS>"|"<LSL>"|"<LSR>"</entry> + </row> + <row rowsep="0"> + <entry>ShiftSequence</entry> + <entry>::=</entry> + <entry>SequenceValue|SequenceValue ShiftSequence</entry> + </row> + <row rowsep="0"> + <entry>SequenceValue</entry> + <entry>::=</entry> + <entry>NumericString</entry> + </row> + </tbody> + </tgroup> +</informaltable> + + <literallayout> +example: + <LSL> \x1b \x28 \x4a; <LSL> \x1b \x28 \x42 + </literallayout> + </listitem> + </varlistentry> + <varlistentry> + <term>wc_encoding</term> + <listitem> + <para> +Specifies an integer value for parsing wide-char string. +It is used to determine the charset for each wide character, after +applying bit-and operation using 'wc_encoding_mask'. +This value should be unique in all csN classes. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>ct_encoding</term> + <listitem> + <para> +Specifies a list of encoding information that can be used for Compound +Text. + </para> + </listitem> + </varlistentry> +</variablelist> +</sect1> + +<sect1 id="Sample_of_X_Locale_Database"> +<title>Sample of X Locale Database</title> +<para> +The following is sample X Locale Database file. +</para> + +<literallayout class="monospaced"> +# XLocale Database Sample for ja_JP.euc +# + +# +# XLC_FONTSET category +# +XLC_FONTSET +# fs0 class (7 bit ASCII) +fs0 { + charset ISO8859-1:GL + font ISO8859-1:GL; JISX0201.1976-0:GL +} +# fs1 class (Kanji) +fs1 { + charset JISX0208.1983-0:GL + font JISX0208.1983-0:GL +} +# fs2 class (Half Kana) +fs2 { + charset JISX0201.1976-0:GR + font JISX0201.1976-0:GR +} +# fs3 class (User Defined Character) +# fs3 { +# charset JISX0212.1990-0:GL +# font JISX0212.1990-0:GL +# } +END XLC_FONTSET + +# +# XLC_XLOCALE category +# +XLC_XLOCALE + +encoding_name ja.euc +mb_cur_max 3 +state_depend_encoding False + +wc_encoding_mask \x00008080 +wc_shift_bits 8 + +# cs0 class +cs0 { + side GL:Default + length 1 + wc_encoding \x00000000 + ct_encoding ISO8859-1:GL; JISX0201.1976-0:GL +} +# cs1 class +cs1 { + side GR:Default + length 2 + + wc_encoding \x00008080 + + ct_encoding JISX0208.1983-0:GL; JISX0208.1983-0:GR;\ + JISX0208.1983-1:GL; JISX0208.1983-1:GR +} + +# cs2 class +cs2 { + side GR + length 1 + mb_encoding <SS> \x8e + + wc_encoding \x00000080 + + ct_encoding JISX0201.1976-0:GR +} + +# cs3 class +# cs3 { +# side GL +# length 2 +# mb_encoding <SS> \x8f +# #if HasWChar32 +# wc_encoding \x20000000 +# #else +# wc_encoding \x00008000 +# #endif +# ct_encoding JISX0212.1990-0:GL; JISX0212.1990-0:GR +# } + +END XLC_XLOCALE +</literallayout> +</sect1> + +<sect1 id="Reference"> +<title>Reference</title> +<para> +[1] <emphasis remap='I'>ISO/IEC 9899:1990 C Language Standard</emphasis> +</para> +<para> +[2] <emphasis remap='I'>X Logical Font Descriptions</emphasis> +</para> + +</sect1> +</chapter> +</book> diff --git a/libX11/specs/i18n/trans/Makefile.am b/libX11/specs/i18n/trans/Makefile.am new file mode 100644 index 000000000..dfdf34f05 --- /dev/null +++ b/libX11/specs/i18n/trans/Makefile.am @@ -0,0 +1,32 @@ +# +# Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved. +# +# 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 (including the next +# paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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. +# + +if ENABLE_SPECS + +specdir = $(docdir)/$(subdir) +doc_sources = trans.xml +dist_spec_DATA = $(doc_sources) + +include $(top_srcdir)/specs/xmlrules.in + +endif ENABLE_SPECS diff --git a/libX11/specs/i18n/trans/trans.xml b/libX11/specs/i18n/trans/trans.xml new file mode 100644 index 000000000..9a01d97f6 --- /dev/null +++ b/libX11/specs/i18n/trans/trans.xml @@ -0,0 +1,1979 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN" + "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"> + +<book id="xtransportspec"> + +<bookinfo> + <title>The XIM Transport Specification</title> + <subtitle>Revision 0.1</subtitle> + <releaseinfo>X Version 11, Release 7</releaseinfo> + <authorgroup> + <author> + <firstname>Takashi</firstname><surname>Fujiwara</surname> + <affiliation><orgname>FUJITSU LIMITED</orgname></affiliation> + </author> + </authorgroup> + <copyright><year>1994</year><holder>FUJITSU LIMITED</holder></copyright> + <copyright><year>1994</year><holder>X Consortium</holder></copyright> + + <productnumber>Revision 0.1</productnumber> + + +<abstract> +<para> +This specification describes the transport layer interfaces between Xlib and IM Server, +which makes various channels usable such as X protocol or TCP/IP, DECnet and etc. +</para> +</abstract> + +<legalnotice> + +<para> +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: +</para> + +<para> +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +</para> + +<para> +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. +</para> + +<para> +Except as contained in this notice, the name of The Open Group 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. +</para> + +<para>X Window System is a trademark of The Open Group.</para> + +</legalnotice> +</bookinfo> + +<chapter id="xim_transport_specification"> +<title>X Transport Specification</title> + +<sect1 id="Introduction"> +<title>Introduction</title> +<!-- .XS --> +<!-- (SN Introduction --> +<!-- .XE --> +<para> +<!-- .LP --> +The Xlib XIM implementation is layered into three functions, a protocol +layer, an interface layer and a transport layer. The purpose of this +layering is to make the protocol independent of transport implementation. +Each function of these layers are: +<!-- .RS 3 --> +</para> +<variablelist> + <varlistentry> + <term><emphasis>The protocol layer</emphasis></term> + <listitem> + <para> +implements overall function of XIM and calls the interface layer +functions when it needs to communicate to IM Server. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>The interface layer</emphasis></term> + <listitem> + <para> +separates the implementation of the transport layer from the protocol +layer, in other words, it provides implementation independent hook for +the transport layer functions. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><emphasis>The transport layer</emphasis></term> + <listitem> + <para> +handles actual data communication with IM Server. It is done by a set +of several functions named transporters. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +This specification describes the interface layer and the transport +layer, which makes various communication channels usable such as +X protocol or, TCP/IP, DECnet, STREAM, etc., and provides +the information needed for adding another new transport layer. +In addition, sample implementations for the transporter using the +X connection is described in section 4. <!-- xref --> +</para> +</sect1> + +<sect1 id="Initialization"> +<title>Initialization</title> + +<sect2 id="Registering_structure_to_initialize"> +<title>Registering structure to initialize</title> + +<para> +The structure typed as TransportSW contains the list of the transport +layer the specific implementations supports. +</para> + +<literallayout class="monospaced"> +typedef struct { + char *transport_name; + Bool (*config); +} TransportSW; +</literallayout> + +<informaltable frame="none"> + <tgroup cols="2"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="0"/> + <tbody> + <row rowsep="0"> + <entry><emphasis>transport_name</emphasis></entry> + <entry>name of transport<footnote><para>Refer to "The Input Method Protocol: Appendix B</para></footnote></entry> + </row> + <row rowsep="0"> + <entry><emphasis>config</emphasis></entry> + <entry>initial configuration function</entry> + </row> + </tbody> + </tgroup> +</informaltable> + +<para> +A sample entry for the Xlib supporting transporters is shown below: +</para> + +<literallayout class="monospaced"> +TransportSW _XimTransportRec[] = { +/* char <emphasis remap='I'>*</emphasis>: + * transport_name, Bool <emphasis remap='I'>(*config)()</emphasis> + */ + "X", _XimXConf, + "tcp", _XimTransConf, + "local", _XimTransConf, + "decnet", _XimTransConf, + "streams", _XimTransConf, + (char *)NULL, (Bool (*)())NULL, +}; +</literallayout> + +</sect2> +<sect2 id="Initialization_function"> +<title>Initialization function</title> +<!-- .XS --> +<!-- (SN Initialization function --> +<!-- .XE --> +<para> +The following function will be called once when Xlib configures the +transporter functions. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function>(*config)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>char<parameter> *transport_data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>transport_data</emphasis> + </term> + <listitem> + <para> +Specifies the data specific to the transporter, in IM Server address.<footnote><para>Refer to "The Input Method Protocol: Appendix B</para></footnote> + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +This function must setup the transporter function pointers. +</para> + +<para> +<!-- .LP --> +The actual <emphasis remap='I'>config</emphasis> function will be chosen by IM Server at the +pre-connection time, matching by the <emphasis remap='I'>transport_name</emphasis> specified +in the <function>_XimTransportRec</function> array; The specific members of XimProto +structure listed below must be initialized so that point they +appropriate transporter functions. +</para> + +<para> +If the specified transporter has been configured successfully, this +function returns True. There is no Alternative Entry for config +function itself. +</para> + +<para> +The structure XimProto contains the following function pointers: +</para> + +<literallayout class="monospaced"> +Bool (*connect)(); /* Open connection */ +Bool (*shutdown)(); /* Close connection */ +Bool (*write)(); /* Write data */ +Bool (*read)(); /* Read data */ +Bool (*flush)(); /* Flush data buffer */ +Bool (*register_dispatcher)(); /* Register asynchronous data handler */ +Bool (*call_dispatcher)(); /* Call dispatcher */ +</literallayout> + +<para> +These functions are called when Xlib needs to communicate the +IM Server. These functions must process the appropriate procedure +described below. +</para> + +</sect2> +</sect1> +<sect1 id="The_interface_transport_layer_functions"> +<title>The interface/transport layer functions</title> +<para> +Following functions are used for the transport interface. +</para> + +<table frame="all" id="transport_layer_functions_2"> + <title>The Transport Layer Functions</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="3*" colsep="1"/> + <colspec colname="col2" colwidth="3*" colsep="1"/> + <colspec colname="col3" colwidth="1*" colsep="1"/> + <thead> + <row> + <entry align="center">Alternate Entry (Interface Layer)</entry> + <entry align="center">XimProto member (Transport Layer)</entry> + <entry align="center">Section</entry> + </row> + </thead> + <tbody> + <row> + <entry>_XimConnect</entry> + <entry>connect</entry> + <entry>3.1</entry> + </row> + <row> + <entry>_XimShutdown</entry> + <entry>shutdown</entry> + <entry>3.2</entry> + </row> + <row> + <entry>_XimWrite</entry> + <entry>write</entry> + <entry>3.3</entry> + </row> + <row> + <entry>_XimRead</entry> + <entry>read</entry> + <entry>3.4</entry> + </row> + <row> + <entry>_XimFlush</entry> + <entry>flush</entry> + <entry>3.5</entry> + </row> + <row> + <entry>_XimRegisterDispatcher</entry> + <entry>register_dispatcher</entry> + <entry>3.6</entry> + </row> + <row> + <entry>_XimCallDispatcher</entry> + <entry>call_dispatcher</entry> + <entry>3.7</entry> + </row> + </tbody> + </tgroup> +</table> + +<para> +The Protocol layer calls the above functions using the Alternative +Entry in the left column. The transport implementation defines +XimProto member function in the right column. The Alternative Entry is +provided so as to make easier to implement the Protocol Layer. +</para> + +<sect2 id="Opening_connection"> +<title>Opening connection</title> +<para> +<!-- .LP --> +When <function>XOpenIM</function> is called, the following function is called to connect +with the IM Server. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function>(*connect)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +This function must establishes the connection to the IM Server. If the +connection is established successfully, this function returns True. +The Alternative Entry for this function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XimConnect</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> +</variablelist> +</sect2> + +<sect2 id="Closing_connection"> +<title>Closing connection</title> +<!-- .XS --> +<!-- (SN Closing connection --> +<!-- .XE --> +<para> +<!-- .LP --> +When <function>XCloseIM</function> is called, the following function is called to +disconnect the connection with the IM Server. The Alternative Entry +for this function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> (*shutdown)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +<!-- .LP --> +This function must close connection with the IM Server. If the +connection is closed successfully, this function returns True. The +Alternative Entry for this function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function>_XimShutdown</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> +</variablelist> + +</sect2> + +<sect2 id="Writing_data"> +<title>Writing data</title> +<para> +The following function is called, when Xlib needs to write data to the +IM Server. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XimWrite</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>INT16<parameter> len</parameter></paramdef> + <paramdef>XPointer<parameter> data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>len</emphasis> + </term> + <listitem> + <para> +Specifies the length of writing data. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>data</emphasis> + </term> + <listitem> + <para> +Specifies the writing data. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +This function writes the <emphasis remap='I'>data</emphasis> to the IM Server, regardless +of the contents. The number of bytes is passed to <emphasis remap='I'>len</emphasis>. The +writing data is passed to <emphasis remap='I'>data</emphasis>. If data is sent successfully, +the function returns True. Refer to "The Input Method Protocol" for +the contents of the writing data. The Alternative Entry for this +function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function>_XimWrite</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>INT16<parameter> len</parameter></paramdef> + <paramdef>XPointer<parameter> data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>len</emphasis> + </term> + <listitem> + <para> +Specifies the length of writing data. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>data</emphasis> + </term> + <listitem> + <para> +Specifies the writing data. + </para> + </listitem> + </varlistentry> +</variablelist> + +</sect2> +<sect2 id="Reading_data"> +<title>Reading data</title> +<para> +The following function is called when Xlib waits for response from IM +server synchronously. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XimRead</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>XPointer<parameter> read_buf</parameter></paramdef> + <paramdef>int<parameter> buf_len</parameter></paramdef> + <paramdef>int<parameter> *ret_len</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>read_buf</emphasis> + </term> + <listitem> + <para> +Specifies the buffer to store data. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>buf_len</emphasis> + </term> + <listitem> + <para> +Specifies the size of the <emphasis remap='I'>buffer</emphasis> + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>ret_len</emphasis> + </term> + <listitem> + <para> +Specifies the length of stored data. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +This function stores the read data in <emphasis remap='I'>read_buf</emphasis>, which size is +specified as <emphasis remap='I'>buf_len</emphasis>. The size of data is set to <emphasis remap='I'>ret_len</emphasis>. +This function return True, if the data is read normally or reading +data is completed. +</para> +<para> +The Alternative Entry for this function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XimRead</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>INT16<parameter> *ret_len</parameter></paramdef> + <paramdef>XPointer<parameter> buf</parameter></paramdef> + <paramdef>int<parameter> buf_len</parameter></paramdef> + <paramdef>Bool<parameter> (*predicate)()</parameter></paramdef> + <paramdef>XPointer<parameter> predicate_arg</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>ret_len</emphasis> + </term> + <listitem> + <para> +Specifies the size of the <emphasis remap='I'>data</emphasis> buffer. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>buf</emphasis> + </term> + <listitem> + <para> +Specifies the buffer to store data. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>buf_len</emphasis> + </term> + <listitem> + <para> +Specifies the length of <emphasis remap='I'>buffer</emphasis>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>predicate</emphasis> + </term> + <listitem> + <para> +Specifies the predicate for the XIM data. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>predicate_arg</emphasis> + </term> + <listitem> + <para> +Specifies the predicate specific data. +<!-- .sp 6p --> + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +The predicate procedure indicates whether the <emphasis remap='I'>data</emphasis> is for the +XIM or not. <emphasis remap='I'>len</emphasis> +This function stores the read data in <emphasis remap='I'>buf</emphasis>, which size +is specified as <emphasis remap='I'>buf_len</emphasis>. The size of data is set to +<emphasis remap='I'>ret_len</emphasis>. If <emphasis remap='I'>preedicate()</emphasis> +returns True, this function returns True. If not, it calls the registered callback function. +</para> + +<para> +The procedure and its arguments are: +</para> + + +<funcsynopsis> +<funcprototype> + <funcdef>void <function>(*predicate)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>INT16<parameter> len</parameter></paramdef> + <paramdef>XPointer<parameter> data</parameter></paramdef> + <paramdef>XPointer<parameter> predicate_arg</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>len</emphasis> + </term> + <listitem> + <para> +Specifies the size of the <emphasis remap='I'>data</emphasis> buffer. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>data</emphasis> + </term> + <listitem> + <para> +Specifies the buffer to store data. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>predicate_arg</emphasis> + </term> + <listitem> + <para> +Specifies the predicate specific data. + </para> + </listitem> + </varlistentry> +</variablelist> + +</sect2> +<sect2 id="Flushing_buffer"> +<title>Flushing buffer</title> +<para> +The following function is called when Xlib needs to flush the data. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function>(*flush)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +This function must flush the data stored in internal buffer on the +transport layer. If data transfer is completed, the function returns +True. The Alternative Entry for this function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>void <function> _XimFlush</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> +</variablelist> + +</sect2> +<sect2 id="Registering_asynchronous_data_handler"> +<title>Registering asynchronous data handler</title> +<para> +Xlib needs to handle asynchronous response from IM Server. This is +because some of the XIM data occur asynchronously to X events. +</para> + +<para> +Those data will be handled in the <emphasis remap='I'>Filter</emphasis>, +and the <emphasis remap='I'>Filter</emphasis> +will call asynchronous data handler in the protocol layer. Then it +calls dispatchers in the transport layer. The dispatchers are +implemented by the protocol layer. This function must store the +information and prepare for later call of the dispatchers using +<function>_XimCallDispatcher</function>. +</para> + +<para> +When multiple dispatchers are registered, they will be called +sequentially in order of registration, on arrival of asynchronous +data. The register_dispatcher is declared as following: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function>(*register_dispatcher)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>Bool<parameter> (*dispatcher)()</parameter></paramdef> + <paramdef>XPointer<parameter> call_data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>dispatcher</emphasis> + </term> + <listitem> + <para> +Specifies the dispatcher function to register. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>call_data</emphasis> + </term> + <listitem> + <para> +Specifies a parameter for the <emphasis remap='I'>dispatcher</emphasis>. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +The dispatcher is a function of the following type: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function>(*dispatcher)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>INT16<parameter> len</parameter></paramdef> + <paramdef>XPointer<parameter> data</parameter></paramdef> + <paramdef>XPointer<parameter> call_data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>len</emphasis> + </term> + <listitem> + <para> +Specifies the size of the <emphasis remap='I'>data</emphasis> buffer. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>data</emphasis> + </term> + <listitem> + <para> +Specifies the buffer to store data. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>call_data</emphasis> + </term> + <listitem> + <para> +Specifies a parameter passed to the register_dispatcher. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +The dispatcher is provided by the protocol layer. They are called once +for every asynchronous data, in order of registration. If the data is +used, it must return True. otherwise, it must return False. +</para> + +<para> +If the dispatcher function returns True, the Transport Layer assume +that the data has been processed by the upper layer. The Alternative +Entry for this function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XimRegisterDispatcher</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>Bool<parameter> (*dispatcher)()</parameter></paramdef> + <paramdef>XPointer<parameter> call_data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>dispatcher</emphasis> + </term> + <listitem> + <para> +Specifies the dispatcher function to register. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>call_data</emphasis> + </term> + <listitem> + <para> +Specifies a parameter for the <emphasis remap='I'>dispatcher</emphasis>. + </para> + </listitem> + </varlistentry> +</variablelist> + +</sect2> +<sect2 id="Calling_dispatcher"> +<title>Calling dispatcher</title> +<para> +The following function is used to call the registered dispatcher +function, when the asynchronous response from IM Server has arrived. +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function>(*call_dispatcher)</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>INT16<parameter> len</parameter></paramdef> + <paramdef>XPointer<parameter> data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +<variablelist> + <varlistentry> + <term> + <emphasis remap='I'>im</emphasis> + </term> + <listitem> + <para> +Specifies XIM structure address. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>len</emphasis> + </term> + <listitem> + <para> +Specifies the size of <emphasis remap='I'>data</emphasis> buffer. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <emphasis remap='I'>data</emphasis> + </term> + <listitem> + <para> +Specifies the buffer to store data. + </para> + </listitem> + </varlistentry> +</variablelist> + +<para> +The call_dispatcher must call the dispatcher function, in order of +their registration. <emphasis remap='I'>len</emphasis> and <emphasis remap='I'>data</emphasis> are the data passed to +register_dispatcher. +</para> + +<para> +The return values are checked at each invocation, and if it finds +True, it immediately return with true for its return value. +</para> + +<para> +It is depend on the upper layer whether the read data is XIM +Protocol packet unit or not. +The Alternative Entry for this function is: +</para> + +<funcsynopsis> +<funcprototype> + <funcdef>Bool <function> _XimCallDispatcher</function></funcdef> + <paramdef>XIM<parameter> im</parameter></paramdef> + <paramdef>INT16<parameter> len</parameter></paramdef> + <paramdef>XPointer<parameter> call_data</parameter></paramdef> +</funcprototype> +</funcsynopsis> + +</sect2> +</sect1> +<sect1 id="Sample_implementations_for_the_Transport_Layer"> +<title>Sample implementations for the Transport Layer</title> +<para> +Sample implementations for the transporter using the X connection is +described here. +</para> + +<sect2 id="X_Transport"> +<title>X Transport</title> +<para> +At the beginning of the X Transport connection for the XIM transport +mechanism, two different windows must be created either in an Xlib XIM +or in an IM Server, with which the Xlib and the IM Server exchange the +XIM transports by using the ClientMessage events and Window Properties. +In the following, the window created by the Xlib is referred as the +"client communication window", and on the other hand, the window created +by the IM Server is referred as the "IMS communication window". +</para> + +<sect3 id="Connection"> +<title>Connection</title> +<para> +In order to establish a connection, a communication window is created. +A ClientMessage in the following event's format is sent to the owner +window of XIM_SERVER selection, which the IM Server has created. +</para> + +<para> +<!-- .LP --> +Refer to "The Input Method Protocol" for the XIM_SERVER atom. +</para> + +<table frame="none" id="transport_layer_functions"> + <title>The ClientMessage sent to the IMS window.</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_CONNECT", false)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>32</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[0]</entry> + <entry>client communication window ID</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[1]</entry> + <entry>client-major-transport-version(*1)</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[2]</entry> + <entry>client-major-transport-version(*1)</entry> + </row> + </tbody> + </tgroup> +</table> + +<para> +In order to establish the connection (to notify the IM Server communication +window), the IM Server sends a ClientMessage in the following event's +format to the client communication window. +</para> + +<table frame="none" id="clientmessage_sent_by_im_server"> + <title>The ClientMessage sent by IM Server.</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_CONNECT", false)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>32</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[0]</entry> + <entry>client communication window ID</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[1]</entry> + <entry>client-major-transport-version(*1)</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[2]</entry> + <entry>client-major-transport-version(*1)</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[3]</entry> + <entry>dividing size between ClientMessage and Property(*2)</entry> + </row> + </tbody> + </tgroup> +</table> + +<para> +(*1) major/minor-transport-version +</para> + +<para> +The read/write method is decided by the combination of +major/minor-transport-version, as follows: +</para> + +<table frame="all" id="readwrite_method_and_the_majorminor_transport_version"> +<title>The read/write method and the major/minor-transport-version</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="1"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3*" colsep="1"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="center"/> + <thead> + <row> + <entry spanname="span-horiz">Transport-version</entry> + <entry>read/write</entry> + </row> + <row> + <entry>major</entry> + <entry>minor</entry> + <entry></entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry morerows="2">0</entry> + <entry>0</entry> + <entry>only-CM & Property-with-CM</entry> + </row> + <row rowsep="0"> + <entry>1</entry> + <entry>only-CM & multi-CM</entry> + </row> + <row rowsep="1"> + <entry>2</entry> + <entry>only-CM & multi-CM & Property-with-CM</entry> + </row> + <row rowsep="1"> + <entry>1</entry> + <entry>0</entry> + <entry>PropertyNotify</entry> + </row> + <row rowsep="0"> + <entry morerows="1">2</entry> + <entry>0</entry> + <entry>only-CM & PropertyNotify</entry> + </row> + <row> + <entry>1</entry> + <entry>only-CM & multi-CM & PropertyNotify</entry> + </row> + </tbody> + </tgroup> +</table> + +<literallayout class="monospaced"> +only-CM : data is sent via a ClientMessage +multi-CM : data is sent via multiple ClientMessages +Property-with-CM : data is written in Property, and its Atom + is send via ClientMessage +PropertyNotify : data is written in Property, and its Atom + is send via PropertyNotify + +</literallayout> + + +<para> +The method to decide major/minor-transport-version is as follows: +</para> + +<itemizedlist> + <listitem> + <para> +The client sends 0 as major/minor-transport-version to the IM Server. +The client must support all methods in Table 4-3. <!-- xref --> +The client may send another number as major/minor-transport-version to +use other method than the above in the future. + </para> + </listitem> + <listitem> + <para> +The IM Server sends its major/minor-transport-version number to +the client. The client sends data using the method specified by the +IM Server. + </para> + </listitem> + <listitem> + <para> +If major/minor-transport-version number is not available, it is regarded +as 0. + </para> + </listitem> +</itemizedlist> + +<para> +(*2) dividing size between ClientMessage and Property +</para> + +<para> +If data is sent via both of multi-CM and Property, specify the dividing +size between ClientMessage and Property. The data, which is smaller than +this size, is sent via multi-CM (or only-CM), and the data, which is +lager than this size, is sent via Property. +</para> + +</sect3> + +<sect3 id="read_write_"> +<title>read/write </title> +<para> +The data is transferred via either ClientMessage or Window Property in +the X Window System. +</para> + +<sect4 id="Format_for_the_data_from_the_Client_to_the_IM_Server"> +<title>Format for the data from the Client to the IM Server</title> +<para> +<emphasis role="bold">ClientMessage</emphasis> +</para> + +<para> +If data is sent via ClientMessage event, the format is as follows: +</para> + +<table frame="none" id="clientmessage_events_format_first_or_middle"> + <title>The ClientMessage event's format (first or middle)</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_MOREDATA", False)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>char</entry> + <entry>data.b[20]</entry> + <entry>(read/write DATA : 20 byte)</entry> + </row> + </tbody> + </tgroup> +</table> + + + +<table frame="none" id="clientmessage_events_format_only_or_last"> + <title>The ClientMessage event's format (only or last)</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>char</entry> + <entry>data.b[20]</entry> + <entry>(read/write DATA : MAX 20 byte) +<footnote><para>If the data is smaller +than 20 bytes, all data other than available data must be 0. +</para></footnote> + </entry> + </row> + </tbody> + </tgroup> +</table> + +<para> +<emphasis role="bold">Property</emphasis> +</para> + +<para> +In the case of large data, data will be sent via the Window Property +for the efficiency. There are the following two methods to notify +Property, and transport-version is decided which method is used. +</para> + +<itemizedlist> + <listitem> + <para> +The XChangeProperty function is used to store data in the client +communication window, and Atom of the stored data is notified to the +IM Server via ClientMessage event. + </para> + </listitem> + <listitem> + <para> +The XChangeProperty function is used to store data in the client +communication window, and Atom of the stored data is notified to the +IM Server via PropertyNotify event. + </para> + </listitem> +</itemizedlist> + +<para> +The arguments of the XChangeProperty are as follows: +</para> + + +<table frame="none" id="xchangeproperty_events_format"> + <title>The XChangeProperty event's format</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Argument</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS communication window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>property</entry> + <entry>read/write property Atom (*1)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>mode</entry> + <entry>PropModeAppend</entry> + </row> + <row rowsep="0"> + <entry>u_char</entry> + <entry>*data</entry> + <entry>read/write DATA</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>nelements</entry> + <entry>length of DATA</entry> + </row> + </tbody> + </tgroup> +</table> + +<para> +(*1) The read/write property ATOM allocates the following strings by +<function>XInternAtom</function>. +"_clientXXX" +</para> + +<para> +The client changes the property with the mode of PropModeAppend and +the IM Server will read it with the delete mode i.e. (delete = True). +</para> + +<para> +If Atom is notified via ClientMessage event, the format of the ClientMessage +is as follows: +</para> + +<table frame="none" id="clientmessage_events_format_to_send_atom_of_property"> + <title>The ClientMessage event's format to send Atom of property</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[0]</entry> + <entry>length of read/write property Atom</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[1]</entry> + <entry>read/write property Atom</entry> + </row> + </tbody> + </tgroup> +</table> +</sect4> + +<sect4 id="Format_for_the_data_from_the_IM_Server_to_the_Client"> +<title>Format for the data from the IM Server to the Client</title> +<para> +<emphasis role="bold">ClientMessage</emphasis> +</para> + +<para> +The format of the ClientMessage is as follows: +</para> + +<table frame="none" id="clientmessage_events_format_first_or_middle_2"> + <title>The ClientMessage event's format (first or middle)</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_MOREDATA", False)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>char</entry> + <entry>data.b[20]</entry> + <entry>(read/write DATA : 20 byte)</entry> + </row> + </tbody> + </tgroup> +</table> + + + + + +<table frame="none" id="clientmessage_events_format_only_or_last_2"> + <title>The ClientMessage event's format (only or last)</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>char</entry> + <entry>data.b[20]</entry> + <entry>(read/write DATA : MAX 20 byte) (*1)</entry> + </row> + </tbody> + </tgroup> +</table> + +<para> +(*1) If the data size is smaller than 20 bytes, all data other than available +data must be 0. +</para> + +<para> +<emphasis role="bold">Property</emphasis> +</para> + +<para> +In the case of large data, data will be sent via the Window Property +for the efficiency. There are the following two methods to notify +Property, and transport-version is decided which method is used. +</para> + +<itemizedlist> + <listitem> + <para> +The XChangeProperty function is used to store data in the IMS +communication window, and Atom of the property is sent via the +ClientMessage event. + </para> + </listitem> + <listitem> + <para> +The XChangeProperty function is used to store data in the IMS +communication window, and Atom of the property is sent via +PropertyNotify event. + </para> + </listitem> +</itemizedlist> + +<para> +The arguments of the XChangeProperty are as follows: +</para> + +<table frame="none" id="xchangeproperty_events_format_b"> + <title>The XChangeProperty event's format</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Argument</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS communication window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>property</entry> + <entry>read/write property Atom (*1)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>mode</entry> + <entry>PropModeAppend</entry> + </row> + <row rowsep="0"> + <entry>u_char</entry> + <entry>*data</entry> + <entry>read/write DATA</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>nelements</entry> + <entry>length of DATA</entry> + </row> + </tbody> + </tgroup> +</table> + +<para> +(*1) The read/write property ATOM allocates some strings, which are not +allocated by the client, by <function>XInternAtom</function>. +</para> + +<para> +The IM Server changes the property with the mode of PropModeAppend and +the client reads it with the delete mode, i.e. (delete = True). +</para> + +<para> +If Atom is notified via ClientMessage event, the format of the ClientMessage +is as follows: +</para> + +<table frame="none" id="clientmessage_events_format_to_send_atom_of_property_2"> + <title>The ClientMessage event's format to send Atom of property</title> + <tgroup cols="3"> + <colspec colname="col1" colwidth="1*" colsep="0"/> + <colspec colname="col2" colwidth="1*" colsep="1"/> + <colspec colname="col3" colwidth="3.5*" colsep="0"/> + <spanspec namest="col1" nameend="col2" spanname="span-horiz" align="left"/> + <thead> + <row> + <entry align="left" spanname="span-horiz">Structure Member</entry> + <entry align="left">Contents</entry> + </row> + </thead> + <tbody> + <row rowsep="0"> + <entry>int</entry> + <entry>type</entry> + <entry>ClientMessage</entry> + </row> + <row rowsep="0"> + <entry>u_long</entry> + <entry>serial</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Bool</entry> + <entry>send_event</entry> + <entry>Set by the X Window System</entry> + </row> + <row rowsep="0"> + <entry>Display</entry> + <entry>*display</entry> + <entry>The display to which connects</entry> + </row> + <row rowsep="0"> + <entry>Window</entry> + <entry>window</entry> + <entry>IMS Window ID</entry> + </row> + <row rowsep="0"> + <entry>Atom</entry> + <entry>message_type</entry> + <entry>XInternAtom(display, "_XIM_PROTOCOL", False)</entry> + </row> + <row rowsep="0"> + <entry>int</entry> + <entry>format</entry> + <entry>8</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[0]</entry> + <entry>length of read/write property Atom</entry> + </row> + <row rowsep="0"> + <entry>long</entry> + <entry>data.1[1]</entry> + <entry>read/write property Atom</entry> + </row> + </tbody> + </tgroup> +</table> + +</sect4> +</sect3> +<sect3 id="Closing_Connection"> +<title>Closing Connection</title> + +<para> +If the client disconnect with the IM Server, shutdown function should +free the communication window properties and etc.. +</para> + +</sect3> +</sect2> +</sect1> + +<sect1 id="References"> +<title>References</title> +<para> +[1] Masahiko Narita and Hideki Hiura, <emphasis remap='I'>"The Input Method Protocol"</emphasis> +</para> +</sect1> + +</chapter> +</book> -- cgit v1.2.3