11ab64890Smrg/*
21ab64890Smrg * Copyright 1992, 1993 by TOSHIBA Corp.
31ab64890Smrg *
41ab64890Smrg * Permission to use, copy, modify, and distribute this software and its
51ab64890Smrg * documentation for any purpose and without fee is hereby granted, provided
61ab64890Smrg * that the above copyright notice appear in all copies and that both that
71ab64890Smrg * copyright notice and this permission notice appear in supporting
81ab64890Smrg * documentation, and that the name of TOSHIBA not be used in advertising
91ab64890Smrg * or publicity pertaining to distribution of the software without specific,
101ab64890Smrg * written prior permission. TOSHIBA make no representations about the
111ab64890Smrg * suitability of this software for any purpose.  It is provided "as is"
121ab64890Smrg * without express or implied warranty.
131ab64890Smrg *
141ab64890Smrg * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
151ab64890Smrg * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
161ab64890Smrg * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
171ab64890Smrg * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
181ab64890Smrg * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
191ab64890Smrg * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
201ab64890Smrg * SOFTWARE.
211ab64890Smrg *
221ab64890Smrg * Author: Katsuhisa Yano	TOSHIBA Corp.
231ab64890Smrg *			   	mopi@osa.ilab.toshiba.co.jp
241ab64890Smrg */
251ab64890Smrg/*
261ab64890Smrg * Copyright 1995 by FUJITSU LIMITED
271ab64890Smrg * This is source code modified by FUJITSU LIMITED under the Joint
281ab64890Smrg * Development Agreement for the CDE/Motif PST.
291ab64890Smrg *
301ab64890Smrg * Modifier: Takanori Tateno   FUJITSU LIMITED
311ab64890Smrg *
321ab64890Smrg */
331ab64890Smrg/*
341ab64890Smrg * Most of this API is documented in i18n/Framework.PS
351ab64890Smrg */
361ab64890Smrg
371ab64890Smrg#ifndef _XLCPUBLIC_H_
381ab64890Smrg#define _XLCPUBLIC_H_
391ab64890Smrg
401ab64890Smrg#include "Xlcint.h"
411ab64890Smrg
421ab64890Smrg
431ab64890Smrg/*
441ab64890Smrg * Character sets.
451ab64890Smrg */
461ab64890Smrg
471ab64890Smrg/* Every character set has a "side". It denotes the range of byte values for
481ab64890Smrg   which the character set is responsible. This means that the character
491ab64890Smrg   set's encoded characters will only assumes bytes within the range, and
501ab64890Smrg   that the character set can be used simultaneously with another character
511ab64890Smrg   set responsible for a disjoint range. */
521ab64890Smrgtypedef enum {
531ab64890Smrg    XlcUnknown,
541ab64890Smrg    XlcC0,		/* responsible for values 0x00..0x1F */
551ab64890Smrg    XlcGL,		/* responsible for values 0x00..0x7F or 0x20..0x7F */
561ab64890Smrg    XlcC1,		/* responsible for values 0x80..0x9F */
571ab64890Smrg    XlcGR,		/* responsible for values 0x80..0xFF or 0xA0..0xFF */
581ab64890Smrg    XlcGLGR,		/* responsible for values 0x00..0xFF */
591ab64890Smrg    XlcOther,		/* unused */
601ab64890Smrg    XlcNONE
611ab64890Smrg} XlcSide;
621ab64890Smrg
631ab64890Smrg/* Data read from XLC_LOCALE files.
641ab64890Smrg   XXX Apparently superseded by _XUDCGlyphRegion. */
651ab64890Smrgtypedef struct _UDCArea {
661ab64890Smrg    unsigned long	start;
671ab64890Smrg    unsigned long	end;
681ab64890Smrg} UDCAreaRec, *UDCArea;
691ab64890Smrg
701ab64890Smrg/* Where the character set comes from. */
711ab64890Smrgtypedef enum {
721ab64890Smrg    CSsrcUndef,		/* unused */
731ab64890Smrg    CSsrcStd,		/* defined in libX11 */
741ab64890Smrg    CSsrcXLC		/* defined in an XLC_LOCALE file */
751ab64890Smrg} CSSrc;
761ab64890Smrg
771ab64890Smrg/* These are the supported properties of XlcCharSet. */
781ab64890Smrg#define XlcNCharSize 		"charSize"
791ab64890Smrg#define XlcNControlSequence 	"controlSequence"
801ab64890Smrg#define XlcNEncodingName 	"encodingName"
811ab64890Smrg#define XlcNName 		"name"
821ab64890Smrg#define XlcNSetSize 		"setSize"
831ab64890Smrg#define XlcNSide 		"side"
841ab64890Smrg
851ab64890Smrg/* This is the structure of an XlcCharSet.
861ab64890Smrg   Once allocated, they are never freed. */
871ab64890Smrgtypedef struct _XlcCharSetRec {
881ab64890Smrg    /* Character set name, including side suffix */
891ab64890Smrg    const char 		*name;
901ab64890Smrg    XrmQuark 		xrm_name;
911ab64890Smrg
921ab64890Smrg    /* XLFD encoding name, no side suffix */
931ab64890Smrg    const char 		*encoding_name;
941ab64890Smrg    XrmQuark 		xrm_encoding_name;
951ab64890Smrg
961ab64890Smrg    /* Range for which the charset is responsible: XlcGL, XlcGR or XlcGLGR */
971ab64890Smrg    XlcSide 		side;
981ab64890Smrg
991ab64890Smrg    /* Number of bytes per character. 0 means a varying number (e.g. UTF-8) */
1001ab64890Smrg    int 		char_size;
1011ab64890Smrg    /* Classification of the character set according to ISO-2022 */
1021ab64890Smrg    int 		set_size;	/* e.g. 94 or 96 */
1031ab64890Smrg    const char 		*ct_sequence;	/* control sequence of CT */
1041ab64890Smrg					/* (normally at most 4 bytes) */
1051ab64890Smrg
1061ab64890Smrg    /* for UDC */
1071ab64890Smrg    Bool        	string_encoding;
1081ab64890Smrg    UDCArea 		udc_area;
1091ab64890Smrg    int     		udc_area_num;
1101ab64890Smrg
1111ab64890Smrg    /* Description source */
1121ab64890Smrg    CSSrc		source;
1131ab64890Smrg} XlcCharSetRec, *XlcCharSet;
1141ab64890Smrg
1151ab64890Smrg_XFUNCPROTOBEGIN
1161ab64890Smrg
1171ab64890Smrg/* Returns the charset with the given name (including side suffix).
1181ab64890Smrg   Returns NULL if not found. */
1191ab64890Smrgextern XlcCharSet _XlcGetCharSet(
1201ab64890Smrg    const char*		name
1211ab64890Smrg);
1221ab64890Smrg
1231ab64890Smrg/* Returns the charset with the given encoding (no side suffix) and
1241ab64890Smrg   responsible for at least the given side (XlcGL or XlcGR).
1251ab64890Smrg   Returns NULL if not found. */
1261ab64890Smrgextern XlcCharSet _XlcGetCharSetWithSide(
1271ab64890Smrg    const char*		encoding_name,
1281ab64890Smrg    XlcSide		side
1291ab64890Smrg);
1301ab64890Smrg
1311ab64890Smrg/* Registers an XlcCharSet in the list of character sets.
1321ab64890Smrg   Returns True if successful. */
1331ab64890Smrgextern Bool _XlcAddCharSet(
1341ab64890Smrg    XlcCharSet		charset
1351ab64890Smrg);
1361ab64890Smrg
1371ab64890Smrg/* Retrieves a number of attributes of an XlcCharSet.
1381ab64890Smrg   Return NULL if successful, otherwise the name of the first argument
1399c019ec5Smaya   specifying a nonexistent attribute. */
1401ab64890Smrgextern char *_XlcGetCSValues(
1411ab64890Smrg    XlcCharSet		charset,
1421ab64890Smrg    ...
1431ab64890Smrg);
1441ab64890Smrg
1451ab64890Smrg_XFUNCPROTOEND
1461ab64890Smrg
1471ab64890Smrg
1481ab64890Smrg#define XlcNCodeset 		"codeset"
1491ab64890Smrg#define XlcNDefaultString 	"defaultString"
1501ab64890Smrg#define XlcNLanguage 		"language"
1511ab64890Smrg#define XlcNMbCurMax 		"mbCurMax"
1521ab64890Smrg#define XlcNStateDependentEncoding "stateDependentEncoding"
1531ab64890Smrg#define XlcNTerritory 		"territory"
1541ab64890Smrg
1551ab64890Smrgtypedef struct _FontScope {
1561ab64890Smrg        unsigned long   start;
1571ab64890Smrg        unsigned long   end;
1581ab64890Smrg        unsigned long   shift;
1591ab64890Smrg        unsigned long   shift_direction;
1601ab64890Smrg} FontScopeRec, *FontScope;
1611ab64890Smrg
1621ab64890Smrg/*
1631ab64890Smrg * conversion methods
1641ab64890Smrg */
1651ab64890Smrg
1661ab64890Smrgtypedef struct _XlcConvRec *XlcConv;
1671ab64890Smrg
1681ab64890Smrgtypedef XlcConv (*XlcOpenConverterProc)(
1691ab64890Smrg    XLCd		from_lcd,
1701ab64890Smrg    const char*		from_type,
1711ab64890Smrg    XLCd		to_lcd,
1721ab64890Smrg    const char*		to_type
1731ab64890Smrg);
1741ab64890Smrg
1751ab64890Smrgtypedef void (*XlcCloseConverterProc)(
1761ab64890Smrg    XlcConv		/* conv */
1771ab64890Smrg);
1781ab64890Smrg
1791ab64890Smrgtypedef int (*XlcConvertProc)(
1801ab64890Smrg    XlcConv		/* conv */,
1811ab64890Smrg    XPointer*		/* from */,
1821ab64890Smrg    int*		/* from_left */,
1831ab64890Smrg    XPointer*		/* to */,
1841ab64890Smrg    int*		/* to_left */,
1851ab64890Smrg    XPointer*		/* args */,
1861ab64890Smrg    int			/* num_args */
1871ab64890Smrg);
1881ab64890Smrg
1891ab64890Smrgtypedef void (*XlcResetConverterProc)(
1901ab64890Smrg    XlcConv		/* conv */
1911ab64890Smrg);
1921ab64890Smrg
1931ab64890Smrgtypedef struct _XlcConvMethodsRec{
1941ab64890Smrg    XlcCloseConverterProc 	close;
1951ab64890Smrg    XlcConvertProc 		convert;
1961ab64890Smrg    XlcResetConverterProc 	reset;
1971ab64890Smrg} XlcConvMethodsRec, *XlcConvMethods;
1981ab64890Smrg
1991ab64890Smrg/*
2001ab64890Smrg * conversion data
2011ab64890Smrg */
2021ab64890Smrg
2031ab64890Smrg#define XlcNMultiByte 		"multiByte"
2041ab64890Smrg#define XlcNWideChar 		"wideChar"
2051ab64890Smrg#define XlcNCompoundText 	"compoundText"
2061ab64890Smrg#define XlcNString 		"string"
2071ab64890Smrg#define XlcNUtf8String 		"utf8String"
2081ab64890Smrg#define XlcNCharSet 		"charSet"
2091ab64890Smrg#define XlcNCTCharSet 		"CTcharSet"
2101ab64890Smrg#define XlcNFontCharSet		"FontCharSet"
2111ab64890Smrg#define XlcNChar 		"char"
2121ab64890Smrg#define XlcNUcsChar 		"UCSchar"
2131ab64890Smrg
2141ab64890Smrgtypedef struct _XlcConvRec {
2151ab64890Smrg    XlcConvMethods 		methods;
2161ab64890Smrg    XPointer 			state;
2171ab64890Smrg} XlcConvRec;
2181ab64890Smrg
2191ab64890Smrg
2201ab64890Smrg_XFUNCPROTOBEGIN
2211ab64890Smrg
2221ab64890Smrgextern Bool _XInitOM(
2231ab64890Smrg    XLCd		/* lcd */
2241ab64890Smrg);
2251ab64890Smrg
2261ab64890Smrgextern Bool _XInitIM(
2271ab64890Smrg    XLCd		/* lcd */
2281ab64890Smrg);
2291ab64890Smrg
2301ab64890Smrgextern XIM _XimOpenIM(
2311ab64890Smrg    XLCd		/* lcd */,
2321ab64890Smrg    Display *		/* dpy */,
2331ab64890Smrg    XrmDatabase		/* rdb */,
2341ab64890Smrg    char *		/* res_name */,
2351ab64890Smrg    char *		/* res_class */
2361ab64890Smrg);
2371ab64890Smrg
2381ab64890Smrgextern char *_XGetLCValues(
2391ab64890Smrg    XLCd		/* lcd */,
2401ab64890Smrg    ...
2411ab64890Smrg);
2421ab64890Smrg
2431ab64890Smrgextern XlcConv _XlcOpenConverter(
2441ab64890Smrg    XLCd		from_lcd,
2451ab64890Smrg    const char*		from_type,
2461ab64890Smrg    XLCd		to_lcd,
2471ab64890Smrg    const char*		to_type
2481ab64890Smrg);
2491ab64890Smrg
2501ab64890Smrgextern void _XlcCloseConverter(
2511ab64890Smrg    XlcConv		conv
2521ab64890Smrg);
2531ab64890Smrg
2541ab64890Smrgextern int _XlcConvert(
2551ab64890Smrg    XlcConv		conv,
2561ab64890Smrg    XPointer*		from,
2571ab64890Smrg    int*		from_left,
2581ab64890Smrg    XPointer*		to,
2591ab64890Smrg    int*		to_left,
2601ab64890Smrg    XPointer*		args,
2611ab64890Smrg    int			num_args
2621ab64890Smrg);
2631ab64890Smrg
2641ab64890Smrgextern void _XlcResetConverter(
2651ab64890Smrg    XlcConv		conv
2661ab64890Smrg);
2671ab64890Smrg
2681ab64890Smrgextern Bool _XlcSetConverter(
2691ab64890Smrg    XLCd			from_lcd,
2701ab64890Smrg    const char*			from_type,
2711ab64890Smrg    XLCd			to_lcd,
2721ab64890Smrg    const char*			to_type,
2731ab64890Smrg    XlcOpenConverterProc	open_converter
2741ab64890Smrg);
2751ab64890Smrg
2761ab64890Smrgextern void _XlcGetResource(
2771ab64890Smrg    XLCd		lcd,
2781ab64890Smrg    const char*		category,
2791ab64890Smrg    const char*		_class,
2801ab64890Smrg    char***		value,
2811ab64890Smrg    int*		count
2821ab64890Smrg);
2831ab64890Smrg
2841ab64890Smrgextern char *_XlcFileName(
2851ab64890Smrg    XLCd		lcd,
2861ab64890Smrg    const char*		category
2871ab64890Smrg);
2881ab64890Smrg
2891ab64890Smrgextern int _Xwcslen(
2901ab64890Smrg    wchar_t*		/* wstr */
2911ab64890Smrg);
2921ab64890Smrg
2931ab64890Smrgextern wchar_t *_Xwcscpy(
2941ab64890Smrg    wchar_t*		/* wstr1 */,
2951ab64890Smrg    wchar_t*		/* wstr2 */
2961ab64890Smrg);
2971ab64890Smrg
2981ab64890Smrgextern wchar_t *_Xwcsncpy(wchar_t *wstr1, wchar_t *wstr2, int len);
2991ab64890Smrgextern int _Xwcscmp(wchar_t *wstr1, wchar_t *wstr2);
3001ab64890Smrgextern int _Xwcsncmp(wchar_t *wstr1, wchar_t *wstr2, int len);
3011ab64890Smrg
3021ab64890Smrg/* Compares two ISO 8859-1 strings, ignoring case of ASCII letters.
3031ab64890Smrg   Like strcasecmp in an ASCII locale. */
3041ab64890Smrgextern int _XlcCompareISOLatin1(
3051ab64890Smrg    const char*		str1,
3061ab64890Smrg    const char*		str2
3071ab64890Smrg);
3081ab64890Smrg
3091ab64890Smrg/* Compares two ISO 8859-1 strings, at most len bytes of each, ignoring
3101ab64890Smrg   case of ASCII letters. Like strncasecmp in an ASCII locale. */
3111ab64890Smrgextern int _XlcNCompareISOLatin1(
3121ab64890Smrg    const char*		str1,
3131ab64890Smrg    const char*		str2,
3141ab64890Smrg    int			len
3151ab64890Smrg);
3161ab64890Smrg
3171ab64890Smrgextern XOM
3181ab64890Smrg_XDefaultOpenOM(
3191ab64890Smrg    XLCd lcd, Display *dpy, XrmDatabase rdb,
3201ab64890Smrg    _Xconst char *res_name, _Xconst char *res_class);
3211ab64890Smrg
3221ab64890Smrg_XFUNCPROTOEND
3231ab64890Smrg
3241ab64890Smrg#endif  /* _XLCPUBLIC_H_ */
325