diff options
Diffstat (limited to 'libX11/specs/libX11/CH13')
-rw-r--r-- | libX11/specs/libX11/CH13 | 7673 |
1 files changed, 7673 insertions, 0 deletions
diff --git a/libX11/specs/libX11/CH13 b/libX11/specs/libX11/CH13 new file mode 100644 index 000000000..ed143c690 --- /dev/null +++ b/libX11/specs/libX11/CH13 @@ -0,0 +1,7673 @@ +.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991, 1994, 1996 X Consortium +.\" +.\" Permission is hereby granted, free of charge, to any person obtaining +.\" a copy of this software and associated documentation files (the +.\" "Software"), to deal in the Software without restriction, including +.\" without limitation the rights to use, copy, modify, merge, publish, +.\" distribute, sublicense, and/or sell copies of the Software, and to +.\" permit persons to whom the Software is furnished to do so, subject to +.\" the following conditions: +.\" +.\" The above copyright notice and this permission notice shall be included +.\" in all copies or substantial portions of the Software. +.\" +.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +.\" IN NO EVENT SHALL THE X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR +.\" OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +.\" ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +.\" OTHER DEALINGS IN THE SOFTWARE. +.\" +.\" Except as contained in this notice, the name of 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. +.\" +.\" Copyright \(co 1985, 1986, 1987, 1988, 1989, 1990, 1991 by +.\" Digital Equipment Corporation +.\" +.\" Portions Copyright \(co 1990, 1991 by +.\" Tektronix, Inc. +.\" +.\" Permission to use, copy, modify and distribute this documentation for +.\" any purpose and without fee is hereby granted, provided that the above +.\" copyright notice appears in all copies and that both that copyright notice +.\" and this permission notice appear in all copies, and that the names of +.\" Digital and Tektronix not be used in in advertising or publicity pertaining +.\" to this documentation without specific, written prior permission. +.\" Digital and Tektronix makes no representations about the suitability +.\" of this documentation for any purpose. +.\" It is provided ``as is'' without express or implied warranty. +.\" +\& +.sp 1 +.ce 3 +\s+1\fBChapter 13\fP\s-1 + +\s+1\fBLocales and Internationalized Text Functions\fP\s-1 +.sp 2 +.nr H1 13 +.nr H2 0 +.nr H3 0 +.nr H4 0 +.nr H5 0 +.na +.LP +.XS +Chapter 13: Locales and Internationalized Text Functions +.XE +An internationalized application is one that is adaptable to the requirements +of different native languages, local customs, and character string encodings. +The process of adapting the operation to a particular native language, +local custom, or string encoding is called \fIlocalization\fP\^. +A goal of internationalization is to permit localization +without program source modifications or recompilation. +.LP +As one of the localization mechanisms, +Xlib provides an X Input Method +.Pn ( XIM ) +functional interface for internationalized text input +and an X Output Method +.Pn ( XOM ) +functional interface for internationalized text output. +.LP +Internationalization in X is based on the concept of a \fIlocale\fP. +A locale defines the localized behavior of a program at run time. +Locales affect Xlib in its: +.IP \(bu 5 +Encoding and processing of input method text +.IP \(bu 5 +Encoding of resource files and values +.IP \(bu 5 +Encoding and imaging of text strings +.IP \(bu 5 +Encoding and decoding for inter-client text communication +.LP +Characters from various languages are represented in a computer +using an encoding. +Different languages have different encodings, +and there are even different encodings for the same characters +in the same language. +.LP +This chapter defines support for localized text imaging and text input +and describes the locale mechanism that controls all locale-dependent +Xlib functions. +Sets of functions are provided for multibyte (char *) text as well as +wide character (wchar_t) text in the form supported +by the host C language environment. +The multibyte and wide character functions +are equivalent except for the form of the text argument. +.LP +The Xlib internationalization functions are not meant to provide +support for multilingual applications (mixing multiple languages +within a single piece of text), but they make it possible to +implement applications that work in limited fashion with more than +one language in independent contexts. +.LP +The remainder of this chapter discusses: +.IP \(bu 5 +X locale management +.IP \(bu 5 +Locale and modifier dependencies +.IP \(bu 5 +Variable argument lists +.IP \(bu 5 +Output methods +.IP \(bu 5 +Input methods +.IP \(bu 5 +String constants +.NH 2 +X Locale Management +.XS +\*(SN X Locale Management +.XE +.LP +X supports one or more of the locales defined by the host environment. +On implementations that conform to the ANSI C library, +the locale announcement method is +.PN setlocale . +This function configures the locale operation of both +the host C library and Xlib. +The operation of Xlib is governed by the LC_CTYPE category; +this is called the \fIcurrent locale\fP. +An implementation is permitted to provide implementation-dependent +mechanisms for announcing the locale in addition to +.PN setlocale . +.LP +On implementations that do not conform to the ANSI C library, +the locale announcement method is Xlib implementation-dependent. +.LP +The mechanism by which the semantic operation of Xlib is defined +for a specific locale is implementation-dependent. +.LP +.sp +X is not required to support all the locales supported by the host. +To determine if the current locale is supported by X, use +.PN XSupportsLocale . +.IN "XSupportsLocale" "" "@DEF@" +.sM +.FD 0 +Bool XSupportsLocale\^(\|) +.FN +.LP +.eM +The +.PN XSupportsLocale +function returns +.PN True +if Xlib functions are capable of operating under the current locale. +If it returns +.PN False , +Xlib locale-dependent functions for which the +.PN XLocaleNotSupported +return status is defined will return +.PN XLocaleNotSupported . +Other Xlib locale-dependent routines will operate in the ``C'' locale. +.LP +The client is responsible for selecting its locale and X modifiers. +Clients should provide a means for the user to override the clients' +locale selection at client invocation. +Most single-display X clients operate in a single locale +for both X and the host processing environment. +They will configure the locale by calling three functions: +the host locale configuration function, +.PN XSupportsLocale , +and +.PN XSetLocaleModifiers . +.LP +The semantics of certain categories of X internationalization capabilities +can be configured by setting modifiers. +Modifiers are named by implementation-dependent and locale-specific strings. +The only standard use for this capability at present +is selecting one of several styles of keyboard input method. +.LP +.sp +To configure Xlib locale modifiers for the current locale, use +.PN XSetLocaleModifiers . +.IN "XSetLocaleModifiers" "" "@DEF@" +.sM +.FD 0 +char *XSetLocaleModifiers\^(\^\fImodifier_list\fP\^) +.br + char *\fImodifier_list\fP\^; +.FN +.IP \fImodifier_list\fP 1i +Specifies the modifiers. +.LP +.eM +The +.PN XSetLocaleModifiers +function sets the X modifiers for the current locale setting. +The modifier_list argument is a null-terminated string of the form +``{@\^\fIcategory\fP\^=\^\fIvalue\fP\^}'', that is, +having zero or more concatenated ``@\^\fIcategory\fP\^=\^\fIvalue\fP\^'' +entries, where \fIcategory\fP is a category name +and \fIvalue\fP is the (possibly empty) setting for that category. +The values are encoded in the current locale. +Category names are restricted to the POSIX Portable Filename Character Set. +.LP +The local host X locale modifiers announcer (on POSIX-compliant systems, +the XMODIFIERS environment variable) is appended to the modifier_list to +provide default values on the local host. +If a given category appears more than once in the list, +the first setting in the list is used. +If a given category is not included in the full modifier list, +the category is set to an implementation-dependent default +for the current locale. +An empty value for a category explicitly specifies the +implementation-dependent default. +.LP +If the function is successful, it returns a pointer to a string. +The contents of the string are such that a subsequent call with that string +(in the same locale) will restore the modifiers to the same settings. +If modifier_list is a NULL pointer, +.PN XSetLocaleModifiers +also returns a pointer to such a string, +and the current locale modifiers are not changed. +.LP +If invalid values are given for one or more modifier categories supported by +the locale, a NULL pointer is returned, and none of the +current modifiers are changed. +.LP +At program startup, +the modifiers that are in effect are unspecified until +the first successful call to set them. Whenever the locale is changed, the +modifiers that are in effect become unspecified until the next successful call +to set them. +Clients should always call +.PN XSetLocaleModifiers +with a non-NULL modifier_list after setting the locale +before they call any locale-dependent Xlib routine. +.LP +The only standard modifier category currently defined is ``im'', +which identifies the desired input method. +The values for input method are not standardized. +A single locale may use multiple input methods, +switching input method under user control. +The modifier may specify the initial input method in effect +or an ordered list of input methods. +Multiple input methods may be specified in a single im value string +in an implementation-dependent manner. +.LP +The returned modifiers string is owned by Xlib and should not be modified or +freed by the client. +It may be freed by Xlib after the current locale or modifiers are changed. +Until freed, it will not be modified by Xlib. +.LP +The recommended procedure for clients initializing their locale and modifiers +is to obtain locale and modifier announcers separately from +one of the following prioritized sources: +.IP \(bu 5 +A command line option +.IP \(bu 5 +A resource +.IP \(bu 5 +The empty string ("\^") +.LP +The first of these that is defined should be used. +Note that when a locale command line option or locale resource is defined, +the effect should be to set all categories to the specified locale, +overriding any category-specific settings in the local host environment. +.NH 2 +Locale and Modifier Dependencies +.XS +\*(SN Locale and Modifier Dependencies +.XE +.LP +The internationalized Xlib functions operate in the current locale +configured by the host environment and X locale modifiers set by +.PN XSetLocaleModifiers +or in the locale and modifiers configured at the time +some object supplied to the function was created. +For each locale-dependent function, +the following table describes the locale (and modifiers) dependency: +.TS H +lw(1.25i) lw(2.5i) lw(2i). +_ +.sp 6p +.B +Locale from Affects the Function In +.sp 6p +_ +.sp 6p +.TH +.R + Locale Query/Configuration: +.sp 6p +T{ +.PN setlocale +T} T{ +.PN XSupportsLocale +T} T{ +Locale queried +T} + T{ +.PN XSetLocaleModifiers +T} T{ +Locale modified +T} +.sp + Resources: +.sp 6p +T{ +.PN setlocale +T} T{ +.PN XrmGetFileDatabase +T} T{ +Locale of +.PN XrmDatabase +T} + T{ +.PN XrmGetStringDatabase +T} +T{ +.PN XrmDatabase +T} T{ +.PN XrmPutFileDatabase +T} T{ +Locale of +.PN XrmDatabase +T} + T{ +.PN XrmLocaleOfDatabase +T} +.sp + Setting Standard Properties: +.sp 6p +T{ +.PN setlocale +T} T{ +.PN XmbSetWMProperties +T} T{ +Encoding of supplied/returned +T} + text (some WM_ property + text in environment locale) +.sp 6p +T{ +.PN setlocale +T} T{ +.PN XmbTextPropertyToTextList +T} T{ +Encoding of supplied/returned text +T} + T{ +.PN XwcTextPropertyToTextList +T} + T{ +.PN XmbTextListToTextProperty +T} + T{ +.PN XwcTextListToTextProperty +T} +.sp + Text Input: +.sp 6p +T{ +.PN setlocale +T} T{ +.PN XOpenIM +T} T{ +XIM input method selection +T} + T{ +.PN XRegisterIMInstantiateCallback +T} T{ +XIM selection +T} + T{ +.PN XUnregisterIMInstantiateCallback +T} T{ +XIM selection +T} +T{ +.PN XIM +T} T{ +.PN XCreateIC +T} T{ +XIC input method configuration +T} + T{ +.PN XLocaleOfIM , +and so on +T} T{ +Queried locale +T} +T{ +.PN XIC +T} T{ +.PN XmbLookupString +T} T{ +Keyboard layout +T} + T{ +.PN XwcLookupString +T} T{ +Encoding of returned text +T} +.sp + Text Drawing: +.sp 6p +T{ +.PN setlocale +T} T{ +.PN XOpenOM +T} T{ +XOM output method selection +T} + T{ +.PN XCreateFontSet +T} T{ +Charsets of fonts in +.PN XFontSet +T} +T{ +.PN XOM +T} T{ +.PN XCreateOC +T} T{ +XOC output method configuration +T} + T{ +.PN XLocaleOfOM , +and so on +T} T{ +Queried locale +T} +T{ +.PN XFontSet +T} T{ +.PN XmbDrawText , +T} T{ +Locale of supplied text +T} + T{ +.PN XwcDrawText , +and so on +T} T{ +Locale of supplied text +T} + T{ +.PN XExtentsOfFontSet , +and so on +T} T{ +Locale-dependent metrics +T} + T{ +.PN XmbTextExtents , +T} + T{ +.PN XwcTextExtents , +and so on +T} +.sp + Xlib Errors: +.sp 6p +T{ +.PN setlocale +T} T{ +.PN XGetErrorDatabaseText +T} T{ +Locale of error message +T} + T{ +.PN XGetErrorText +T} +.sp 6p +_ +.TE +.LP +Clients may assume that a locale-encoded text string returned +by an X function can be passed to a C library routine, or vice versa, +if the locale is the same at the two calls. +.LP +All text strings processed by internationalized Xlib functions are assumed +to begin in the initial state of the encoding of the locale, if the encoding +is state-dependent. +.LP +All Xlib functions behave as if they do not change the current locale +or X modifier setting. +(This means that if they do change locale or call +.PN XSetLocaleModifiers +with a non-NULL argument, they must save and restore the current state on +entry and exit.) +Also, Xlib functions on implementations that conform to the ANSI C library do +not alter the global state associated with the ANSI C functions +.PN mblen , +.PN mbtowc , +.PN wctomb , +and +.PN strtok . +.NH 2 +Variable Argument Lists +.XS +\*(SN Variable Argument Lists +.XE +.LP +Various functions in this chapter have arguments that conform +to the ANSI C variable argument list calling convention. +Each function denoted with an argument of the form ``...'' takes +a variable-length list of name and value pairs, +where each name is a string and each value is of type +.PN XPointer . +A name argument that is NULL identifies the end of the list. +.LP +A variable-length argument list may contain a nested list. +If the name +.PN XNVaNestedList +is specified in place of an argument name, +then the following value is interpreted as an +.PN XVaNestedList +value that specifies a list of values logically inserted into the +original list at the point of declaration. +A NULL identifies the end of a nested list. +.LP +.sp +To allocate a nested variable argument list dynamically, use +.PN XVaCreateNestedList . +.IN "XVaCreateNestedList" "" @DEF@" +.sM +.FD 0 +typedef void * XVaNestedList; + +XVaNestedList XVaCreateNestedList\^(\^\fIdummy\fP\^, ...) +.br + int \fIdummy\fP\^; +.FN +.IP \fIdummy\fP 1i +Specifies an unused argument (required by ANSI C). +.ds Al +.IP ... 1i +Specifies the variable length argument list\*(Al. +.LP +.eM +The +.PN XVaCreateNestedList +function allocates memory and copies its arguments into +a single list pointer, +which may be used as a value for arguments requiring a list value. +Any entries are copied as specified. +Data passed by reference is not copied; +the caller must ensure data remains valid for the lifetime +of the nested list. +The list should be freed using +.PN XFree +when it is no longer needed. +.NH 2 +Output Methods +.XS +\*(SN Output Methods +.XE +.LP +This section provides discussions of the following X Output Method +(XOM) topics: +.IP \(bu 5 +Output method overview +.IP \(bu 5 +Output method functions +.IP \(bu 5 +Output method values +.IP \(bu 5 +Output context functions +.IP \(bu 5 +Output context values +.IP \(bu 5 +Creating and freeing a font set +.IP \(bu 5 +Obtaining font set metrics +.IP \(bu 5 +Drawing text using font sets +.NH 3 +Output Method Overview +.XS +\*(SN Output Method Overview +.XE +.LP +Locale-dependent text may include one or more text components, each of +which may require different fonts and character set encodings. +In some languages, each component might have a different +drawing direction, and some components might contain +context-dependent characters that change shape based on +relationships with neighboring characters. +.LP +When drawing such locale-dependent text, some locale-specific +knowledge is required; +for example, what fonts are required to draw the text, +how the text can be separated into components, and which +fonts are selected to draw each component. +Further, when bidirectional text must be drawn, +the internal representation order of the text must be changed +into the visual representation order to be drawn. +.LP +An X Output Method provides a functional interface so that clients +do not have to deal directly with such locale-dependent details. +Output methods provide the following capabilities: +.IP \(bu 5 +Creating a set of fonts required to draw locale-dependent text. +.IP \(bu 5 +Drawing locale-dependent text with a font set without the caller +needing to be aware of locale dependencies. +.IP \(bu 5 +Obtaining the escapement and extents in pixels of locale-dependent text. +.IP \(bu 5 +Determining if bidirectional or context-dependent drawing is required +in a specific locale with a specific font set. +.LP +Two different abstractions are used in the representation of +the output method for clients. +.LP +The abstraction used to communicate with an output method +is an opaque data structure represented by the +.PN XOM +data type. +The abstraction for representing the state of a particular output thread +is called an \fIoutput context\fP. +The Xlib representation of an output context is an +.PN XOC , +which is compatible with +.PN XFontSet +in terms of its functional interface, but is +a broader, more generalized abstraction. +.NH 3 +Output Method Functions +.XS +\*(SN Output Method Functions +.XE +.LP +To open an output method, use +.PN XOpenOM . +.IN "XOpenOM" "" "@DEF@" +.sM +.FD 0 +XOM XOpenOM\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + XrmDatabase \fIdb\fP\^; +.br + char *\fIres_name\fP\^; +.br + char *\fIres_class\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIdb\fP 1i +Specifies a pointer to the resource database. +.IP \fIres_name\fP 1i +Specifies the full resource name of the application. +.IP \fIres_class\fP 1i +Specifies the full class name of the application. +.LP +.eM +The +.PN XOpenOM +function opens an output method +matching the current locale and modifiers specification. +The current locale and modifiers are bound to the output method +when +.PN XOpenOM +is called. +The locale associated with an output method cannot be changed. +.LP +The specific output method to which this call will be routed +is identified on the basis of the current locale and modifiers. +.PN XOpenOM +will identify a default output method corresponding to the +current locale. +That default can be modified using +.PN XSetLocaleModifiers +to set the output method modifier. +.LP +The db argument is the resource database to be used by the output method +for looking up resources that are private to the output method. +It is not intended that this database be used to look +up values that can be set as OC values in an output context. +If db is NULL, +no database is passed to the output method. +.LP +The res_name and res_class arguments specify the resource name +and class of the application. +They are intended to be used as prefixes by the output method +when looking up resources that are common to all output contexts +that may be created for this output method. +The characters used for resource names and classes must be in the +X Portable Character Set. +The resources looked up are not fully specified +if res_name or res_class is NULL. +.LP +The res_name and res_class arguments are not assumed to exist beyond +the call to +.PN XOpenOM . +The specified resource database is assumed to exist for the lifetime +of the output method. +.LP +.PN XOpenOM +returns NULL if no output method could be opened. +.LP +.sp +To close an output method, use +.PN XCloseOM . +.IN "XCloseOM" "" "@DEF@" +.sM +.FD 0 +Status XCloseOM\^(\^\fIom\fP\^) +.br + XOM \fIom\fP\^; +.FN +.IP \fIom\fP 1i +Specifies the output method. +.LP +.eM +The +.PN XCloseOM +function closes the specified output method. +.LP +.sp +To set output method attributes, use +.PN XSetOMValues . +.IN "XSetOMValues" "" "@DEF@" +.sM +.FD 0 +char * XSetOMValues\^(\^\fIom\fP\^, ...) +.br + XOM \fIom\fP\^; +.FN +.IP \fIom\fP 1i +Specifies the output method. +.ds Al \ to set XOM values +.IP ... 1i +Specifies the variable-length argument list\*(Al. +.LP +.eM +The +.PN XSetOMValues +function presents a variable argument list programming interface +for setting properties or features of the specified output method. +This function returns NULL if it succeeds; +otherwise, +it returns the name of the first argument that could not be obtained. +.LP +No standard arguments are currently defined by Xlib. +.LP +.sp +To query an output method, use +.PN XGetOMValues . +.IN "XGetOMValues" "" "@DEF@" +.sM +.FD 0 +char * XGetOMValues\^(\^\fIom\fP\^, ...) +.br + XOM \fIom\fP\^; +.FN +.IP \fIom\fP 1i +Specifies the output method. +.ds Al \ to get XOM values +.IP ... 1i +Specifies the variable-length argument list\*(Al. +.LP +.eM +The +.PN XGetOMValues +function presents a variable argument list programming interface +for querying properties or features of the specified output method. +This function returns NULL if it succeeds; +otherwise, +it returns the name of the first argument that could not be obtained. +.LP +To obtain the display associated with an output method, use +.PN XDisplayOfOM . +.IN "XDisplayOfOM" "" "@DEF@" +.sM +.FD 0 +Display * XDisplayOfOM\^(\^\fIom\fP\^) +.br + XOM \fIom\fP\^; +.FN +.IP \fIom\fP 1i +Specifies the output method. +.LP +.eM +The +.PN XDisplayOfOM +function returns the display associated with the specified output method. +.LP +.sp +To get the locale associated with an output method, use +.PN XLocaleOfOM . +.IN "XLocaleOfOM" "" "@DEF@" +.sM +.FD 0 +char * XLocaleOfOM\^(\^\fIom\fP\^) +.br + XOM \fIom\fP\^; +.FN +.IP \fIom\fP 1i +Specifies the output method. +.LP +.eM +The +.PN XLocaleOfOM +returns the locale associated with the specified output method. +.NH 3 +X Output Method Values +.XS +\*(SN X Output Method Values +.XE +.LP +The following table describes how XOM values are interpreted by an +output method. +The first column lists the XOM values. The second column indicates +how each of the XOM values are treated by a particular output style. +.LP +.LP +The following key applies to this table. +.TS H +lw(1i) lw(4.75i). +_ +.sp 6p +.B +Key Explanation +.sp 6p +_ +.sp 6p +.TH +.R +G T{ +This value may be read using +.PN XGetOMValues . +T} +.sp 6p +_ +.TE +.LP +.TS H +lw(2.25i) c +lw(2.25i) c. +_ +.sp 6p +.B +XOM Value Key +.sp 6p +_ +.sp 6p +.TH +.R +T{ +.PN XNRequiredCharSet +T} T{ +G +T} +T{ +.PN XNQueryOrientation +T} T{ +G +T} +T{ +.PN XNDirectionalDependentDrawing +T} T{ +G +T} +T{ +.PN XNContextualDrawing +T} T{ +G +T} +.sp 6p +_ +.TE +.LP +.NH 4 +Required Char Set +.XS +\*(SN Required Char Set +.XE +.LP +The +.PN XNRequiredCharSet +argument returns the list of charsets that are required for loading the fonts +needed for the locale. +The value of the argument is a pointer to a structure of type +.PN XOMCharSetList . +.LP +The +.PN XOMCharSetList +structure is defined as follows: +.IN "XOMCharSetList" "" "@DEF@" +.sM +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + int charset_count; + char **charset_list; +} XOMCharSetList; +.De +.LP +.eM +The charset_list member is a list of one or more null-terminated +charset names, and the charset_count member is the number of +charset names. +.LP +The required charset list is owned by Xlib and should not be modified or +freed by the client. +It will be freed by a call to +.PN XCloseOM +with the associated +.PN XOM . +Until freed, its contents will not be modified by Xlib. +.LP +.NH 4 +Query Orientation +.XS +\*(SN Query Orientation +.XE +.LP +The +.PN XNQueryOrientation +argument returns the global orientation of text when drawn. +Other than +.PN XOMOrientation_LTR_TTB , +the set of orientations supported is locale-dependent. +The value of the argument is a pointer to a structure of type +.PN XOMOrientation . +Clients are responsible for freeing the +.PN XOMOrientation +structure by using +.PN XFree ; +this also frees the contents of the structure. +.LP +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + int num_orientation; + XOrientation *orientation; /* Input Text description */ +} XOMOrientation; + +typedef enum { + XOMOrientation_LTR_TTB, + XOMOrientation_RTL_TTB, + XOMOrientation_TTB_LTR, + XOMOrientation_TTB_RTL, + XOMOrientation_Context +} XOrientation; +.De +.LP +.eM +The possible value for XOrientation may be: +.IP \(bu 5 +.PN XOMOrientation_LTR_TTB +left-to-right, top-to-bottom global orientation +.IP \(bu 5 +.PN XOMOrientation_RTL_TTB +right-to-left, top-to-bottom global orientation +.IP \(bu 5 +.PN XOMOrientation_TTB_LTR +top-to-bottom, left-to-right global orientation +.IP \(bu 5 +.PN XOMOrientation_TTB_RTL +top-to-bottom, right-to-left global orientation +.IP \(bu 5 +.PN XOMOrientation_Context +contextual global orientation +.LP +.NH 4 +Directional Dependent Drawing +.XS +\*(SN Directional Dependent Drawing +.XE +.LP +The +.PN XNDirectionalDependentDrawing +argument indicates whether the text rendering functions +implement implicit handling of directional text. If this value +is +.PN True , +the output method has knowledge of directional +dependencies and reorders text as necessary when +rendering text. If this value is +.PN False , +the output method does not implement any directional text +handling, and all character directions are assumed to be left-to-right. +.LP +Regardless of the rendering order of characters, +the origins of all characters are on the primary draw direction side +of the drawing origin. +.LP +This OM value presents functionality identical to the +.PN XDirectionalDependentDrawing +function. +.NH 4 +Context Dependent Drawing +.XS +\*(SN Context Dependent Drawing +.XE +.LP +The +.PN XNContextualDrawing +argument indicates whether the text rendering functions +implement implicit context-dependent drawing. If this value is +.PN True , +the output method has knowledge of context dependencies and +performs character shape editing, combining glyphs to present +a single character as necessary. The actual shape editing is +dependent on the locale implementation and the font set used. +.LP +This OM value presents functionality identical to the +.PN XContextualDrawing +function. +.NH 3 +Output Context Functions +.XS +\*(SN Output Context Functions +.XE +.LP +An output context is an abstraction that contains both the data +required by an output method and the information required +to display that data. +There can be multiple output contexts for one output method. +The programming interfaces for creating, reading, or modifying +an output context use a variable argument list. +The name elements of the argument lists are referred to as XOC values. +It is intended that output methods be controlled by these XOC values. +As new XOC values are created, +they should be registered with the X Consortium. +An +.PN XOC +can be used anywhere an +.PN XFontSet +can be used, and vice versa; +.PN XFontSet +is retained for compatibility with previous releases. +The concepts of output methods and output contexts include broader, +more generalized abstraction than font set, +supporting complex and more intelligent text display, and dealing not only +with multiple fonts but also with context dependencies. +However, +.PN XFontSet +is widely used in several interfaces, so +.PN XOC +is defined as an upward compatible type of +.PN XFontSet . +.LP +.sp +To create an output context, use +.PN XCreateOC . +.IN "XCreateOC" "" "@DEF@" +.sM +.FD 0 +XOC XCreateOC\^(\^\fIom\fP\^, ...) +.br + XOM \fIom\fP\^; +.FN +.IP \fIom\fP 1i +Specifies the output method. +.ds Al \ to set XOC values +.IP ... 1i +Specifies the variable-length argument list\*(Al. +.LP +.eM +The +.PN XCreateOC +function creates an output context within the specified output method. +.LP +The base font names argument is mandatory at creation time, and +the output context will not be created unless it is provided. +All other output context values can be set later. +.LP +.PN XCreateOC +returns NULL if no output context could be created. +NULL can be returned for any of the following reasons: +.IP \(bu 5 +A required argument was not set. +.IP \(bu 5 +A read-only argument was set. +.IP \(bu 5 +An argument name is not recognized. +.IP \(bu 5 +The output method encountered an output method implementation-dependent error. +.LP +.PN XCreateOC +can generate a +.PN BadAtom +error. +.LP +.sp +To destroy an output context, use +.PN XDestroyOC . +.IN "XDestroyOC" "" "@DEF@" +.sM +.FD 0 +void XDestroyOC\^(\^\fIoc\fP\^) +.br + XOC \fIoc\fP\^; +.FN +.IP \fIoc\fP 1i +Specifies the output context. +.LP +.eM +The +.PN XDestroyOC +function destroys the specified output context. +.LP +.sp +To get the output method associated with an output context, use +.PN XOMOfOC . +.IN "XOMOfOC" "" "@DEF@" +.sM +.FD 0 +XOM XOMOfOC\^(\^\fIoc\fP\^) +.br + XOC \fIoc\fP\^; +.FN +.IP \fIoc\fP 1i +Specifies the output context. +.LP +.eM +The +.PN XOMOfOC +function returns the output method associated with the +specified output context. +.LP +.sp +Xlib provides two functions for setting and reading output context values, +respectively, +.PN XSetOCValues +and +.PN XGetOCValues . +Both functions have a variable-length argument list. +In that argument list, any XOC value's name must be denoted +with a character string using the X Portable Character Set. +.LP +.sp +To set XOC values, use +.PN XSetOCValues . +.IN "XSetOCValues" "" "@DEF@" +.sM +.FD 0 +char * XSetOCValues\^(\^\fIoc\fP\^, ...) +.br + XOC \fIoc\fP\^; +.FN +.IP \fIoc\fP 1i +Specifies the output context. +.ds Al \ to set XOC values +.IP ... 1i +Specifies the variable-length argument list\*(Al. +.LP +.eM +The +.PN XSetOCValues +function returns NULL if no error occurred; +otherwise, +it returns the name of the first argument that could not be set. +An argument might not be set for any of the following reasons: +.IP \(bu 5 +The argument is read-only. +.IP \(bu 5 +The argument name is not recognized. +.IP \(bu 5 +An implementation-dependent error occurs. +.LP +Each value to be set must be an appropriate datum, +matching the data type imposed by the semantics of the argument. +.LP +.PN XSetOCValues +can generate a +.PN BadAtom +error. +.LP +.sp +To obtain XOC values, use +.PN XGetOCValues . +.IN "XGetOCValues" "" "@DEF@" +.sM +.FD 0 +char * XGetOCValues\^(\^\fIoc\fP\^, ...) +.br + XOC \fIoc\fP\^; +.FN +.IP \fIoc\fP 1i +Specifies the output context. +.ds Al \ to get XOC values +.IP ... 1i +Specifies the variable-length argument list\*(Al. +.LP +.eM +The +.PN XGetOCValues +function returns NULL if no error occurred; otherwise, +it returns the name of the first argument that could not be obtained. +An argument might not be obtained for any of the following reasons: +.IP \(bu 5 +The argument name is not recognized. +.IP \(bu 5 +An implementation-dependent error occurs. +.LP +Each argument value +following a name must point to a location where the value is to be stored. +.NH 3 +Output Context Values +.XS +\*(SN Output Context Values +.XE +.LP +The following table describes how XOC values are interpreted +by an output method. +The first column lists the XOC values. +The second column indicates the alternative interfaces that function +identically and are provided for compatibility with previous releases. +The third column indicates how each of the XOC values is treated. +.LP +The following keys apply to this table. +.TS H +lw(1i) lw(4.75i). +_ +.sp 6p +.B +Key Explanation +.sp 6p +_ +.TH +.R +C T{ +This value must be set with +.PN XCreateOC . +T} +D T{ +This value may be set using +.PN XCreateOC . +If it is not set, +.br +a default is provided. +T} +G T{ +This value may be read using +.PN XGetOCValues . +T} +S T{ +This value must be set using +.PN XSetOCValues . +T} +.sp 6p +_ +.TE +.LP +.TS H +l c c +l c c. +_ +.sp 6p +.B +XOC Value Alternative Interface Key +.sp 6p +_ +.sp 6p +.TH +.R +T{ +BaseFontName +T} T{ +.PN XCreateFontSet +T} T{ +C-G +T} +T{ +MissingCharSet +T} T{ +.PN XCreateFontSet +T} T{ +G +T} +T{ +DefaultString +T} T{ +.PN XCreateFontSet +T} T{ +G +T} +T{ +Orientation +T} T{ +\- +T} T{ +D-S-G +T} +T{ +ResourceName +T} T{ +\- +T} T{ +S-G +T} +T{ +ResourceClass +T} T{ +\- +T} T{ +S-G +T} +T{ +FontInfo +T} T{ +.PN XFontsOfFontSet +T} T{ +G +T} +T{ +OMAutomatic +T} T{ +\- +T} T{ +G +T} +.sp 6p +_ +.TE +.LP +.NH 4 +Base Font Name +.XS +\*(SN Base Font Name +.XE +.LP +The +.PN XNBaseFontName +argument is a list of base font names that Xlib uses +to load the fonts needed for the locale. +The base font names are a comma-separated list. The string is null-terminated +and is assumed to be in the Host Portable Character Encoding; +otherwise, the result is implementation-dependent. +White space immediately on either side of a separating comma is ignored. +.LP +Use of XLFD font names permits Xlib to obtain the fonts needed for a +variety of locales from a single locale-independent base font name. +The single base font name should name a family of fonts whose members +are encoded in the various charsets needed by the locales of interest. +.LP +An XLFD base font name can explicitly name a charset needed for the locale. +This allows the user to specify an exact font for use with a charset required +by a locale, fully controlling the font selection. +.LP +If a base font name is not an XLFD name, +Xlib will attempt to obtain an XLFD name from the font properties +for the font. +If Xlib is successful, the +.PN XGetOCValues +function will return this XLFD name instead of the client-supplied name. +.LP +This argument must be set at creation time +and cannot be changed. +If no fonts exist for any of the required charsets, +or if the locale definition in Xlib requires that a font exist +for a particular charset and a font is not found for that charset, +.PN XCreateOC +returns NULL. +.LP +When querying for the +.PN XNBaseFontName +XOC value, +.PN XGetOCValues +returns a null-terminated string identifying the base font names that +Xlib used to load the fonts needed for the locale. +This string is owned by Xlib and should not be modified or freed by +the client. +The string will be freed by a call to +.PN XDestroyOC +with the associated +.PN XOC . +Until freed, the string contents will not be modified by Xlib. +.NH 4 +Missing CharSet +.XS +\*(SN Missing CharSet +.XE +.LP +The +.PN XNMissingCharSet +argument returns the list of required charsets that are missing from the +font set. +The value of the argument is a pointer to a structure of type +.PN XOMCharSetList . +.LP +If fonts exist for all of the charsets required by the current locale, +charset_list is set to NULL and charset_count is set to zero. +If no fonts exist for one or more of the required charsets, +charset_list is set to a list of one or more null-terminated charset names +for which no fonts exist, and charset_count is set to the number of +missing charsets. +The charsets are from the list of the required charsets for +the encoding of the locale and do not include any charsets to which Xlib +may be able to remap a required charset. +.LP +The missing charset list is owned by Xlib and should not be modified or +freed by the client. +It will be freed by a call to +.PN XDestroyOC +with the associated +.PN XOC . +Until freed, its contents will not be modified by Xlib. +.NH 4 +Default String +.XS +\*(SN Default String +.XE +.LP +When a drawing or measuring function is called with an +.PN XOC +that has missing charsets, some characters in the locale will not be +drawable. +The +.PN XNDefaultString +argument returns a pointer to a string that represents the glyphs +that are drawn with this +.PN XOC +when the charsets of the available fonts do not include all glyphs +required to draw a character. +The string does not necessarily consist of valid characters +in the current locale and is not necessarily drawn with +the fonts loaded for the font set, +but the client can draw or measure the default glyphs +by including this string in a string being drawn or measured with the +.PN XOC . +.LP +If the +.PN XNDefaultString +argument returned the empty string ("\^"), +no glyphs are drawn and the escapement is zero. +The returned string is null-terminated. +It is owned by Xlib and should not be modified or freed by the client. +It will be freed by a call to +.PN XDestroyOC +with the associated +.PN XOC . +Until freed, its contents will not be modified by Xlib. +.NH 4 +Orientation +.XS +\*(SN Orientation +.XE +.LP +The +.PN XNOrientation +argument specifies the current orientation of text when drawn. The value of +this argument is one of the values returned by the +.PN XGetOMValues +function with the +.PN XNQueryOrientation +argument specified in the +.PN XOrientation +list. +The value of the argument is of type +.PN XOrientation . +When +.PN XNOrientation +is queried, the value specifies the current orientation. +When +.PN XNOrientation +is set, a value is used to set the current orientation. +.LP +When +.PN XOMOrientation_Context +is set, the text orientation of the +text is determined according to an implementation-defined method +(for example, ISO 6429 control sequences), and the initial text orientation for +locale-dependent Xlib functions is assumed to +be +.PN XOMOrientation_LTR_TTB . +.LP +The +.PN XNOrientation +value does not change the prime drawing direction +for Xlib drawing functions. +.NH 4 +Resource Name and Class +.XS +\*(SN Resource Name and Class +.XE +.LP +The +.PN XNResourceName +and +.PN XNResourceClass +arguments are strings that specify the full name and class +used by the client to obtain resources for the display of the output context. +These values should be used as prefixes for name and class +when looking up resources that may vary according to the output context. +If these values are not set, +the resources will not be fully specified. +.LP +It is not intended that values that can be set as XOM values be +set as resources. +.LP +When querying for the +.PN XNResourceName +or +.PN XNResourceClass +XOC value, +.PN XGetOCValues +returns a null-terminated string. +This string is owned by Xlib and should not be modified or freed by +the client. +The string will be freed by a call to +.PN XDestroyOC +with the associated +.PN XOC +or when the associated value is changed via +.PN XSetOCValues . +Until freed, the string contents will not be modified by Xlib. +.NH 4 +Font Info +.XS +\*(SN Font Info +.XE +.LP +The +.PN XNFontInfo +argument specifies a list of one or more +.PN XFontStruct +structures +and font names for the fonts used for drawing by the given output context. +The value of the argument is a pointer to a structure of type +.PN XOMFontInfo . +.LP +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + int num_font; + XFontStruct **font_struct_list; + char **font_name_list; +} XOMFontInfo; +.De +.LP +.eM +A list of pointers to the +.PN XFontStruct +structures is returned to font_struct_list. +A list of pointers to null-terminated, fully-specified font name strings +in the locale of the output context is returned to font_name_list. +The font_name_list order corresponds to the font_struct_list order. +The number of +.PN XFontStruct +structures and font names is returned to num_font. +.LP +Because it is not guaranteed that a given character will be imaged using a +single font glyph, +there is no provision for mapping a character or default string +to the font properties, font ID, or direction hint for the font +for the character. +The client may access the +.PN XFontStruct +list to obtain these values for all the fonts currently in use. +.LP +Xlib does not guarantee that fonts are loaded from the server +at the creation of an +.PN XOC . +Xlib may choose to cache font data, loading it only as needed to draw text +or compute text dimensions. +Therefore, existence of the per_char metrics in the +.PN XFontStruct +structures in the +.PN XFontStructSet +is undefined. +Also, note that all properties in the +.PN XFontStruct +structures are in the STRING encoding. +.LP +The client must not free the +.PN XOMFontInfo +struct itself; it will be freed when the +.PN XOC +is closed. +.NH 4 +OM Automatic +.XS +\*(SN OM Automatic +.XE +.LP +The +.PN XNOMAutomatic +argument returns whether the associated output context was created by +.PN XCreateFontSet +or not. Because the +.PN XFreeFontSet +function not only destroys the output context but also closes the implicit +output method associated with it, +.PN XFreeFontSet +should be used with any output context created by +.PN XCreateFontSet . +However, it is possible that a client does not know how the output context +was created. +Before a client destroys the output context, +it can query whether +.PN XNOMAutomatic +is set to determine whether +.PN XFreeFontSet +or +.PN XDestroyOC +should be used to destroy the output context. +.NH 3 +Creating and Freeing a Font Set +.XS +\*(SN Creating and Freeing a Font Set +.XE +.LP +Xlib international text drawing is done using a set of one or more fonts, +as needed for the locale of the text. +Fonts are loaded according to a list of base font names +supplied by the client and the charsets required by the locale. +The +.PN XFontSet +is an opaque type representing the state of a particular output thread +and is equivalent to the type +.PN XOC . +.LP +.sp +The +.PN XCreateFontSet +function is a convenience function for creating an output context using +only default values. The returned +.PN XFontSet +has an implicitly created +.PN XOM . +This +.PN XOM +has an OM value +.PN XNOMAutomatic +automatically set to +.PN True +so that the output context self indicates whether it was created by +.PN XCreateOC +or +.PN XCreateFontSet . +.IN "XCreateFontSet" "" "@DEF@" +.sM +.FD 0 +XFontSet XCreateFontSet\^(\^\fIdisplay\fP\^, \fIbase_font_name_list\fP\^, \fImissing_charset_list_return\fP\^, +.br + \fImissing_charset_count_return\fP\^, \fIdef_string_return\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + char *\fIbase_font_name_list\fP\^; +.br + char ***\fImissing_charset_list_return\fP\^; +.br + int *\fImissing_charset_count_return\fP\^; +.br + char **\fIdef_string_return\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIbase_font_name_list\fP 1i +Specifies the base font names. +.IP \fImissing_charset_list_return\fP 1i +Returns the missing charsets. +.IP \fImissing_charset_count_return\fP 1i +Returns the number of missing charsets. +.IP \fIdef_string_return\fP 1i +Returns the string drawn for missing charsets. +.LP +.eM +The +.PN XCreateFontSet +function creates a font set for the specified display. +The font set is bound to the current locale when +.PN XCreateFontSet +is called. +The font set may be used in subsequent calls to obtain font +and character information and to image text in the locale of the font set. +.LP +The base_font_name_list argument is a list of base font names +that Xlib uses to load the fonts needed for the locale. +The base font names are a comma-separated list. +The string is null-terminated +and is assumed to be in the Host Portable Character Encoding; +otherwise, the result is implementation-dependent. +White space immediately on either side of a separating comma is ignored. +.LP +Use of XLFD font names permits Xlib to obtain the fonts needed for a +variety of locales from a single locale-independent base font name. +The single base font name should name a family of fonts whose members +are encoded in the various charsets needed by the locales of interest. +.LP +An XLFD base font name can explicitly name a charset needed for the locale. +This allows the user to specify an exact font for use with a charset required +by a locale, fully controlling the font selection. +.LP +If a base font name is not an XLFD name, +Xlib will attempt to obtain an XLFD name from the font properties +for the font. +If this action is successful in obtaining an XLFD name, the +.PN XBaseFontNameListOfFontSet +function will return this XLFD name instead of the client-supplied name. +.LP +Xlib uses the following algorithm to select the fonts +that will be used to display text with the +.PN XFontSet . +.LP +For each font charset required by the locale, +the base font name list is searched for the first appearance of one +of the following cases that names a set of fonts that exist at the server: +.IP \(bu 5 +The first XLFD-conforming base font name that specifies the required +charset or a superset of the required charset in its +.PN CharSetRegistry +and +.PN CharSetEncoding +fields. +The implementation may use a base font name whose specified charset +is a superset of the required charset, for example, +an ISO8859-1 font for an ASCII charset. +.IP \(bu 5 +The first set of one or more XLFD-conforming base font names +that specify one or more charsets that can be remapped to support the +required charset. +The Xlib implementation may recognize various mappings +from a required charset to one or more other charsets +and use the fonts for those charsets. +For example, JIS Roman is ASCII with tilde and backslash replaced +by yen and overbar; +Xlib may load an ISO8859-1 font to support this character set +if a JIS Roman font is not available. +.IP \(bu 5 +The first XLFD-conforming font name or the first non-XLFD font name +for which an XLFD font name can be obtained, combined with the +required charset (replacing the +.PN CharSetRegistry +and +.PN CharSetEncoding +fields in the XLFD font name). +As in case 1, +the implementation may use a charset that is a superset +of the required charset. +.IP \(bu 5 +The first font name that can be mapped in some implementation-dependent +manner to one or more fonts that support imaging text in the charset. +.LP +For example, assume that a locale required the charsets: +.LP +.Ds 0 +ISO8859-1 +JISX0208.1983 +JISX0201.1976 +GB2312-1980.0 +.De +.LP +The user could supply a base_font_name_list that explicitly specifies the +charsets, ensuring that specific fonts are used if they exist. +For example: +.LP +.Ds 0 +"-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240-JISX0208.1983-0,\\ +-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120-JISX0201.1976-0,\\ +-GB-Fixed-Medium-R-Normal--26-180-100-100-C-240-GB2312-1980.0,\\ +-Adobe-Courier-Bold-R-Normal--25-180-75-75-M-150-ISO8859-1" +.De +.LP +Alternatively, the user could supply a base_font_name_list +that omits the charsets, +letting Xlib select font charsets required for the locale. +For example: +.LP +.Ds 0 +"-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ +-JIS-Fixed-Medium-R-Normal--26-180-100-100-C-120,\\ +-GB-Fixed-Medium-R-Normal--26-180-100-100-C-240,\\ +-Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150" +.De +.LP +Alternatively, the user could simply supply a single base font name +that allows Xlib to select from all available fonts +that meet certain minimum XLFD property requirements. +For example: +.LP +.Ds 0 +"-*-*-*-R-Normal--*-180-100-100-*-*" +.De +.LP +If +.PN XCreateFontSet +is unable to create the font set, +either because there is insufficient memory or because the current locale +is not supported, +.PN XCreateFontSet +returns NULL, missing_charset_list_return is set to NULL, +and missing_charset_count_return +is set to zero. +If fonts exist for all of the charsets required by the current locale, +.PN XCreateFontSet +returns a valid +.PN XFontSet , +missing_charset_list_return is set to NULL, +and missing_charset_count_return is set to zero. +.LP +If no font exists for one or more of the required charsets, +.PN XCreateFontSet +sets missing_charset_list_return to a +list of one or more null-terminated charset names for which no font exists +and sets missing_charset_count_return to the number of missing fonts. +The charsets are from the list of the required charsets for +the encoding of the locale and do not include any charsets to which Xlib +may be able to remap a required charset. +.LP +If no font exists for any of the required charsets +or if the locale definition in Xlib requires that a font exist +for a particular charset and a font is not found for that charset, +.PN XCreateFontSet +returns NULL. +Otherwise, +.PN XCreateFontSet +returns a valid +.PN XFontSet +to font_set. +.LP +When an Xmb/wc drawing or measuring function is called with an +.PN XFontSet +that has missing charsets, some characters in the locale will not be +drawable. +If def_string_return is non-NULL, +.PN XCreateFontSet +returns a pointer to a string that represents the glyphs +that are drawn with this +.PN XFontSet +when the charsets of the available fonts do not include all font glyphs +required to draw a codepoint. +The string does not necessarily consist of valid characters +in the current locale and is not necessarily drawn with +the fonts loaded for the font set, +but the client can draw and measure the default glyphs +by including this string in a string being drawn or measured with the +.PN XFontSet . +.LP +If the string returned to def_string_return is the empty string ("\^"), +no glyphs are drawn, and the escapement is zero. +The returned string is null-terminated. +It is owned by Xlib and should not be modified or freed by the client. +It will be freed by a call to +.PN XFreeFontSet +with the associated +.PN XFontSet . +Until freed, its contents will not be modified by Xlib. +.LP +The client is responsible for constructing an error message from the +missing charset and default string information and may choose to continue +operation in the case that some fonts did not exist. +.LP +The returned +.PN XFontSet +and missing charset list should be freed with +.PN XFreeFontSet +and +.PN XFreeStringList , +respectively. +The client-supplied base_font_name_list may be freed +by the client after calling +.PN XCreateFontSet . +.LP +.sp +To obtain a list of +.PN XFontStruct +structures and full font names given an +.PN XFontSet , +use +.PN XFontsOfFontSet . +.IN "XFontsOfFontSet" "" "@DEF@" +.sM +.FD 0 +int XFontsOfFontSet\^(\^\fIfont_set\fP\^, \fIfont_struct_list_return\fP\^, \fIfont_name_list_return\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.br + XFontStruct ***\fIfont_struct_list_return\fP\^; +.br + char ***\fIfont_name_list_return\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.IP \fIfont_struct_list_return\fP 1i +Returns the list of font structs. +.IP \fIfont_name_list_return\fP 1i +Returns the list of font names. +.LP +.eM +The +.PN XFontsOfFontSet +function returns a list of one or more +.PN XFontStructs +and font names for the fonts used by the Xmb and Xwc layers +for the given font set. +A list of pointers to the +.PN XFontStruct +structures is returned to font_struct_list_return. +A list of pointers to null-terminated, fully specified font name strings +in the locale of the font set is returned to font_name_list_return. +The font_name_list order corresponds to the font_struct_list order. +The number of +.PN XFontStruct +structures and font names is returned as the value of the function. +.LP +Because it is not guaranteed that a given character will be imaged using a +single font glyph, +there is no provision for mapping a character or default string +to the font properties, font ID, or direction hint for the font +for the character. +The client may access the +.PN XFontStruct +list to obtain these values for all the fonts currently in use. +.LP +Xlib does not guarantee that fonts are loaded from the server +at the creation of an +.PN XFontSet . +Xlib may choose to cache font data, loading it only as needed to draw text +or compute text dimensions. +Therefore, existence of the per_char metrics in the +.PN XFontStruct +structures in the +.PN XFontStructSet +is undefined. +Also, note that all properties in the +.PN XFontStruct +structures are in the STRING encoding. +.LP +The +.PN XFontStruct +and font name lists are owned by Xlib +and should not be modified or freed by the client. +They will be freed by a call to +.PN XFreeFontSet +with the associated +.PN XFontSet . +Until freed, their contents will not be modified by Xlib. +.LP +.sp +To obtain the base font name list and the selected font name list given an +.PN XFontSet , +use +.PN XBaseFontNameListOfFontSet . +.IN "XBaseFontNameListOfFontSet" "" "@DEF@" +.sM +.FD 0 +char *XBaseFontNameListOfFontSet\^(\^\fIfont_set\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.LP +.eM +The +.PN XBaseFontNameListOfFontSet +function returns the original base font name list supplied +by the client when the +.PN XFontSet +was created. +A null-terminated string containing a list of +comma-separated font names is returned +as the value of the function. +White space may appear immediately on either side of separating commas. +.LP +If +.PN XCreateFontSet +obtained an XLFD name from the font properties for the font specified +by a non-XLFD base name, the +.PN XBaseFontNameListOfFontSet +function will return the XLFD name instead of the non-XLFD base name. +.LP +The base font name list is owned by Xlib and should not be modified or +freed by the client. +It will be freed by a call to +.PN XFreeFontSet +with the associated +.PN XFontSet . +Until freed, its contents will not be modified by Xlib. +.LP +.sp +To obtain the locale name given an +.PN XFontSet , +use +.PN XLocaleOfFontSet . +.IN "XLocaleOfFontSet" "" "@DEF@" +.sM +.FD 0 +char *XLocaleOfFontSet\^(\^\fIfont_set\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.LP +.eM +The +.PN XLocaleOfFontSet +function +returns the name of the locale bound to the specified +.PN XFontSet , +as a null-terminated string. +.LP +The returned locale name string is owned by Xlib +and should not be modified or freed by the client. +It may be freed by a call to +.PN XFreeFontSet +with the associated +.PN XFontSet . +Until freed, it will not be modified by Xlib. +.LP +.sp +The +.PN XFreeFontSet +function is a convenience function for freeing an output context. +.PN XFreeFontSet +also frees its associated +.PN XOM +if the output context was created by +.PN XCreateFontSet . +.IN "XFreeFontSet" "" "@DEF@" +.sM +.FD 0 +void XFreeFontSet\^(\^\fIdisplay\fP\^, \fIfont_set\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + XFontSet \fIfont_set\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIfont_set\fP 1i +Specifies the font set. +.LP +.eM +The +.PN XFreeFontSet +function frees the specified font set. +The associated base font name list, font name list, +.PN XFontStruct +list, and +.PN XFontSetExtents , +if any, are freed. +.NH 3 +Obtaining Font Set Metrics +.XS +\*(SN Obtaining Font Set Metrics +.XE +.LP +Metrics for the internationalized text drawing functions +are defined in terms of a primary draw direction, +which is the default direction in which the character origin advances +for each succeeding character in the string. +The Xlib interface is currently defined to support only a left-to-right +primary draw direction. +The drawing origin is the position passed to the drawing function +when the text is drawn. +The baseline is a line drawn through the drawing origin parallel +to the primary draw direction. +Character ink is the pixels painted in the foreground color +and does not include interline or intercharacter spacing +or image text background pixels. +.LP +The drawing functions are allowed to implement implicit text +directionality control, reversing the order in which characters are +rendered along the primary draw direction in response to locale-specific +lexical analysis of the string. +.LP +Regardless of the character rendering order, +the origins of all characters are on the primary draw direction side +of the drawing origin. +The screen location of a particular character image may be determined with +.PN XmbTextPerCharExtents +or +.PN XwcTextPerCharExtents . +.LP +The drawing functions are allowed to implement context-dependent +rendering, where the glyphs drawn for a string are not simply a +concatenation of the glyphs that represent each individual character. +A string of two characters drawn with +.PN XmbDrawString +may render differently than if the two characters +were drawn with separate calls to +.PN XmbDrawString . +If the client appends or inserts a character +in a previously drawn string, +the client may need to redraw some adjacent characters +to obtain proper rendering. +.LP +.sp +To find out about direction-dependent rendering, use +.PN XDirectionalDependentDrawing . +.IN "XDirectionalDependentDrawing" "" "@DEF@" +.sM +.FD 0 +Bool XDirectionalDependentDrawing\^(\^\fIfont_set\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.LP +.eM +The +.PN XDirectionalDependentDrawing +function returns +.PN True +if the drawing functions implement implicit text directionality; +otherwise, it returns +.PN False . +.LP +.sp +To find out about context-dependent rendering, use +.PN XContextualDrawing . +.IN "XContextualDrawing" "" "@DEF@" +.sM +.FD 0 +Bool XContextualDrawing\^(\^\fIfont_set\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.LP +.eM +The +.PN XContextualDrawing +function returns +.PN True +if text drawn with the font set might include context-dependent drawing; +otherwise, it returns +.PN False . +.LP +.sp +To find out about context-dependent or direction-dependent rendering, use +.PN XContextDependentDrawing . +.IN "XContextDependentDrawing" "" "@DEF@" +.sM +.FD 0 +Bool XContextDependentDrawing\^(\^\fIfont_set\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.LP +.eM +The +.PN XContextDependentDrawing +function returns +.PN True +if the drawing functions implement implicit text directionality or +if text drawn with the font_set might include context-dependent drawing; +otherwise, it returns +.PN False . +.LP +The drawing functions do not interpret newline, tab, or other control +characters. +The behavior when nonprinting characters other than space are drawn +is implementation-dependent. +It is the client's responsibility to interpret control characters +in a text stream. +.LP +The maximum character extents for the fonts that are used by the text +drawing layers can be accessed by the +.PN XFontSetExtents +structure: +.IN "XFontSetExtents" "" "@DEF@" +.LP +.Ds 0 +.TA .5i 3i +.ta .5i 3i +typedef struct { + XRectangle max_ink_extent; /* over all drawable characters */ + XRectangle max_logical_extent; /* over all drawable characters */ +} XFontSetExtents; +.De +.LP +The +.PN XRectangle +structures used to return font set metrics are the usual Xlib screen-oriented +rectangles +with x, y giving the upper left corner, and width and height always positive. +.LP +The max_ink_extent member gives the maximum extent, over all drawable characters, of +the rectangles that bound the character glyph image drawn in the +foreground color, relative to a constant origin. +See +.PN XmbTextExtents +and +.PN XwcTextExtents +for detailed semantics. +.LP +The max_logical_extent member gives the maximum extent, +over all drawable characters, of the rectangles +that specify minimum spacing to other graphical features, +relative to a constant origin. +Other graphical features drawn by the client, for example, +a border surrounding the text, should not intersect this rectangle. +The max_logical_extent member should be used to compute minimum +interline spacing and the minimum area that must be allowed +in a text field to draw a given number of arbitrary characters. +.LP +Due to context-dependent rendering, +appending a given character to a string may change +the string's extent by an amount other than that character's +individual extent. +.LP +The rectangles for a given character in a string can be obtained from +.PN XmbPerCharExtents +or +.PN XwcPerCharExtents . +.LP +.sp +To obtain the maximum extents structure given an +.PN XFontSet , +use +.PN XExtentsOfFontSet . +.IN "XExtentsOfFontSet" "" "@DEF@" +.sM +.FD 0 +XFontSetExtents *XExtentsOfFontSet\^(\^\fIfont_set\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.LP +.eM +The +.PN XExtentsOfFontSet +function returns an +.PN XFontSetExtents +structure for the fonts used by the Xmb and Xwc layers +for the given font set. +.LP +The +.PN XFontSetExtents +structure is owned by Xlib and should not be modified +or freed by the client. +It will be freed by a call to +.PN XFreeFontSet +with the associated +.PN XFontSet . +Until freed, its contents will not be modified by Xlib. +.LP +.sp +To obtain the escapement in pixels of the specified text as a value, +use +.PN XmbTextEscapement +or +.PN XwcTextEscapement . +.IN "XmbTextEscapement" "" "@DEF@" +.IN "XwcTextEscapement" "" "@DEF@" +.sM +.FD 0 +int XmbTextEscapement\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.br + char *\fIstring\fP\^; +.br + int \fInum_bytes\fP\^; +.FN +.FD 0 +int XwcTextEscapement\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.br + wchar_t *\fIstring\fP\^; +.br + int \fInum_wchars\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.IP \fIstring\fP 1i +Specifies the character string. +.IP \fInum_bytes\fP 1i +Specifies the number of bytes in the string argument. +.IP \fInum_wchars\fP 1i +Specifies the number of characters in the string argument. +.LP +.eM +The +.PN XmbTextEscapement +and +.PN XwcTextEscapement +functions return the escapement in pixels of the specified string as a value, +using the fonts loaded for the specified font set. +The escapement is the distance in pixels in the primary draw +direction from the drawing origin to the origin of the next character to +be drawn, assuming that the rendering of the next character is not +dependent on the supplied string. +.LP +Regardless of the character rendering order, +the escapement is always positive. +.LP +.sp +To obtain the overall_ink_return and overall_logical_return arguments, +the overall bounding box of the string's image, and a logical bounding box, +use +.PN XmbTextExtents + or +.PN XwcTextExtents . +.IN "XmbTextExtents" "" "@DEF@" +.IN "XwcTextExtents" "" "@DEF@" +.sM +.FD 0 +int XmbTextExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^, \fIoverall_ink_return\fP\^, \fIoverall_logical_return\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.br + char *\fIstring\fP\^; +.br + int \fInum_bytes\fP\^; +.br + XRectangle *\fIoverall_ink_return\fP\^; +.br + XRectangle *\fIoverall_logical_return\fP\^; +.FN +.FD 0 +int XwcTextExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^, +\fIoverall_ink_return\fP\^, \fIoverall_logical_return\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.br + wchar_t *\fIstring\fP\^; +.br + int \fInum_wchars\fP\^; +.br + XRectangle *\fIoverall_ink_return\fP\^; +.br + XRectangle *\fIoverall_logical_return\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.IP \fIstring\fP 1i +Specifies the character string. +.IP \fInum_bytes\fP 1i +Specifies the number of bytes in the string argument. +.IP \fInum_wchars\fP 1i +Specifies the number of characters in the string argument. +.ds Ov dimensions +.IP \fIoverall_ink_return\fP 1i +Returns the overall ink \*(Ov. +.IP \fIoverall_logical_return\fP 1i +Returns the overall logical \*(Ov. +.LP +.eM +The +.PN XmbTextExtents +and +.PN XwcTextExtents +functions set the components of the specified overall_ink_return and +overall_logical_return +arguments to the overall bounding box of the string's image +and a logical bounding box for spacing purposes, respectively. +They return the value returned by +.PN XmbTextEscapement +or +.PN XwcTextEscapement . +These metrics are relative to the drawing origin of the string, +using the fonts loaded for the specified font set. +.LP +If the overall_ink_return argument is non-NULL, +it is set to the bounding box of the string's character ink. +The overall_ink_return for a nondescending, horizontally drawn +Latin character is conventionally entirely above the baseline; +that is, overall_ink_return.height <= \-overall_ink_return.y. +The overall_ink_return for a nonkerned character +is entirely at, and to the right of, the origin; +that is, overall_ink_return.x >= 0. +A character consisting of a single pixel at the origin would set +overall_ink_return fields y = 0, x = 0, width = 1, and height = 1. +.LP +If the overall_logical_return argument is non-NULL, +it is set to the bounding box that provides minimum spacing +to other graphical features for the string. +Other graphical features, for example, a border surrounding the text, +should not intersect this rectangle. +.LP +When the +.PN XFontSet +has missing charsets, +metrics for each unavailable character are taken +from the default string returned by +.PN XCreateFontSet +so that the metrics represent the text as it will actually be drawn. +The behavior for an invalid codepoint is undefined. +.LP +To determine the effective drawing origin for a character in a drawn string, +the client should call +.PN XmbTextPerCharExtents +on the entire string, then on the character, +and subtract the x values of the returned +rectangles for the character. +This is useful to redraw portions of a line of text +or to justify words, but for context-dependent rendering, +the client should not assume that it can redraw the character by itself +and get the same rendering. +.LP +.sp +To obtain per-character information for a text string, +use +.PN XmbTextPerCharExtents +or +.PN XwcTextPerCharExtents . +.IN "XmbTextPerCharExtents" "" "@DEF@" +.IN "XwcTextPerCharExtents" "" "@DEF@" +.sM +.FD 0 +Status XmbTextPerCharExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^, \fIink_array_return\fP\^, +.br + \fIlogical_array_return\fP\^, \fIarray_size\fP\^, \fInum_chars_return\fP\^, \fIoverall_ink_return\fP\^, \fIoverall_logical_return\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.br + char *\fIstring\fP\^; +.br + int \fInum_bytes\fP\^; +.br + XRectangle *\fIink_array_return\fP\^; +.br + XRectangle *\fIlogical_array_return\fP\^; +.br + int \fIarray_size\fP\^; +.br + int *\fInum_chars_return\fP\^; +.br + XRectangle *\fIoverall_ink_return\fP\^; +.br + XRectangle *\fIoverall_logical_return\fP\^; +.FN +.FD 0 +Status XwcTextPerCharExtents\^(\^\fIfont_set\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^, \fIink_array_return\fP\^, +.br + \fIlogical_array_return\fP\^, \fIarray_size\fP\^, \fInum_chars_return\fP\^, \fIoverall_ink_return\fP\^, \fIoverall_ink_return\fP\^) +.br + XFontSet \fIfont_set\fP\^; +.br + wchar_t *\fIstring\fP\^; +.br + int \fInum_wchars\fP\^; +.br + XRectangle *\fIink_array_return\fP\^; +.br + XRectangle *\fIlogical_array_return\fP; +.br + int \fIarray_size\fP\^; +.br + int *\fInum_chars_return\fP\^; +.br + XRectangle *\fIoverall_ink_return\fP\^; +.br + XRectangle *\fIoverall_logical_return\fP\^; +.FN +.IP \fIfont_set\fP 1i +Specifies the font set. +.IP \fIstring\fP 1i +Specifies the character string. +.IP \fInum_bytes\fP 1i +Specifies the number of bytes in the string argument. +.IP \fInum_wchars\fP 1i +Specifies the number of characters in the string argument. +.IP \fIink_array_return\fP 1i +Returns the ink dimensions for each character. +.IP \fIlogical_array_return\fP 1i +Returns the logical dimensions for each character. +.IP \fIarray_size\fP 1i +Specifies the size of ink_array_return and logical_array_return. +The caller must pass in arrays of this size. +.IP \fInum_chars_return\fP 1i +Returns the number of characters in the string argument. +.ds Ov extents of the entire string +.IP \fIoverall_ink_return\fP 1i +Returns the overall ink \*(Ov. +.IP \fIoverall_logical_return\fP 1i +Returns the overall logical \*(Ov. +.LP +.eM +The +.PN XmbTextPerCharExtents +and +.PN XwcTextPerCharExtents +functions return the text dimensions of each character of the specified text, +using the fonts loaded for the specified font set. +Each successive element of ink_array_return and logical_array_return +is set to the successive character's drawn metrics, +relative to the drawing origin of the string and one +rectangle +for each character in the supplied text string. +The number of elements of ink_array_return and logical_array_return +that have been set is returned to num_chars_return. +.LP +Each element of ink_array_return is set to the bounding box +of the corresponding character's drawn foreground color. +Each element of logical_array_return is set to the bounding box +that provides minimum spacing to other graphical features +for the corresponding character. +Other graphical features should not intersect any of the +logical_array_return rectangles. +.LP +Note that an +.PN XRectangle +represents the effective drawing dimensions of the character, +regardless of the number of font glyphs that are used to draw +the character or the direction in which the character is drawn. +If multiple characters map to a single character glyph, +the dimensions of all the +.PN XRectangles +of those characters are the same. +.LP +When the +.PN XFontSet +has missing charsets, metrics for each unavailable +character are taken from the default string returned by +.PN XCreateFontSet +so that the metrics represent the text as it will actually be drawn. +The behavior for an invalid codepoint is undefined. +.LP +If the array_size is too small for the number of characters in the +supplied text, the functions return zero +and num_chars_return is set to the number of rectangles required. +Otherwise, the functions return a nonzero value. +.LP +If the overall_ink_return or overall_logical_return argument is non-NULL, +.PN XmbTextPerCharExtents +and +.PN XwcTextPerCharExtents +return the maximum extent of the string's metrics to overall_ink_return +or overall_logical_return, as returned by +.PN XmbTextExtents +or +.PN XwcTextExtents . +.NH 3 +Drawing Text Using Font Sets +.XS +\*(SN Drawing Text Using Font Sets +.XE +.LP +The functions defined in this section +draw text at a specified location in a drawable. +They are similar to the functions +.PN XDrawText , +.PN XDrawString , +and +.PN XDrawImageString +except that they work with font sets instead of single fonts +and interpret the text based on the locale of the font set +instead of treating the bytes of the string as direct font indexes. +See section 8.6 for details of the use of Graphics Contexts (GCs) +and possible protocol errors. +If a +.PN BadFont +error is generated, +characters prior to the offending character may have been drawn. +.LP +The text is drawn using the fonts loaded for the specified font set; +the font in the GC is ignored and may be modified by the functions. +No validation that all fonts conform to some width rule is performed. +.LP +The text functions +.PN XmbDrawText +and +.PN XwcDrawText +use the following structures: +.LP +.IN "XmbTextItem" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + char *chars; /* pointer to string */ + int nchars; /* number of bytes */ + int delta; /* pixel delta between strings */ + XFontSet font_set; /* fonts, None means don't change */ +} XmbTextItem; +.De +.LP +.IN "XwcTextItem" "" "@DEF@" +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + wchar_t *chars; /* pointer to wide char string */ + int nchars; /* number of wide characters */ + int delta; /* pixel delta between strings */ + XFontSet font_set; /* fonts, None means don't change */ +} XwcTextItem; +.De +.LP +.eM +.sp +To draw text using multiple font sets in a given drawable, use +.PN XmbDrawText +or +.PN XwcDrawText . +.IN "XmbDrawText" "" "@DEF@" +.IN "XwcDrawText" "" "@DEF@" +.sM +.FD 0 +void XmbDrawText\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIitems\fP\^, \fInitems\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Drawable \fId\fP\^; +.br + GC \fIgc\fP\^; +.br + int \fIx\fP\^, \fIy\fP\^; +.br + XmbTextItem *\fIitems\fP\^; +.br + int \fInitems\fP\^; +.FN +.FD 0 +void XwcDrawText\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIitems\fP\^, \fInitems\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Drawable \fId\fP\^; +.br + GC \fIgc\fP\^; +.br + int \fIx\fP\^, \fIy\fP\^; +.br + XwcTextItem *\fIitems\fP\^; +.br + int \fInitems\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fId\fP 1i +Specifies the drawable. +.IP \fIgc\fP 1i +Specifies the GC. +.ds Xy +.IP \fIx\fP 1i +.br +.ns +.IP \fIy\fP 1i +Specify the x and y coordinates\*(Xy. +.IP \fIitems\fP 1i +Specifies an array of text items. +.IP \fInitems\fP 1i +Specifies the number of text items in the array. +.LP +.eM +The +.PN XmbDrawText +and +.PN XwcDrawText +functions allow complex spacing and font set shifts between text strings. +Each text item is processed in turn, with the origin of a text +element advanced in the primary draw direction by the escapement of the +previous text item. +A text item delta specifies an additional escapement of the text item +drawing origin in the primary draw direction. +A font_set member other than +.PN None +in an item causes the font set to be used for this and subsequent text items +in the text_items list. +Leading text items with a font_set member set to +.PN None +will not be drawn. +.LP +.PN XmbDrawText +and +.PN XwcDrawText +do not perform any context-dependent rendering between text segments. +Clients may compute the drawing metrics by passing each text segment to +.PN XmbTextExtents +and +.PN XwcTextExtents +or +.PN XmbTextPerCharExtents +and +.PN XwcTextPerCharExtents . +When the +.PN XFontSet +has missing charsets, each unavailable character is drawn +with the default string returned by +.PN XCreateFontSet . +The behavior for an invalid codepoint is undefined. +.LP +.sp +To draw text using a single font set in a given drawable, use +.PN XmbDrawString +or +.PN XwcDrawString . +.IN "XmbDrawString" "" "@DEF@" +.IN "XwcDrawString" "" "@DEF@" +.sM +.FD 0 +void XmbDrawString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Drawable \fId\fP\^; +.br + XFontSet \fIfont_set\fP\^; +.br + GC \fIgc\fP\^; +.br + int \fIx\fP\^, \fIy\fP\^; +.br + char *\fIstring\fP\^; +.br + int \fInum_bytes\fP\^; +.FN +.FD 0 +void XwcDrawString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Drawable \fId\fP\^; +.br + XFontSet \fIfont_set\fP\^; +.br + GC \fIgc\fP\^; +.br + int \fIx\fP\^, \fIy\fP\^; +.br + wchar_t *\fIstring\fP\^; +.br + int \fInum_wchars\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fId\fP 1i +Specifies the drawable. +.IP \fIfont_set\fP 1i +Specifies the font set. +.IP \fIgc\fP 1i +Specifies the GC. +.ds Xy +.IP \fIx\fP 1i +.br +.ns +.IP \fIy\fP 1i +Specify the x and y coordinates\*(Xy. +.IP \fIstring\fP 1i +Specifies the character string. +.IP \fInum_bytes\fP 1i +Specifies the number of bytes in the string argument. +.IP \fInum_wchars\fP 1i +Specifies the number of characters in the string argument. +.LP +.eM +The +.PN XmbDrawString +and +.PN XwcDrawString +functions draw the specified text with the foreground pixel. +When the +.PN XFontSet +has missing charsets, each unavailable character is drawn +with the default string returned by +.PN XCreateFontSet . +The behavior for an invalid codepoint is undefined. +.LP +.sp +To draw image text using a single font set in a given drawable, use +.PN XmbDrawImageString +or +.PN XwcDrawImageString . +.IN "XmbDrawImageString" "" "@DEF@" +.IN "XwcDrawImageString" "" "@DEF@" +.sM +.FD 0 +void XmbDrawImageString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_bytes\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Drawable \fId\fP\^; +.br + XFontSet \fIfont_set\fP\^; +.br + GC \fIgc\fP\^; +.br + int \fIx\fP\^, \fIy\fP\^; +.br + char *\fIstring\fP\^; +.br + int \fInum_bytes\fP\^; +.FN +.FD 0 +void XwcDrawImageString\^(\^\fIdisplay\fP\^, \fId\fP\^, \fIfont_set\fP\^, \fIgc\fP\^, \fIx\fP\^, \fIy\fP\^, \fIstring\fP\^, \fInum_wchars\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + Drawable \fId\fP\^; +.br + XFontSet \fIfont_set\fP\^; +.br + GC \fIgc\fP\^; +.br + int \fIx\fP\^, \fIy\fP\^; +.br + wchar_t *\fIstring\fP\^; +.br + int \fInum_wchars\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fId\fP 1i +Specifies the drawable. +.IP \fIfont_set\fP 1i +Specifies the font set. +.IP \fIgc\fP 1i +Specifies the GC. +.ds Xy +.IP \fIx\fP 1i +.br +.ns +.IP \fIy\fP 1i +Specify the x and y coordinates\*(Xy. +.IP \fIstring\fP 1i +Specifies the character string. +.IP \fInum_bytes\fP 1i +Specifies the number of bytes in the string argument. +.IP \fInum_wchars\fP 1i +Specifies the number of characters in the string argument. +.LP +.eM +The +.PN XmbDrawImageString +and +.PN XwcDrawImageString +functions fill a destination rectangle with the background pixel defined +in the GC and then paint the text with the foreground pixel. +The filled rectangle is the rectangle returned to overall_logical_return by +.PN XmbTextExtents +or +.PN XwcTextExtents +for the same text and +.PN XFontSet . +.LP +When the +.PN XFontSet +has missing charsets, each unavailable character is drawn +with the default string returned by +.PN XCreateFontSet . +The behavior for an invalid codepoint is undefined. +.NH 2 +Input Methods +.XS +\*(SN Input Methods +.XE +.LP +This section provides discussions of the following X Input Method +(XIM) topics: +.IP \(bu 5 +Input method overview +.IP \(bu 5 +Input method management +.IP \(bu 5 +Input method functions +.IP \(bu 5 +Input method values +.IP \(bu 5 +Input context functions +.IP \(bu 5 +Input context values +.IP \(bu 5 +Input method callback semantics +.IP \(bu 5 +Event filtering +.IP \(bu 5 +Getting keyboard input +.IP \(bu 5 +Input method conventions +.NH 3 +Input Method Overview +.XS +\*(SN Input Method Overview +.XE +.LP +This section provides definitions for terms and concepts used +for internationalized text input and a brief overview of the +intended use of the mechanisms provided by Xlib. +.LP +A large number of languages in the world use alphabets +consisting of a small set of symbols (letters) to form words. +To enter text into a computer in an alphabetic language, +a user usually has a keyboard on which there exist key symbols corresponding +to the alphabet. +Sometimes, a few characters of an alphabetic language are missing +on the keyboard. +Many computer users who speak a Latin-alphabet-based language +only have an English-based keyboard. +They need to hit a combination of keystrokes +to enter a character that does not exist directly on the keyboard. +A number of algorithms have been developed for entering such characters. +These are known as European input methods, compose input methods, +or dead-key input methods. +.LP +Japanese is an example of a language with a phonetic symbol set, +where each symbol represents a specific sound. +There are two phonetic symbol sets in Japanese: Katakana and Hiragana. +In general, +Katakana is used for words that are of foreign origin, +and Hiragana is used for writing native Japanese words. +Collectively, the two systems are called Kana. +Each set consists of 48 characters. +.LP +Korean also has a phonetic symbol set, called Hangul. +Each of the 24 basic phonetic symbols (14 consonants and 10 vowels) +represents a specific sound. +A syllable is composed of two or three parts: +the initial consonants, the vowels, and the optional last consonants. +With Hangul, +syllables can be treated as the basic units on which text processing is done. +For example, +a delete operation may work on a phonetic symbol or a syllable. +Korean code sets include several thousands of these syllables. +A user types the phonetic symbols that make up the syllables of the words +to be entered. +The display may change as each phonetic symbol is entered. +For example, +when the second phonetic symbol of a syllable is entered, +the first phonetic symbol may change its shape and size. +Likewise, when the third phonetic symbol is entered, +the first two phonetic symbols may change their shape and size. +.LP +Not all languages rely solely on alphabetic or phonetic systems. +Some languages, including Japanese and Korean, employ an +ideographic writing system. +In an ideographic system, rather than taking a small set of +symbols and combining them in different ways to create words, +each word consists of one unique symbol (or, occasionally, several symbols). +The number of symbols can be very large: +approximately 50,000 have been identified in Hanzi, +the Chinese ideographic system. +.LP +Two major aspects of ideographic systems impact their use with computers. +First, the standard computer character sets in Japan, China, and Korea +include roughly 8,000 characters, +while sets in Taiwan have between 15,000 and 30,000 characters. +This makes it necessary to use more than one byte to represent a character. +Second, it obviously is impractical to have a keyboard that includes +all of a given language's ideographic symbols. +Therefore, a mechanism is required for entering characters +so that a keyboard with a reasonable number of keys can be used. +Those input methods are usually based on phonetics, +but there also exist methods based on the graphical properties of +characters. +.LP +In Japan, both Kana and the ideographic system Kanji are used. +In Korea, Hangul and sometimes the ideographic system Hanja are used. +Now consider entering ideographs in Japan, Korea, China, and Taiwan. +.LP +In Japan, either Kana or English characters are typed and then a region +is selected (sometimes automatically) for conversion to Kanji. +Several Kanji characters may have the same phonetic representation. +If that is the case with the string entered, +a menu of characters is presented and +the user must choose the appropriate one. +If no choice is necessary or a preference has been established, +the input method does the substitution directly. +When Latin characters are converted to Kana or Kanji, +it is called a romaji conversion. +.LP +In Korea, it is usually acceptable to keep Korean text in Hangul form, +but some people may choose to write Hanja-originated words in Hanja +rather than in Hangul. +To change Hangul to Hanja, +the user selects a region for conversion +and then follows the same basic method as that described for Japanese. +.LP +Probably because there are well-accepted phonetic writing systems +for Japanese and Korean, +computer input methods in these countries for entering ideographs +are fairly standard. +Keyboard keys have both English characters and phonetic symbols +engraved on them, and the user can switch between the two sets. +.LP +The situation is different for Chinese. +While there is a phonetic system called Pinyin promoted by authorities, +there is no consensus for entering Chinese text. +Some vendors use a phonetic decomposition (Pinyin or another), +others use ideographic decomposition of Chinese words, +with various implementations and keyboard layouts. +There are about 16 known methods, none of which is a clear standard. +.LP +Also, there are actually two ideographic sets used: +Traditional Chinese (the original written Chinese) +and Simplified Chinese. +Several years ago, +the People's Republic of China launched a campaign to simplify +some ideographic characters and eliminate redundancies altogether. +Under the plan, +characters would be streamlined every five years. +Characters have been revised several times now, +resulting in the smaller, simpler set that makes up Simplified Chinese. +.NH 4 +Input Method Architecture +.XS +\*(SN Input Method Architecture +.XE +.LP +As shown in the previous section, +there are many different input methods in use today, +each varying with language, culture, and history. +A common feature of many input methods is that the user may type +multiple keystrokes to compose a single character (or set +of characters). +The process of composing characters from keystrokes is called +\fIpreediting\fP. +It may require complex algorithms and large dictionaries +involving substantial computer resources. +.LP +Input methods may require one or more areas in which to show the +feedback of the actual keystrokes, to propose disambiguation to the +user, to list dictionaries, and so on. +The input method areas of concern are as follows: +.IP \(bu 5 +The \fIstatus\fP area is a logical extension of the +LEDs that exist on the physical keyboard. +It is a window that is intended to present the internal state +of the input method that is critical to the user. +The status area may consist of text data and bitmaps or some combination. +.IP \(bu 5 +The \fIpreedit\fP area displays the +intermediate text for those languages that are composing prior to +the client handling the data. +.IP \(bu 5 +The \fIauxiliary\fP area is used for pop-up menus and customizing +dialogs that may be required for an input method. +There may be multiple auxiliary areas for an input method. +Auxiliary areas are managed by the input method independent of the client. +Auxiliary areas are assumed to be separate dialogs, +which are maintained by the input method. +.LP +There are various user interaction styles used for preediting. +The ones supported by Xlib are as follows: +.IP \(bu 5 +For \fIon-the-spot\fP input methods, +preediting data will be displayed directly in the application window. +Application data is moved to allow preedit data to appear +at the point of insertion. +.IP \(bu 5 +\fIOver-the-spot\fP preediting means that the data is displayed in +a preedit window that is placed over the point of insertion. +.IP \(bu 5 +\fIOff-the-spot\fP preediting means that the preedit window is +inside the application window but not at the point of insertion. +Often, this type of window is placed at the bottom of the application window. +.IP \(bu 5 +\fIRoot-window\fP preediting refers to input methods that use a preedit +window that is the child of +.PN RootWindow . +.LP +It would require a lot of computing resources if portable applications +had to include input methods for all the languages in the world. +To avoid this, +a goal of the Xlib design is to allow an application +to communicate with an input method placed in a separate process. +Such a process is called an \fIinput server\fP. +The server to which the application should connect is dependent on +the environment when the application is started up, +that is, the user language and the actual encoding to be used for it. +The input method connection is said to be \fIlocale-dependent\fP. +It is also user-dependent. +For a given language, the user can choose, to some extent, +the user interface style of input method (if choice is possible among +several). +.LP +Using an input server implies communication overhead, +but applications can be migrated without relinking. +Input methods can be implemented either as a +stub communicating to an input server or as a local library. +.LP +An input method may be based on a \fIfront-end\fP or a \fIback-end\fP +architecture. +In a front-end architecture, +there are two separate connections to the X server: +keystrokes go directly from the X server to the input method on +one connection and other events to the regular client connection. +The input method is then acting as a filter and sends composed strings +to the client. +A front-end architecture requires synchronization between the +two connections to avoid lost key events or locking issues. +.LP +In a back-end architecture, +a single X server connection is used. +A dispatching mechanism must decide on this channel to delegate appropriate +keystrokes to the input method. +For instance, +it may retain a Help keystroke for its own purpose. +In the case where the input method is a separate process (that is, a server), +there must be a special communication protocol between the back-end client +and the input server. +.LP +A front-end architecture introduces synchronization issues +and a filtering mechanism for noncharacter keystrokes +(Function keys, Help, and so on). +A back-end architecture sometimes implies more communication overhead +and more process switching. +If all three processes (X server, input server, client) +are running on a single workstation, +there are two process switches for each keystroke in a back-end +architecture, +but there is only one in a front-end architecture. +.LP +The abstraction used by a client to communicate with an input method +is an opaque data structure represented by the +.PN XIM +data type. +This data structure is returned by the +.PN XOpenIM +function, which opens an input method on a given display. +Subsequent operations on this data structure encapsulate all communication +between client and input method. +There is no need for an X client to use any networking library +or natural language package to use an input method. +.LP +A single input server may be used for one or more languages, +supporting one or more encoding schemes. +But the strings returned from an input method will always be encoded +in the (single) locale associated with the +.PN XIM +object. +.NH 4 +Input Contexts +.XS +\*(SN Input Contexts +.XE +.LP +Xlib provides the ability to manage a multi-threaded state for text input. +A client may be using multiple windows, +each window with multiple text entry areas, +and the user possibly switching among them at any time. +The abstraction for representing the state of a particular input thread +is called an \fIinput context\fP. +The Xlib representation of an input context is an +.PN XIC . +.LP +An input context is the abstraction retaining the state, properties, +and semantics of communication between a client and an input method. +An input context is a combination of an input method, a locale +specifying the encoding of the character strings to be returned, +a client window, internal state information, +and various layout or appearance characteristics. +The input context concept somewhat matches for input the graphics context +abstraction defined for graphics output. +.LP +One input context belongs to exactly one input method. +Different input contexts may be associated with the same input method, +possibly with the same client window. +An +.PN XIC +is created with the +.PN XCreateIC +function, providing an +.PN XIM +argument and affiliating the input context to the input method +for its lifetime. +When an input method is closed with +.PN XCloseIM , +all of its affiliated input contexts should not be used any more +(and should preferably be destroyed before closing the input method). +.LP +Considering the example of a client window with multiple text entry areas, +the application programmer could, for example, choose to implement as follows: +.IP \(bu 5 +As many input contexts are created as text entry areas, and the client +will get the input accumulated on each context each time it looks up +in that context. +.IP \(bu 5 +A single context is created for a top-level window in the application. +If such a window contains several text entry areas, +each time the user moves to another text entry area, +the client has to indicate changes in the context. +.LP +A range of choices can be made by application designers to use +either a single or multiple input contexts, +according to the needs of their application. +.NH 4 +Getting Keyboard Input +.XS +\*(SN Getting Keyboard Input +.XE +.LP +To obtain characters from an input method, +a client must call the function +.PN XmbLookupString +or +.PN XwcLookupString +with an input context created from that input method. +Both a locale and display are bound to an input method when it is opened, +and an input context inherits this locale and display. +Any strings returned by +.PN XmbLookupString +or +.PN XwcLookupString +will be encoded in that locale. +.NH 4 +Focus Management +.XS +\*(SN Focus Management +.XE +.LP +For each text entry area in which the +.PN XmbLookupString +or +.PN XwcLookupString +functions are used, +there will be an associated input context. +.LP +When the application focus moves to a text entry area, +the application must set the input context focus to the +input context associated with that area. +The input context focus is set by calling +.PN XSetICFocus +with the appropriate input context. +.LP +Also, when the application focus moves out of a text entry area, the +application should unset the focus for the associated input context +by calling +.PN XUnsetICFocus . +As an optimization, if +.PN XSetICFocus +is called successively on two different input contexts, +setting the focus on the second +will automatically unset the focus on the first. +.LP +To set and unset the input context focus correctly, +it is necessary to track application-level focus changes. +Such focus changes do not necessarily correspond to X server focus changes. +.LP +If a single input context +is being used to do input for +multiple text entry areas, it will also be necessary +to set the focus window of the +input context whenever the focus window changes +(see section 13.5.6.3). +.NH 4 +Geometry Management +.XS +\*(SN Geometry Management +.XE +.LP +In most input method architectures +(on-the-spot being the notable exception), +the input method will perform the display of its own data. +To provide better visual locality, +it is often desirable to have the input method areas embedded within a client. +To do this, +the client may need to allocate space for an input method. +Xlib provides support that allows the size and position of input method +areas to be provided by a client. +The input method areas that are supported for geometry management +are the status area and the preedit area. +.LP +The fundamental concept on which geometry management for input method windows +is based is the proper division of responsibilities between the +client (or toolkit) and the input method. +The division of responsibilities is as follows: +.IP \(bu 5 +The client is responsible for the geometry of the input method window. +.IP \(bu 5 +The input method is responsible for the contents of the input method window. +.LP +An input method is able to suggest a size to the client, +but it cannot suggest a placement. +Also the input method can only suggest a size. +It does not determine the size, +and it must accept the size it is given. +.LP +Before a client provides geometry management for an input method, +it must determine if geometry management is needed. +The input method indicates the need for geometry management +by setting +.PN XIMPreeditArea +or +.PN XIMStatusArea +in its +.PN XIMStyles +value returned by +.PN XGetIMValues . +When a client has decided that it will provide geometry management +for an input method, +it indicates that decision by setting the +.PN XNInputStyle +value in the +.PN XIC . +.LP +After a client has established with the input method +that it will do geometry management, +the client must negotiate the geometry with the input method. +The geometry is negotiated by the following steps: +.IP \(bu 5 +The client suggests an area to the input method by setting the +.PN XNAreaNeeded +value for that area. +If the client has no constraints for the input method, +it either will not suggest an area or will set the width and height to zero. +Otherwise, it will set one of the values. +.IP \(bu 5 +The client will get the XIC value +.PN XNAreaNeeded . +The input method will return its suggested size in this value. +The input method should pay attention to any constraints suggested +by the client. +.IP \(bu 5 +The client sets the XIC value +.PN XNArea +to inform the input method of the geometry of its window. +The client should try to honor the geometry requested by the input method. +The input method must accept this geometry. +.LP +Clients doing geometry management must be aware that setting other +XIC values may affect the geometry desired by an input method. +For example, +.PN XNFontSet +and +.PN XNLineSpacing +may change the geometry desired by the input method. +.LP +The table of XIC values (see section 13.5.6) +indicates the values that can cause the desired geometry to change +when they are set. +It is the responsibility of the client to renegotiate the geometry +of the input method window when it is needed. +.LP +In addition, +a geometry management callback is provided +by which an input method can initiate a geometry change. +.NH 4 +Event Filtering +.XS +\*(SN Event Filtering +.XE +.LP +A filtering mechanism is provided to allow input methods +to capture X events transparently to clients. +It is expected that toolkits (or clients) using +.PN XmbLookupString +or +.PN XwcLookupString +will call this filter at some point in the event processing mechanism +to make sure that events needed by an input method can be filtered +by that input method. +.LP +If there were no filter, +a client could receive and discard events that are necessary +for the proper functioning of an input method. +The following provides a few examples of such events: +.IP \(bu 5 +Expose events on preedit window in local mode. +.IP \(bu 5 +Events may be used by an input method to communicate with an input server. +Such input server protocol-related events have to be intercepted +if one does not want to disturb client code. +.IP \(bu 5 +Key events can be sent to a filter before they are bound +to translations such as those the X Toolkit Intrinsics library provides. +.LP +Clients are expected to get the XIC value +.PN XNFilterEvents +and augment the event mask for the client window with that event mask. +This mask may be zero. +.NH 4 +Callbacks +.XS +\*(SN Callbacks +.XE +.LP +When an on-the-spot input method is implemented, +only the client can insert or delete preedit data in place +and possibly scroll existing text. +This means that the echo of the keystrokes has to be achieved +by the client itself, tightly coupled with the input method logic. +.LP +When the user enters a keystroke, +the client calls +.PN XmbLookupString +or +.PN XwcLookupString . +At this point, in the on-the-spot case, +the echo of the keystroke in the preedit has not yet been done. +Before returning to the client logic that handles the input characters, +the look-up function +must call the echoing logic to insert the new keystroke. +If the keystrokes entered so far make up a character, +the keystrokes entered need to be deleted, +and the composed character will be returned. +Hence, what happens is that, while being called by client code, +the input method logic has to call back to the client before it returns. +The client code, that is, a callback procedure, +is called from the input method logic. +.LP +There are a number of cases where the input method logic has to +call back the client. +Each of those cases is associated with a well-defined callback action. +It is possible for the client to specify, for each input context, +what callback is to be called for each action. +.LP +There are also callbacks provided for feedback of status information +and a callback to initiate a geometry request for an input method. +.NH 4 +Visible Position Feedback Masks +.XS +\*(SN Visible Position Feedback Masks +.XE +.LP +In the on-the-spot input style, there is a problem when +attempting to draw preedit strings that are longer than the +available space. Once the display area is exceeded, it is not +clear how best to display the preedit string. +The visible position feedback masks of +.PN XIMText +help resolve this problem by allowing the input method to specify hints that +indicate the essential portions of the preedit string. +For example, such hints can help developers implement +scrolling of a long preedit string within a short preedit display area. +.NH 4 +Preedit String Management +.XS +\*(SN Preedit String Management +.XE +.LP +As highlighted before, the input method architecture provides +preediting, which supports a type of preprocessor input composition. +In this case, composition consists of interpreting a sequence +of key events and returning a committed string via +.PN XmbLookupString +or +.PN XwcLookupString . +This provides the basics for input methods. +.LP +In addition to preediting based on key events, a general framework +is provided to give a client that desires it more advanced preediting based +on the text within the client. This framework is called +\fIstring conversion\fP and is provided using XIC values. +The fundamental concept of string conversion +is to allow the input method to manipulate the client's +text independent of any user preediting operation. +.LP +The need for string conversion is based on +language needs and input method capabilities. +The following are some examples of string conversion: +.IP \(bu 5 +Transliteration conversion provides language-specific conversions +within the input method. +In the case of Korean input, users wish to convert a Hangul string +into a Hanja string while in preediting, after preediting, +or in other situations (for example, on a selected string). +The conversion is triggered when the user +presses a Hangul-to-Hanja key sequence (which may be input method specific). +Sometimes the user may want to invoke the conversion after finishing +preediting or on a user-selected string. +Thus, the string to be converted is in an application buffer, not in +the preedit area of the input method. The string conversion services +allow the client to request this transliteration conversion from the +input method. +There are many other transliteration conversions defined for +various languages, for example, Kana-to-Kanji conversion in Japanese. +.sp +The key to remember is that transliteration conversions are triggered +at the request of the user and returned to the client +immediately without affecting the preedit area of the input method. +.IP \(bu 5 +Reconversion of a previously committed string or +a selected string is supported by many input methods as a +convenience to the user. +For example, a user tends to mistype the commit key while +preediting. In that case, some input methods provide a special +key sequence to request a ``reconvert'' operation on the +committed string, similiar to the undo facility provided by most +text editors. +Another example is where the user is proofreading a document +that has some misconversions from preediting and wants to correct +the misconverted text. Such reconversion is again triggered +by the user invoking some special action, but reconversions should +not affect the state of the preedit area. +.IP \(bu 5 +Context-sensitive conversion is required for some languages +and input methods that need to retrieve text that surrounds the +current spot location (cursor position) of the client's buffer. +Such text is needed when the preediting operation depends on +some surrounding characters (usually preceding the spot location). +For example, +in Thai language input, certain character sequences may be invalid and +the input method may want to check whether characters constitute a +valid word. Input methods that do such context-dependent +checking need to retrieve the characters surrounding the current +cursor position to obtain complete words. +.sp +Unlike other conversions, this conversion is not explicitly +requested by the user. +Input methods that provide such context-sensitive conversion +continuously need to request context from the client, and any change +in the context of the spot location may affect such conversions. +The client's context would be needed if the user moves the cursor +and starts editing again. +.sp +For this reason, an input method supporting this type of conversion +should take notice of when the client calls +.PN XmbResetIC +or +.PN XwcResetIC , +which is usually an indication of a context change. +.LP +Context-sensitive conversions just need a copy of the client's text, +while other conversions replace the client's text with new text +to achieve the reconversion or transliteration. Yet in all +cases the result of a conversion, either immediately or via preediting, +is returned by the +.PN XmbLookupString +and +.PN XwcLookupString +functions. +.LP +String conversion support is dependent on the availability of the +.PN XNStringConversion +or +.PN XNStringConversionCallback +XIC values. +Because the input method may not support string conversions, +clients have to query the availability of string conversion +operations by checking the supported XIC values list by calling +.PN XGetIMValues +with the +.PN XNQueryICValuesList +IM value. +.LP +The difference between these two values is whether the +conversion is invoked by the client or the input method. +The +.PN XNStringConversion +XIC value is used by clients to request +a string conversion from the input method. The client +is responsible for determining which events are used +to trigger the string conversion and whether the string to be +converted should be copied or deleted. The type of conversion +is determined by the input method; the client can only +pass the string to be converted. The client is guaranteed that +no +.PN XNStringConversionCallback +will be issued when this value is set; thus, the client need +only set one of these values. +.LP +The +.PN XNStringConversionCallback +XIC value is used by the client to notify the input method that +it will accept requests from the input method for string conversion. +If this value is set, +it is the input method's responsibility to determine which +events are used to trigger the string conversion. +When such events occur, the input method issues a call to the +client-supplied procedure to retrieve the string to be converted. The client's +callback procedure is notified whether to copy or delete the string and +is provided with hints as to the amount of text needed. +The +.PN XIMStringConversionCallbackStruct +specifies which text should be passed back to the input method. +.LP +Finally, the input method may call the client's +.PN XNStringConversionCallback +procedure multiple times if the string returned from the callback is +not sufficient to perform a successful conversion. The arguments +to the client's procedure allow the input method to define a +position (in character units) relative to the client's cursor position +and the size of the text needed. By varying the position and size of +the desired text in subsequent callbacks, the input method can retrieve +additional text. +.LP +.NH 3 +Input Method Management +.XS +\*(SN Input Method Management +.XE +.LP +The interface to input methods might appear to be simply creating +an input method +.Pn ( XOpenIM ) +and freeing an input method +.Pn ( XCloseIM ). +However, input methods may +require complex communication with input method servers (IM servers), +for example: +.IP \(bu 5 +If the X server, IM server, and X clients are started asynchronously, +some clients may attempt to connect to the IM server before it is +fully operational, and fail. +Therefore, some mechanism is needed to allow clients to detect when an IM +server has started. +.LP +It is up to clients to decide what should be done when an IM server is +not available (for example, wait, or use some other IM server). +.LP +.IP \(bu 5 +Some input methods may allow the underlying IM server to be switched. +Such customization may be desired without restarting the entire client. +.LP +To support management of input methods in these cases, the following +functions are provided: +.TS +lw(2.4i) lw(3.3i). +T{ +.PN XRegisterIMInstantiateCallback +T} T{ +This function allows clients to register a callback procedure +to be called when Xlib detects that an IM server is up and available. +T} +T{ +.PN XOpenIM +T} T{ +A client calls this function as a result of the callback procedure +being called. +T} +T{ +.PN XSetIMValue , +.PN XSetICValue +T} T{ +These functions use the XIM and XIC values, +.PN XNDestroyCallback , +to allow a client +to register a callback procedure to be called when Xlib detects that +an IM server that was associated with an opened +input method is no longer available. +.sp 4p +In addition, this function can be used to switch IM servers for those input +methods that support such functionality. The IM value for switching IM +servers is implementation-dependent; see the description below about +switching IM servers. +T} +T{ +.PN XUnregisterIMInstantiateCallback +T} T{ +This function removes a callback procedure registered by the client. +T} +.TE +.LP +Input methods that support switching of IM servers may exhibit some +side-effects: +.IP \(bu 5 +The input method will ensure that any new IM server supports any of the +input styles being used by input contexts already associated with the +input method. +However, the list of supported input styles may be different. +.LP +.IP \(bu 5 +Geometry management requests on previously created input contexts +may be initiated by the new IM server. +.LP +.NH 4 +Hot Keys +.XS +\*(SN Hot Keys +.XE +.LP +Some clients need to guarantee which keys can be used to escape from the +input method, regardless of the input method state; +for example, the client-specific Help key or the keys to move the +input focus. +The HotKey mechanism allows clients +to specify a set of keys for this purpose. However, the input +method might not allow clients to specify hot keys. +Therefore, clients have to query support of hot keys by checking the +supported XIC values list by calling +.PN XGetIMValues +with the +.PN XNQueryICValuesList +IM value. +When the hot keys specified conflict with the key bindings of the +input method, hot keys take precedence over the key bindings of the input +method. +.LP +.NH 4 +Preedit State Operation +.XS +\*(SN Preedit State Operation +.XE +.LP +An input method may have several internal states, depending on its +implementation and the locale. However, one state that is +independent of locale and implementation is whether the input method +is currently performing a preediting operation. +Xlib provides the ability for an application to manage the preedit state +programmatically. Two methods are provided for +retrieving the preedit state of an input context. +One method is to query the state by calling +.PN XGetICValues +with the +.PN XNPreeditState +XIC value. +Another method is to receive notification whenever +the preedit state is changed. To receive such notification, +an application needs to register a callback by calling +.PN XSetICValues +with the +.PN XNPreeditStateNotifyCallback +XIC value. +In order to change the preedit state programmatically, an application +needs to call +.PN XSetICValues +with +.PN XNPreeditState. +.LP +Availability of the preedit state is input method dependent. The input +method may not provide the ability to set the state or to +retrieve the state programmatically. Therefore, clients have to +query availability of preedit state operations by checking the +supported XIC values list by calling +.PN XGetIMValues +with the +.PN XNQueryICValuesList +IM value. +.NH 3 +Input Method Functions +.XS +\*(SN Input Method Functions +.XE +.LP +To open a connection, use +.PN XOpenIM . +.IN "XOpenIM" "" "@DEF@" +.sM +.FD 0 +XIM XOpenIM\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + XrmDatabase \fIdb\fP\^; +.br + char *\fIres_name\fP\^; +.br + char *\fIres_class\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIdb\fP 1i +Specifies a pointer to the resource database. +.IP \fIres_name\fP 1i +Specifies the full resource name of the application. +.IP \fIres_class\fP 1i +Specifies the full class name of the application. +.LP +.eM +The +.PN XOpenIM +function opens an input method, +matching the current locale and modifiers specification. +Current locale and modifiers are bound to the input method at opening time. +The locale associated with an input method cannot be changed dynamically. +This implies that the strings returned by +.PN XmbLookupString +or +.PN XwcLookupString , +for any input context affiliated with a given input method, +will be encoded in the locale current at the time the input method is opened. +.LP +The specific input method to which this call will be routed +is identified on the basis of the current locale. +.PN XOpenIM +will identify a default input method corresponding to the +current locale. +That default can be modified using +.PN XSetLocaleModifiers +for the input method modifier. +.LP +The db argument is the resource database to be used by the input method +for looking up resources that are private to the input method. +It is not intended that this database be used to look +up values that can be set as IC values in an input context. +If db is NULL, +no database is passed to the input method. +.LP +The res_name and res_class arguments specify the resource name +and class of the application. +They are intended to be used as prefixes by the input method +when looking up resources that are common to all input contexts +that may be created for this input method. +The characters used for resource names and classes must be in the +X Portable Character Set. +The resources looked up are not fully specified +if res_name or res_class is NULL. +.LP +The res_name and res_class arguments are not assumed to exist beyond +the call to +.PN XOpenIM . +The specified resource database is assumed to exist for the lifetime +of the input method. +.LP +.PN XOpenIM +returns NULL if no input method could be opened. +.LP +.sp +To close a connection, use +.PN XCloseIM . +.IN "XCloseIM" "" "@DEF@" +.sM +.FD 0 +Status XCloseIM\^(\^\fIim\fP\^) +.br + XIM \fIim\fP\^; +.FN +.IP \fIim\fP 1i +Specifies the input method. +.LP +.eM +The +.PN XCloseIM +function closes the specified input method. +.LP +.sp +To set input method attributes, use +.PN XSetIMValues . +.IN "XSetIMValues" "" "@DEF@" +.sM +.FD 0 +char * XSetIMValues\^(\^\fIim\fP\^, ...) +.br + XIM \fIim\fP\^; +.FN +.IP \fIim\fP 1i +Specifies the input method. +.ds Al \ to set XIM values +.IP ... 1i +Specifies the variable-length argument list\*(Al. +.LP +.eM +The +.PN XSetIMValues +function presents a variable argument list programming interface +for setting attributes of the specified input method. +It returns NULL if it succeeds; +otherwise, +it returns the name of the first argument that could not be set. +Xlib does not attempt to set arguments from the supplied list that +follow the failed argument; +all arguments in the list preceding the failed argument have been set +correctly. +.LP +.sp +To query an input method, use +.PN XGetIMValues . +.IN "XGetIMValues" "" "@DEF@" +.sM +.FD 0 +char * XGetIMValues\^(\^\fIim\fP\^, ...) +.br + XIM \fIim\fP\^; +.FN +.IP \fIim\fP 1i +Specifies the input method. +.ds Al \ to get XIM values +.IP ... 1i +Specifies the variable length argument list\*(Al. +.LP +.eM +The +.PN XGetIMValues +function presents a variable argument list programming interface +for querying properties or features of the specified input method. +This function returns NULL if it succeeds; +otherwise, +it returns the name of the first argument that could not be obtained. +.LP +Each XIM value argument (following a name) must point to +a location where the XIM value is to be stored. +That is, if the XIM value is of type T, +the argument must be of type T*. +If T itself is a pointer type, +then +.PN XGetIMValues +allocates memory to store the actual data, +and the client is responsible for freeing this data by calling +.PN XFree +with the returned pointer. +.LP +.sp +To obtain the display associated with an input method, use +.PN XDisplayOfIM . +.IN "XDisplayOfIM" "" "@DEF@" +.sM +.FD 0 +Display * XDisplayOfIM\^(\^\fIim\fP\^) +.br + XIM \fIim\fP\^; +.FN +.IP \fIim\fP 1i +Specifies the input method. +.LP +.eM +The +.PN XDisplayOfIM +function returns the display associated with the specified input method. +.LP +.sp +To get the locale associated with an input method, use +.PN XLocaleOfIM . +.IN "XLocaleOfIM" "" "@DEF@" +.sM +.FD 0 +char * XLocaleOfIM\^(\^\fIim\fP\^) +.br + XIM \fIim\fP\^; +.FN +.IP \fIim\fP 1i +Specifies the input method. +.LP +.eM +The +.PN XLocaleOfIM +function returns the locale associated with the specified input method. +.LP +.sp +To register an input method instantiate callback, use +.PN XRegisterIMInstantiateCallback . +.IN "XRegisterIMInstantiateCallback" "" "@DEF@" +.sM +.FD 0 +Bool XRegisterIMInstantiateCallback\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^, \fIcallback\fP\^, \fIclient_data\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + XrmDatabase \fIdb\fP\^; +.br + char *\fIres_name\fP\^; +.br + char *\fIres_class\fP\^; +.br + XIMProc \fIcallback\fP\^; +.br + XPointer *\fIclient_data\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIdb\fP 1i +Specifies a pointer to the resource database. +.IP \fIres_name\fP 1i +Specifies the full resource name of the application. +.IP \fIres_class\fP 1i +Specifies the full class name of the application. +.IP \fIcallback\fP 1i +Specifies a pointer to the input method instantiate callback. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.LP +.eM +The +.PN XRegisterIMInstantiateCallback +function registers a callback to be invoked whenever a new input method +becomes available for the specified display that matches the current +locale and modifiers. +.LP +The function returns +.PN True + if it succeeds; otherwise, it returns +.PN False . +.LP +The generic prototype is as follows: +.IN "IMInstantiateCallback" "" "@DEF@" +.sM +.FD 0 +void IMInstantiateCallback\^(\^\fIdisplay\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +To unregister an input method instantiation callback, use +.PN XUnregisterIMInstantiateCallback . +.IN "XUnregisterIMInstantiateCallback" "" "@DEF@" +.sM +.FD 0 +Bool XUnregisterIMInstantiateCallback\^(\^\fIdisplay\fP\^, \fIdb\fP\^, \fIres_name\fP\^, \fIres_class\fP\^, \fIcallback\fP\^, \fIclient_data\fP\^) +.br + Display *\fIdisplay\fP\^; +.br + XrmDatabase \fIdb\fP\^; +.br + char *\fIres_name\fP\^; +.br + char *\fIres_class\fP\^; +.br + XIMProc \fIcallback\fP\^; +.br + XPointer *\fIclient_data\fP\^; +.FN +.IP \fIdisplay\fP 1i +Specifies the connection to the X server. +.IP \fIdb\fP 1i +Specifies a pointer to the resource database. +.IP \fIres_name\fP 1i +Specifies the full resource name of the application. +.IP \fIres_class\fP 1i +Specifies the full class name of the application. +.IP \fIcallback\fP 1i +Specifies a pointer to the input method instantiate callback. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.LP +.eM +The +.PN XUnregisterIMInstantiateCallback +function removes an input method instantiation callback previously +registered. +The function returns +.PN True +if it succeeds; otherwise, it returns +.PN False . +.NH 3 +Input Method Values +.XS +\*(SN Input Method Values +.XE +.LP +The following table describes how XIM values are interpreted +by an input method. +The first column lists the XIM values. +The second column indicates how each of the XIM values +are treated by that input style. +.LP +.LP +The following keys apply to this table. +.TS H +lw(1i) lw(4.75i). +_ +.sp 6p +.B +Key Explanation +.sp 6p +_ +.TH +.R +D T{ +This value may be set using +.PN XSetIMValues . +If it is not set, +.br +a default is provided. +T} +S T{ +This value may be set using +.PN XSetIMValues . +T} +G T{ +This value may be read using +.PN XGetIMValues . +T} +.sp 6p +_ +.TE +.LP +.TS H +lw(2.25i) c +lw(2.25i) c. +_ +.sp 6p +.B +XIM Value Key +.sp 6p +_ +.sp 6p +.TH +.R +T{ +.PN XNQueryInputStyle +T} T{ +G +T} +T{ +.PN XNResourceName +T} T{ +D-S-G +T} +T{ +.PN XNResourceClass +T} T{ +D-S-G +T} +T{ +.PN XNDestroyCallback +T} T{ +D-S-G +T} +T{ +.PN XNQueryIMValuesList +T} T{ +G +T} +T{ +.PN XNQueryICValuesList +T} T{ +G +T} +T{ +.PN XNVisiblePosition +T} T{ +G +T} +T{ +.PN XNR6PreeditCallbackBehavior +T} T{ +D-S-G +T} +.sp 6p +_ +.TE +.LP +.PN XNR6PreeditCallbackBehavior +is obsolete and its use is not recommended (see section 13.5.4.6). +.LP +.NH 4 +Query Input Style +.XS +\*(SN Query Input Style +.XE +.LP +A client should always query the input method to determine which input +styles are supported. +The client should then find an input style it is capable of supporting. +.LP +If the client cannot find an input style that it can support, +it should negotiate with the user the continuation of the program +(exit, choose another input method, and so on). +.LP +The argument value must be a pointer to a location +where the returned value will be stored. +The returned value is a pointer to a structure of type +.PN XIMStyles . +Clients are responsible for freeing the +.PN XIMStyles +structure. +To do so, use +.PN XFree . +.LP +The +.PN XIMStyles +structure is defined as follows: +.LP +.IN "XIMStyle" "" "@DEF@" +.IN "XIMPreeditArea" "" "@DEF@" +.IN "XIMPreeditCallbacks" "" "@DEF@" +.IN "XIMPreeditPosition" "" "@DEF@" +.IN "XIMPreeditNothing" "" "@DEF@" +.IN "XIMPreeditNone" "" "@DEF@" +.IN "XIMStatusArea" "" "@DEF@" +.IN "XIMStatusCallbacks" "" "@DEF@" +.IN "XIMStatusNothing" "" "@DEF@" +.IN "XIMStatusNone" "" "@DEF@" +.IN "XIMStyles" "" "@DEF@" +.sM +.Ds 0 +typedef unsigned long XIMStyle; +.De +.TS +lw(.5i) lw(2i) lw(2.5i). +T{ +#define +T} T{ +.PN XIMPreeditArea +T} T{ +0x0001L +T} +T{ +#define +T} T{ +.PN XIMPreeditCallbacks +T} T{ +0x0002L +T} +T{ +#define +T} T{ +.PN XIMPreeditPosition +T} T{ +0x0004L +T} +T{ +#define +T} T{ +.PN XIMPreeditNothing +T} T{ +0x0008L +T} +T{ +#define +T} T{ +.PN XIMPreeditNone +T} T{ +0x0010L +T} +.sp +T{ +#define +T} T{ +.PN XIMStatusArea +T} T{ +0x0100L +T} +T{ +#define +T} T{ +.PN XIMStatusCallbacks +T} T{ +0x0200L +T} +T{ +#define +T} T{ +.PN XIMStatusNothing +T} T{ +0x0400L +T} +T{ +#define +T} T{ +.PN XIMStatusNone +T} T{ +0x0800L +T} +.TE +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + unsigned short count_styles; + XIMStyle * supported_styles; +} XIMStyles; +.De +.LP +.eM +An +.PN XIMStyles +structure contains the number of input styles supported +in its count_styles field. +This is also the size of the supported_styles array. +.LP +The supported styles is a list of bitmask combinations, +which indicate the combination of styles for each of the areas supported. +These areas are described later. +Each element in the list should select one of the bitmask values for +each area. +The list describes the complete set of combinations supported. +Only these combinations are supported by the input method. +.LP +The preedit category defines what type of support is provided +by the input method for preedit information. +.IN "XIMPreeditArea" "" "@DEF@" +.IN "XIMPreeditPosition" "" "@DEF@" +.IN "XIMPreeditCallbacks" "" "@DEF@" +.IN "XIMPreeditNothing" "" "@DEF@" +.IN "XIMPreeditNone" "" "@DEF@" +.TS +lw(1.5i) lw(4.25i). +T{ +.PN XIMPreeditArea +T} T{ +If chosen, +the input method would require the client to provide some area values +for it to do its preediting. +Refer to XIC values +.PN XNArea +and +.PN XNAreaNeeded . +T} +T{ +.PN XIMPreeditPosition +T} T{ +If chosen, +the input method would require the client to provide positional values. +Refer to XIC values +.PN XNSpotLocation +and +.PN XNFocusWindow . +T} +T{ +.PN XIMPreeditCallbacks +T} T{ +If chosen, +the input method would require the client to define the set of preedit callbacks. +Refer to XIC values +.PN XNPreeditStartCallback , +.PN XNPreeditDoneCallback , +.PN XNPreeditDrawCallback , +and +.PN XNPreeditCaretCallback . +T} +T{ +.PN XIMPreeditNothing +T} T{ +If chosen, the input method can function without any preedit values. +T} +T{ +.PN XIMPreeditNone +T} T{ +The input method does not provide any preedit feedback. +Any preedit value is ignored. +This style is mutually exclusive with the other preedit styles. +T} +.TE +.LP +The status category defines what type of support is provided +by the input method for status information. +.IN "XIMStatusArea" "" "@DEF@" +.IN "XIMStatusCallbacks" "" "@DEF@" +.IN "XIMStatusNothing" "" "@DEF@" +.IN "XIMStatusNone" "" "@DEF@" +.TS +lw(1.5i) lw(4.25i). +T{ +.PN XIMStatusArea +T} T{ +The input method requires the client to provide +some area values for it to do its status feedback. +See +.PN XNArea +and +.PN XNAreaNeeded . +T} +T{ +.PN XIMStatusCallbacks +T} T{ +The input method requires the client to define the set of status callbacks, +.PN XNStatusStartCallback , +.PN XNStatusDoneCallback , +and +.PN XNStatusDrawCallback . +T} +T{ +.PN XIMStatusNothing +T} T{ +The input method can function without any status values. +T} +T{ +.PN XIMStatusNone +T} T{ +The input method does not provide any status feedback. +If chosen, any status value is ignored. +This style is mutually exclusive with the other status styles. +T} +.TE +.NH 4 +Resource Name and Class +.XS +\*(SN Resource Name and Class +.XE +.LP +The +.PN XNResourceName +and +.PN XNResourceClass +arguments are strings that specify the full name and class +used by the input method. +These values should be used as prefixes for the name and class +when looking up resources that may vary according to the input method. +If these values are not set, +the resources will not be fully specified. +.LP +It is not intended that values that can be set as XIM values be +set as resources. +.LP +.NH 4 +Destroy Callback +.XS +\*(SN Destroy Callback +.XE +.LP +The +.PN XNDestroyCallback +argument is a pointer to a structure of type +.PN XIMCallback . +.PN XNDestroyCallback +is triggered when an input method stops its service for any reason. +After the callback is invoked, the input method is closed and the +associated input context(s) are destroyed by Xlib. +Therefore, the client should not call +.PN XCloseIM +or +.PN XDestroyIC . +.LP +The generic prototype of this callback function is as follows: +.IN "DestroyCallback" "" "@DEF@" +.sM +.FD 0 +void DestroyCallback\^(\^\fIim\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIM \fIim\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIim\fP 1i +Specifies the input method. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +A DestroyCallback is always called with a NULL call_data argument. +.LP +.NH 4 +Query IM/IC Values List +.XS +\*(SN Query IM/IC Values List +.XE +.LP +.PN XNQueryIMValuesList +and +.PN XNQueryICValuesList +are used to query about XIM and XIC values supported by the input method. +.LP +The argument value must be a pointer to a location where the returned +value will be stored. The returned value is a pointer to a structure +of type +.PN XIMValuesList . +Clients are responsible for freeing the +.PN XIMValuesList +structure. +To do so, use +.PN XFree . +.LP +The +.PN XIMValuesList +structure is defined as follows: +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + unsigned short count_values; + char **supported_values; +} XIMValuesList; +.De +.LP +.eM +.NH 4 +Visible Position +.XS +\*(SN Visible Position +.XE +.LP +The +.PN XNVisiblePosition +argument indicates whether the visible position masks of +.PN XIMFeedback +in +.PN XIMText +are available. +.LP +The argument value must be a pointer to a location where the returned +value will be stored. The returned value is of type +.PN Bool . +If the returned value is +.PN True , +the input method uses the visible position masks of +.PN XIMFeedback +in +.PN XIMText ; +otherwise, the input method does not use the masks. +.LP +Because this XIM value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryIMValues +before using this argument. +If the +.PN XNVisiblePosition +does not exist in the IM values list returned from +.PN XNQueryIMValues , +the visible position masks of +.PN XIMFeedback +in +.PN XIMText +are not used to indicate the visible position. +.LP +.NH 4 +Preedit Callback Behavior +.XS +\*(SN Preedit Callback Behavior +.XE +.LP +The +.PN XNR6PreeditCallbackBehavior +argument originally included in the X11R6 specification has been +deprecated.\(dg +.\" If XNR6PreeditCallbackBehavior is not deprecated, then its type +.\" should be changed from *Bool to Bool. +.FS \(dg +During formulation of the X11R6 specification, the behavior of +the R6 PreeditDrawCallbacks was going to differ significantly from +that of the R5 callbacks. +Late changes to the specification converged the R5 and R6 behaviors, +eliminating the need for +.PN XNR6PreeditCallbackBehavior . +Unfortunately, this argument was not removed from the R6 specification +before it was published. +.FE +.LP +The +.PN XNR6PreeditCallbackBehavior +argument indicates whether the behavior of preedit callbacks regarding +.PN XIMPreeditDrawCallbackStruct +values follows Release 5 or Release 6 semantics. +.LP +The value is of type +.PN Bool . +When querying for +.PN XNR6PreeditCallbackBehavior , +if the returned value is +.PN True , +the input method uses the Release 6 behavior; +otherwise, it uses the Release 5 behavior. +The default value is +.PN False . +In order to use Release 6 semantics, the value of +.PN XNR6PreeditCallbackBehavior +must be set to +.PN True . +.LP +Because this XIM value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryIMValues +before using this argument. +If the +.PN XNR6PreeditCallbackBehavior +does not exist in the IM values list returned from +.PN XNQueryIMValues , +the PreeditCallback behavior is Release 5 semantics. +.LP +.NH 3 +Input Context Functions +.XS +\*(SN Input Context Functions +.XE +.LP +An input context is an abstraction that is used to contain both the data +required (if any) by an input method and the information required +to display that data. +There may be multiple input contexts for one input method. +The programming interfaces for creating, reading, or modifying +an input context use a variable argument list. +The name elements of the argument lists are referred to as XIC values. +It is intended that input methods be controlled by these XIC values. +As new XIC values are created, +they should be registered with the X Consortium. +.LP +.sp +To create an input context, use +.PN XCreateIC . +.IN "XCreateIC" "" "@DEF@" +.sM +.FD 0 +XIC XCreateIC\^(\^\fIim\fP\^, ...) +.br + XIM \fIim\fP\^; +.FN +.IP \fIim\fP 1i +Specifies the input method. +.ds Al \ to set XIC values +.IP ... 1i +Specifies the variable length argument list\*(Al. +.LP +.eM +The +.PN XCreateIC +function creates a context within the specified input method. +.LP +Some of the arguments are mandatory at creation time, and +the input context will not be created if those arguments are not provided. +The mandatory arguments are the input style and the set of text callbacks +(if the input style selected requires callbacks). +All other input context values can be set later. +.LP +.PN XCreateIC +returns a NULL value if no input context could be created. +A NULL value could be returned for any of the following reasons: +.IP \(bu 5 +A required argument was not set. +.IP \(bu 5 +A read-only argument was set (for example, +.PN XNFilterEvents ). +.IP \(bu 5 +The argument name is not recognized. +.IP \(bu 5 +The input method encountered an input method implementation-dependent error. +.LP +.PN XCreateIC +can generate +.PN BadAtom , +.PN BadColor , +.PN BadPixmap , +and +.PN BadWindow +errors. +.LP +.sp +To destroy an input context, use +.PN XDestroyIC . +.IN "XDestroyIC" "" "@DEF@" +.sM +.FD 0 +void XDestroyIC\^(\^\fIic\fP\^) +.br + XIC \fIic\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.LP +.eM +.PN XDestroyIC +destroys the specified input context. +.LP +.sp +To communicate to and synchronize with input method +for any changes in keyboard focus from the client side, +use +.PN XSetICFocus +and +.PN XUnsetICFocus . +.IN "XSetICFocus" "" "@DEF@" +.sM +.FD 0 +void XSetICFocus\^(\^\fIic\fP\^) +.br + XIC \fIic\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.LP +.eM +The +.PN XSetICFocus +function allows a client to notify an input method that the focus window +attached to the specified input context has received keyboard focus. +The input method should take action to provide appropriate feedback. +Complete feedback specification is a matter of user interface policy. +.LP +Calling +.PN XSetICFocus +does not affect the focus window value. +.LP +.sp +.IN "XUnsetICFocus" "" "@DEF@" +.sM +.FD 0 +void XUnsetICFocus\^(\^\fIic\fP\^) +.br + XIC \fIic\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.LP +.eM +The +.PN XUnsetICFocus +function allows a client to notify an input method that the specified input context +has lost the keyboard focus and that no more input is expected on the focus window +attached to that input context. +The input method should take action to provide appropriate feedback. +Complete feedback specification is a matter of user interface policy. +.LP +Calling +.PN XUnsetICFocus +does not affect the focus window value; +the client may still receive +events from the input method that are directed to the focus window. +.LP +.sp +To reset the state of an input context to its initial state, use +.PN XmbResetIC +or +.PN XwcResetIC . +.IN "XmbResetIC" "" "@DEF@" +.IN "XwcResetIC" "" "@DE@" +.sM +.FD 0 +char * XmbResetIC\^(\^\fIic\fP\^) +.br + XIC \fIic\fP\^; +.FN +.FD 0 +wchar_t * XwcResetIC\^(\^\fIic\fP\^) +.br + XIC \fIic\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.LP +.eM +When +.PN XNResetState +is set to +.PN XIMInitialState , +.PN XmbResetIC +and +.PN XwcResetIC +reset an input context to its initial state; +when +.PN XNResetState +is set to +.PN XIMPreserveState , +the current input context state is preserved. +In both cases, any input pending on that context is deleted. +The input method is required to clear the preedit area, if any, +and update the status accordingly. +Calling +.PN XmbResetIC +or +.PN XwcResetIC +does not change the focus. +.LP +The return value of +.PN XmbResetIC +is its current preedit string as a multibyte string. +If there is any preedit text drawn or visible to the user, +then these procedures must return a non-NULL string. +If there is no visible preedit text, +then it is input method implementation-dependent +whether these procedures return a non-NULL string or NULL. +.LP +The client should free the returned string by calling +.PN XFree . +.LP +.sp +To get the input method associated with an input context, use +.PN XIMOfIC . +.IN "XIMOfIC" "" "@DEF@" +.sM +.FD 0 +XIM XIMOfIC\^(\^\fIic\fP\^) +.br + XIC \fIic\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.LP +.eM +The +.PN XIMOfIC +function returns the input method associated with the specified input context. +.LP +.sp +Xlib provides two functions for setting and reading XIC values, respectively, +.PN XSetICValues +and +.PN XGetICValues . +Both functions have a variable-length argument list. +In that argument list, any XIC value's name must be denoted +with a character string using the X Portable Character Set. +.LP +.sp +To set XIC values, use +.PN XSetICValues . +.IN "XSetICValues" "" "@DEF@" +.sM +.FD 0 +char * XSetICValues\^(\^\fIic\fP\^, ...) +.br + XIC \fIic\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.ds Al \ to set XIC values +.IP ... 1i +Specifies the variable length argument list\*(Al. +.LP +.eM +The +.PN XSetICValues +function returns NULL if no error occurred; +otherwise, +it returns the name of the first argument that could not be set. +An argument might not be set for any of the following reasons: +.IP \(bu 5 +The argument is read-only (for example, +.PN XNFilterEvents ). +.IP \(bu 5 +The argument name is not recognized. +.IP \(bu 5 +An implementation-dependent error occurs. +.LP +Each value to be set must be an appropriate datum, +matching the data type imposed by the semantics of the argument. +.LP +.PN XSetICValues +can generate +.PN BadAtom , +.PN BadColor , +.PN BadCursor , +.PN BadPixmap , +and +.PN BadWindow +errors. +.LP +.sp +To obtain XIC values, use +.PN XGetICValues . +.IN "XGetICValues" "" "@DEF@" +.sM +.FD 0 +char * XGetICValues\^(\^\fIic\fP\^, ...) +.br + XIC \fIic\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.ds Al \ to get XIC values +.IP ... 1i +Specifies the variable length argument list\*(Al. +.LP +.eM +The +.PN XGetICValues +function returns NULL if no error occurred; otherwise, +it returns the name of the first argument that could not be obtained. +An argument could not be obtained for any of the following reasons: +.IP \(bu 5 +The argument name is not recognized. +.IP \(bu 5 +The input method encountered an implementation-dependent error. +.LP +Each IC attribute value argument (following a name) must point to +a location where the IC value is to be stored. +That is, if the IC value is of type T, +the argument must be of type T*. +If T itself is a pointer type, +then +.PN XGetICValues +allocates memory to store the actual data, +and the client is responsible for freeing this data by calling +.PN XFree +with the returned pointer. +The exception to this rule is for an IC value of type +.PN XVaNestedList +(for preedit and status attributes). +In this case, the argument must also be of type +.PN XVaNestedList . +Then, the rule of changing type T to T* and freeing the allocated data +applies to each element of the nested list. +.NH 3 +Input Context Values +.XS +\*(SN Input Context Values +.XE +.LP +The following tables describe how XIC values are interpreted +by an input method depending on the input style chosen by the +user. +.LP +The first column lists the XIC values. +The second column indicates which values are involved in affecting, +negotiating, and setting the geometry of the input method windows. +The subentries under the third column indicate the different +input styles that are supported. +Each of these columns indicates how each of the XIC values +are treated by that input style. +.LP +The following keys apply to these tables. +.TS H +lw(1i) lw(4.75i). +_ +.sp 6p +.B +Key Explanation +.sp 6p +_ +.TH +.R +C T{ +This value must be set with +.PN XCreateIC . +T} +D T{ +This value may be set using +.PN XCreateIC . +If it is not set, +a default is provided. +T} +G T{ +This value may be read using +.PN XGetICValues . +T} +GN T{ +This value may cause geometry negotiation when its value is set by means of +.PN XCreateIC +or +.PN XSetICValues . +T} +GR T{ +This value will be the response of the input method when any +GN value is changed. +T} +GS T{ +This value will cause the geometry of the input method window to be set. +T} +O T{ +This value must be set once and only once. +It need not be set at create time. +T} +S T{ +This value may be set with +.PN XSetICValues . +T} +Ignored T{ +This value is ignored by the input method for the given input style. +T} +.sp 6p +_ +.TE +.LP +.TS H +c c c s s s s +l c c c c c c +c c c c c c c +l c c c c c c. +_ +.sp 6p +.B + Input Style +XIC Value Geometry Preedit Preedit Preedit Preedit Preedit + Management Callback Position Area Nothing None +.sp 6p +_ +.sp 6p +.TH +.R +Input Style C-G C-G C-G C-G C-G +Client Window O-G O-G O-G O-G Ignored +Focus Window GN D-S-G D-S-G D-S-G D-S-G Ignored +Resource Name Ignored D-S-G D-S-G D-S-G Ignored +Resource Class Ignored D-S-G D-S-G D-S-G Ignored +Geometry Callback Ignored Ignored D-S-G Ignored Ignored +Filter Events G G G G Ignored +Destroy Callback D-S-G D-S-G D-S-G D-S-G D-S-G +String Conversion Callback S-G S-G S-G S-G S-G +String Conversion D-S-G D-S-G D-S-G D-S-G D-S-G +Reset State D-S-G D-S-G D-S-G D-S-G Ignored +HotKey S-G S-G S-G S-G Ignored +HotKeyState D-S-G D-S-G D-S-G D-S-G Ignored +.sp 6p +\fBPreedit\fP +Area GS Ignored D-S-G D-S-G Ignored Ignored +Area Needed GN-GR Ignored Ignored S-G Ignored Ignored +Spot Location Ignored D-S-G Ignored Ignored Ignored +Colormap Ignored D-S-G D-S-G D-S-G Ignored +Foreground Ignored D-S-G D-S-G D-S-G Ignored +Background Ignored D-S-G D-S-G D-S-G Ignored +Background Pixmap Ignored D-S-G D-S-G D-S-G Ignored +Font Set GN Ignored D-S-G D-S-G D-S-G Ignored +Line Spacing GN Ignored D-S-G D-S-G D-S-G Ignored +Cursor Ignored D-S-G D-S-G D-S-G Ignored +Preedit State D-S-G D-S-G D-S-G D-S-G Ignored +Preedit State Notify Callback S-G S-G S-G S-G Ignored +Preedit Callbacks C-S-G Ignored Ignored Ignored Ignored +.sp 6p +_ +.TE +.LP +.TS H +c c c s s s +l c c c c c +c c c c c c +l c c c c c. +_ +.sp 6p +.B + Input Style +XIC Value Geometry Status Status Status Status + Management Callback Area Nothing None +.sp 6p +_ +.sp 6p +.TH +.R +Input Style C-G C-G C-G C-G +Client Window O-G O-G O-G Ignored +Focus Window GN D-S-G D-S-G D-S-G Ignored +Resource Name Ignored D-S-G D-S-G Ignored +Resource Class Ignored D-S-G D-S-G Ignored +Geometry Callback Ignored D-S-G Ignored Ignored +Filter Events G G G G +.sp 6p +\fBStatus\fP +Area GS Ignored D-S-G Ignored Ignored +Area Needed GN-GR Ignored S-G Ignored Ignored +Colormap Ignored D-S-G D-S-G Ignored +Foreground Ignored D-S-G D-S-G Ignored +Background Ignored D-S-G D-S-G Ignored +Background Pixmap Ignored D-S-G D-S-G Ignored +Font Set GN Ignored D-S-G D-S-G Ignored +Line Spacing GN Ignored D-S-G D-S-G Ignored +Cursor Ignored D-S-G D-S-G Ignored +Status Callbacks C-S-G Ignored Ignored Ignored +.sp 6p +_ +.TE +.NH 4 +Input Style +.XS +\*(SN Input Style +.XE +.LP +The +.PN XNInputStyle +argument specifies the input style to be used. +The value of this argument must be one of the values returned by the +.PN XGetIMValues +function with the +.PN XNQueryInputStyle +argument specified in the supported_styles list. +.LP +Note that this argument must be set at creation time +and cannot be changed. +.NH 4 +Client Window +.XS +\*(SN Client Window +.XE +.LP +.IN "XNClientWindow" "" "@DEF@" +The +.PN XNClientWindow +argument specifies to the input method the client window in +which the input method +can display data or create subwindows. +Geometry values for input method areas are given with respect to the client +window. +Dynamic change of client window is not supported. +This argument may be set only once and +should be set before any input is done using this input context. +If it is not set, +the input method may not operate correctly. +.LP +If an attempt is made to set this value a second time with +.PN XSetICValues , +the string +.PN XNClientWindow +will be returned by +.PN XSetICValues , +and the client window will not be changed. +.LP +If the client window is not a valid window ID on the display +attached to the input method, +a +.PN BadWindow +error can be generated when this value is used by the input method. +.NH 4 +Focus Window +.XS +\*(SN Focus Window +.XE +.LP +.IN "XNFocusWindow" "" "@DEF@" +The +.PN XNFocusWindow +argument specifies the focus window. +The primary purpose of the +.PN XNFocusWindow +is to identify the window that will receive the key event when input +is composed. +In addition, the input method may possibly affect the focus window +as follows: +.IP \(bu 5 +Select events on it +.IP \(bu 5 +Send events to it +.IP \(bu 5 +Modify its properties +.IP \(bu 5 +Grab the keyboard within that window +.LP +The associated value must be of type +.PN Window . +If the focus window is not a valid window ID on the display +attached to the input method, +a +.PN BadWindow +error can be generated when this value is used by the input method. +.LP +When this XIC value is left unspecified, +the input method will use the client window as the default focus window. +.NH 4 +Resource Name and Class +.XS +\*(SN Resource Name and Class +.XE +.LP +.IN "XNResourceName" "" "@DEF@" +.IN "XNResourceClass" "" "@DEF@" +The +.PN XNResourceName +and +.PN XNResourceClass +arguments are strings that specify the full name and class +used by the client to obtain resources for the client window. +These values should be used as prefixes for name and class +when looking up resources that may vary according to the input context. +If these values are not set, +the resources will not be fully specified. +.LP +It is not intended that values that can be set as XIC values be +set as resources. +.NH 4 +Geometry Callback +.XS +\*(SN Geometry Callback +.XE +.LP +.IN "XNGeometryCallback" "" "@DEF@" +The +.PN XNGeometryCallback +argument is a structure of type +.PN XIMCallback +(see section 13.5.6.13.12). +.LP +The +.PN XNGeometryCallback +argument specifies the geometry callback that a client can set. +This callback is not required for correct operation of either +an input method or a client. +It can be set for a client whose user interface policy permits +an input method to request the dynamic change of that input +method's window. +An input method that does dynamic change will need to filter any +events that it uses to initiate the change. +.NH 4 +Filter Events +.XS +\*(SN Filter Events +.XE +.LP +.IN "XNFilterEvents" "" "@DEF@" +The +.PN XNFilterEvents +argument returns the event mask that an input method needs +to have selected for. +The client is expected to augment its own event mask +for the client window with this one. +.LP +This argument is read-only, is set by the input method at create time, +and is never changed. +.LP +The type of this argument is +.PN unsigned +.PN long . +Setting this value will cause an error. +.NH 4 +Destroy Callback +.XS +\*(SN Destroy Callback +.XE +.LP +The +.PN XNDestroyCallback +argument is a pointer to a structure of type +.PN XIMCallback +(see section 13.5.6.13.12). This callback is triggered when the input method +stops its service for any reason; for example, when a connection to an IM +server is broken. After the destroy callback is called, +the input context is destroyed and the input method is closed. +Therefore, the client should not call +.PN XDestroyIC +and +.PN XCloseIM . +.LP +.NH 4 +String Conversion Callback +.XS +\*(SN String Conversion Callback +.XE +.LP +The +.PN XNStringConversionCallback +argument is a structure of type +.PN XIMCallback +(see section 13.5.6.13.12). +.LP +The +.PN XNStringConversionCallback +argument specifies a string conversion callback. This callback +is not required for correct operation of +either the input method or the client. It can be set by a client +to support string conversions that may be requested +by the input method. An input method that does string conversions +will filter any events that it uses to initiate the conversion. +.LP +Because this XIC value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryICValuesList +before using this argument. +.LP +.NH 4 +String Conversion +.XS +\*(SN String Conversion +.XE +.LP +The +.PN XNStringConversion +argument is a structure of type +.PN XIMStringConversionText . +.LP +The +.PN XNStringConversion +argument specifies the string to be converted by an input method. +This argument is not required for correct operation of either +the input method or the client. +.LP +String conversion facilitates the manipulation of text independent +of preediting. +It is essential for some input methods and clients to manipulate +text by performing context-sensitive conversion, +reconversion, or transliteration conversion on it. +.LP +Because this XIC value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryICValuesList +before using this argument. +.LP +The +.PN XIMStringConversionText +structure is defined as follows: +.LP +.sM +.Ds 0 + +typedef struct _XIMStringConversionText { + unsigned short length; + XIMStringConversionFeedback *feedback; + Bool encoding_is_wchar; + union { + char *mbs; + wchar_t *wcs; + } string; +} XIMStringConversionText; + +typedef unsigned long XIMStringConversionFeedback; +.De +.LP +.eM +The feedback member is reserved for future use. The text to be +converted is defined by the string and length members. The length +is indicated in characters. To prevent the library from freeing memory +pointed to by an uninitialized pointer, the client should set the feedback +element to NULL. +.LP +.NH 4 +Reset State +.XS +\*(SN Reset State +.XE +.LP +The +.PN XNResetState +argument specifies the state the input context will return to after calling +.PN XmbResetIC +or +.PN XwcResetIC . +.LP +The XIC state may be set to its initial state, as specified by the +.PN XNPreeditState +value when +.PN XCreateIC +was called, or it may be set to preserve the current state. +.LP +The valid masks for +.PN XIMResetState +are as follows: +.LP +.IN "XIMInitialState" "" "@DEF@" +.IN "XINPreserveState" "" "@DEF@" +.sM +.LP +.Ds 0 +typedef unsigned long XIMResetState; +.De +.TS +lw(.5i) lw(2i) lw(2i). +T{ +#define +T} T{ +.PN XIMInitialState +T} T{ +(1L) +T} +T{ +#define +T} T{ +.PN XIMPreserveState +T} T{ +(1L<<1) +T} +.TE +.LP +.eM +If +.PN XIMInitialState +is set, then +.PN XmbResetIC +and +.PN XwcResetIC +will return to the initial +.PN XNPreeditState +state of the XIC. +.LP +If +.PN XIMPreserveState +is set, then +.PN XmbResetIC +and +.PN XwcResetIC +will preserve the current state of the XIC. +.LP +If +.PN XNResetState +is left unspecified, the default is +.PN XIMInitialState . +.LP +.PN XIMResetState +values other than those specified above will default to +.PN XIMInitialState . +.LP +Because this XIC value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryICValuesList +before using this argument. +.LP +.NH 4 +Hot Keys +.XS +\*(SN Hot Keys +.XE +.LP +The +.PN XNHotKey +argument specifies the hot key list to the XIC. +The hot key list is a pointer to the structure of type +.PN XIMHotKeyTriggers , +which specifies the key events that must be received +without any interruption of the input method. +For the hot key list set with this argument to be utilized, the client +must also set +.PN XNHotKeyState +to +.PN XIMHotKeyStateON . +.LP +Because this XIC value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryICValuesList +before using this functionality. +.LP +The value of the argument is a pointer to a structure of type +.PN XIMHotKeyTriggers . +.LP +If an event for a key in the hot key list is found, then the process will +receive the event and it will be processed inside the client. +.LP +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct { + KeySym keysym; + unsigned int modifier; + unsigned int modifier_mask; +} XIMHotKeyTrigger; + +typedef struct { + int num_hot_key; + XIMHotKeyTrigger *key; +} XIMHotKeyTriggers; +.De +.LP +.eM +.LP +The combination of modifier and modifier_mask are used to represent one of +three states for each modifier: +either the modifier must be on, or the modifier must be off, or the modifier +is a ``don't care'' \- it may be on or off. +When a modifier_mask bit is set to 0, the state of the associated modifier +is ignored when evaluating whether the key is hot or not. +.TS H +lw(1i) lw(1i) lw(3i). +_ +.sp 6p +.B +Modifier Bit Mask Bit Meaning +.sp 6p +_ +.sp 6p +.TH +.R +T{ +0 +T} T{ +1 +T} T{ +The modifier must be off. +T} +T{ +1 +T} T{ +1 +T} T{ +The modifier must be on. +T} +T{ +n/a +T} T{ +0 +T} T{ +Do not care if the modifier is on or off. +T} +.sp 6p +_ +.TE +.NH 4 +Hot Key State +.XS +\*(SN Hot Key State +.XE +.LP +The +.PN XNHotKeyState +argument specifies the hot key state of the input method. +This is usually used to switch the input method between hot key +operation and normal input processing. +.LP +The value of the argument is a pointer to a structure of type +XIMHotKeyState . +.LP +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef unsigned long XIMHotKeyState; +.De +.TS +lw(.5i) lw(3i) lw(2i). +T{ +#define +T} T{ +.PN XIMHotKeyStateON +T} T{ +(0x0001L) +T} +T{ +#define +T} T{ +.PN XIMHotKeyStateOFF +T} T{ +(0x0002L) +T} +.TE +.LP +.eM +.LP +If not specified, the default is +.PN XIMHotKeyStateOFF . +.LP +.NH 4 +Preedit and Status Attributes +.XS +\*(SN Preedit and Status Attributes +.XE +.LP +.IN "XNPreeditAttributes" "" "@DEF@" +.IN "XNStatusAttributes" "" "@DEF@" +The +.PN XNPreeditAttributes +and +.PN XNStatusAttributes +arguments specify to an input method the attributes to be used for the +preedit and status areas, +if any. +Those attributes are passed to +.PN XSetICValues +or +.PN XGetICValues +as a nested variable-length list. +The names to be used in these lists are described in the following sections. +.NH 5 +Area +.XS +\*(SN Area +.XE +.LP +.IN "XNArea" "" "@DEF@" +The value of the +.PN XNArea +argument must be a pointer to a structure of type +.PN XRectangle. +The interpretation of the +.PN XNArea +argument is dependent on the input method style that has been set. +.LP +If the input method style is +.PN XIMPreeditPosition , +.PN XNArea +specifies the clipping region within which preediting will take place. +If the focus window has been set, +the coordinates are assumed to be relative to the focus window. +Otherwise, the coordinates are assumed to be relative to the client window. +If neither has been set, +the results are undefined. +.LP +If +.PN XNArea +is not specified, is set to NULL, or is invalid, +the input method will default the clipping region +to the geometry of the +.PN XNFocusWindow . +If the area specified is NULL or invalid, +the results are undefined. +.LP +If the input style is +.PN XIMPreeditArea +or +.PN XIMStatusArea , +.PN XNArea +specifies the geometry provided by the client to the input method. +The input method may use this area to display its data, +either preedit or status depending on the area designated. +The input method may create a window as a child of the client window +with dimensions that fit the +.PN XNArea . +The coordinates are relative to the client window. +If the client window has not been set yet, +the input method should save these values +and apply them when the client window is set. +If +.PN XNArea +is not specified, is set to NULL, or is invalid, +the results are undefined. +.NH 5 +Area Needed +.XS +\*(SN Area Needed +.XE +.LP +.IN "XNAreaNeeded" "" "@DEF@" +When set, the +.PN XNAreaNeeded +argument specifies the geometry suggested by the client for this area +(preedit or status). +The value associated with the argument must be a pointer to a +structure of type +.PN XRectangle . +Note that the x, y values are not used +and that nonzero values for width or height are the constraints +that the client wishes the input method to respect. +.LP +When read, the +.PN XNAreaNeeded +argument specifies the preferred geometry desired by the input method +for the area. +.LP +This argument is only valid if the input style is +.PN XIMPreeditArea +or +.PN XIMStatusArea . +It is used for geometry negotiation between the client and the input method +and has no other effect on the input method +(see section 13.5.1.5). +.NH 5 +Spot Location +.XS +\*(SN Spot Location +.XE +.LP +.IN "XNSpotLocation" "" "@DEF@" +The +.PN XNSpotLocation +argument specifies to the input method the coordinates of the spot +to be used by an input method executing with +.PN XNInputStyle +set to +.PN XIMPreeditPosition . +When specified to any input method other than +.PN XIMPreeditPosition , +this XIC value is ignored. +.LP +The x coordinate specifies the position where the next character +would be inserted. +The y coordinate is the position of the baseline used +by the current text line in the focus window. +The x and y coordinates are relative to the focus window, if it has been set; +otherwise, they are relative to the client window. +If neither the focus window nor the client window has been set, +the results are undefined. +.LP +The value of the argument is a pointer to a structure of type +.PN XPoint . +.NH 5 +Colormap +.XS +\*(SN Colormap +.XE +.LP +Two different arguments can be used to indicate what colormap the input method +should use to allocate colors, a colormap ID, or a standard colormap name. +.LP +.IN "XNColormap" "" "@DEF@" +The +.PN XNColormap +argument is used to specify a colormap ID. +The argument value is of type +.PN Colormap . +An invalid argument may generate a +.PN BadColor +error when it is used by the input method. +.LP +.IN "XNStdColormap" "" "@DEF@" +The +.PN XNStdColormap +argument is used to indicate the name of the standard colormap +in which the input method should allocate colors. +The argument value is an +.PN Atom +that should be a valid atom for calling +.PN XGetRGBColormaps . +An invalid argument may generate a +.PN BadAtom +error when it is used by the input method. +.LP +If the colormap is left unspecified, +the client window colormap becomes the default. +.NH 5 +Foreground and Background +.XS +\*(SN Foreground and Background +.XE +.LP +.IN "XNForeground" "" "@DEF@" +.IN "XNBackground" "" "@DEF@" +The +.PN XNForeground +and +.PN XNBackground +arguments specify the foreground and background pixel, respectively. +The argument value is of type +.PN unsigned +.PN long . +It must be a valid pixel in the input method colormap. +.LP +If these values are left unspecified, +the default is determined by the input method. +.NH 5 +Background Pixmap +.XS +\*(SN Background Pixmap +.XE +.LP +The +.PN XNBackgroundPixmap +argument specifies a background pixmap to be used as the background of the +window. +The value must be of type +.PN Pixmap . +An invalid argument may generate a +.PN BadPixmap +error when it is used by the input method. +.LP +If this value is left unspecified, +the default is determined by the input method. +.NH 5 +Font Set +.XS +\*(SN Font Set +.XE +.LP +.IN "XNFontSet" "" "@DEF@" +The +.PN XNFontSet +argument specifies to the input method what font set is to be used. +The argument value is of type +.PN XFontSet . +.LP +If this value is left unspecified, +the default is determined by the input method. +.NH 5 +Line Spacing +.XS +\*(SN Line Spacing +.XE +.LP +The +.PN XNLineSpace +argument specifies to the input method what line spacing is to be used +in the preedit window if more than one line is to be used. +This argument is of type +.PN int . +.LP +If this value is left unspecified, +the default is determined by the input method. +.NH 5 +Cursor +.XS +\*(SN Cursor +.XE +.LP +.IN "XNCursor" "" "DEF@" +The +.PN XNCursor +argument specifies to the input method what cursor is to be used +in the specified window. +This argument is of type +.PN Cursor . +.LP +An invalid argument may generate a +.PN BadCursor +error when it is used by the input method. +If this value is left unspecified, +the default is determined by the input method. +.NH 5 +Preedit State +.XS +\*(SN Preedit State +.XE +.LP +The +.PN XNPreeditState +argument specifies the state of input preediting for the input method. +Input preediting can be on or off. +.LP +The valid mask names for +.PN XNPreeditState +are as follows: +.LP +.IN "XIMPreeditUnknown" "" "@DEV@" +.IN "XIMPreeditEnable" "" "@DEF@" +.IN "XIMPreeditDisable" "" "@DEV@" +.sM +.LP +.Ds 0 +typedef unsigned long XIMPreeditState; +.De +.TS +lw(.5i) lw(2i) lw(2i). +T{ +#define +T} T{ +.PN XIMPreeditUnknown +T} T{ +0L +T} +T{ +#define +T} T{ +.PN XIMPreeditEnable +T} T{ +1L +T} +T{ +#define +T} T{ +.PN XIMPreeditDisable +T} T{ +(1L<<1) +T} +.TE +.LP +.eM +If a value of +.PN XIMPreeditEnable +is set, then input preediting is turned on by the input method. +.LP +If a value of +.PN XIMPreeditDisable +is set, then input preediting is turned off by the input method. +.LP +If +.PN XNPreeditState +is left unspecified, then the state will be implementation-dependent. +.LP +When +.PN XNResetState +is set to +.PN XIMInitialState , +the +.PN XNPreeditState +value specified at the creation time will be reflected as the initial state for +.PN XmbResetIC +and +.PN XwcResetIC . +.LP +Because this XIC value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryICValuesList +before using this argument. +.NH 5 +Preedit State Notify Callback +.XS +\*(SN Preedit State Notify Callback +.XE +.LP +The preedit state notify callback is triggered by the input method +when the preediting state has changed. +The value of the +.PN XNPreeditStateNotifyCallback +argument is a pointer to a structure of type +.PN XIMCallback . +The generic prototype is as follows: +.IN "PreeditStateNotifyCallback" "" "@DEF@" +.sM +.FD 0 +void PreeditStateNotifyCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XIMPreeditStateNotifyCallbackStruct *\fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Specifies the current preedit state. +.LP +.eM +The +.PN XIMPreeditStateNotifyCallbackStruct +structure is defined as follows: +.LP +.IN "XIMPreeditStateNotifyCallbackStruct" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct _XIMPreeditStateNotifyCallbackStruct { + XIMPreeditState state; +} XIMPreeditStateNotifyCallbackStruct; +.De +.LP +.eM +.LP +Because this XIC value is optional, a client should call +.PN XGetIMValues +with argument +.PN XNQueryICValuesList +before using this argument. +.NH 5 +Preedit and Status Callbacks +.XS +\*(SN Preedit and Status Callbacks +.XE +.LP +A client that wants to support the input style +.PN XIMPreeditCallbacks +must provide a set of preedit callbacks to the input method. +The set of preedit callbacks is as follows: +.IN "XNPreeditStartCallback" "" "@DEF@" +.IN "XNPreeditDoneCallback" "" "@DEF@" +.IN "XNPreeditDrawCallback" "" "@DEF@" +.IN "XNPreeditCaretCallback" "" "@DEF@" +.TS +lw(1.75i) lw(4i). +T{ +.PN XNPreeditStartCallback +T} T{ +This is called when the input method starts preedit. +T} +T{ +.PN XNPreeditDoneCallback +T} T{ +This is called when the input method stops preedit. +T} +T{ +.PN XNPreeditDrawCallback +T} T{ +This is called when a number of preedit keystrokes should be echoed. +T} +T{ +.PN XNPreeditCaretCallback +T} T{ +This is called to move the text insertion point within the preedit string. +T} +.TE +.LP +A client that wants to support the input style +.PN XIMStatusCallbacks +must provide a set of status callbacks to the input method. +The set of status callbacks is as follows: +.IN "XNStatusStartCallback" "" "@DEF@" +.IN "XNStatusDoneCallback" "" "@DEF@" +.IN "XNStatusDrawCallback" "" "@DEF@" +.TS +lw(1.75i) lw(4i). +T{ +.PN XNStatusStartCallback +T} T{ +This is called when the input method initializes the status area. +T} +T{ +.PN XNStatusDoneCallback +T} T{ +This is called when the input method no longer needs the status area. +T} +T{ +.PN XNStatusDrawCallback +T} T{ +This is called when updating of the status area is required. +T} +.TE +.LP +The value of any status or preedit argument is a pointer +to a structure of type +.PN XIMCallback . +.IN "XIMProc" "" "@DEF@" +.IN "XIMCallback" "" "@DEF@" +.sM +.LP +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef void (*XIMProc)(); + +typedef struct { + XPointer client_data; + XIMProc callback; +} XIMCallback; +.De +.LP +.eM +Each callback has some particular semantics and will carry the data +that expresses the environment necessary to the client +into a specific data structure. +This paragraph only describes the arguments to be used to set +the callback. +.LP +Setting any of these values while doing preedit +may cause unexpected results. +.NH 3 +Input Method Callback Semantics +.XS +\*(SN Input Method Callback Semantics +.XE +.LP +XIM callbacks are procedures defined by clients or text drawing packages +that are to be called from the input method when selected events occur. +Most clients will use a text editing package or a toolkit +and, hence, will not need to define such callbacks. +This section defines the callback semantics, when they are triggered, +and what their arguments are. +This information is mostly useful for X toolkit implementors. +.LP +Callbacks are mostly provided so that clients (or text editing +packages) can implement on-the-spot preediting in their own window. +In that case, +the input method needs to communicate and synchronize with the client. +The input method needs to communicate changes in the preedit window +when it is under control of the client. +Those callbacks allow the client to initialize the preedit area, +display a new preedit string, +move the text insertion point during preedit, +terminate preedit, or update the status area. +.LP +All callback procedures follow the generic prototype: +.IN "CallbackPrototype" "" "@DEF@" +.sM +.FD 0 +void CallbackPrototype\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + SomeType \fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Specifies data specific to the callback. +.LP +.eM +The call_data argument is a structure that expresses the arguments needed +to achieve the semantics; +that is, +it is a specific data structure appropriate to the callback. +In cases where no data is needed in the callback, +this call_data argument is NULL. +The client_data argument is a closure that has been initially specified +by the client when specifying the callback and passed back. +It may serve, for example, to inherit application context in the callback. +.LP +The following paragraphs describe the programming semantics +and specific data structure associated with the different reasons. +.NH 4 +Geometry Callback +.XS +\*(SN Geometry Callback +.XE +.LP +The geometry callback is triggered by the input method +to indicate that it wants the client to negotiate geometry. +The generic prototype is as follows: +.IN "GeometryCallback" "" "@DEF@" +.sM +.FD 0 +void GeometryCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +The callback is called with a NULL call_data argument. +.NH 4 +Destroy Callback +.XS +\*(SN Destroy Callback +.XE +.LP +The destroy callback is triggered by the input method +when it stops service for any reason. +After the callback is invoked, the input context will be freed by Xlib. +The generic prototype is as follows: +.IN "DestroyCallback" "" "@DEF@" +.sM +.FD 0 +void DestroyCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +The callback is called with a NULL call_data argument. +.NH 4 +String Conversion Callback +.XS +\*(SN String Conversion Callback +.XE +.LP +The string conversion callback is triggered by the input method +to request the client to return the string to be converted. The +returned string may be either a multibyte or wide character string, +with an encoding matching the locale bound to the input context. +The callback prototype is as follows: +.IN "StringConversionCallback" "" "@DEF@" +.sM +.FD 0 +void StringConversionCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XIMStringConversionCallbackStruct *\fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input method. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Specifies the amount of the string to be converted. +.LP +.eM +The callback is passed an +.PN XIMStringConversionCallbackStruct +structure in the call_data argument. +The text member is an +.PN XIMStringConversionText +structure (see section 13.5.6.9) to be filled in by the client +and describes the text to be sent to the input method. +The data pointed to by the +string and feedback elements of the +.PN XIMStringConversionText +structure will be freed using +.PN XFree +by the input method +after the callback returns. So the client should not point to +internal buffers that are critical to the client. +Similarly, because the feedback element is currently reserved for future +use, the client should set feedback to NULL to prevent the library from +freeing memory at some random location due to an uninitialized pointer. +.LP +The +.PN XIMStringConversionCallbackStruct +structure is defined as follows: +.LP +.IN "XIMStringConversionCallbackStruct" "" "@DEF@" +.sM +.LP +.Ds 0 +typedef struct _XIMStringConversionCallbackStruct { + XIMStringConversionPosition position; + XIMCaretDirection direction; + short factor; + XIMStringConversionOperation operation; + XIMStringConversionText *text; +} XIMStringConversionCallbackStruct; + +typedef short XIMStringConversionPosition; + +typedef unsigned short XIMStringConversionOperation; + +.De +.LP +.TS +lw(.5i) lw(3i) lw(2i). +T{ +#define +T} T{ +.PN XIMStringConversionSubstitution +T} T{ +(0x0001) +T} +T{ +#define +T} T{ +.PN XIMStringConversionRetrieval +T} T{ +(0x0002) +T} +.TE +.LP +.eM +.PN XIMStringConversionPosition +specifies the starting position of the string to be returned +in the +.PN XIMStringConversionText +structure. The value identifies a position, in units of characters, +relative to the client's cursor position in the client's buffer. +.LP +The ending position of the text buffer is determined by +the direction and factor members. Specifically, it is the character position +relative to the starting point as defined by the +.PN XIMCaretDirection . +The factor member of +.PN XIMStringConversionCallbackStruct +specifies the number of +.PN XIMCaretDirection +positions to be applied. For example, if the direction specifies +.PN XIMLineEnd +and factor is 1, then all characters from the starting position to +the end of the current display line are returned. If the direction +specifies +.PN XIMForwardChar +or +.PN XIMBackwardChar , +then the factor specifies a relative position, indicated in characters, +from the starting position. +.LP +.PN XIMStringConversionOperation +specifies whether the string to be converted should be +deleted (substitution) or copied (retrieval) from the client's +buffer. When the +.PN XIMStringConversionOperation +is +.PN XIMStringConversionSubstitution , +the client must delete the string to be converted from its own buffer. +When the +.PN XIMStringConversionOperation +is +.PN XIMStringConversionRetrieval , +the client must not delete the string to be converted from its buffer. +The substitute operation is typically used for reconversion and +transliteration conversion, +while the retrieval operation is typically used for context-sensitive +conversion. +.NH 4 +Preedit State Callbacks +.XS +\*(SN Preedit State Callbacks +.XE +.LP +When the input method turns preediting on or off, a +.PN PreeditStartCallback +or +.PN PreeditDoneCallback +callback is triggered to let the toolkit do the setup +or the cleanup for the preedit region. +.IN "PreeditStartCallback" "" "@DEF@" +.sM +.FD 0 +int PreeditStartCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +When preedit starts on the specified input context, +the callback is called with a NULL call_data argument. +.PN PreeditStartCallback +will return the maximum size of the preedit string. +A positive number indicates the maximum number of bytes allowed +in the preedit string, +and a value of \-1 indicates there is no limit. +.IN "PreeditDoneCallback" "" "@DEF@" +.sM +.FD 0 +void PreeditDoneCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +When preedit stops on the specified input context, +the callback is called with a NULL call_data argument. +The client can release the data allocated by +.PN PreeditStartCallback . +.LP +.PN PreeditStartCallback +should initialize appropriate data needed for +displaying preedit information and for handling further +.PN PreeditDrawCallback +calls. +Once +.PN PreeditStartCallback +is called, it will not be called again before +.PN PreeditDoneCallback +has been called. +.NH 4 +Preedit Draw Callback +.XS +\*(SN Preedit Draw Callback +.XE +.LP +This callback is triggered to draw and insert, delete or replace, +preedit text in the preedit region. +The preedit text may include unconverted input text such as Japanese Kana, +converted text such as Japanese Kanji characters, or characters of both kinds. +That string is either a multibyte or wide character string, +whose encoding matches the locale bound to the input context. +The callback prototype +is as follows: +.IN "PreeditDrawCallback" "" "@DEF@" +.sM +.FD 0 +void PreeditDrawCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XIMPreeditDrawCallbackStruct *\fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Specifies the preedit drawing information. +.LP +.eM +The callback is passed an +.PN XIMPreeditDrawCallbackStruct +structure in the call_data argument. +The text member of this structure contains the text to be drawn. +After the string has been drawn, +the caret should be moved to the specified location. +.LP +The +.PN XIMPreeditDrawCallbackStruct +structure is defined as follows: +.LP +.IN "XIMPreeditDrawCallbackStruct" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct _XIMPreeditDrawCallbackStruct { + int caret; /* Cursor offset within preedit string */ + int chg_first; /* Starting change position */ + int chg_length; /* Length of the change in character count */ + XIMText *text; +} XIMPreeditDrawCallbackStruct; +.De +.LP +.eM +The client must keep updating a buffer of the preedit text +and the callback arguments referring to indexes in that buffer. +The call_data fields have specific meanings according to the operation, +as follows: +.IP \(bu 5 +To indicate text deletion, +the call_data member specifies a NULL text field. +The text to be deleted is then the current text in the buffer +from position chg_first (starting at zero) on a character length +of chg_length. +.IP \(bu 5 +When text is non-NULL, +it indicates insertion or replacement of text in the buffer. +.IP +The chg_length member +identifies the number of characters in the current preedit buffer +that are affected by this call. +A positive chg_length indicates that chg_length number of characters, starting +at chg_first, must be deleted or must be replaced by text, whose length is +specified in the +.PN XIMText +structure. +.IP +A chg_length value of zero indicates that text must be inserted +right at the position specified by chg_first. +A value of zero for chg_first specifies the first character in the buffer. +.IP +chg_length and chg_first combine to identify the modification required to +the preedit buffer; beginning at chg_first, replace chg_length number of +characters with the text in the supplied +.PN XIMText +structure. For example, suppose the preedit buffer contains the string "ABCDE". +.IP +.DS I +.ft C +Text: A B C D E + ^ ^ ^ ^ ^ ^ +CharPos: 0 1 2 3 4 5 +.sp +.ft P +.DE +The CharPos in the diagram shows the location of the character position +relative to the character. +.IP +If the value of chg_first is 1 and the value of chg_length is 3, this +says to replace 3 characters beginning at character position 1 with the +string in the +.PN XIMText +structure. +Hence, BCD would be replaced by the value in the structure. +.IP +Though chg_length and chg_first are both signed integers they will +never have a negative value. +.IP \(bu 5 +The caret member +identifies the character position before which the cursor should +be placed \- after modification to the preedit buffer has been completed. +For example, if caret is zero, the cursor is at +the beginning of the buffer. If the caret is one, the cursor is between +the first and second character. +.LP +.IN "XIMText" "" @DEF@" +.sM +.Ds +.TA .5i 1.5i 3i +typedef struct _XIMText { + unsigned short length; + XIMFeedback * feedback; + Bool encoding_is_wchar; + union { + char * multi_byte; + wchar_t * wide_char; + } string; +} XIMText; +.De +.LP +.eM +The text string passed is actually a structure specifying as follows: +.IP \(bu 5 +The length member is the text length in characters. +.IP \(bu 5 +The encoding_is_wchar member is a value that indicates +if the text string is encoded in wide character or multibyte format. +The text string may be passed either as multibyte or as wide character; +the input method controls in which form data is passed. +The client's +callback routine must be able to handle data passed in either form. +.IP \(bu 5 +The string member is the text string. +.IP \(bu 5 +The feedback member indicates rendering type for each character in the +string member. +If string is NULL (indicating that only highlighting of the existing +preedit buffer should be updated), feedback points to length highlight +elements that should be applied to the existing preedit buffer, beginning +at chg_first. +.LP +The feedback member expresses the types of rendering feedback +the callback should apply when drawing text. +Rendering of the text to be drawn is specified either in generic ways +(for example, primary, secondary) or in specific ways (reverse, underline). +When generic indications are given, +the client is free to choose the rendering style. +It is necessary, however, that primary and secondary be mapped +to two distinct rendering styles. +.LP +If an input method wants to control display of the preedit string, an +input method can indicate the visibility hints using feedbacks in +a specific way. +The +.PN XIMVisibleToForward , +.PN XIMVisibleToBackward , +and +.PN XIMVisibleCenter +masks are exclusively used for these visibility hints. +The +.PN XIMVisibleToForward +mask +indicates that the preedit text is preferably displayed in the +primary draw direction from the +caret position in the preedit area forward. +The +.PN XIMVisibleToBackward +mask +indicates that the preedit text is preferably displayed from +the caret position in the preedit area backward, relative to the primary +draw direction. +The +.PN XIMVisibleCenter +mask +indicates that the preedit text is preferably displayed with +the caret position in the preedit area centered. +.LP +The insertion point of the preedit string could exist outside of +the visible area when visibility hints are used. +Only one of the +masks +is valid for the entire preedit string, and only one character +can hold one of these feedbacks for a given input context at one time. +This feedback may be OR'ed together with another highlight (such as +.PN XIMReverse ). +Only the most recently set feedback is valid, and any previous +feedback is automatically canceled. This is a hint to the client, and +the client is free to choose how to display the preedit string. +.LP +The feedback member also specifies how rendering of the text argument +should be performed. +If the feedback is NULL, +the callback should apply the same feedback as is used for the surrounding +characters in the preedit buffer; if chg_first is at a highlight boundary, +the client can choose which of the two highlights to use. +If feedback is not NULL, feedback specifies an array defining the +rendering for each +character of the string, and the length of the array is thus length. +.LP +If an input method wants to indicate that it is only updating the feedback of +the preedit text without changing the content of it, +the +.PN XIMText +structure will contain a NULL value for the string field, +the number of characters affected (relative to chg_first) +will be in the length field, +and the feedback field will point to an array of +.PN XIMFeedback . +.LP +Each element in the feedback array is a bitmask represented by a value of type +.PN XIMFeedback . +The valid mask names are as follows: +.LP +.IN "XIMReverse" "" "@DEF@" +.IN "XIMUnderline" "" "@DEF@" +.IN "XIMHighlight" "" "@DEF@" +.IN "XIMPrimary" "" "@DEF@" +.IN "XIMSecondary" "" "@DEF@" +.IN "XIMTertiary" "" "@DEF@" +.IN "XIMVisibleToForward" "" "@DEF@" +.IN "XIMVisibleToBackward" "" "@DEF@" +.IN "XIMVisibleCenter" "" "@DEF@" +.sM +.LP +.Ds 0 +typedef unsigned long XIMFeedback; +.De +.TS +lw(.5i) lw(2i) lw(2i). +T{ +#define +T} T{ +.PN XIMReverse +T} T{ +1L +T} +T{ +#define +T} T{ +.PN XIMUnderline +T} T{ +(1L<<1) +T} +T{ +#define +T} T{ +.PN XIMHighlight +T} T{ +(1L<<2) +T} +T{ +#define +T} T{ +.PN XIMPrimary +T} T{ +(1L<<5)\(dg +T} +T{ +#define +T} T{ +.PN XIMSecondary +T} T{ +(1L<<6)\(dg +T} +T{ +#define +T} T{ +.PN XIMTertiary +T} T{ +(1L<<7)\(dg +T} +T{ +#define +T} T{ +.PN XIMVisibleToForward +T} T{ +(1L<<8) +T} +T{ +#define +T} T{ +.PN XIMVisibleToBackward +T} T{ +(1L<<9) +T} +T{ +#define +T} T{ +.PN XIMVisibleCenter +T} T{ +(1L<<10) +T} +.TE +.LP +.eM +.LP +Characters drawn with the +.PN XIMReverse +highlight should be drawn by swapping the foreground and background colors +used to draw normal, unhighlighted characters. +Characters drawn with the +.PN XIMUnderline +highlight should be underlined. +Characters drawn with the +.PN XIMHighlight , +.PN XIMPrimary , +.PN XIMSecondary , +and +.PN XIMTertiary +highlights should be drawn in some unique manner that must be different +from +.PN XIMReverse +and +.PN XIMUnderline . +.FS \(dg +The values for +.PN XIMPrimary , +.PN XIMSecondary , +and +.PN XIMTertiary +were incorrectly defined in the R5 specification. +The X Consortium's X11R5 +implementation correctly implemented the values for these highlights. +The value of these highlights has been corrected in this specification +to agree with the values in the Consortium's X11R5 and X11R6 implementations. +.FE +.NH 4 +Preedit Caret Callback +.XS +\*(SN Preedit Caret Callback +.XE +.LP +An input method may have its own navigation keys to allow the user +to move the text insertion point in the preedit area +(for example, to move backward or forward). +Consequently, input method needs to indicate to the client that it +should move the text insertion point. +It then calls the PreeditCaretCallback. +.IN "PreeditCaretCallback" "" "@DEF@" +.sM +.FD 0 +void PreeditCaretCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XIMPreeditCaretCallbackStruct *\fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Specifies the preedit caret information. +.LP +.eM +The input method will trigger PreeditCaretCallback +to move the text insertion point during preedit. +The call_data argument contains a pointer to an +.PN XIMPreeditCaretCallbackStruct +structure, +which indicates where the caret should be moved. +The callback must move the insertion point to its new location +and return, in field position, the new offset value from the initial position. +.LP +The +.PN XIMPreeditCaretCallbackStruct +structure is defined as follows: +.IN "XIMPreeditCaretCallbackStruct" "" "@DEF@" +.LP +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef struct _XIMPreeditCaretCallbackStruct { + int position; /* Caret offset within preedit string */ + XIMCaretDirection direction; /* Caret moves direction */ + XIMCaretStyle style; /* Feedback of the caret */ +} XIMPreeditCaretCallbackStruct; +.De +.LP +.eM +The +.PN XIMCaretStyle +structure is defined as follows: +.LP +.IN "XIMCaretStyle" "" "@DEF@" +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef enum { + XIMIsInvisible, /* Disable caret feedback */ + XIMIsPrimary, /* UI defined caret feedback */ + XIMIsSecondary, /* UI defined caret feedback */ +} XIMCaretStyle; +.De +.LP +.eM +The +.PN XIMCaretDirection +structure is defined as follows: +.IN "XIMCaretDirection" "" "@DEF@" +.LP +.sM +.Ds 0 +.TA .5i 2.5i +.ta .5i 2.5i +typedef enum { + XIMForwardChar, XIMBackwardChar, + XIMForwardWord, XIMBackwardWord, + XIMCaretUp, XIMCaretDown, + XIMNextLine, XIMPreviousLine, + XIMLineStart, XIMLineEnd, + XIMAbsolutePosition, + XIMDontChange, + } XIMCaretDirection; +.De +.LP +.eM +These values are defined as follows: +.IN "XIMForwardChar" "" "@DEF@" +.IN "XIMBackwardChar" "" "@DEF@" +.IN "XIMForwardWord" "" "@DEF@" +.IN "XIMBackwardWord" "" "@DEF@" +.IN "XIMCaretUp" "" "@DEF@" +.IN "XIMCaretDown" "" "@DEF@" +.TS +lw(1.5i) lw(4.25i). +T{ +.PN XIMForwardChar +T} T{ +Move the caret forward one character position. +T} +T{ +.PN XIMBackwardChar +T} T{ +Move the caret backward one character position. +T} +T{ +.PN XIMForwardWord +T} T{ +Move the caret forward one word. +T} +T{ +.PN XIMBackwardWord +T} T{ +Move the caret backward one word. +T} +T{ +.PN XIMCaretUp +T} T{ +Move the caret up one line keeping the current horizontal offset. +T} +T{ +.PN XIMCaretDown +T} T{ +Move the caret down one line keeping the current horizontal offset. +T} +T{ +.PN XIMPreviousLine +T} T{ +Move the caret to the beginning of the previous line. +T} +T{ +.PN XIMNextLine +T} T{ +Move the caret to the beginning of the next line. +T} +T{ +.PN XIMLineStart +T} T{ +Move the caret to the beginning of the current display line +that contains the caret. +T} +T{ +.PN XIMLineEnd +T} T{ +Move the caret to the end of the current display line +that contains the caret. +T} +T{ +.PN XIMAbsolutePosition +T} T{ +The callback must move to the location specified by the position field +of the callback data, indicated in characters, starting from the beginning +of the preedit text. +Hence, a value of zero means move back to the beginning of the preedit text. +T} +T{ +.PN XIMDontChange +T} T{ +The caret position does not change. +T} +.TE +.IN "XIMNextLine" "" "@DEF@" +.IN "XIMPreviousLine" "" "@DEF@" +.IN "XIMLineStart" "" "@DEF@" +.IN "XIMLineEnd" "" "@DEF@" +.IN "XIMAbsolutePosition" "" "@DEF@" +.IN "XIMDontChange" "" "@DEF@" +.NH 4 +Status Callbacks +.XS +\*(SN Status Callbacks +.XE +.LP +An input method may communicate changes in the status of an input context +(for example, created, destroyed, or focus changes) with three status +callbacks: StatusStartCallback, StatusDoneCallback, and StatusDrawCallback. +.LP +.sp +When the input context is created or gains focus, +the input method calls the StatusStartCallback callback. +.IN "StatusStartCallback" "" "@DEF@" +.sM +.FD 0 +void StatusStartCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +The callback should initialize appropriate data for displaying status +and for responding to StatusDrawCallback calls. +Once StatusStartCallback is called, +it will not be called again before StatusDoneCallback has been called. +.LP +.sp +When an input context +is destroyed or when it loses focus, the input method calls StatusDoneCallback. +.IN "StatusDoneCallback" "" "@DEF@" +.sM +.FD 0 +void StatusDoneCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XPointer \fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Not used for this callback and always passed as NULL. +.LP +.eM +The callback may release any data allocated on +.PN StatusStart . +.LP +.sp +When an input context status has to be updated, the input method calls +StatusDrawCallback. +.IN "StatusDrawCallback" "" "@DEF@" +.sM +.FD 0 +void StatusDrawCallback\^(\^\fIic\fP\^, \fIclient_data\fP\^, \fIcall_data\fP\^) +.br + XIC \fIic\fP\^; +.br + XPointer \fIclient_data\fP\^; +.br + XIMStatusDrawCallbackStruct *\fIcall_data\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.IP \fIclient_data\fP 1i +Specifies the additional client data. +.IP \fIcall_data\fP 1i +Specifies the status drawing information. +.LP +.eM +The callback should update the status area by either drawing a string +or imaging a bitmap in the status area. +.LP +The +.PN XIMStatusDataType +and +.PN XIMStatusDrawCallbackStruct +structures are defined as follows: +.IN "XIMStatusDataType" "" "@DEF@" +.IN "XIMStatusDrawCallbackStruct" "" "@DEF@" +.LP +.sM +.Ds 0 +.TA .5i 1i 3i +.ta .5i 1i 3i +typedef enum { + XIMTextType, + XIMBitmapType, +} XIMStatusDataType; + +typedef struct _XIMStatusDrawCallbackStruct { + XIMStatusDataType type; + union { + XIMText *text; + Pixmap bitmap; + } data; +} XIMStatusDrawCallbackStruct; +.De +.LP +.eM +.LP +The feedback styles +.PN XIMVisibleToForward , +.PN XIMVisibleToBackward , +and +.PN XIMVisibleToCenter +are not relevant and will not appear in the +.PN XIMFeedback +element of the +.PN XIMText +structure. +.LP +.NH 3 +Event Filtering +.XS +\*(SN Event Filtering +.XE +.LP +Xlib provides the ability for an input method +to register a filter internal to Xlib. +This filter is called by a client (or toolkit) by calling +.PN XFilterEvent +after calling +.PN XNextEvent . +Any client that uses the +.PN XIM +interface should call +.PN XFilterEvent +to allow input methods to process their events without knowledge +of the client's dispatching mechanism. +A client's user interface policy may determine the priority +of event filters with respect to other event-handling mechanisms +(for example, modal grabs). +.LP +Clients may not know how many filters there are, if any, +and what they do. +They may only know if an event has been filtered on return of +.PN XFilterEvent . +Clients should discard filtered events. +.sp +.LP +To filter an event, use +.PN XFilterEvent . +.IN "XFilterEvent" "" "@DEF@" +.sM +.FD 0 +Bool XFilterEvent\^(\^\fIevent\fP\^, \fIw\fP\^) +.br + XEvent *\fIevent\fP\^; +.br + Window \fIw\fP\^; +.FN +.ds Ev event to filter +.IP \fIevent\fP 1i +Specifies the \*(Ev. +.ds Wi for which the filter is to be applied +.IP \fIw\fP 1i +Specifies the window \*(Wi. +.LP +.eM +If the window argument is +.PN None , +.PN XFilterEvent +applies the filter to the window specified in the +.PN XEvent +structure. +The window argument is provided so that layers above Xlib +that do event redirection can indicate to which window an event +has been redirected. +.LP +If +.PN XFilterEvent +returns +.PN True , +then some input method has filtered the event, +and the client should discard the event. +If +.PN XFilterEvent +returns +.PN False , +then the client should continue processing the event. +.LP +If a grab has occurred in the client and +.PN XFilterEvent +returns +.PN True , +the client should ungrab the keyboard. +.NH 3 +Getting Keyboard Input +.XS +\*(SN Getting Keyboard Input +.XE +.LP +To get composed input from an input method, +use +.PN XmbLookupString +or +.PN XwcLookupString . +.IN "XmbLookupString" "" "@DEF@" +.IN "XwcLookupString" "" "@DEF@" +.sM +.FD 0 +int XmbLookupString\^(\^\fIic\fP\^, \fIevent\fP\^, \fIbuffer_return\fP\^, \fIbytes_buffer\fP\^, \fIkeysym_return\fP\^, \fIstatus_return\fP\^) +.br + XIC \fIic\fP\^; +.br + XKeyPressedEvent *\fIevent\fP; +.br + char *\fIbuffer_return\fP\^; +.br + int \fIbytes_buffer\fP\^; +.br + KeySym *\fIkeysym_return\fP\^; +.br + Status *\fIstatus_return\fP\^; +.FN +.FD 0 +int XwcLookupString\^(\^\fIic\fP\^, \fIevent\fP\^, \fIbuffer_return\fP\^, \fIbytes_buffer\fP\^, \fIkeysym_return\fP\^, \fIstatus_return\fP\^) +.br + XIC \fIic\fP\^; +.br + XKeyPressedEvent *\fIevent\fP\^; +.br + wchar_t *\fIbuffer_return\fP\^; +.br + int \fIwchars_buffer\fP\^; +.br + KeySym *\fIkeysym_return\fP\^; +.br + Status *\fIstatus_return\fP\^; +.FN +.IP \fIic\fP 1i +Specifies the input context. +.ds Ev key event to be used +.IP \fIevent\fP 1i +Specifies the \*(Ev. +.IP \fIbuffer_return\fP 1i +Returns a multibyte string or wide character string (if any) +from the input method. +.IP \fIbytes_buffer\fP 1i +.br +.ns +.IP \fIwchars_buffer\fP 1i +Specifies space available in the return buffer. +.IP \fIkeysym_return\fP 1i +Returns the KeySym computed from the event if this argument is not NULL. +.IP \fIstatus_return\fP 1i +Returns a value indicating what kind of data is returned. +.LP +.eM +The +.PN XmbLookupString +and +.PN XwcLookupString +functions return the string from the input method specified +in the buffer_return argument. +If no string is returned, +the buffer_return argument is unchanged. +.LP +The KeySym into which the KeyCode from the event was mapped is returned +in the keysym_return argument if it is non-NULL and the status_return +argument indicates that a KeySym was returned. +If both a string and a KeySym are returned, +the KeySym value does not necessarily correspond to the string returned. +.LP +.PN XmbLookupString +returns the length of the string in bytes, and +.PN XwcLookupString +returns the length of the string in characters. +Both +.PN XmbLookupString +and +.PN XwcLookupString +return text in the encoding of the locale bound to the input method +of the specified input context. +.LP +Each string returned by +.PN XmbLookupString +and +.PN XwcLookupString +begins in the initial state of the encoding of the locale +(if the encoding of the locale is state-dependent). +.NT +To insure proper input processing, +it is essential that the client pass only +.PN KeyPress +events to +.PN XmbLookupString +and +.PN XwcLookupString . +Their behavior when a client passes a +.PN KeyRelease +event is undefined. +.NE +.LP +Clients should check the status_return argument before +using the other returned values. +These two functions both return a value to status_return +that indicates what has been returned in the other arguments. +The possible values returned are: +.TS +lw(1.5i) lw(4.3i). +T{ +.PN XBufferOverflow +T} T{ +The input string to be returned is too large for the supplied buffer_return. +The required size +.Pn ( XmbLookupString +in bytes; +.PN XwcLookupString +in characters) is returned as the value of the function, +and the contents of buffer_return and keysym_return are not modified. +The client should recall the function with the same event +and a buffer of adequate size to obtain the string. +T} +T{ +.PN XLookupNone +T} T{ +No consistent input has been composed so far. +The contents of buffer_return and keysym_return are not modified, +and the function returns zero. +T} +T{ +.PN XLookupChars +T} T{ +Some input characters have been composed. +They are placed in the buffer_return argument, +and the string length is returned as the value of the function. +The string is encoded in the locale bound to the input context. +The content of the keysym_return argument is not modified. +T} +T{ +.PN XLookupKeySym +T} T{ +A KeySym has been returned instead of a string +and is returned in keysym_return. +The content of the buffer_return argument is not modified, +and the function returns zero. +T} +T{ +.PN XLookupBoth +T} T{ +Both a KeySym and a string are returned; +.PN XLookupChars +and +.PN XLookupKeySym +occur simultaneously. +T} +.TE +.LP +It does not make any difference if the input context passed as an argument to +.PN XmbLookupString +and +.PN XwcLookupString +is the one currently in possession of the focus or not. +Input may have been composed within an input context before it lost the focus, +and that input may be returned on subsequent calls to +.PN XmbLookupString +or +.PN XwcLookupString +even though it does not have any more keyboard focus. +.NH 3 +Input Method Conventions +.XS +\*(SN Input Method Conventions +.XE +.LP +The input method architecture is transparent to the client. +However, clients should respect a number of conventions in order +to work properly. +Clients must also be aware of possible effects of synchronization +between input method and library in the case of a remote input server. +.NH 4 +Client Conventions +.XS +\*(SN Client Conventions +.XE +.LP +A well-behaved client (or toolkit) should first query the input method style. +If the client cannot satisfy the requirements of the supported styles +(in terms of geometry management or callbacks), +it should negotiate with the user continuation of the program +or raise an exception or error of some sort. +.NH 4 +Synchronization Conventions +.XS +\*(SN Synchronization Conventions +.XE +.LP +A +.PN KeyPress +event with a KeyCode of zero is used exclusively as a +signal that an input method has composed input that can be returned by +.PN XmbLookupString +or +.PN XwcLookupString . +No other use is made of a +.PN KeyPress +event with KeyCode of zero. +.LP +Such an event may be generated by either a front-end +or a back-end input method in an implementation-dependent manner. +Some possible ways to generate this event include: +.IP \(bu 5 +A synthetic event sent by an input method server +.IP \(bu 5 +An artificial event created by a input method filter and pushed +onto a client's event queue +.IP \(bu 5 +A +.PN KeyPress +event whose KeyCode value is modified by an input method filter +.LP +When callback support is specified by the client, +input methods will not take action unless they explicitly +called back the client and obtained no response +(the callback is not specified or returned invalid data). +.NH 2 +String Constants +.XS +\*(SN String Constants +.XE +.LP +The following symbols for string constants are defined in +.hN X11/Xlib.h . +Although they are shown here with particular macro definitions, +they may be implemented as macros, as global symbols, or as a +mixture of the two. The string pointer value itself +is not significant; clients must not assume that inequality of two +values implies inequality of the actual string data. +.IN "XNVaNestedList" "" "@DEF@" +.IN "XNSeparatorofNestedList "" "@DEF@" +.IN "XNQueryInputStyle" "" "@DEF@" +.IN "XNClientWindow" "" "@DEF@" +.IN "XNInputStyle" "" "@DEF@" +.IN "XNFocusWindow" "" "@DEF@" +.IN "XNResourceName" "" "@DEF@" +.IN "XNResourceClass" "" "@DEF@" +.IN "XNGeometryCallback" "" "@DEF@" +.IN "XNDestroyCallback" "" "@DEF@" +.IN "XNFilterEvents" "" "@DEF@" +.IN "XNPreeditStartCallback" "" "@DEF@" +.IN "XNPreeditDoneCallback" "" "@DEF@" +.IN "XNPreeditDrawCallback" "" "@DEF@" +.IN "XNPreeditCaretCallback" "" "@DEF@" +.IN "XNPreeditStateNotifyCallback" "" "@DEF@" +.IN "XNPreeditAttributes" "" "@DEF@" +.IN "XNStatusStartCallback" "" "@DEF@" +.IN "XNStatusDoneCallback" "" "@DEF@" +.IN "XNStatusDrawCallback" "" "@DEF@" +.IN "XNStatusAttributes" "" "@DEF@" +.IN "XNArea" "" "@DEF@" +.IN "XNAreaNeeded" "" "@DEF@" +.IN "XNSpotLocation" "" "@DEF@" +.IN "XNColormap" "" "@DEF@" +.IN "XNStdColormap" "" "@DEF@" +.IN "XNForeground" "" "@DEF@" +.IN "XNBackground" "" "@DEF@" +.IN "XNBackgroundPixmap" "" "@DEF@" +.IN "XNFontSet" "" "@DEF@" +.IN "XNLineSpace" "" "@DEF@" +.IN "XNCursor" "" "@DEF@" +.TS +lw(.5i) lw(2.75i) lw(2.5i). +T{ +#define +T} T{ +.PN XNVaNestedList +T} T{ +"XNVaNestedList" +T} +T{ +#define +T} T{ +.PN XNSeparatorofNestedList +T} T{ +"separatorofNestedList" +T} +T{ +#define +T} T{ +.PN XNQueryInputStyle +T} T{ +"queryInputStyle" +T} +T{ +#define +T} T{ +.PN XNClientWindow +T} T{ +"clientWindow" +T} +T{ +#define +T} T{ +.PN XNInputStyle +T} T{ +"inputStyle" +T} +T{ +#define +T} T{ +.PN XNFocusWindow +T} T{ +"focusWindow" +T} +T{ +#define +T} T{ +.PN XNResourceName +T} T{ +"resourceName" +T} +T{ +#define +T} T{ +.PN XNResourceClass +T} T{ +"resourceClass" +T} +T{ +#define +T} T{ +.PN XNGeometryCallback +T} T{ +"geometryCallback" +T} +T{ +#define +T} T{ +.PN XNDestroyCallback +T} T{ +"destroyCallback" +T} +T{ +#define +T} T{ +.PN XNFilterEvents +T} T{ +"filterEvents" +T} +T{ +#define +T} T{ +.PN XNPreeditStartCallback +T} T{ +"preeditStartCallback" +T} +T{ +#define +T} T{ +.PN XNPreeditDoneCallback +T} T{ +"preeditDoneCallback" +T} +T{ +#define +T} T{ +.PN XNPreeditDrawCallback +T} T{ +"preeditDrawCallback" +T} +T{ +#define +T} T{ +.PN XNPreeditCaretCallback +T} T{ +"preeditCaretCallback" +T} +T{ +#define +T} T{ +.PN XNPreeditStateNotifyCallback +T} T{ +"preeditStateNotifyCallback" +T} +T{ +#define +T} T{ +.PN XNPreeditAttributes +T} T{ +"preeditAttributes" +T} +.TE +.sp -1 +.TS +lw(.5i) lw(2.75i) lw(2.5i). +T{ +#define +T} T{ +.PN XNStatusStartCallback +T} T{ +"statusStartCallback" +T} +T{ +#define +T} T{ +.PN XNStatusDoneCallback +T} T{ +"statusDoneCallback" +T} +T{ +#define +T} T{ +.PN XNStatusDrawCallback +T} T{ +"statusDrawCallback" +T} +T{ +#define +T} T{ +.PN XNStatusAttributes +T} T{ +"statusAttributes" +T} +T{ +#define +T} T{ +.PN XNArea +T} T{ +"area" +T} +T{ +#define +T} T{ +.PN XNAreaNeeded +T} T{ +"areaNeeded" +T} +T{ +#define +T} T{ +.PN XNSpotLocation +T} T{ +"spotLocation" +T} +T{ +#define +T} T{ +.PN XNColormap +T} T{ +"colorMap" +T} +T{ +#define +T} T{ +.PN XNStdColormap +T} T{ +"stdColorMap" +T} +T{ +#define +T} T{ +.PN XNForeground +T} T{ +"foreground" +T} +T{ +#define +T} T{ +.PN XNBackground +T} T{ +"background" +T} +T{ +#define +T} T{ +.PN XNBackgroundPixmap +T} T{ +"backgroundPixmap" +T} +T{ +#define +T} T{ +.PN XNFontSet +T} T{ +"fontSet" +T} +T{ +#define +T} T{ +.PN XNLineSpace +T} T{ +"lineSpace" +T} +T{ +#define +T} T{ +.PN XNCursor +T} T{ +"cursor" +T} +.TE +.sp -1 +.TS +lw(.5i) lw(2.75i) lw(2.5i). +T{ +#define +T} T{ +.PN XNQueryIMValuesList +T} T{ +"queryIMValuesList" +T} +T{ +#define +T} T{ +.PN XNQueryICValuesList +T} T{ +"queryICValuesList" +T} +T{ +#define +T} T{ +.PN XNStringConversionCallback +T} T{ +"stringConversionCallback" +T} +T{ +#define +T} T{ +.PN XNStringConversion +T} T{ +"stringConversion" +T} +T{ +#define +T} T{ +.PN XNResetState +T} T{ +"resetState" +T} +T{ +#define +T} T{ +.PN XNHotKey +T} T{ +"hotkey" +T} +T{ +#define +T} T{ +.PN XNHotKeyState +T} T{ +"hotkeyState" +T} +T{ +#define +T} T{ +.PN XNPreeditState +T} T{ +"preeditState" +T} +T{ +#define +T} T{ +.PN XNVisiblePosition +T} T{ +"visiblePosition" +T} +T{ +#define +T} T{ +.PN XNR6PreeditCallbackBehavior +T} T{ +"r6PreeditCallback" +T} +.TE +.sp -1 +.IN "XNQueryIMValuesList" "" "@DEF@" +.IN "XNQueryICValuesList" "" "@DEF@" +.IN "XNStringConversionCallback" "" "@DEF@" +.IN "XNStringConversion" "" "@DEF@" +.IN "XNResetState" "" "@DEF@" +.IN "XNHotKey" "" "@DEF@" +.IN "XNHotKeyState" "" "@DEF@" +.IN "XNPreeditState" "" "@DEF@" +.IN "XNVisiblePosition" "" "@DEF@" +.IN "XNR6PreeditCallbackBehavior" "" "@DEF@" +.TS +lw(.5i) lw(2.75i) lw(2.5i). +T{ +#define +T} T{ +.PN XNRequiredCharSet +T} T{ +"requiredCharSet" +T} +T{ +#define +T} T{ +.PN XNQueryOrientation +T} T{ +"queryOrientation" +T} +T{ +#define +T} T{ +.PN XNDirectionalDependentDrawing +T} T{ +"directionalDependentDrawing" +T} +T{ +#define +T} T{ +.PN XNContextualDrawing +T} T{ +"contextualDrawing" +T} +T{ +#define +T} T{ +.PN XNBaseFontName +T} T{ +"baseFontName" +T} +T{ +#define +T} T{ +.PN XNMissingCharSet +T} T{ +"missingCharSet" +T} +T{ +#define +T} T{ +.PN XNDefaultString +T} T{ +"defaultString" +T} +T{ +#define +T} T{ +.PN XNOrientation +T} T{ +"orientation" +T} +T{ +#define +T} T{ +.PN XNFontInfo +T} T{ +"fontInfo" +T} +T{ +#define +T} T{ +.PN XNOMAutomatic +T} T{ +"omAutomatic" +T} +.TE +.IN "XNRequiredCharSet" "" "@DEF@" +.IN "XNQueryOrientation" "" "@DEF@" +.IN "XNDirectionalDependentDrawing" "" "@DEF@" +.IN "XNContextualDrawing" "" "@DEF@" +.IN "XNBaseFontName" "" "@DEF@" +.IN "XNMissingCharSet" "" "@DEF@" +.IN "XNDefaultString" "" "@DEF@" +.IN "XNOrientation" "" "@DEF@" +.IN "XNFontInfo" "" "@DEF@" +.IN "XNOMAutomatic" "" "@DEF@" +.bp |