From 990bc3f015a4f8fce2eb918375defcd44980a845 Mon Sep 17 00:00:00 2001 From: marha Date: Fri, 8 Jun 2012 09:33:13 +0200 Subject: Used synchronise script to update files --- libX11/src/xlibi18n/lcRM.c | 448 ++++++++++++++++++++++----------------------- 1 file changed, 224 insertions(+), 224 deletions(-) (limited to 'libX11/src/xlibi18n/lcRM.c') diff --git a/libX11/src/xlibi18n/lcRM.c b/libX11/src/xlibi18n/lcRM.c index 9f72504ee..b83d0cb62 100644 --- a/libX11/src/xlibi18n/lcRM.c +++ b/libX11/src/xlibi18n/lcRM.c @@ -1,224 +1,224 @@ -/* - * Copyright 1992, 1993 by TOSHIBA Corp. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation for any purpose and without fee is hereby granted, provided - * that the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of TOSHIBA not be used in advertising - * or publicity pertaining to distribution of the software without specific, - * written prior permission. TOSHIBA make no representations about the - * suitability of this software for any purpose. It is provided "as is" - * without express or implied warranty. - * - * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING - * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL - * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR - * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, - * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS - * SOFTWARE. - * - * Author: Katsuhisa Yano TOSHIBA Corp. - * mopi@osa.ilab.toshiba.co.jp - * Bug fixes: Bruno Haible XFree86 Inc. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif -#include "Xlibint.h" -#include "XlcPubI.h" -#include - -/* - * Default implementation of methods for Xrm parsing. - */ - -/* ======================= Unibyte implementation ======================= */ - -/* Only for efficiency, to speed up things. */ - -/* This implementation must keep the locale, for lcname. */ -typedef struct _UbStateRec { - XLCd lcd; -} UbStateRec, *UbState; - -/* Sets the state to the initial state. - Initiates a sequence of calls to mbchar. */ -static void -ub_mbinit( - XPointer state) -{ -} - -/* Transforms one multibyte character, and return a 'char' in the same - parsing class. Returns the number of consumed bytes in *lenp. */ -static char -ub_mbchar( - XPointer state, - const char *str, - int *lenp) -{ - *lenp = 1; - return *str; -} - -/* Terminates a sequence of calls to mbchar. */ -static void -ub_mbfinish( - XPointer state) -{ -} - -/* Returns the name of the state's locale, as a static string. */ -static const char * -ub_lcname( - XPointer state) -{ - return ((UbState) state)->lcd->core->name; -} - -/* Frees the state, which was allocated by _XrmDefaultInitParseInfo. */ -static void -ub_destroy( - XPointer state) -{ - _XCloseLC(((UbState) state)->lcd); - Xfree((char *) state); -} - -static const XrmMethodsRec ub_methods = { - ub_mbinit, - ub_mbchar, - ub_mbfinish, - ub_lcname, - ub_destroy -}; - -/* ======================= Multibyte implementation ======================= */ - -/* This implementation uses an XlcConv from XlcNMultiByte to XlcNWideChar. */ -typedef struct _MbStateRec { - XLCd lcd; - XlcConv conv; -} MbStateRec, *MbState; - -/* Sets the state to the initial state. - Initiates a sequence of calls to mbchar. */ -static void -mb_mbinit( - XPointer state) -{ - _XlcResetConverter(((MbState) state)->conv); -} - -/* Transforms one multibyte character, and return a 'char' in the same - parsing class. Returns the number of consumed bytes in *lenp. */ -static char -mb_mbchar( - XPointer state, - const char *str, - int *lenp) -{ - XlcConv conv = ((MbState) state)->conv; - const char *from; - wchar_t *to, wc; - int cur_max, i, from_left, to_left, ret; - - cur_max = XLC_PUBLIC(((MbState) state)->lcd, mb_cur_max); - - from = str; - /* Determine from_left. Avoid overrun error which could occur if - from_left > strlen(str). */ - from_left = cur_max; - for (i = 0; i < cur_max; i++) - if (str[i] == '\0') { - from_left = i; - break; - } - *lenp = from_left; - - to = &wc; - to_left = 1; - - ret = _XlcConvert(conv, (XPointer *) &from, &from_left, - (XPointer *) &to, &to_left, NULL, 0); - *lenp -= from_left; - - if (ret < 0 || to_left > 0) { - /* Invalid or incomplete multibyte character seen. */ - *lenp = 1; - return 0x7f; - } - /* Return a 'char' equivalent to wc. */ - return (wc >= 0 && wc <= 0x7f ? wc : 0x7f); -} - -/* Terminates a sequence of calls to mbchar. */ -static void -mb_mbfinish( - XPointer state) -{ -} - -/* Returns the name of the state's locale, as a static string. */ -static const char * -mb_lcname( - XPointer state) -{ - return ((MbState) state)->lcd->core->name; -} - -/* Frees the state, which was allocated by _XrmDefaultInitParseInfo. */ -static void -mb_destroy( - XPointer state) -{ - _XlcCloseConverter(((MbState) state)->conv); - _XCloseLC(((MbState) state)->lcd); - Xfree((char *) state); -} - -static const XrmMethodsRec mb_methods = { - mb_mbinit, - mb_mbchar, - mb_mbfinish, - mb_lcname, - mb_destroy -}; - -/* ======================= Exported function ======================= */ - -XrmMethods -_XrmDefaultInitParseInfo( - XLCd lcd, - XPointer *rm_state) -{ - if (XLC_PUBLIC(lcd, mb_cur_max) == 1) { - /* Unibyte case. */ - UbState state = (UbState) Xmalloc(sizeof(UbStateRec)); - if (state == NULL) - return (XrmMethods) NULL; - - state->lcd = lcd; - - *rm_state = (XPointer) state; - return &ub_methods; - } else { - /* Multibyte case. */ - MbState state = (MbState) Xmalloc(sizeof(MbStateRec)); - if (state == NULL) - return (XrmMethods) NULL; - - state->lcd = lcd; - state->conv = _XlcOpenConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar); - if (state->conv == NULL) { - Xfree((char *) state); - return (XrmMethods) NULL; - } - - *rm_state = (XPointer) state; - return &mb_methods; - } -} +/* + * Copyright 1992, 1993 by TOSHIBA Corp. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of TOSHIBA not be used in advertising + * or publicity pertaining to distribution of the software without specific, + * written prior permission. TOSHIBA make no representations about the + * suitability of this software for any purpose. It is provided "as is" + * without express or implied warranty. + * + * TOSHIBA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + * TOSHIBA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * + * Author: Katsuhisa Yano TOSHIBA Corp. + * mopi@osa.ilab.toshiba.co.jp + * Bug fixes: Bruno Haible XFree86 Inc. + */ + +#ifdef HAVE_CONFIG_H +#include +#endif +#include "Xlibint.h" +#include "XlcPubI.h" +#include + +/* + * Default implementation of methods for Xrm parsing. + */ + +/* ======================= Unibyte implementation ======================= */ + +/* Only for efficiency, to speed up things. */ + +/* This implementation must keep the locale, for lcname. */ +typedef struct _UbStateRec { + XLCd lcd; +} UbStateRec, *UbState; + +/* Sets the state to the initial state. + Initiates a sequence of calls to mbchar. */ +static void +ub_mbinit( + XPointer state) +{ +} + +/* Transforms one multibyte character, and return a 'char' in the same + parsing class. Returns the number of consumed bytes in *lenp. */ +static char +ub_mbchar( + XPointer state, + const char *str, + int *lenp) +{ + *lenp = 1; + return *str; +} + +/* Terminates a sequence of calls to mbchar. */ +static void +ub_mbfinish( + XPointer state) +{ +} + +/* Returns the name of the state's locale, as a static string. */ +static const char * +ub_lcname( + XPointer state) +{ + return ((UbState) state)->lcd->core->name; +} + +/* Frees the state, which was allocated by _XrmDefaultInitParseInfo. */ +static void +ub_destroy( + XPointer state) +{ + _XCloseLC(((UbState) state)->lcd); + Xfree((char *) state); +} + +static const XrmMethodsRec ub_methods = { + ub_mbinit, + ub_mbchar, + ub_mbfinish, + ub_lcname, + ub_destroy +}; + +/* ======================= Multibyte implementation ======================= */ + +/* This implementation uses an XlcConv from XlcNMultiByte to XlcNWideChar. */ +typedef struct _MbStateRec { + XLCd lcd; + XlcConv conv; +} MbStateRec, *MbState; + +/* Sets the state to the initial state. + Initiates a sequence of calls to mbchar. */ +static void +mb_mbinit( + XPointer state) +{ + _XlcResetConverter(((MbState) state)->conv); +} + +/* Transforms one multibyte character, and return a 'char' in the same + parsing class. Returns the number of consumed bytes in *lenp. */ +static char +mb_mbchar( + XPointer state, + const char *str, + int *lenp) +{ + XlcConv conv = ((MbState) state)->conv; + const char *from; + wchar_t *to, wc; + int cur_max, i, from_left, to_left, ret; + + cur_max = XLC_PUBLIC(((MbState) state)->lcd, mb_cur_max); + + from = str; + /* Determine from_left. Avoid overrun error which could occur if + from_left > strlen(str). */ + from_left = cur_max; + for (i = 0; i < cur_max; i++) + if (str[i] == '\0') { + from_left = i; + break; + } + *lenp = from_left; + + to = &wc; + to_left = 1; + + ret = _XlcConvert(conv, (XPointer *) &from, &from_left, + (XPointer *) &to, &to_left, NULL, 0); + *lenp -= from_left; + + if (ret < 0 || to_left > 0) { + /* Invalid or incomplete multibyte character seen. */ + *lenp = 1; + return 0x7f; + } + /* Return a 'char' equivalent to wc. */ + return (wc >= 0 && wc <= 0x7f ? wc : 0x7f); +} + +/* Terminates a sequence of calls to mbchar. */ +static void +mb_mbfinish( + XPointer state) +{ +} + +/* Returns the name of the state's locale, as a static string. */ +static const char * +mb_lcname( + XPointer state) +{ + return ((MbState) state)->lcd->core->name; +} + +/* Frees the state, which was allocated by _XrmDefaultInitParseInfo. */ +static void +mb_destroy( + XPointer state) +{ + _XlcCloseConverter(((MbState) state)->conv); + _XCloseLC(((MbState) state)->lcd); + Xfree((char *) state); +} + +static const XrmMethodsRec mb_methods = { + mb_mbinit, + mb_mbchar, + mb_mbfinish, + mb_lcname, + mb_destroy +}; + +/* ======================= Exported function ======================= */ + +XrmMethods +_XrmDefaultInitParseInfo( + XLCd lcd, + XPointer *rm_state) +{ + if (XLC_PUBLIC(lcd, mb_cur_max) == 1) { + /* Unibyte case. */ + UbState state = (UbState) Xmalloc(sizeof(UbStateRec)); + if (state == NULL) + return (XrmMethods) NULL; + + state->lcd = lcd; + + *rm_state = (XPointer) state; + return &ub_methods; + } else { + /* Multibyte case. */ + MbState state = (MbState) Xmalloc(sizeof(MbStateRec)); + if (state == NULL) + return (XrmMethods) NULL; + + state->lcd = lcd; + state->conv = _XlcOpenConverter(lcd, XlcNMultiByte, lcd, XlcNWideChar); + if (state->conv == NULL) { + Xfree((char *) state); + return (XrmMethods) NULL; + } + + *rm_state = (XPointer) state; + return &mb_methods; + } +} -- cgit v1.2.3