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. */ 52 typedef 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. */ 65 typedef struct _UDCArea { 66 unsigned long start; 67 unsigned long end; 68 } UDCAreaRec, *UDCArea; 69 70 /* Where the character set comes from. */ 71 typedef 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. */ 87 typedef 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. */ 119 extern 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. */ 126 extern 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. */ 133 extern 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. */ 140 extern 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 155 typedef 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 166 typedef struct _XlcConvRec *XlcConv; 167 168 typedef XlcConv (*XlcOpenConverterProc)( 169 XLCd from_lcd, 170 const char* from_type, 171 XLCd to_lcd, 172 const char* to_type 173 ); 174 175 typedef void (*XlcCloseConverterProc)( 176 XlcConv /* conv */ 177 ); 178 179 typedef 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 189 typedef void (*XlcResetConverterProc)( 190 XlcConv /* conv */ 191 ); 192 193 typedef 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 214 typedef struct _XlcConvRec { 215 XlcConvMethods methods; 216 XPointer state; 217 } XlcConvRec; 218 219 220 _XFUNCPROTOBEGIN 221 222 extern Bool _XInitOM( 223 XLCd /* lcd */ 224 ); 225 226 extern Bool _XInitIM( 227 XLCd /* lcd */ 228 ); 229 230 extern XIM _XimOpenIM( 231 XLCd /* lcd */, 232 Display * /* dpy */, 233 XrmDatabase /* rdb */, 234 char * /* res_name */, 235 char * /* res_class */ 236 ); 237 238 extern char *_XGetLCValues( 239 XLCd /* lcd */, 240 ... 241 ); 242 243 extern XlcConv _XlcOpenConverter( 244 XLCd from_lcd, 245 const char* from_type, 246 XLCd to_lcd, 247 const char* to_type 248 ); 249 250 extern void _XlcCloseConverter( 251 XlcConv conv 252 ); 253 254 extern 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 264 extern void _XlcResetConverter( 265 XlcConv conv 266 ); 267 268 extern 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 276 extern void _XlcGetResource( 277 XLCd lcd, 278 const char* category, 279 const char* _class, 280 char*** value, 281 int* count 282 ); 283 284 extern char *_XlcFileName( 285 XLCd lcd, 286 const char* category 287 ); 288 289 extern int _Xwcslen( 290 wchar_t* /* wstr */ 291 ); 292 293 extern wchar_t *_Xwcscpy( 294 wchar_t* /* wstr1 */, 295 wchar_t* /* wstr2 */ 296 ); 297 298 extern wchar_t *_Xwcsncpy(wchar_t *wstr1, wchar_t *wstr2, int len); 299 extern int _Xwcscmp(wchar_t *wstr1, wchar_t *wstr2); 300 extern 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. */ 304 extern 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. */ 311 extern int _XlcNCompareISOLatin1( 312 const char* str1, 313 const char* str2, 314 int len 315 ); 316 317 extern 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