1/*
2 * Copyright 1992, 1993 by TOSHIBA Corp.
3 *
4 * Permission to use, copy, modify, and distribute this software and its
5 * documentation for any purpose and without fee is hereby granted, provided
6 * that the above copyright notice appear in all copies and that both that
7 * copyright notice and this permission notice appear in supporting
8 * documentation, and that the name of TOSHIBA not be used in advertising
9 * or publicity pertaining to distribution of the software without specific,
10 * written prior permission. TOSHIBA make no representations about the
11 * suitability of this software for any purpose.  It is provided "as is"
12 * without express or implied warranty.
13 *
14 * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
15 * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
16 * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
17 * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
18 * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
19 * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
20 * SOFTWARE.
21 *
22 * Author: Katsuhisa Yano	TOSHIBA Corp.
23 *			   	mopi@osa.ilab.toshiba.co.jp
24 */
25/*
26 * Copyright 1995 by FUJITSU LIMITED
27 * This is source code modified by FUJITSU LIMITED under the Joint
28 * Development Agreement for the CDE/Motif PST.
29 *
30 * Modifier: Takanori Tateno   FUJITSU LIMITED
31 *
32 */
33/*
34 * Most of this API is documented in i18n/Framework.PS
35 */
36
37#ifndef _XLCPUBLIC_H_
38#define _XLCPUBLIC_H_
39
40#include "Xlcint.h"
41
42
43/*
44 * Character sets.
45 */
46
47/* Every character set has a "side". It denotes the range of byte values for
48   which the character set is responsible. This means that the character
49   set's encoded characters will only assumes bytes within the range, and
50   that the character set can be used simultaneously with another character
51   set responsible for a disjoint range. */
52typedef enum {
53    XlcUnknown,
54    XlcC0,		/* responsible for values 0x00..0x1F */
55    XlcGL,		/* responsible for values 0x00..0x7F or 0x20..0x7F */
56    XlcC1,		/* responsible for values 0x80..0x9F */
57    XlcGR,		/* responsible for values 0x80..0xFF or 0xA0..0xFF */
58    XlcGLGR,		/* responsible for values 0x00..0xFF */
59    XlcOther,		/* unused */
60    XlcNONE
61} XlcSide;
62
63/* Data read from XLC_LOCALE files.
64   XXX Apparently superseded by _XUDCGlyphRegion. */
65typedef struct _UDCArea {
66    unsigned long	start;
67    unsigned long	end;
68} UDCAreaRec, *UDCArea;
69
70/* Where the character set comes from. */
71typedef enum {
72    CSsrcUndef,		/* unused */
73    CSsrcStd,		/* defined in libX11 */
74    CSsrcXLC		/* defined in an XLC_LOCALE file */
75} CSSrc;
76
77/* These are the supported properties of XlcCharSet. */
78#define XlcNCharSize 		"charSize"
79#define XlcNControlSequence 	"controlSequence"
80#define XlcNEncodingName 	"encodingName"
81#define XlcNName 		"name"
82#define XlcNSetSize 		"setSize"
83#define XlcNSide 		"side"
84
85/* This is the structure of an XlcCharSet.
86   Once allocated, they are never freed. */
87typedef struct _XlcCharSetRec {
88    /* Character set name, including side suffix */
89    const char 		*name;
90    XrmQuark 		xrm_name;
91
92    /* XLFD encoding name, no side suffix */
93    const char 		*encoding_name;
94    XrmQuark 		xrm_encoding_name;
95
96    /* Range for which the charset is responsible: XlcGL, XlcGR or XlcGLGR */
97    XlcSide 		side;
98
99    /* Number of bytes per character. 0 means a varying number (e.g. UTF-8) */
100    int 		char_size;
101    /* Classification of the character set according to ISO-2022 */
102    int 		set_size;	/* e.g. 94 or 96 */
103    const char 		*ct_sequence;	/* control sequence of CT */
104					/* (normally at most 4 bytes) */
105
106    /* for UDC */
107    Bool        	string_encoding;
108    UDCArea 		udc_area;
109    int     		udc_area_num;
110
111    /* Description source */
112    CSSrc		source;
113} XlcCharSetRec, *XlcCharSet;
114
115_XFUNCPROTOBEGIN
116
117/* Returns the charset with the given name (including side suffix).
118   Returns NULL if not found. */
119extern XlcCharSet _XlcGetCharSet(
120    const char*		name
121);
122
123/* Returns the charset with the given encoding (no side suffix) and
124   responsible for at least the given side (XlcGL or XlcGR).
125   Returns NULL if not found. */
126extern XlcCharSet _XlcGetCharSetWithSide(
127    const char*		encoding_name,
128    XlcSide		side
129);
130
131/* Registers an XlcCharSet in the list of character sets.
132   Returns True if successful. */
133extern Bool _XlcAddCharSet(
134    XlcCharSet		charset
135);
136
137/* Retrieves a number of attributes of an XlcCharSet.
138   Return NULL if successful, otherwise the name of the first argument
139   specifying a nonexistent attribute. */
140extern char *_XlcGetCSValues(
141    XlcCharSet		charset,
142    ...
143);
144
145_XFUNCPROTOEND
146
147
148#define XlcNCodeset 		"codeset"
149#define XlcNDefaultString 	"defaultString"
150#define XlcNLanguage 		"language"
151#define XlcNMbCurMax 		"mbCurMax"
152#define XlcNStateDependentEncoding "stateDependentEncoding"
153#define XlcNTerritory 		"territory"
154
155typedef struct _FontScope {
156        unsigned long   start;
157        unsigned long   end;
158        unsigned long   shift;
159        unsigned long   shift_direction;
160} FontScopeRec, *FontScope;
161
162/*
163 * conversion methods
164 */
165
166typedef struct _XlcConvRec *XlcConv;
167
168typedef XlcConv (*XlcOpenConverterProc)(
169    XLCd		from_lcd,
170    const char*		from_type,
171    XLCd		to_lcd,
172    const char*		to_type
173);
174
175typedef void (*XlcCloseConverterProc)(
176    XlcConv		/* conv */
177);
178
179typedef int (*XlcConvertProc)(
180    XlcConv		/* conv */,
181    XPointer*		/* from */,
182    int*		/* from_left */,
183    XPointer*		/* to */,
184    int*		/* to_left */,
185    XPointer*		/* args */,
186    int			/* num_args */
187);
188
189typedef void (*XlcResetConverterProc)(
190    XlcConv		/* conv */
191);
192
193typedef struct _XlcConvMethodsRec{
194    XlcCloseConverterProc 	close;
195    XlcConvertProc 		convert;
196    XlcResetConverterProc 	reset;
197} XlcConvMethodsRec, *XlcConvMethods;
198
199/*
200 * conversion data
201 */
202
203#define XlcNMultiByte 		"multiByte"
204#define XlcNWideChar 		"wideChar"
205#define XlcNCompoundText 	"compoundText"
206#define XlcNString 		"string"
207#define XlcNUtf8String 		"utf8String"
208#define XlcNCharSet 		"charSet"
209#define XlcNCTCharSet 		"CTcharSet"
210#define XlcNFontCharSet		"FontCharSet"
211#define XlcNChar 		"char"
212#define XlcNUcsChar 		"UCSchar"
213
214typedef struct _XlcConvRec {
215    XlcConvMethods 		methods;
216    XPointer 			state;
217} XlcConvRec;
218
219
220_XFUNCPROTOBEGIN
221
222extern Bool _XInitOM(
223    XLCd		/* lcd */
224);
225
226extern Bool _XInitIM(
227    XLCd		/* lcd */
228);
229
230extern XIM _XimOpenIM(
231    XLCd		/* lcd */,
232    Display *		/* dpy */,
233    XrmDatabase		/* rdb */,
234    char *		/* res_name */,
235    char *		/* res_class */
236);
237
238extern char *_XGetLCValues(
239    XLCd		/* lcd */,
240    ...
241);
242
243extern XlcConv _XlcOpenConverter(
244    XLCd		from_lcd,
245    const char*		from_type,
246    XLCd		to_lcd,
247    const char*		to_type
248);
249
250extern void _XlcCloseConverter(
251    XlcConv		conv
252);
253
254extern int _XlcConvert(
255    XlcConv		conv,
256    XPointer*		from,
257    int*		from_left,
258    XPointer*		to,
259    int*		to_left,
260    XPointer*		args,
261    int			num_args
262);
263
264extern void _XlcResetConverter(
265    XlcConv		conv
266);
267
268extern Bool _XlcSetConverter(
269    XLCd			from_lcd,
270    const char*			from_type,
271    XLCd			to_lcd,
272    const char*			to_type,
273    XlcOpenConverterProc	open_converter
274);
275
276extern void _XlcGetResource(
277    XLCd		lcd,
278    const char*		category,
279    const char*		_class,
280    char***		value,
281    int*		count
282);
283
284extern char *_XlcFileName(
285    XLCd		lcd,
286    const char*		category
287);
288
289extern int _Xwcslen(
290    wchar_t*		/* wstr */
291);
292
293extern wchar_t *_Xwcscpy(
294    wchar_t*		/* wstr1 */,
295    wchar_t*		/* wstr2 */
296);
297
298extern wchar_t *_Xwcsncpy(wchar_t *wstr1, wchar_t *wstr2, int len);
299extern int _Xwcscmp(wchar_t *wstr1, wchar_t *wstr2);
300extern int _Xwcsncmp(wchar_t *wstr1, wchar_t *wstr2, int len);
301
302/* Compares two ISO 8859-1 strings, ignoring case of ASCII letters.
303   Like strcasecmp in an ASCII locale. */
304extern int _XlcCompareISOLatin1(
305    const char*		str1,
306    const char*		str2
307);
308
309/* Compares two ISO 8859-1 strings, at most len bytes of each, ignoring
310   case of ASCII letters. Like strncasecmp in an ASCII locale. */
311extern int _XlcNCompareISOLatin1(
312    const char*		str1,
313    const char*		str2,
314    int			len
315);
316
317extern XOM
318_XDefaultOpenOM(
319    XLCd lcd, Display *dpy, XrmDatabase rdb,
320    _Xconst char *res_name, _Xconst char *res_class);
321
322_XFUNCPROTOEND
323
324#endif  /* _XLCPUBLIC_H_ */
325