diff --git a/NEWS b/NEWS index 9ac5fc22..e03d5562 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,75 @@ +Version 1.1.2 - 2007-06-03 + +* Security fixes: + * Fix CVE-2007-1667: Multiple integer overflows in the XGetPixel() and + XInitImage() functions. + * Bug #9279: Fixed a file descriptor leak. + +* Xlib/XCB: Ensure _XReadEvents reads at least one new event and blocks for + exactly one event. Large performance improvement for XIfEvent and similar. + +* Hold XCB's Xlib lock even when only the user lock (XLockDisplay) is held. + An Xlib client can query Display state, such as with NextRequest, while it + holds only the Xlib user lock (between XLockDisplay and XUnlockDisplay), so + XCB requests in other threads should be blocked when the Xlib user lock is + held. We acquire the lock even when XInitThreads was not called, so that + pure XCB code can use multiple threads even in an otherwise single-threaded + Xlib application. + +* Allow re-entrant Xlib calls from _XIOError. + Some libraries try to clean up X resources from atexit handlers, _fini, or + C++ destructors. To make these work, downgrade the Display lock to a user + lock (as in XLockDisplay) before calling exit(3). This blocks Xlib calls + from threads other than the one calling exit(3) while still allowing the + exit handlers to call Xlib. + +* Xlib/XCB: Avoid re-crashing after _XIOError. + +* Xlib/XCB: Only remove pending_requests when there are provably no more responses. + +* For NetBSD, define XTHREADLIB and XTHREAD_CFLAGS. + +* Bug #7703: Fixed XSetSizeHints() et al wrt use of uninitialized data. + Now only those fields of the respective hint struct are set that + are actually valid in the input data. + +* Bug #10292: Fixed a memory leak related to XOpenDisplay() in the XCB code. + +* Bug #7713: Initialize all of the event's fields before sending it. + +* Bug #10562: Define _GNU_SOURCE on glibc systems. + +* Use unistd.h to get getresuid() and friends, now that we have _GNU_SOURCE + defined. + +* Switched function definitions from K&R to ANSI style. + +* Many constness fixes. + +* Fixed a few warnings. + +* Fix 64bit issues with reallocation. + +* Manpage fixes: + * Add man pages for XKB APIs. + (Volunteer needed to convert prototypes in man pages to ANSI C style...) + * Protect C comments and #defines in XKB man pages from being mangled by cpp + * Fix typo in nroff macro in XkbAddGeomOverlayKey.man + * Bug #9695: Fixed a few argument types in the XOpenIM manpage. + * Markup tweak for XOpenIM. + * Bug #9696: refer to XDefineCursor() instead of XDefineCusor(). + * Bug #9697: Fixed documentation of XVisualInfo struct. The "depth" member + was said to be unsigned int, but it's signed. + +* nls fixes: + * Update el_GR.UTF-8/Compose.pre to match changes in xkeyboard-config cvs. + * For nls/*.pre, allow people to comment lines by starting them with '##'. + +* Build system fixes: + * Add autogen.sh to EXTRA_DIST. + * Makefile.am: make ChangeLog hook safer + * Don't distribute the configure-generated XlibConf.h in tarballs. + Version 1.1.1 - 2006-11-30 The "xcompmgr is hard, let's go releasing" release diff --git a/acinclude.m4 b/acinclude.m4 index 4c60e33b..f3d8734f 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1,4 +1,36 @@ -# AC_DEFINE_DIR macro from autoconf-archive.cryp.to +##### http://autoconf-archive.cryp.to/ac_define_dir.html +# +# SYNOPSIS +# +# AC_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION]) +# +# DESCRIPTION +# +# This macro sets VARNAME to the expansion of the DIR variable, +# taking care of fixing up ${prefix} and such. +# +# VARNAME is then offered as both an output variable and a C +# preprocessor symbol. +# +# Example: +# +# AC_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.]) +# +# LAST MODIFICATION +# +# 2006-10-13 +# +# COPYLEFT +# +# Copyright (c) 2006 Stepan Kasal +# Copyright (c) 2006 Andreas Schwab +# Copyright (c) 2006 Guido U. Draheim +# Copyright (c) 2006 Alexandre Oliva +# +# Copying and distribution of this file, with or without +# modification, are permitted in any medium without royalty provided +# the copyright notice and this notice are preserved. + AC_DEFUN([AC_DEFINE_DIR], [ prefix_NONE= exec_prefix_NONE= diff --git a/configure.ac b/configure.ac index e3bc1431..f49b9edc 100644 --- a/configure.ac +++ b/configure.ac @@ -3,7 +3,7 @@ AC_PREREQ(2.57) AC_INIT([libX11], - 1.1.1, + 1.1.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libX11) AC_CONFIG_SRCDIR([Makefile.am]) diff --git a/man/XSetCommand.man b/man/XSetCommand.man index c5f03e71..c64e2705 100644 --- a/man/XSetCommand.man +++ b/man/XSetCommand.man @@ -189,7 +189,7 @@ If sufficient memory can be allocated to contain the string list, .ZN XGetCommand fills in the argv_return and argc_return arguments and returns a nonzero status. -Otherwise, it returns a zero status. +Otherwise, or if any other error is encountered, it returns a zero status. If the data returned by the server is in the Latin Portable Character Encoding, then the returned strings are in the Host Portable Character Encoding. Otherwise, the result is implementation-dependent. diff --git a/man/XrmMergeDatabases.man b/man/XrmMergeDatabases.man index 22fc8f42..e1dc75ad 100644 --- a/man/XrmMergeDatabases.man +++ b/man/XrmMergeDatabases.man @@ -145,10 +145,11 @@ XrmMergeDatabases, XrmCombineDatabase, XrmCombineFileDatabase \- merge resource databases .SH SYNTAX .HP -void XrmMergeDatabases(\^XrmDatabase \fIsource_db\fP, *\fItarget_db\fP\^); +void XrmMergeDatabases(\^XrmDatabase \fIsource_db\fP, XrmDatabase +*\fItarget_db\fP\^); .HP void XrmCombineDatabase(\^XrmDatabase \fIsource_db\fP, XrmDatabase -*\fItarget_db\fP\^); +*\fItarget_db\fP, Bool \fIoverride\fP\^); .HP Status XrmCombineFileDatabase(\^char *\fIfilename\fP, XrmDatabase *\fItarget_db\fP\^, Bool \fIoverride\fP); diff --git a/modules/im/ximcp/imDefLkup.c b/modules/im/ximcp/imDefLkup.c index aa1aaaf0..157b076d 100644 --- a/modules/im/ximcp/imDefLkup.c +++ b/modules/im/ximcp/imDefLkup.c @@ -466,7 +466,7 @@ _XimGetWindowEventmask( Xim im = (Xim )ic->core.im; XWindowAttributes atr; - if (!_XGetWindowAttributes(im->core.display, ic->core.focus_window, &atr)) + if (!XGetWindowAttributes(im->core.display, ic->core.focus_window, &atr)) return 0; return (EVENTMASK)atr.your_event_mask; } diff --git a/modules/im/ximcp/imLcPrs.c b/modules/im/ximcp/imLcPrs.c index ac533244..42f8f2a2 100644 --- a/modules/im/ximcp/imLcPrs.c +++ b/modules/im/ximcp/imLcPrs.c @@ -278,32 +278,26 @@ static long modmask( char *name) { - long mask; - struct _modtbl { - const char *name; + const char name[6]; long mask; }; - struct _modtbl *p; - static struct _modtbl tbl[] = { + static const struct _modtbl tbl[] = { { "Ctrl", ControlMask }, { "Lock", LockMask }, { "Caps", LockMask }, { "Shift", ShiftMask }, { "Alt", Mod1Mask }, - { "Meta", Mod1Mask }, - { NULL, 0 }}; + { "Meta", Mod1Mask }}; - p = tbl; - mask = 0; - for (p = tbl; p->name != NULL; p++) { - if (strcmp(name, p->name) == 0) { - mask = p->mask; - break; - } - } - return(mask); + int i, num_entries = sizeof (tbl) / sizeof (tbl[0]); + + for (i = 0; i < num_entries; i++) + if (!strcmp (name, tbl[i].name)) + return tbl[i].mask; + + return 0; } static char* diff --git a/modules/im/ximcp/imRm.c b/modules/im/ximcp/imRm.c index 47fe3952..f6599eb6 100644 --- a/modules/im/ximcp/imRm.c +++ b/modules/im/ximcp/imRm.c @@ -42,8 +42,10 @@ PERFORMANCE OF THIS SOFTWARE. #include "Ximint.h" #include "Xresource.h" +#define GET_NAME(x) name_table + x.name_offset + typedef struct _XimValueOffsetInfo { - const char *name; + unsigned short name_offset; XrmQuark quark; unsigned int offset; Bool (*defaults)( @@ -206,54 +208,136 @@ _XimSetProtoResource(im) } #endif /* XIM_CONNECTABLE */ -static const char *supported_local_im_values_list[] = { - XNQueryInputStyle, - XNResourceName, - XNResourceClass, - XNDestroyCallback, - XNQueryIMValuesList, - XNQueryICValuesList, - XNVisiblePosition, - NULL +static const char name_table[] = + /* 0 */ XNQueryInputStyle"\0" + /* 16 */ XNClientWindow"\0" + /* 29 */ XNInputStyle"\0" + /* 40 */ XNFocusWindow"\0" + /* 52 */ XNResourceName"\0" + /* 65 */ XNResourceClass"\0" + /* 79 */ XNGeometryCallback"\0" + /* 96 */ XNDestroyCallback"\0" + /* 112 */ XNFilterEvents"\0" + /* 125 */ XNPreeditStartCallback"\0" + /* 146 */ XNPreeditDoneCallback"\0" + /* 166 */ XNPreeditDrawCallback"\0" + /* 186 */ XNPreeditCaretCallback"\0" + /* 207 */ XNPreeditStateNotifyCallback"\0" + /* 234 */ XNPreeditAttributes"\0" + /* 252 */ XNStatusStartCallback"\0" + /* 272 */ XNStatusDoneCallback"\0" + /* 291 */ XNStatusDrawCallback"\0" + /* 310 */ XNStatusAttributes"\0" + /* 327 */ XNArea"\0" + /* 332 */ XNAreaNeeded"\0" + /* 343 */ XNSpotLocation"\0" + /* 356 */ XNColormap"\0" + /* 365 */ XNStdColormap"\0" + /* 377 */ XNForeground"\0" + /* 388 */ XNBackground"\0" + /* 399 */ XNBackgroundPixmap"\0" + /* 416 */ XNFontSet"\0" + /* 424 */ XNLineSpace"\0" + /* 434 */ XNCursor"\0" + /* 441 */ XNQueryIMValuesList"\0" + /* 459 */ XNQueryICValuesList"\0" + /* 477 */ XNVisiblePosition"\0" + /* 493 */ XNStringConversionCallback"\0" + /* 518 */ XNStringConversion"\0" + /* 535 */ XNResetState"\0" + /* 546 */ XNHotKey"\0" + /* 553 */ XNHotKeyState"\0" + /* 565 */ XNPreeditState +; + +#define OFFSET_XNQUERYINPUTSTYLE 0 +#define OFFSET_XNCLIENTWINDOW 16 +#define OFFSET_XNINPUTSTYLE 29 +#define OFFSET_XNFOCUSWINDOW 40 +#define OFFSET_XNRESOURCENAME 52 +#define OFFSET_XNRESOURCECLASS 65 +#define OFFSET_XNGEOMETRYCALLBACK 79 +#define OFFSET_XNDESTROYCALLBACK 96 +#define OFFSET_XNFILTEREVENTS 112 +#define OFFSET_XNPREEDITSTARTCALLBACK 125 +#define OFFSET_XNPREEDITDONECALLBACK 146 +#define OFFSET_XNPREEDITDRAWCALLBACK 166 +#define OFFSET_XNPREEDITCARETCALLBACK 186 +#define OFFSET_XNPREEDITSTATENOTIFYCALLBACK 207 +#define OFFSET_XNPREEDITATTRIBUTES 234 +#define OFFSET_XNSTATUSSTARTCALLBACK 252 +#define OFFSET_XNSTATUSDONECALLBACK 272 +#define OFFSET_XNSTATUSDRAWCALLBACK 291 +#define OFFSET_XNSTATUSATTRIBUTES 310 +#define OFFSET_XNAREA 327 +#define OFFSET_XNAREANEEDED 332 +#define OFFSET_XNSPOTLOCATION 343 +#define OFFSET_XNCOLORMAP 356 +#define OFFSET_XNSTDCOLORMAP 365 +#define OFFSET_XNFOREGROUND 377 +#define OFFSET_XNBACKGROUND 388 +#define OFFSET_XNBACKGROUNDPIXMAP 399 +#define OFFSET_XNFONTSET 416 +#define OFFSET_XNLINESPACE 424 +#define OFFSET_XNCURSOR 434 +#define OFFSET_XNQUERYIMVALUESLIST 441 +#define OFFSET_XNQUERYICVALUESLIST 459 +#define OFFSET_XNVISIBLEPOSITION 477 +#define OFFSET_XNSTRINGCONVERSIONCALLBACK 493 +#define OFFSET_XNSTRINGCONVERSION 518 +#define OFFSET_XNRESETSTATE 535 +#define OFFSET_XNHOTKEY 546 +#define OFFSET_XNHOTKEYSTATE 553 +#define OFFSET_XNPREEDITSTATE 565 + +/* offsets into name_table */ +static const unsigned short supported_local_im_values_list[] = { + OFFSET_XNQUERYINPUTSTYLE, + OFFSET_XNRESOURCENAME, + OFFSET_XNRESOURCECLASS, + OFFSET_XNDESTROYCALLBACK, + OFFSET_XNQUERYIMVALUESLIST, + OFFSET_XNQUERYICVALUESLIST, + OFFSET_XNVISIBLEPOSITION }; -static const char *supported_local_ic_values_list[] = { - XNInputStyle, - XNClientWindow, - XNFocusWindow, - XNResourceName, - XNResourceClass, - XNGeometryCallback, - XNFilterEvents, - XNDestroyCallback, - XNStringConversionCallback, - XNStringConversion, - XNResetState, - XNHotKey, - XNHotKeyState, - XNPreeditAttributes, - XNStatusAttributes, - XNArea, - XNAreaNeeded, - XNSpotLocation, - XNColormap, - XNStdColormap, - XNForeground, - XNBackground, - XNBackgroundPixmap, - XNFontSet, - XNLineSpace, - XNCursor, - XNPreeditStartCallback, - XNPreeditDoneCallback, - XNPreeditDrawCallback, - XNPreeditCaretCallback, - XNStatusStartCallback, - XNStatusDoneCallback, - XNStatusDrawCallback, - XNPreeditState, - XNPreeditStateNotifyCallback, - NULL +/* offsets into name_table */ +static const unsigned short supported_local_ic_values_list[] = { + OFFSET_XNINPUTSTYLE, + OFFSET_XNCLIENTWINDOW, + OFFSET_XNFOCUSWINDOW, + OFFSET_XNRESOURCENAME, + OFFSET_XNRESOURCECLASS, + OFFSET_XNGEOMETRYCALLBACK, + OFFSET_XNFILTEREVENTS, + OFFSET_XNDESTROYCALLBACK, + OFFSET_XNSTRINGCONVERSIONCALLBACK, + OFFSET_XNSTRINGCONVERSIONCALLBACK, + OFFSET_XNRESETSTATE, + OFFSET_XNHOTKEY, + OFFSET_XNHOTKEYSTATE, + OFFSET_XNPREEDITATTRIBUTES, + OFFSET_XNSTATUSATTRIBUTES, + OFFSET_XNAREA, + OFFSET_XNAREANEEDED, + OFFSET_XNSPOTLOCATION, + OFFSET_XNCOLORMAP, + OFFSET_XNSTDCOLORMAP, + OFFSET_XNFOREGROUND, + OFFSET_XNBACKGROUND, + OFFSET_XNBACKGROUNDPIXMAP, + OFFSET_XNFONTSET, + OFFSET_XNLINESPACE, + OFFSET_XNCURSOR, + OFFSET_XNPREEDITSTARTCALLBACK, + OFFSET_XNPREEDITDONECALLBACK, + OFFSET_XNPREEDITDRAWCALLBACK, + OFFSET_XNPREEDITCARETCALLBACK, + OFFSET_XNSTATUSSTARTCALLBACK, + OFFSET_XNSTATUSDONECALLBACK, + OFFSET_XNSTATUSDRAWCALLBACK, + OFFSET_XNPREEDITSTATE, + OFFSET_XNPREEDITSTATENOTIFYCALLBACK }; static XIMStyle const supported_local_styles[] = { @@ -312,7 +396,7 @@ _XimDefaultIMValues( int len; XPointer tmp; - n = XIMNumber(supported_local_im_values_list) - 1; + n = XIMNumber(supported_local_im_values_list); len = sizeof(XIMValuesList) + sizeof(char **) * n; if(!(tmp = (XPointer)Xmalloc(len))) { return False; @@ -325,8 +409,8 @@ _XimDefaultIMValues( values_list->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); for(i = 0; i < n; i++) { - values_list->supported_values[i] - = supported_local_im_values_list[i]; + values_list->supported_values[i] = + name_table + supported_local_im_values_list[i]; } } @@ -349,7 +433,7 @@ _XimDefaultICValues( int len; XPointer tmp; - n = XIMNumber(supported_local_ic_values_list) - 1; + n = XIMNumber(supported_local_ic_values_list); len = sizeof(XIMValuesList) + sizeof(char **) * n; if(!(tmp = (XPointer)Xmalloc(len))) { return False; @@ -362,8 +446,8 @@ _XimDefaultICValues( values_list->supported_values = (char **)((char *)tmp + sizeof(XIMValuesList)); for(i = 0; i < n; i++) { - values_list->supported_values[i] - = supported_local_ic_values_list[i]; + values_list->supported_values[i] = + name_table + supported_local_ic_values_list[i]; } } @@ -1439,247 +1523,245 @@ static XIMResource ic_inner_resources[] = { }; static XimValueOffsetInfoRec im_attr_info[] = { - {XNQueryInputStyle, 0, + {OFFSET_XNQUERYINPUTSTYLE, 0, XOffsetOf(XimDefIMValues, styles), _XimDefaultStyles, NULL, _XimDecodeStyles}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, 0, XOffsetOf(XimDefIMValues, destroy_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, 0, XOffsetOf(XimDefIMValues, res_name), NULL, _XimEncodeString, _XimDecodeString}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, 0, XOffsetOf(XimDefIMValues, res_class), NULL, _XimEncodeString, _XimDecodeString}, - {XNQueryIMValuesList, 0, + {OFFSET_XNQUERYIMVALUESLIST, 0, XOffsetOf(XimDefIMValues, im_values_list), _XimDefaultIMValues, NULL, _XimDecodeValues}, - {XNQueryICValuesList, 0, + {OFFSET_XNQUERYICVALUESLIST, 0, XOffsetOf(XimDefIMValues, ic_values_list), _XimDefaultICValues, NULL, _XimDecodeValues}, - {XNVisiblePosition, 0, + {OFFSET_XNVISIBLEPOSITION, 0, XOffsetOf(XimDefIMValues, visible_position), _XimDefaultVisiblePos, NULL, _XimDecodeBool} }; static XimValueOffsetInfoRec ic_attr_info[] = { - {XNInputStyle, 0, + {OFFSET_XNINPUTSTYLE, 0, XOffsetOf(XimDefICValues, input_style), NULL, _XimEncodeStyle, _XimDecodeStyle}, - {XNClientWindow, 0, + {OFFSET_XNCLIENTWINDOW, 0, XOffsetOf(XimDefICValues, client_window), NULL, _XimEncodeWindow, _XimDecodeWindow}, - {XNFocusWindow, 0, + {OFFSET_XNFOCUSWINDOW, 0, XOffsetOf(XimDefICValues, focus_window), _XimDefaultFocusWindow, _XimEncodeWindow, _XimDecodeWindow}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, 0, XOffsetOf(XimDefICValues, res_name), _XimDefaultResName, _XimEncodeString, _XimDecodeString}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, 0, XOffsetOf(XimDefICValues, res_class), _XimDefaultResClass, _XimEncodeString, _XimDecodeString}, - {XNGeometryCallback, 0, + {OFFSET_XNGEOMETRYCALLBACK, 0, XOffsetOf(XimDefICValues, geometry_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNFilterEvents, 0, + {OFFSET_XNFILTEREVENTS, 0, XOffsetOf(XimDefICValues, filter_events), NULL, NULL, _XimDecodeLong}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, 0, XOffsetOf(XimDefICValues, destroy_callback), _XimDefaultDestroyCB, _XimEncodeCallback, _XimDecodeCallback}, - {XNStringConversionCallback, 0, + {OFFSET_XNSTRINGCONVERSIONCALLBACK, 0, XOffsetOf(XimDefICValues, string_conversion_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNStringConversion, 0, + {OFFSET_XNSTRINGCONVERSION, 0, XOffsetOf(XimDefICValues, string_conversion), NULL, _XimEncodeStringConv, _XimDecodeStringConv}, - {XNResetState, 0, + {OFFSET_XNRESETSTATE, 0, XOffsetOf(XimDefICValues, reset_state), _XimDefaultResetState, _XimEncodeResetState, _XimDecodeResetState}, - {XNHotKey, 0, + {OFFSET_XNHOTKEY, 0, XOffsetOf(XimDefICValues, hotkey), NULL, _XimEncodeHotKey, _XimDecodeHotKey}, - {XNHotKeyState, 0, + {OFFSET_XNHOTKEYSTATE, 0, XOffsetOf(XimDefICValues, hotkey_state), _XimDefaultHotKeyState, _XimEncodeHotKetState, _XimDecodeHotKetState}, - {XNPreeditAttributes, 0, + {OFFSET_XNPREEDITATTRIBUTES, 0, XOffsetOf(XimDefICValues, preedit_attr), _XimDefaultNest, _XimEncodeNest, _XimDecodeNest}, - {XNStatusAttributes, 0, + {OFFSET_XNSTATUSATTRIBUTES, 0, XOffsetOf(XimDefICValues, status_attr), _XimDefaultNest, _XimEncodeNest, _XimDecodeNest}, }; static XimValueOffsetInfoRec ic_pre_attr_info[] = { - {XNArea, 0, + {OFFSET_XNAREA, 0, XOffsetOf(ICPreeditAttributes, area), _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNAreaNeeded, 0, + {OFFSET_XNAREANEEDED, 0, XOffsetOf(ICPreeditAttributes, area_needed), NULL, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNSpotLocation, 0, + {OFFSET_XNSPOTLOCATION, 0, XOffsetOf(ICPreeditAttributes, spot_location), NULL, _XimEncodeSpot, _XimDecodeSpot}, - {XNColormap, 0, + {OFFSET_XNCOLORMAP, 0, XOffsetOf(ICPreeditAttributes, colormap), _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap}, - {XNStdColormap, 0, + {OFFSET_XNSTDCOLORMAP, 0, XOffsetOf(ICPreeditAttributes, std_colormap), _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap}, - {XNForeground, 0, + {OFFSET_XNFOREGROUND, 0, XOffsetOf(ICPreeditAttributes, foreground), _XimDefaultFg, _XimEncodeLong, _XimDecodeLong}, - {XNBackground, 0, + {OFFSET_XNBACKGROUND, 0, XOffsetOf(ICPreeditAttributes, background), _XimDefaultBg, _XimEncodeLong, _XimDecodeLong}, - {XNBackgroundPixmap, 0, + {OFFSET_XNBACKGROUNDPIXMAP, 0, XOffsetOf(ICPreeditAttributes, background_pixmap), _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap}, - {XNFontSet, 0, + {OFFSET_XNFONTSET, 0, XOffsetOf(ICPreeditAttributes, fontset), _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet}, - {XNLineSpace, 0, + {OFFSET_XNLINESPACE, 0, XOffsetOf(ICPreeditAttributes, line_spacing), _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace}, - {XNCursor, 0, + {OFFSET_XNCURSOR, 0, XOffsetOf(ICPreeditAttributes, cursor), _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor}, - {XNPreeditStartCallback, 0, + {OFFSET_XNPREEDITSTARTCALLBACK, 0, XOffsetOf(ICPreeditAttributes, start_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditDoneCallback, 0, + {OFFSET_XNPREEDITDONECALLBACK, 0, XOffsetOf(ICPreeditAttributes, done_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditDrawCallback, 0, + {OFFSET_XNPREEDITDRAWCALLBACK, 0, XOffsetOf(ICPreeditAttributes, draw_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditCaretCallback, 0, + {OFFSET_XNPREEDITCARETCALLBACK, 0, XOffsetOf(ICPreeditAttributes, caret_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNPreeditState, 0, + {OFFSET_XNPREEDITSTATE, 0, XOffsetOf(ICPreeditAttributes, preedit_state), _XimDefaultPreeditState, _XimEncodePreeditState,_XimDecodePreeditState}, - {XNPreeditStateNotifyCallback, 0, + {OFFSET_XNPREEDITSTATENOTIFYCALLBACK, 0, XOffsetOf(ICPreeditAttributes, state_notify_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, }; static XimValueOffsetInfoRec ic_sts_attr_info[] = { - {XNArea, 0, + {OFFSET_XNAREA, 0, XOffsetOf(ICStatusAttributes, area), _XimDefaultArea, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNAreaNeeded, 0, + {OFFSET_XNAREANEEDED, 0, XOffsetOf(ICStatusAttributes, area_needed), NULL, _XimEncodeRectangle, _XimDecodeRectangle}, - {XNColormap, 0, + {OFFSET_XNCOLORMAP, 0, XOffsetOf(ICStatusAttributes, colormap), _XimDefaultColormap, _XimEncodeColormap, _XimDecodeColormap}, - {XNStdColormap, 0, + {OFFSET_XNSTDCOLORMAP, 0, XOffsetOf(ICStatusAttributes, std_colormap), _XimDefaultStdColormap, _XimEncodeStdColormap, _XimDecodeStdColormap}, - {XNForeground, 0, + {OFFSET_XNFOREGROUND, 0, XOffsetOf(ICStatusAttributes, foreground), _XimDefaultFg, _XimEncodeLong, _XimDecodeLong}, - {XNBackground, 0, + {OFFSET_XNBACKGROUND, 0, XOffsetOf(ICStatusAttributes, background), _XimDefaultBg, _XimEncodeLong, _XimDecodeLong}, - {XNBackgroundPixmap, 0, + {OFFSET_XNBACKGROUNDPIXMAP, 0, XOffsetOf(ICStatusAttributes, background_pixmap), _XimDefaultBgPixmap, _XimEncodeBgPixmap, _XimDecodeBgPixmap}, - {XNFontSet, 0, + {OFFSET_XNFONTSET, 0, XOffsetOf(ICStatusAttributes, fontset), _XimDefaultFontSet, _XimEncodeFontSet, _XimDecodeFontSet}, - {XNLineSpace, 0, + {OFFSET_XNLINESPACE, 0, XOffsetOf(ICStatusAttributes, line_spacing), _XimDefaultLineSpace, _XimEncodeLineSpace, _XimDecodeLineSpace}, - {XNCursor, 0, + {OFFSET_XNCURSOR, 0, XOffsetOf(ICStatusAttributes, cursor), _XimDefaultCursor, _XimEncodeCursor, _XimDecodeCursor}, - {XNStatusStartCallback, 0, + {OFFSET_XNSTATUSSTARTCALLBACK, 0, XOffsetOf(ICStatusAttributes, start_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNStatusDoneCallback, 0, + {OFFSET_XNSTATUSDONECALLBACK, 0, XOffsetOf(ICStatusAttributes, done_callback), NULL, _XimEncodeCallback, _XimDecodeCallback}, - {XNStatusDrawCallback, 0, + {OFFSET_XNSTATUSDRAWCALLBACK, 0, XOffsetOf(ICStatusAttributes, draw_callback), NULL, _XimEncodeCallback, _XimDecodeCallback} }; typedef struct _XimIMMode { - const char *name; - XrmQuark quark; + unsigned short name_offset; unsigned short mode; } XimIMMode; -static XimIMMode im_mode[] = { - {XNQueryInputStyle, 0, +static const XimIMMode im_mode[] = { + {OFFSET_XNQUERYINPUTSTYLE, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_SET | XIM_MODE_IM_GET)}, - {XNQueryIMValuesList, 0, + {OFFSET_XNQUERYIMVALUESLIST, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, - {XNQueryICValuesList, 0, + {OFFSET_XNQUERYICVALUESLIST, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)}, - {XNVisiblePosition, 0, + {OFFSET_XNVISIBLEPOSITION, (XIM_MODE_IM_DEFAULT | XIM_MODE_IM_GET)} }; typedef struct _XimICMode { - const char *name; - XrmQuark quark; + unsigned short name_offset; unsigned short preedit_callback_mode; unsigned short preedit_position_mode; unsigned short preedit_area_mode; @@ -1691,8 +1773,8 @@ typedef struct _XimICMode { unsigned short status_none_mode; } XimICMode; -static XimICMode ic_mode[] = { - {XNInputStyle, 0, +static const XimICMode ic_mode[] = { + {OFFSET_XNINPUTSTYLE, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_GET), @@ -1702,7 +1784,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET), (XIM_MODE_STS_CREATE | XIM_MODE_STS_GET)}, - {XNClientWindow, 0, + {OFFSET_XNCLIENTWINDOW, (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), (XIM_MODE_PRE_ONCE | XIM_MODE_PRE_GET), @@ -1712,7 +1794,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET), (XIM_MODE_STS_ONCE | XIM_MODE_STS_GET), 0}, - {XNFocusWindow, 0, + {OFFSET_XNFOCUSWINDOW, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1722,7 +1804,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNResourceName, 0, + {OFFSET_XNRESOURCENAME, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1732,7 +1814,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNResourceClass, 0, + {OFFSET_XNRESOURCECLASS, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1742,7 +1824,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNGeometryCallback, 0, + {OFFSET_XNGEOMETRYCALLBACK, 0, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1752,7 +1834,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, - {XNFilterEvents, 0, + {OFFSET_XNFILTEREVENTS, XIM_MODE_PRE_GET, XIM_MODE_PRE_GET, XIM_MODE_PRE_GET, @@ -1762,7 +1844,7 @@ static XimICMode ic_mode[] = { XIM_MODE_STS_GET, XIM_MODE_STS_GET, XIM_MODE_STS_GET}, - {XNDestroyCallback, 0, + {OFFSET_XNDESTROYCALLBACK, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1772,7 +1854,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStringConversionCallback, 0, + {OFFSET_XNSTRINGCONVERSIONCALLBACK, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1782,7 +1864,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStringConversion, 0, + {OFFSET_XNSTRINGCONVERSION, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, XIM_MODE_PRE_SET, @@ -1792,7 +1874,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNResetState, 0, + {OFFSET_XNRESETSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1802,7 +1884,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNHotKey, 0, + {OFFSET_XNHOTKEY, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1812,7 +1894,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNHotKeyState, 0, + {OFFSET_XNHOTKEYSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1822,7 +1904,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditAttributes, 0, + {OFFSET_XNPREEDITATTRIBUTES, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1832,7 +1914,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusAttributes, 0, + {OFFSET_XNSTATUSATTRIBUTES, 0, 0, 0, @@ -1842,7 +1924,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNArea, 0, + {OFFSET_XNAREA, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1852,7 +1934,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, - {XNAreaNeeded, 0, + {OFFSET_XNAREANEEDED, 0, 0, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1862,7 +1944,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0, 0}, - {XNSpotLocation, 0, + {OFFSET_XNSPOTLOCATION, 0, /*(XIM_MODE_PRE_SET | XIM_MODE_PRE_GET),*/ (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, @@ -1872,7 +1954,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNColormap, 0, + {OFFSET_XNCOLORMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1882,7 +1964,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNStdColormap, 0, + {OFFSET_XNSTDCOLORMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1892,7 +1974,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNForeground, 0, + {OFFSET_XNFOREGROUND, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1902,7 +1984,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNBackground, 0, + {OFFSET_XNBACKGROUND, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1912,7 +1994,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNBackgroundPixmap, 0, + {OFFSET_XNBACKGROUNDPIXMAP, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1922,7 +2004,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNFontSet, 0, + {OFFSET_XNFONTSET, 0, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1932,7 +2014,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_CREATE | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNLineSpace, 0, + {OFFSET_XNLINESPACE, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1942,7 +2024,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNCursor, 0, + {OFFSET_XNCURSOR, 0, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -1952,7 +2034,7 @@ static XimICMode ic_mode[] = { (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), (XIM_MODE_STS_DEFAULT | XIM_MODE_STS_SET | XIM_MODE_STS_GET), 0}, - {XNPreeditStartCallback, 0, + {OFFSET_XNPREEDITSTARTCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1962,7 +2044,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditDoneCallback, 0, + {OFFSET_XNPREEDITDONECALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1972,7 +2054,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditDrawCallback, 0, + {OFFSET_XNPREEDITDRAWCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1982,7 +2064,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditCaretCallback, 0, + {OFFSET_XNPREEDITCARETCALLBACK, (XIM_MODE_PRE_CREATE | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), 0, 0, @@ -1992,7 +2074,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditState, 0, + {OFFSET_XNPREEDITSTATE, (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_DEFAULT | XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -2002,7 +2084,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNPreeditStateNotifyCallback, 0, + {OFFSET_XNPREEDITSTATENOTIFYCALLBACK, (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), (XIM_MODE_PRE_SET | XIM_MODE_PRE_GET), @@ -2012,7 +2094,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusStartCallback, 0, + {OFFSET_XNSTATUSSTARTCALLBACK, 0, 0, 0, @@ -2022,7 +2104,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusDoneCallback, 0, + {OFFSET_XNSTATUSDONECALLBACK, 0, 0, 0, @@ -2032,7 +2114,7 @@ static XimICMode ic_mode[] = { 0, 0, 0}, - {XNStatusDrawCallback, 0, + {OFFSET_XNSTATUSDRAWCALLBACK, 0, 0, 0, @@ -2044,6 +2126,12 @@ static XimICMode ic_mode[] = { 0} }; +/* the quarks are separated from im_mode/ic_mode so those arrays + * can be const. + */ +static XrmQuark im_mode_quark[sizeof(im_mode) / sizeof(im_mode[0])]; +static XrmQuark ic_mode_quark[sizeof(ic_mode) / sizeof(ic_mode[0])]; + Private Bool _XimSetResourceList( XIMResourceList *res_list, @@ -2234,7 +2322,7 @@ _XimSetIMMode( for(i = 0; i < n; i++) { if(!(res = _XimGetResourceListRecByQuark(res_list, - list_num, im_mode[i].quark))) { + list_num, im_mode_quark[i]))) { continue; } res->mode = im_mode[i].mode; @@ -2327,7 +2415,7 @@ _XimSetICMode(res_list, list_num, style) for(i = 0; i < n; i++) { if(!(res = _XimGetResourceListRecByQuark(res_list, - list_num, ic_mode[i].quark))) { + list_num, ic_mode_quark[i]))) { continue; } res->mode = ( (*(unsigned short *)((char *)&ic_mode[i] + pre_offset)) @@ -3069,7 +3157,7 @@ _XimInitialIMOffsetInfo(void) register int i; for(i = 0; i < n; i++) { - im_attr_info[i].quark = XrmStringToQuark(im_attr_info[i].name); + im_attr_info[i].quark = XrmStringToQuark(GET_NAME(im_attr_info[i])); } } @@ -3081,17 +3169,17 @@ _XimInitialICOffsetInfo(void) n = XIMNumber(ic_attr_info); for(i = 0; i < n; i++) { - ic_attr_info[i].quark = XrmStringToQuark(ic_attr_info[i].name); + ic_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_attr_info[i])); } n = XIMNumber(ic_pre_attr_info); for(i = 0; i < n; i++) { - ic_pre_attr_info[i].quark = XrmStringToQuark(ic_pre_attr_info[i].name); + ic_pre_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_pre_attr_info[i])); } n = XIMNumber(ic_sts_attr_info); for(i = 0; i < n; i++) { - ic_sts_attr_info[i].quark = XrmStringToQuark(ic_sts_attr_info[i].name); + ic_sts_attr_info[i].quark = XrmStringToQuark(GET_NAME(ic_sts_attr_info[i])); } } @@ -3102,7 +3190,7 @@ _XimInitialIMMode(void) register int i; for(i = 0; i < n; i++) { - im_mode[i].quark = XrmStringToQuark(im_mode[i].name); + im_mode_quark[i] = XrmStringToQuark(GET_NAME(im_mode[i])); } } @@ -3113,7 +3201,7 @@ _XimInitialICMode(void) register int i; for(i = 0; i < n; i++) { - ic_mode[i].quark = XrmStringToQuark(ic_mode[i].name); + ic_mode_quark[i] = XrmStringToQuark(GET_NAME(ic_mode[i])); } } diff --git a/nls/compose.dir.pre b/nls/compose.dir.pre index d9886c7b..c9a35dcf 100644 --- a/nls/compose.dir.pre +++ b/nls/compose.dir.pre @@ -32,8 +32,14 @@ iso8859-1/Compose: br_FR.ISO8859-1 iso8859-14/Compose: br_FR.ISO8859-14 iso8859-15/Compose: br_FR.ISO8859-15 iso8859-2/Compose: bs_BA.ISO8859-2 +iso8859-1/Compose: ca_AD.ISO8859-1 +iso8859-15/Compose: ca_AD.ISO8859-15 iso8859-1/Compose: ca_ES.ISO8859-1 iso8859-15/Compose: ca_ES.ISO8859-15 +iso8859-1/Compose: ca_FR.ISO8859-1 +iso8859-15/Compose: ca_FR.ISO8859-15 +iso8859-1/Compose: ca_IT.ISO8859-1 +iso8859-15/Compose: ca_IT.ISO8859-15 iso8859-2/Compose: cs_CZ.ISO8859-2 iso8859-1/Compose: cy_GB.ISO8859-1 iso8859-14/Compose: cy_GB.ISO8859-14 @@ -258,7 +264,10 @@ en_US.UTF-8/Compose: be_BY.UTF-8 en_US.UTF-8/Compose: bg_BG.UTF-8 en_US.UTF-8/Compose: bn_IN.UTF-8 en_US.UTF-8/Compose: br_FR.UTF-8 +en_US.UTF-8/Compose: ca_AD.UTF-8 en_US.UTF-8/Compose: ca_ES.UTF-8 +en_US.UTF-8/Compose: ca_FR.UTF-8 +en_US.UTF-8/Compose: ca_IT.UTF-8 en_US.UTF-8/Compose: cs_CZ.UTF-8 en_US.UTF-8/Compose: cy_GB.UTF-8 en_US.UTF-8/Compose: cz_CZ.UTF-8 diff --git a/nls/en_US.UTF-8/Compose.pre b/nls/en_US.UTF-8/Compose.pre index e6eaa61a..25ebacb9 100644 --- a/nls/en_US.UTF-8/Compose.pre +++ b/nls/en_US.UTF-8/Compose.pre @@ -92,7 +92,7 @@ XCOMM Spaces : "›" U203a # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK : "‹" U2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK - : "·" U00B7 # MIDDLE DOT + : "·" periodcentered # MIDDLE DOT : "¦" brokenbar # BROKEN BAR : "¡" exclamdown # INVERTED EXCLAMATION MARK

: "¶" paragraph # PILCROW SIGN @@ -155,13 +155,20 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN - : "¢" U00A2 # CENT SIGN - : "¢" U00A2 # CENT SIGN - : "¢" U00A2 # CENT SIGN - : "¢" U00A2 # CENT SIGN - : "£" U00a3 # POUND SIGN - : "£" U00a3 # POUND SIGN + + : "¢" cent # CENT SIGN + : "¢" cent # CENT SIGN + : "¢" cent # CENT SIGN + : "¢" cent # CENT SIGN + : "£" sterling # POUND SIGN + : "£" sterling # POUND SIGN : "¥" yen # YEN SIGN : "¥" yen # YEN SIGN @@ -181,12 +188,18 @@ XCOMM Musical alterations XCOMM Other symbols : "§" section # SECTION SIGN : "§" section # SECTION SIGN + : "§" section # SECTION SIGN : "¤" currency # CURRENCY SIGN : "¤" currency # CURRENCY SIGN

: "¶" paragraph # PILCROW SIGN + : "№" numerosign # NUMERO SIGN + : "№" numerosign # NUMERO SIGN + : "№" numerosign # NUMERO SIGN + : "№" numerosign # NUMERO SIGN + XCOMM Part 2 XCOMM Compose map for Korean Hangul(Choseongul) Conjoining Jamos automatically @@ -429,191 +442,191 @@ XCOMM group 1: cluster jamos made of three basic jamos : "ᇞ" U11de # HANGUL JONGSEONG MIEUM-SSANGSIOS : "ᇭ" U11ed # HANGUL JONGSEONG IEUNG-SSANGKIYEOK - : "¬" U00AC # NOT SIGN - : "¬" U00AC # NOT SIGN - : "ª" U00AA # FEMININE ORDINAL INDICATOR - : "ª" U00AA # FEMININE ORDINAL INDICATOR - : "ª" U00AA # FEMININE ORDINAL INDICATOR - : "ª" U00AA # FEMININE ORDINAL INDICATOR - <2> : "²" U00B2 # SUPERSCRIPT TWO - <2> : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - <3> : "³" U00B3 # SUPERSCRIPT THREE - <3> : "³" U00B3 # SUPERSCRIPT THREE - : "³" U00B3 # SUPERSCRIPT THREE - : "³" U00B3 # SUPERSCRIPT THREE - : "µ" U00B5 # MICRO SIGN - <1> : "¹" U00B9 # SUPERSCRIPT ONE - <1> : "¹" U00B9 # SUPERSCRIPT ONE - : "¹" U00B9 # SUPERSCRIPT ONE - : "¹" U00B9 # SUPERSCRIPT ONE - : "º" U00BA # MASCULINE ORDINAL INDICATOR - : "º" U00BA # MASCULINE ORDINAL INDICATOR - : "º" U00BA # MASCULINE ORDINAL INDICATOR - : "º" U00BA # MASCULINE ORDINAL INDICATOR - <1> <4> : "¼" U00BC # VULGAR FRACTION ONE QUARTER - <1> <2> : "½" U00BD # VULGAR FRACTION ONE HALF - <3> <4> : "¾" U00BE # VULGAR FRACTION THREE QUARTERS - : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE - : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE - : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE - : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE - : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE - : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS - : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS - : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE - : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE - : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA - : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA - : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE - : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE - : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS - : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS - : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE - : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE - : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS - : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS - : "Ð" U00D0 # LATIN CAPITAL LETTER ETH - : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE - : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE - : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE - : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE - : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE - : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE - : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE - : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE - : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS - : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS - : "×" U00D7 # MULTIPLICATION SIGN - : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE - : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE - : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE - : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE - : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS - : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "Þ" U00DE # LATIN CAPITAL LETTER THORN - : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE - : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE - : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX - : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX - : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE - : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE - : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE - : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS - : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS - : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE - : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE - : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA - : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA - : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE - : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE - : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX - : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX - : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS - : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS - : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE - : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE - : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX - : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX - : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS - : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS - : "ð" U00F0 # LATIN SMALL LETTER ETH - : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE - : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE - : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE - : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE - : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE - : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX - : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX - : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE - : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE - : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE - : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS - : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS - : "÷" U00F7 # DIVISION SIGN - : "÷" U00F7 # DIVISION SIGN - : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE - : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE - : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE - : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE - : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX - : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX - : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS - : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "þ" U00FE # LATIN SMALL LETTER THORN - : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS - : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS + : "¬" notsign # NOT SIGN + : "¬" notsign # NOT SIGN + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + <2> : "²" twosuperior # SUPERSCRIPT TWO + <2> : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + <3> : "³" threesuperior # SUPERSCRIPT THREE + <3> : "³" threesuperior # SUPERSCRIPT THREE + : "³" threesuperior # SUPERSCRIPT THREE + : "³" threesuperior # SUPERSCRIPT THREE + : "µ" mu # MICRO SIGN + <1> : "¹" onesuperior # SUPERSCRIPT ONE + <1> : "¹" onesuperior # SUPERSCRIPT ONE + : "¹" onesuperior # SUPERSCRIPT ONE + : "¹" onesuperior # SUPERSCRIPT ONE + : "º" masculine # MASCULINE ORDINAL INDICATOR + : "º" masculine # MASCULINE ORDINAL INDICATOR + : "º" masculine # MASCULINE ORDINAL INDICATOR + : "º" masculine # MASCULINE ORDINAL INDICATOR + <1> <4> : "¼" onequarter # VULGAR FRACTION ONE QUARTER + <1> <2> : "½" onehalf # VULGAR FRACTION ONE HALF + <3> <4> : "¾" threequarters # VULGAR FRACTION THREE QUARTERS + : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE + : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE + : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE + : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE + : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE + : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS + : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS + : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE + : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE + : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA + : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA + : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE + : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE + : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS + : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS + : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE + : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE + : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS + : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS + : "Ð" ETH # LATIN CAPITAL LETTER ETH + : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE + : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE + : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE + : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE + : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE + : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE + : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE + : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE + : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS + : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS + : "×" multiply # MULTIPLICATION SIGN + : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE + : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE + : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE + : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE + : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS + : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "Þ" THORN # LATIN CAPITAL LETTER THORN + : "à" agrave # LATIN SMALL LETTER A WITH GRAVE + : "à" agrave # LATIN SMALL LETTER A WITH GRAVE + : "à" agrave # LATIN SMALL LETTER A WITH GRAVE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX + : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX + : "ã" atilde # LATIN SMALL LETTER A WITH TILDE + : "ã" atilde # LATIN SMALL LETTER A WITH TILDE + : "ã" atilde # LATIN SMALL LETTER A WITH TILDE + : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS + : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS + : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE + : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE + : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA + : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA + : "è" egrave # LATIN SMALL LETTER E WITH GRAVE + : "è" egrave # LATIN SMALL LETTER E WITH GRAVE + : "è" egrave # LATIN SMALL LETTER E WITH GRAVE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX + : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX + : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS + : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS + : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE + : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE + : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX + : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX + : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS + : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS + : "ð" eth # LATIN SMALL LETTER ETH + : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE + : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE + : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE + : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE + : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE + : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX + : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX + : "õ" otilde # LATIN SMALL LETTER O WITH TILDE + : "õ" otilde # LATIN SMALL LETTER O WITH TILDE + : "õ" otilde # LATIN SMALL LETTER O WITH TILDE + : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS + : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS + : "÷" division # DIVISION SIGN + : "÷" division # DIVISION SIGN + : "ø" oslash # LATIN SMALL LETTER O WITH STROKE + : "ø" oslash # LATIN SMALL LETTER O WITH STROKE + : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE + : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE + : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX + : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX + : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS + : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "þ" thorn # LATIN SMALL LETTER THORN + : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS + : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON @@ -4982,8 +4995,20 @@ XCOMM group 1: cluster jamos made of three basic jamos : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS : "℠" U2120 # SERVICE MARK : "℠" U2120 # SERVICE MARK + : "℠" U2120 # SERVICE MARK + : "℠" U2120 # SERVICE MARK + : "℠" U2120 # SERVICE MARK + : "℠" U2120 # SERVICE MARK + : "℠" U2120 # SERVICE MARK + : "℠" U2120 # SERVICE MARK : "™" U2122 # TRADE MARK SIGN : "™" U2122 # TRADE MARK SIGN + : "™" U2122 # TRADE MARK SIGN + : "™" U2122 # TRADE MARK SIGN + : "™" U2122 # TRADE MARK SIGN + : "™" U2122 # TRADE MARK SIGN + : "™" U2122 # TRADE MARK SIGN + : "™" U2122 # TRADE MARK SIGN : "↚" U219A # LEFTWARDS ARROW WITH STROKE : "↚" U219A # LEFTWARDS ARROW WITH STROKE : "↛" U219B # RIGHTWARDS ARROW WITH STROKE @@ -5556,25 +5581,25 @@ XCOMM group 1: cluster jamos made of three basic jamos : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE : "כֿ" UFB4D # HEBREW LETTER KAF WITH RAFE : "פֿ" UFB4E # HEBREW LETTER PE WITH RAFE - : "텞" U1D15E # MUSICAL SYMBOL HALF NOTE - : "텟" U1D15F # MUSICAL SYMBOL QUARTER NOTE - : "텠" U1D160 # MUSICAL SYMBOL EIGHTH NOTE -## : "텠" U1D160 # MUSICAL SYMBOL EIGHTH NOTE - : "텡" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE -## : "텡" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE - : "텢" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE -## : "텢" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE - : "텣" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE -## : "텣" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE - : "텤" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE -## : "텤" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE - : "톻" U1D1BB # MUSICAL SYMBOL MINIMA - : "톼" U1D1BC # MUSICAL SYMBOL MINIMA BLACK - : "톽" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE -## : "톽" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE - : "톾" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK -## : "톾" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK - : "톿" U1D1BF # MUSICAL SYMBOL FUSA WHITE -## : "톿" U1D1BF # MUSICAL SYMBOL FUSA WHITE - : "퇀" U1D1C0 # MUSICAL SYMBOL FUSA BLACK -## : "퇀" U1D1C0 # MUSICAL SYMBOL FUSA BLACK + : "𝅗𝅥" U1D15E # MUSICAL SYMBOL HALF NOTE + : "𝅘𝅥" U1D15F # MUSICAL SYMBOL QUARTER NOTE + : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE +## : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE + : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE +## : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE + : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE +## : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE + : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE +## : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE + : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +## : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE + : "𝆹𝅥" U1D1BB # MUSICAL SYMBOL MINIMA + : "𝆺𝅥" U1D1BC # MUSICAL SYMBOL MINIMA BLACK + : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE +## : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE + : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK +## : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK + : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE +## : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE + : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK +## : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK diff --git a/nls/iso8859-15/Compose.pre b/nls/iso8859-15/Compose.pre index b936e58e..d9264cd3 100644 --- a/nls/iso8859-15/Compose.pre +++ b/nls/iso8859-15/Compose.pre @@ -56,8 +56,12 @@ XCOMM Special Character : "\243" sterling : "\244" EuroSign : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign : "\244" EuroSign + : "\244" EuroSign : "\244" EuroSign + : "\244" EuroSign : "\245" yen : "\245" yen : "\245" yen diff --git a/nls/iso8859-3/Compose.pre b/nls/iso8859-3/Compose.pre index 71a58857..fe52a597 100644 --- a/nls/iso8859-3/Compose.pre +++ b/nls/iso8859-3/Compose.pre @@ -47,6 +47,10 @@ XCOMM Special Character : "\243" sterling : "\244" EuroSign : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\245" yen diff --git a/nls/iso8859-9/Compose.pre b/nls/iso8859-9/Compose.pre index 13ae0b40..748e8ace 100644 --- a/nls/iso8859-9/Compose.pre +++ b/nls/iso8859-9/Compose.pre @@ -55,6 +55,10 @@ XCOMM Special Character : "\243" sterling : "\244" EuroSign : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\245" yen diff --git a/nls/iso8859-9e/Compose.pre b/nls/iso8859-9e/Compose.pre index a87899ad..f8c08f64 100644 --- a/nls/iso8859-9e/Compose.pre +++ b/nls/iso8859-9e/Compose.pre @@ -54,6 +54,10 @@ XCOMM Special Character : "\243" sterling : "\244" EuroSign : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign + : "\244" EuroSign : "\244" EuroSign : "\244" EuroSign : "\245" yen diff --git a/nls/locale.alias.pre b/nls/locale.alias.pre index a74ca759..87f52172 100644 --- a/nls/locale.alias.pre +++ b/nls/locale.alias.pre @@ -146,6 +146,15 @@ bs_BA.iso88592: bs_BA.ISO8859-2 bs_BA.ISO-8859-2: bs_BA.ISO8859-2 bs_BA.ISO_8859-2: bs_BA.ISO8859-2 ca: ca_ES.ISO8859-1 +ca_AD: ca_AD.ISO8859-1 +ca_AD@euro: ca_AD.ISO8859-15 +ca_AD.iso88591: ca_AD.ISO8859-1 +ca_AD.ISO-8859-1: ca_AD.ISO8859-1 +ca_AD.iso885915: ca_AD.ISO8859-15 +ca_AD.utf8: ca_AD.UTF-8 +ca_AD.ISO-8859-15: ca_AD.ISO8859-15 +ca_AD.ISO-8859-15@euro: ca_AD.ISO8859-15 +ca_AD.UTF-8@euro: ca_AD.UTF-8 ca_ES: ca_ES.ISO8859-1 ca_ES@euro: ca_ES.ISO8859-15 ca_ES.iso88591: ca_ES.ISO8859-1 @@ -155,6 +164,24 @@ ca_ES.utf8: ca_ES.UTF-8 ca_ES.ISO-8859-15: ca_ES.ISO8859-15 ca_ES.ISO-8859-15@euro: ca_ES.ISO8859-15 ca_ES.UTF-8@euro: ca_ES.UTF-8 +ca_FR: ca_FR.ISO8859-1 +ca_FR@euro: ca_FR.ISO8859-15 +ca_FR.iso88591: ca_FR.ISO8859-1 +ca_FR.ISO-8859-1: ca_FR.ISO8859-1 +ca_FR.iso885915: ca_FR.ISO8859-15 +ca_FR.utf8: ca_FR.UTF-8 +ca_FR.ISO-8859-15: ca_FR.ISO8859-15 +ca_FR.ISO-8859-15@euro: ca_FR.ISO8859-15 +ca_FR.UTF-8@euro: ca_FR.UTF-8 +ca_IT: ca_IT.ISO8859-1 +ca_IT@euro: ca_IT.ISO8859-15 +ca_IT.iso88591: ca_IT.ISO8859-1 +ca_IT.ISO-8859-1: ca_IT.ISO8859-1 +ca_IT.iso885915: ca_IT.ISO8859-15 +ca_IT.utf8: ca_IT.UTF-8 +ca_IT.ISO-8859-15: ca_IT.ISO8859-15 +ca_IT.ISO-8859-15@euro: ca_IT.ISO8859-15 +ca_IT.UTF-8@euro: ca_IT.UTF-8 cs: cs_CZ.ISO8859-2 cs_CS: cs_CZ.ISO8859-2 cs_CS.ISO8859-2: cs_CZ.ISO8859-2 @@ -1237,7 +1264,10 @@ Arabic_Tunisia.1256: ar_TN.iso8859-6 Arabic_Yemen.1256: ar_YE.iso8859-6 Belarusian_Belarus.1251: be_BY.iso8859-5 Bulgarian_Bulgaria.1251: bg_BG.iso8859-5 +Catalan_Andorra.1252: ca_AD.iso8859-1 Catalan_Spain.1252: ca_ES.iso8859-1 +Catalan_France.1252: ca_FR.iso8859-1 +Catalan_Italy.1252: ca_IT.iso8859-1 Czech_Czech Republic.1250: cs_CZ.iso8859-2 Danish_Denmark.1252: da_DK.iso8859-1 German_Austria.1252: de_AT.iso8859-1 diff --git a/nls/locale.dir.pre b/nls/locale.dir.pre index 275c8c84..28869f23 100644 --- a/nls/locale.dir.pre +++ b/nls/locale.dir.pre @@ -38,8 +38,14 @@ iso8859-2/XLC_LOCALE bs_BA.ISO8859-2 iso8859-1/XLC_LOCALE: br_FR.ISO8859-1 iso8859-14/XLC_LOCALE: br_FR.ISO8859-14 iso8859-15/XLC_LOCALE: br_FR.ISO8859-15 +iso8859-1/XLC_LOCALE: ca_AD.ISO8859-1 +iso8859-15/XLC_LOCALE: ca_AD.ISO8859-15 iso8859-1/XLC_LOCALE: ca_ES.ISO8859-1 iso8859-15/XLC_LOCALE: ca_ES.ISO8859-15 +iso8859-1/XLC_LOCALE: ca_FR.ISO8859-1 +iso8859-15/XLC_LOCALE: ca_FR.ISO8859-15 +iso8859-1/XLC_LOCALE: ca_IT.ISO8859-1 +iso8859-15/XLC_LOCALE: ca_IT.ISO8859-15 iso8859-2/XLC_LOCALE: cs_CZ.ISO8859-2 iso8859-1/XLC_LOCALE: cy_GB.ISO8859-1 iso8859-14/XLC_LOCALE: cy_GB.ISO8859-14 @@ -278,7 +284,10 @@ en_US.UTF-8/XLC_LOCALE: bg_BG.UTF-8 en_US.UTF-8/XLC_LOCALE: bn_BD.UTF-8 en_US.UTF-8/XLC_LOCALE: bn_IN.UTF-8 en_US.UTF-8/XLC_LOCALE: br_FR.UTF-8 +en_US.UTF-8/XLC_LOCALE: ca_AD.UTF-8 en_US.UTF-8/XLC_LOCALE: ca_ES.UTF-8 +en_US.UTF-8/XLC_LOCALE: ca_FR.UTF-8 +en_US.UTF-8/XLC_LOCALE: ca_IT.UTF-8 en_US.UTF-8/XLC_LOCALE: cs_CZ.UTF-8 en_US.UTF-8/XLC_LOCALE: cy_GB.UTF-8 en_US.UTF-8/XLC_LOCALE: cs_CZ.UTF-8 diff --git a/nls/pt_BR.UTF-8/Compose.pre b/nls/pt_BR.UTF-8/Compose.pre index 8842e613..c8083e29 100644 --- a/nls/pt_BR.UTF-8/Compose.pre +++ b/nls/pt_BR.UTF-8/Compose.pre @@ -89,7 +89,7 @@ XCOMM Spaces : "›" U203a : "‹" U2039 - : "·" U00B7 + : "·" periodcentered : "¦" brokenbar : "¡" exclamdown

: "¶" paragraph @@ -149,11 +149,15 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN : "₫" U20ab # DONG SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN + : "€" EuroSign # EURO SIGN - : "£" U00a3 # POUND SIGN - : "£" U00a3 # POUND SIGN + : "£" sterling # POUND SIGN + : "£" sterling # POUND SIGN : "¥" yen : "¥" yen @@ -420,178 +424,178 @@ XCOMM group 1: cluster jamos made of three basic jamos : "ᇞ" U11de : ᅟᅠᆷ ᅟᅠᆻ = ᅟᅠᇞ : "ᇭ" U11ed : ᅟᅠᆼ ᅟᅠᆩ = ᅟᅠᇭ - : "ª" U00AA # FEMININE ORDINAL INDICATOR - : "ª" U00AA # FEMININE ORDINAL INDICATOR - : "ª" U00AA # FEMININE ORDINAL INDICATOR - : "ª" U00AA # FEMININE ORDINAL INDICATOR - <2> : "²" U00B2 # SUPERSCRIPT TWO - <2> : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - : "²" U00B2 # SUPERSCRIPT TWO - <3> : "³" U00B3 # SUPERSCRIPT THREE - <3> : "³" U00B3 # SUPERSCRIPT THREE - : "³" U00B3 # SUPERSCRIPT THREE - : "³" U00B3 # SUPERSCRIPT THREE - <1> : "¹" U00B9 # SUPERSCRIPT ONE - <1> : "¹" U00B9 # SUPERSCRIPT ONE - : "¹" U00B9 # SUPERSCRIPT ONE - : "¹" U00B9 # SUPERSCRIPT ONE - : "º" U00BA # MASCULINE ORDINAL INDICATOR - : "º" U00BA # MASCULINE ORDINAL INDICATOR - : "º" U00BA # MASCULINE ORDINAL INDICATOR - : "º" U00BA # MASCULINE ORDINAL INDICATOR - : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE - : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE - : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE - : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX - : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE - : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE - : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE - : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS - : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS - : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE - : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE - : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA - : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA - : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE - : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE - : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE - : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX - : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS - : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS - : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE - : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE - : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE - : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX - : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS - : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS - : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE - : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE - : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE - : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE - : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE - : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE - : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX - : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE - : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE - : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE - : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS - : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS - : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE - : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE - : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE - : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE - : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE - : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX - : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS - : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE - : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE - : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE - : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE - : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX - : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX - : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE - : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE - : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE - : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS - : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS - : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE - : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE - : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA - : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA - : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE - : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE - : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE - : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX - : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX - : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS - : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS - : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE - : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE - : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE - : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX - : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX - : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS - : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS - : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE - : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE - : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE - : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE - : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE - : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE - : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX - : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX - : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE - : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE - : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE - : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS - : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS - : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE - : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE - : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE - : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE - : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE - : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX - : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX - : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS - : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE - : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS - : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + : "ª" ordfeminine # FEMININE ORDINAL INDICATOR + <2> : "²" twosuperior # SUPERSCRIPT TWO + <2> : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + : "²" twosuperior # SUPERSCRIPT TWO + <3> : "³" threesuperior # SUPERSCRIPT THREE + <3> : "³" threesuperior # SUPERSCRIPT THREE + : "³" threesuperior # SUPERSCRIPT THREE + : "³" threesuperior # SUPERSCRIPT THREE + <1> : "¹" onesuperior # SUPERSCRIPT ONE + <1> : "¹" onesuperior # SUPERSCRIPT ONE + : "¹" onesuperior # SUPERSCRIPT ONE + : "¹" onesuperior # SUPERSCRIPT ONE + : "º" masculine # MASCULINE ORDINAL INDICATOR + : "º" masculine # MASCULINE ORDINAL INDICATOR + : "º" masculine # MASCULINE ORDINAL INDICATOR + : "º" masculine # MASCULINE ORDINAL INDICATOR + : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE + : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE + : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE + : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX + : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE + : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE + : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE + : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS + : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS + : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE + : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE + : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA + : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA + : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE + : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE + : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE + : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX + : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS + : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS + : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE + : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE + : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE + : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX + : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS + : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS + : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE + : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE + : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE + : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE + : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE + : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE + : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX + : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE + : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE + : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE + : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS + : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS + : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE + : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE + : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE + : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE + : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE + : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX + : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS + : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE + : "à" agrave # LATIN SMALL LETTER A WITH GRAVE + : "à" agrave # LATIN SMALL LETTER A WITH GRAVE + : "à" agrave # LATIN SMALL LETTER A WITH GRAVE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "á" aacute # LATIN SMALL LETTER A WITH ACUTE + : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX + : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX + : "ã" atilde # LATIN SMALL LETTER A WITH TILDE + : "ã" atilde # LATIN SMALL LETTER A WITH TILDE + : "ã" atilde # LATIN SMALL LETTER A WITH TILDE + : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS + : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS + : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE + : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE + : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA + : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA + : "è" egrave # LATIN SMALL LETTER E WITH GRAVE + : "è" egrave # LATIN SMALL LETTER E WITH GRAVE + : "è" egrave # LATIN SMALL LETTER E WITH GRAVE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "é" eacute # LATIN SMALL LETTER E WITH ACUTE + : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX + : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX + : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS + : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS + : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE + : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE + : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "í" iacute # LATIN SMALL LETTER I WITH ACUTE + : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX + : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX + : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS + : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS + : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE + : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE + : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE + : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE + : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE + : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE + : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX + : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX + : "õ" otilde # LATIN SMALL LETTER O WITH TILDE + : "õ" otilde # LATIN SMALL LETTER O WITH TILDE + : "õ" otilde # LATIN SMALL LETTER O WITH TILDE + : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS + : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS + : "ø" oslash # LATIN SMALL LETTER O WITH STROKE + : "ø" oslash # LATIN SMALL LETTER O WITH STROKE + : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE + : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE + : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE + : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX + : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX + : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS + : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE + : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS + : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON @@ -5517,25 +5521,25 @@ XCOMM group 1: cluster jamos made of three basic jamos : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE : "כֿ" UFB4D # HEBREW LETTER KAF WITH RAFE : "פֿ" UFB4E # HEBREW LETTER PE WITH RAFE - : "텞" U1D15E # MUSICAL SYMBOL HALF NOTE - : "텟" U1D15F # MUSICAL SYMBOL QUARTER NOTE - : "텠" U1D160 # MUSICAL SYMBOL EIGHTH NOTE - : "텠" U1D160 # MUSICAL SYMBOL EIGHTH NOTE - : "텡" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE - : "텡" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE - : "텢" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE - : "텢" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE - : "텣" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE - : "텣" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE - : "텤" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE - : "텤" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE - : "톻" U1D1BB # MUSICAL SYMBOL MINIMA - : "톼" U1D1BC # MUSICAL SYMBOL MINIMA BLACK - : "톽" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE - : "톽" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE - : "톾" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK - : "톾" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK - : "톿" U1D1BF # MUSICAL SYMBOL FUSA WHITE - : "톿" U1D1BF # MUSICAL SYMBOL FUSA WHITE - : "퇀" U1D1C0 # MUSICAL SYMBOL FUSA BLACK - : "퇀" U1D1C0 # MUSICAL SYMBOL FUSA BLACK + : "𝅗𝅥" U1D15E # MUSICAL SYMBOL HALF NOTE + : "𝅘𝅥" U1D15F # MUSICAL SYMBOL QUARTER NOTE + : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE + : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE + : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE + : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE + : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE + : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE + : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE + : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE + : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE + : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE + : "𝆹𝅥" U1D1BB # MUSICAL SYMBOL MINIMA + : "𝆺𝅥" U1D1BC # MUSICAL SYMBOL MINIMA BLACK + : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE + : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE + : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK + : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK + : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE + : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE + : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK + : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK diff --git a/src/ConnDis.c b/src/ConnDis.c index 95a836d4..2f0cd496 100644 --- a/src/ConnDis.c +++ b/src/ConnDis.c @@ -150,6 +150,9 @@ _X11TransConnectDisplay ( char* address = addrbuf; XtransConnInfo trans_conn = NULL; /* transport connection object */ int connect_stat; +#if defined(LOCALCONN) || defined(TCPCONN) + Bool reset_hostname = False; /* Reset hostname? */ +#endif #ifdef LOCALCONN struct utsname sys; # ifdef UNIXCONN @@ -245,6 +248,8 @@ _X11TransConnectDisplay ( else tcphostname = copystring("localhost", 9); #endif + if (!phostname) + reset_hostname = True; Xfree (phostname); phostname = copystring ("unix", 4); } @@ -429,6 +434,16 @@ _X11TransConnectDisplay ( * * [host] : [:] dpy . scr \0 */ +#if defined(LOCALCONN) || defined(TCPCONN) + /* + * If we computed the host name, get rid of it so that + * XDisplayString() and XDisplayName() agree. + */ + if (reset_hostname) { + Xfree (phostname); + phostname = NULL; + } +#endif len = ((phostname ? strlen(phostname) : 0) + 1 + (dnet ? 1 : 0) + strlen(pdpynum) + 1 + (pscrnum ? strlen(pscrnum) : 1) + 1); *fullnamep = (char *) Xmalloc (len); @@ -478,6 +493,7 @@ _X11TransConnectDisplay ( pprotocol = copystring("tcp", 3); phostname = tcphostname; tcphostname = NULL; + reset_hostname = True; goto connect; } #endif diff --git a/src/ErrDes.c b/src/ErrDes.c index eb5b4c25..ca5dfeb3 100644 --- a/src/ErrDes.c +++ b/src/ErrDes.c @@ -71,25 +71,31 @@ SOFTWARE. * descriptions of errors in Section 4 of Protocol doc (pp. 350-351); more * verbose descriptions are given in the error database */ -static const char * const _XErrorList[] = { - /* No error */ "no error", - /* BadRequest */ "BadRequest", - /* BadValue */ "BadValue", - /* BadWindow */ "BadWindow", - /* BadPixmap */ "BadPixmap", - /* BadAtom */ "BadAtom", - /* BadCursor */ "BadCursor", - /* BadFont */ "BadFont", - /* BadMatch */ "BadMatch", - /* BadDrawable */ "BadDrawable", - /* BadAccess */ "BadAccess", - /* BadAlloc */ "BadAlloc", - /* BadColor */ "BadColor", - /* BadGC */ "BadGC", - /* BadIDChoice */ "BadIDChoice", - /* BadName */ "BadName", - /* BadLength */ "BadLength", - /* BadImplementation */ "BadImplementation", +static const char _XErrorList[] = + /* No error */ "no error\0" + /* BadRequest */ "BadRequest\0" + /* BadValue */ "BadValue\0" + /* BadWindow */ "BadWindow\0" + /* BadPixmap */ "BadPixmap\0" + /* BadAtom */ "BadAtom\0" + /* BadCursor */ "BadCursor\0" + /* BadFont */ "BadFont\0" + /* BadMatch */ "BadMatch\0" + /* BadDrawable */ "BadDrawable\0" + /* BadAccess */ "BadAccess\0" + /* BadAlloc */ "BadAlloc\0" + /* BadColor */ "BadColor\0" + /* BadGC */ "BadGC\0" + /* BadIDChoice */ "BadIDChoice\0" + /* BadName */ "BadName\0" + /* BadLength */ "BadLength\0" + /* BadImplementation */ "BadImplementation" +; + +/* offsets into _XErrorList */ +static const unsigned char _XErrorOffsets[] = { + 0, 9, 20, 29, 39, 49, 57, 67, 75, 84, 96, + 106, 115, 124, 130, 142, 150, 160 }; @@ -107,7 +113,8 @@ XGetErrorText( if (nbytes == 0) return 0; if (code <= BadImplementation && code > 0) { sprintf(buf, "%d", code); - (void) XGetErrorDatabaseText(dpy, "XProtoError", buf, _XErrorList[code], + (void) XGetErrorDatabaseText(dpy, "XProtoError", buf, + _XErrorList + _XErrorOffsets[code], buffer, nbytes); } else buffer[0] = '\0'; diff --git a/src/GetMoEv.c b/src/GetMoEv.c index 2aa6c1a6..dac1bfc4 100644 --- a/src/GetMoEv.c +++ b/src/GetMoEv.c @@ -33,9 +33,9 @@ in this Software without prior written authorization from The Open Group. XTimeCoord *XGetMotionEvents( register Display *dpy, + Window w, Time start, Time stop, - Window w, int *nEvents) /* RETURN */ { xGetMotionEventsReply rep; diff --git a/src/Makefile.am b/src/Makefile.am index 18e4cbb0..7c44f5b9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -413,6 +413,6 @@ ks_tables.h: $(KEYSYMDEF) $(top_builddir)/src/util/makekeys$(EXEEXT) mv ks_tables_h $@ $(top_builddir)/src/util/makekeys$(EXEEXT): force - cd util; $(MAKE) + cd util && $(MAKE) force: diff --git a/src/RdBitF.c b/src/RdBitF.c index 198e0e4a..0b31230e 100644 --- a/src/RdBitF.c +++ b/src/RdBitF.c @@ -56,43 +56,23 @@ from The Open Group. #define MAX_SIZE 255 /* shared data for the image read/parse logic */ -static short hexTable[256]; /* conversion value */ -static Bool initialized = False; /* easier to fill in at run time */ +static const short hexTable[256] = { + ['0'] = 0, ['1'] = 1, + ['2'] = 2, ['3'] = 3, + ['4'] = 4, ['5'] = 5, + ['6'] = 6, ['7'] = 7, + ['8'] = 8, ['9'] = 9, + ['A'] = 10, ['B'] = 11, + ['C'] = 12, ['D'] = 13, + ['E'] = 14, ['F'] = 15, + ['a'] = 10, ['b'] = 11, + ['c'] = 12, ['d'] = 13, + ['e'] = 14, ['f'] = 15, - -/* - * Table index for the hex values. Initialized once, first time. - * Used for translation value or delimiter significance lookup. - */ -static void initHexTable(void) -{ - /* - * We build the table at run time for several reasons: - * - * 1. portable to non-ASCII machines. - * 2. still reentrant since we set the init flag after setting table. - * 3. easier to extend. - * 4. less prone to bugs. - */ - hexTable['0'] = 0; hexTable['1'] = 1; - hexTable['2'] = 2; hexTable['3'] = 3; - hexTable['4'] = 4; hexTable['5'] = 5; - hexTable['6'] = 6; hexTable['7'] = 7; - hexTable['8'] = 8; hexTable['9'] = 9; - hexTable['A'] = 10; hexTable['B'] = 11; - hexTable['C'] = 12; hexTable['D'] = 13; - hexTable['E'] = 14; hexTable['F'] = 15; - hexTable['a'] = 10; hexTable['b'] = 11; - hexTable['c'] = 12; hexTable['d'] = 13; - hexTable['e'] = 14; hexTable['f'] = 15; - - /* delimiters of significance are flagged w/ negative value */ - hexTable[' '] = -1; hexTable[','] = -1; - hexTable['}'] = -1; hexTable['\n'] = -1; - hexTable['\t'] = -1; - - initialized = True; -} + [' '] = -1, [','] = -1, + ['}'] = -1, ['\n'] = -1, + ['\t'] = -1 +}; /* * read next hex value in the input stream, return -1 if EOF @@ -151,9 +131,6 @@ XReadBitmapFileData ( int hx = -1; /* x hotspot */ int hy = -1; /* y hotspot */ - /* first time initialization */ - if (initialized == False) initHexTable(); - #ifdef __UNIXOS2__ filename = __XOS2RedirRoot(filename); #endif diff --git a/src/StBytes.c b/src/StBytes.c index b81e7a1b..1476e83d 100644 --- a/src/StBytes.c +++ b/src/StBytes.c @@ -33,7 +33,7 @@ in this Software without prior written authorization from The Open Group. #include /* insulate predefined atom numbers from cut routines */ -static Atom n_to_atom[8] = { +static const Atom n_to_atom[8] = { XA_CUT_BUFFER0, XA_CUT_BUFFER1, XA_CUT_BUFFER2, @@ -48,6 +48,9 @@ XRotateBuffers ( register Display *dpy, int rotate) { + /* XRotateWindowProperties wants a non-const Atom*, but it doesn't + * modify it, so this is safe. + */ return XRotateWindowProperties(dpy, RootWindow(dpy, 0), n_to_atom, 8, rotate); } diff --git a/src/XlibInt.c b/src/XlibInt.c index 1d025c7b..d6e72204 100644 --- a/src/XlibInt.c +++ b/src/XlibInt.c @@ -2926,6 +2926,16 @@ _XIOError ( errno = WSAGetLastError(); #endif + /* This assumes that the thread calling exit will call any atexit handlers. + * If this does not hold, then an alternate solution would involve + * registering an atexit handler to take over the lock, which would only + * assume that the same thread calls all the atexit handlers. */ +#ifdef XTHREADS + if (dpy->lock) + (*dpy->lock->user_lock_display)(dpy); +#endif + UnlockDisplay(dpy); + if (_XIOErrorFunction != NULL) (*_XIOErrorFunction)(dpy); else diff --git a/src/Xrm.c b/src/Xrm.c index a932a5ce..65d058fa 100644 --- a/src/Xrm.c +++ b/src/Xrm.c @@ -808,6 +808,7 @@ void XrmCombineDatabase( } } (from->methods->destroy)(from->mbstate); + _XUnlockMutex(&from->linfo); _XFreeMutex(&from->linfo); Xfree((char *)from); _XUnlockMutex(&(*into)->linfo); @@ -2656,6 +2657,7 @@ void XrmDestroyDatabase( else DestroyNTable(table); } + _XUnlockMutex(&db->linfo); _XFreeMutex(&db->linfo); (*db->methods->destroy)(db->mbstate); Xfree((char *)db); diff --git a/src/imConv.c b/src/imConv.c index 408336bb..e30f8ef9 100644 --- a/src/imConv.c +++ b/src/imConv.c @@ -67,11 +67,11 @@ typedef int (*ucstocsConvProc)( ); struct SubstRec { - const char* encoding_name; - const char* charset_name; + const char encoding_name[8]; + const char charset_name[12]; }; -static struct SubstRec SubstTable[] = { +static const struct SubstRec SubstTable[] = { {"STRING", "ISO8859-1"}, {"TIS620", "TIS620-0"}, {"UTF-8", "ISO10646-1"} diff --git a/src/xcb_io.c b/src/xcb_io.c index c84f4bb4..508c2e1a 100644 --- a/src/xcb_io.c +++ b/src/xcb_io.c @@ -77,28 +77,6 @@ static void condition_wait(Display *dpy, xcondition_t cv) _XGetXCBBuffer(dpy); } -static void handle_event(Display *dpy, xcb_generic_event_t *e) -{ - if(!e) - _XIOError(dpy); - dpy->last_request_read = e->full_sequence; - if(e->response_type == X_Error) - _XError(dpy, (xError *) e); - else - { - /* GenericEvents may be > 32 bytes. In this case, the event struct - * is trailed by the additional bytes. the xcb_generic_event_t - * struct uses 4 bytes for internal numbering, so we need to - * shift the trailing data to be after the first 32 bytes. - */ - if (e->response_type == GenericEvent && ((xcb_ge_event_t*)e)->length) { - memmove(&e->full_sequence, &e[1], ((xcb_ge_event_t*)e)->length * 4); - } - _XEnq(dpy, (xEvent *) e); - } - free(e); -} - static void call_handlers(Display *dpy, xcb_generic_reply_t *buf) { _XAsyncHandler *async, *next; @@ -116,7 +94,7 @@ static xcb_generic_event_t * wait_or_poll_for_event(Display *dpy, int wait) { xcb_connection_t *c = dpy->xcb->connection; xcb_generic_event_t *event; - if(wait && !dpy->head) + if(wait) { UnlockDisplay(dpy); event = xcb_wait_for_event(c); @@ -132,54 +110,78 @@ static void process_responses(Display *dpy, int wait_for_first_event, xcb_generi void *reply; xcb_generic_event_t *event = dpy->xcb->next_event; xcb_generic_error_t *error; - PendingRequest *req; xcb_connection_t *c = dpy->xcb->connection; if(!event && dpy->xcb->event_owner == XlibOwnsEventQueue) event = wait_or_poll_for_event(dpy, wait_for_first_event); while(1) { - req = dpy->xcb->pending_requests; + PendingRequest *req = dpy->xcb->pending_requests; assert(!(req && current_request && !XCB_SEQUENCE_COMPARE(req->sequence, <=, current_request))); if(event && (!req || XCB_SEQUENCE_COMPARE(event->full_sequence, <=, req->sequence))) { - if(current_error && event->response_type == 0 && event->full_sequence == current_request) + dpy->last_request_read = event->full_sequence; + if(event->response_type != X_Error) { + /* GenericEvents may be > 32 bytes. In this + * case, the event struct is trailed by the + * additional bytes. the xcb_generic_event_t + * struct uses 4 bytes for internal numbering, + * so we need to shift the trailing data to be + * after the first 32 bytes. */ + if (event->response_type == GenericEvent && + ((xcb_ge_event_t*)event)->length) + { + memmove(&event->full_sequence, + &event[1], + ((xcb_ge_event_t*)event)->length * 4); + } + _XEnq(dpy, (xEvent *) event); + wait_for_first_event = 0; + } + else if(current_error && event->full_sequence == current_request) + { + /* This can only occur when called from + * _XReply, which doesn't need a new event. */ *current_error = (xcb_generic_error_t *) event; event = 0; break; } - handle_event(dpy, event); + else + _XError(dpy, (xError *) event); + free(event); event = wait_or_poll_for_event(dpy, wait_for_first_event); } else if(req && req->waiters != -1) { if(req->sequence == current_request) break; - if(!current_request && !(wait_for_first_event && !dpy->head)) + if(!current_request && !wait_for_first_event) break; dpy->xcb->next_event = event; req->waiters++; assert(req->waiters > 0); condition_wait(dpy, &req->condition); - if(--req->waiters == 0) - free(req); + --req->waiters; event = dpy->xcb->next_event; } else if(req && xcb_poll_for_reply(dpy->xcb->connection, req->sequence, &reply, &error)) { - dpy->xcb->pending_requests = req->next; - if(!dpy->xcb->pending_requests) - dpy->xcb->pending_requests_tail = &dpy->xcb->pending_requests; + unsigned int sequence = req->sequence; if(!reply) + { + dpy->xcb->pending_requests = req->next; + if(!dpy->xcb->pending_requests) + dpy->xcb->pending_requests_tail = &dpy->xcb->pending_requests; + free(req); reply = error; + } if(reply) { - dpy->last_request_read = req->sequence; + dpy->last_request_read = sequence; call_handlers(dpy, reply); + free(reply); } - free(req); - free(reply); } else break; @@ -191,11 +193,13 @@ static void process_responses(Display *dpy, int wait_for_first_event, xcb_generi _XIOError(dpy); assert_sequence_less(dpy->last_request_read, dpy->request); - assert(!wait_for_first_event || dpy->head); + assert(!wait_for_first_event); } int _XEventsQueued(Display *dpy, int mode) { + if(dpy->flags & XlibDisplayIOError) + return 0; if(dpy->xcb->event_owner != XlibOwnsEventQueue) return 0; @@ -212,6 +216,8 @@ int _XEventsQueued(Display *dpy, int mode) */ void _XReadEvents(Display *dpy) { + if(dpy->flags & XlibDisplayIOError) + return; _XSend(dpy, 0, 0); if(dpy->xcb->event_owner != XlibOwnsEventQueue) return; @@ -229,6 +235,8 @@ void _XReadEvents(Display *dpy) void _XSend(Display *dpy, const char *data, long size) { xcb_connection_t *c = dpy->xcb->connection; + if(dpy->flags & XlibDisplayIOError) + return; assert(!dpy->xcb->request_extra); dpy->xcb->request_extra = data; @@ -339,17 +347,6 @@ static PendingRequest * insert_pending_request(Display *dpy) return *cur; } -static void remove_pending_request(Display *dpy, PendingRequest *node) -{ - PendingRequest **cur = &dpy->xcb->pending_requests; - while(*cur && *cur != node) - cur = &((*cur)->next); - if(*cur == node) - *cur = node->next; - if(!dpy->xcb->pending_requests) - dpy->xcb->pending_requests_tail = &dpy->xcb->pending_requests; -} - /* * _XReply - Wait for a reply packet and copy its contents into the * specified rep. @@ -362,16 +359,19 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) xcb_connection_t *c = dpy->xcb->connection; char *reply; PendingRequest *current; - unsigned int current_sequence; assert(!dpy->xcb->reply_data); + if(dpy->flags & XlibDisplayIOError) + return 0; + /* Internals of UnlockDisplay done by hand here, so that we can insert_pending_request *after* we _XPutXCBBuffer, but before we unlock the display. */ _XPutXCBBuffer(dpy); current = insert_pending_request(dpy); - xcb_xlib_unlock(dpy->xcb->connection); + if(!dpy->lock || dpy->lock->locking_level == 0) + xcb_xlib_unlock(dpy->xcb->connection); if(dpy->xcb->lock_fns.unlock_display) dpy->xcb->lock_fns.unlock_display(dpy); reply = xcb_wait_for_reply(c, current->sequence, &error); @@ -380,18 +380,11 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) check_internal_connections(dpy); process_responses(dpy, 0, &error, current->sequence); - current_sequence = current->sequence; - - remove_pending_request(dpy, current); if(current->waiters) { /* The ConditionBroadcast macro contains an if; braces needed here. */ ConditionBroadcast(dpy, ¤t->condition); } - else - { - free(current); - current = NULL; - } + --current->waiters; if(error) { @@ -446,7 +439,7 @@ Status _XReply(Display *dpy, xReply *rep, int extra, Bool discard) return 0; } - dpy->last_request_read = current_sequence; + dpy->last_request_read = current->sequence; /* there's no error and we have a reply. */ dpy->xcb->reply_data = reply; diff --git a/src/xcb_lock.c b/src/xcb_lock.c index 0ace8e51..71b23835 100644 --- a/src/xcb_lock.c +++ b/src/xcb_lock.c @@ -17,21 +17,28 @@ static void _XCBLockDisplay(Display *dpy) { if(dpy->xcb->lock_fns.lock_display) dpy->xcb->lock_fns.lock_display(dpy); - xcb_xlib_lock(dpy->xcb->connection); - _XGetXCBBuffer(dpy); + if(!dpy->lock || dpy->lock->locking_level == 0) + xcb_xlib_lock(dpy->xcb->connection); + if(!(dpy->flags & XlibDisplayIOError)) + _XGetXCBBuffer(dpy); } +/* XXX: If you change this function, update _XReply's copy of its guts! */ static void _XCBUnlockDisplay(Display *dpy) { - _XPutXCBBuffer(dpy); - assert(dpy->xcb->partial_request == 0); - assert(xcb_get_request_sent(dpy->xcb->connection) == dpy->request); + if(!(dpy->flags & XlibDisplayIOError)) + { + _XPutXCBBuffer(dpy); + assert(dpy->xcb->partial_request == 0); + assert(xcb_get_request_sent(dpy->xcb->connection) == dpy->request); - /* Traditional Xlib does this in _XSend; see the Xlib/XCB version - * of that function for why we do it here instead. */ - _XSetSeqSyncFunction(dpy); + /* Traditional Xlib does this in _XSend; see the Xlib/XCB version + * of that function for why we do it here instead. */ + _XSetSeqSyncFunction(dpy); + } - xcb_xlib_unlock(dpy->xcb->connection); + if(!dpy->lock || dpy->lock->locking_level == 0) + xcb_xlib_unlock(dpy->xcb->connection); if(dpy->xcb->lock_fns.unlock_display) dpy->xcb->lock_fns.unlock_display(dpy); } diff --git a/src/xlibi18n/lcCT.c b/src/xlibi18n/lcCT.c index 63608a3c..f3a91e6c 100644 --- a/src/xlibi18n/lcCT.c +++ b/src/xlibi18n/lcCT.c @@ -53,11 +53,11 @@ * Static representation of a character set that can be used in Compound Text. */ typedef struct _CTDataRec { - const char *name; - const char *ct_sequence; /* Compound Text encoding, ESC sequence */ + const char name[19]; + const char ct_sequence[5]; /* Compound Text encoding, ESC sequence */ } CTDataRec, *CTData; -static CTDataRec default_ct_data[] = +static const CTDataRec default_ct_data[] = { /* */ /* X11 registry name MIME name ISO-IR ESC sequence */ @@ -1265,7 +1265,7 @@ Bool _XlcInitCTInfo() { if (ct_list == NULL) { - CTData ct_data; + const CTDataRec *ct_data; int num; XlcCharSet charset; diff --git a/src/xlibi18n/lcDB.c b/src/xlibi18n/lcDB.c index b7c7edd2..5228a006 100644 --- a/src/xlibi18n/lcDB.c +++ b/src/xlibi18n/lcDB.c @@ -99,10 +99,7 @@ typedef enum { typedef struct { Token token; /* token id */ - const char *name; /* token sequence */ int len; /* length of token sequence */ - int (*parse_proc)(const char *str, Token token, Database *db); - /* parsing procedure */ } TokenTable; static int f_newline (const char *str, Token token, Database *db); @@ -116,20 +113,20 @@ static int f_backslash (const char *str, Token token, Database *db); static int f_numeric (const char *str, Token token, Database *db); static int f_default (const char *str, Token token, Database *db); -static TokenTable token_tbl[] = { - { T_NEWLINE, "\n", 1, f_newline }, - { T_COMMENT, "#", 1, f_comment }, - { T_SEMICOLON, ";", 1, f_semicolon }, - { T_DOUBLE_QUOTE, "\"", 1, f_double_quote }, - { T_LEFT_BRACE, "{", 1, f_left_brace }, - { T_RIGHT_BRACE, "}", 1, f_right_brace }, - { T_SPACE, " ", 1, f_white }, - { T_TAB, "\t", 1, f_white }, - { T_BACKSLASH, "\\", 1, f_backslash }, - { T_NUMERIC_HEX, "\\x", 2, f_numeric }, - { T_NUMERIC_DEC, "\\d", 2, f_numeric }, - { T_NUMERIC_OCT, "\\o", 2, f_numeric }, - { T_DEFAULT, " ", 1, f_default } /* any character */ +static const TokenTable token_tbl[] = { + { T_NEWLINE, 1 }, + { T_COMMENT, 1 }, + { T_SEMICOLON, 1 }, + { T_DOUBLE_QUOTE, 1 }, + { T_LEFT_BRACE, 1 }, + { T_RIGHT_BRACE, 1 }, + { T_SPACE, 1 }, + { T_TAB, 1 }, + { T_BACKSLASH, 1 }, + { T_NUMERIC_HEX, 2 }, + { T_NUMERIC_DEC, 2 }, + { T_NUMERIC_OCT, 2 }, + { T_DEFAULT, 1 } /* any character */ }; #define SYM_CR '\r' @@ -1093,8 +1090,48 @@ CreateDatabase( } p = line.str; while (*p) { + int (*parse_proc)(const char *str, Token token, Database *db) = NULL; + token = get_token(p); - len = (*token_tbl[token].parse_proc)(p, token, &db); + + switch (token_tbl[token].token) { + case T_NEWLINE: + parse_proc = f_newline; + break; + case T_COMMENT: + parse_proc = f_comment; + break; + case T_SEMICOLON: + parse_proc = f_semicolon; + break; + case T_DOUBLE_QUOTE: + parse_proc = f_double_quote; + break; + case T_LEFT_BRACE: + parse_proc = f_left_brace; + break; + case T_RIGHT_BRACE: + parse_proc = f_right_brace; + break; + case T_SPACE: + case T_TAB: + parse_proc = f_white; + break; + case T_BACKSLASH: + parse_proc = f_backslash; + break; + case T_NUMERIC_HEX: + case T_NUMERIC_DEC: + case T_NUMERIC_OCT: + parse_proc = f_numeric; + break; + case T_DEFAULT: + parse_proc = f_default; + break; + } + + len = parse_proc(p, token, &db); + if (len < 1) { error = 1; break;