Merge branch 'master' into xge

Conflicts:

	src/xcb_io.c
This commit is contained in:
Peter Hutterer 2007-12-06 13:57:09 +10:30
commit 5dfefd3829
30 changed files with 1081 additions and 749 deletions

72
NEWS
View file

@ -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

View file

@ -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 <kasal@ucw.cz>
# Copyright (c) 2006 Andreas Schwab <schwab@suse.de>
# Copyright (c) 2006 Guido U. Draheim <guidod@gmx.de>
# 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=

View file

@ -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])

View file

@ -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.

View file

@ -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);

View file

@ -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;
}

View file

@ -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*

View file

@ -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]));
}
}

View file

@ -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

View file

@ -92,7 +92,7 @@ XCOMM Spaces
<Multi_key> <period> <greater> : "" U203a # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
<Multi_key> <period> <less> : "" U2039 # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
<Multi_key> <period> <period> : "·" U00B7 # MIDDLE DOT
<Multi_key> <period> <period> : "·" periodcentered # MIDDLE DOT
<Multi_key> <exclam> <asciicircum> : "¦" brokenbar # BROKEN BAR
<Multi_key> <exclam> <exclam> : "¡" exclamdown # INVERTED EXCLAMATION MARK
<Multi_key> <p> <exclam> : "¶" paragraph # PILCROW SIGN
@ -155,13 +155,20 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN
<Multi_key> <equal> <c> : "€" EuroSign # EURO SIGN
<Multi_key> <E> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <E> : "€" EuroSign # EURO SIGN
<Multi_key> <e> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <e> : "€" EuroSign # EURO SIGN
<Multi_key> <Cyrillic_ES> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <Cyrillic_ES> : "€" EuroSign # EURO SIGN
<Multi_key> <Cyrillic_IE> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <Cyrillic_IE> : "€" EuroSign # EURO SIGN
<Multi_key> <bar> <c> : "¢" U00A2 # CENT SIGN
<Multi_key> <c> <bar> : "¢" U00A2 # CENT SIGN
<Multi_key> <c> <slash> : "¢" U00A2 # CENT SIGN
<Multi_key> <slash> <c> : "¢" U00A2 # CENT SIGN
<Multi_key> <L> <minus> : "£" U00a3 # POUND SIGN
<Multi_key> <minus> <L> : "£" U00a3 # POUND SIGN
<Multi_key> <bar> <c> : "¢" cent # CENT SIGN
<Multi_key> <c> <bar> : "¢" cent # CENT SIGN
<Multi_key> <c> <slash> : "¢" cent # CENT SIGN
<Multi_key> <slash> <c> : "¢" cent # CENT SIGN
<Multi_key> <L> <minus> : "£" sterling # POUND SIGN
<Multi_key> <minus> <L> : "£" sterling # POUND SIGN
<Multi_key> <Y> <equal> : "¥" yen # YEN SIGN
<Multi_key> <equal> <Y> : "¥" yen # YEN SIGN
@ -181,12 +188,18 @@ XCOMM Musical alterations
XCOMM Other symbols
<Multi_key> <s> <o> : "§" section # SECTION SIGN
<Multi_key> <o> <s> : "§" section # SECTION SIGN
<Multi_key> <Cyrillic_pe> <Cyrillic_a> : "§" section # SECTION SIGN
<Multi_key> <o> <x> : "¤" currency # CURRENCY SIGN
<Multi_key> <x> <o> : "¤" currency # CURRENCY SIGN
<Multi_key> <P> <P> : "¶" paragraph # PILCROW SIGN
<Multi_key> <N> <o> : "№" numerosign # NUMERO SIGN
<Multi_key> <N> <O> : "№" numerosign # NUMERO SIGN
<Multi_key> <Cyrillic_EN> <Cyrillic_o> : "№" numerosign # NUMERO SIGN
<Multi_key> <Cyrillic_EN> <Cyrillic_O> : "№" 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
<Multi_key> <U100011B7> <U100011BB> : "ᇞ" U11de # HANGUL JONGSEONG MIEUM-SSANGSIOS
<Multi_key> <U100011BC> <U100011A9> : "ᇭ" U11ed # HANGUL JONGSEONG IEUNG-SSANGKIYEOK
<Multi_key> <comma> <minus> : "¬" U00AC # NOT SIGN
<Multi_key> <minus> <comma> : "¬" U00AC # NOT SIGN
<dead_circumflex> <Multi_key> <underscore> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<dead_circumflex> <2> : "²" U00B2 # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <2> : "²" U00B2 # SUPERSCRIPT TWO
<dead_circumflex> <KP_Space> : "²" U00B2 # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_Space> : "²" U00B2 # SUPERSCRIPT TWO
<dead_circumflex> <KP_2> : "²" U00B2 # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_2> : "²" U00B2 # SUPERSCRIPT TWO
<dead_circumflex> <3> : "³" U00B3 # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <3> : "³" U00B3 # SUPERSCRIPT THREE
<dead_circumflex> <KP_3> : "³" U00B3 # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <KP_3> : "³" U00B3 # SUPERSCRIPT THREE
<Multi_key> <m> <u> : "µ" U00B5 # MICRO SIGN
<dead_circumflex> <1> : "¹" U00B9 # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <1> : "¹" U00B9 # SUPERSCRIPT ONE
<dead_circumflex> <KP_1> : "¹" U00B9 # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <KP_1> : "¹" U00B9 # SUPERSCRIPT ONE
<dead_circumflex> <Multi_key> <underscore> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<Multi_key> <1> <4> : "¼" U00BC # VULGAR FRACTION ONE QUARTER
<Multi_key> <1> <2> : "½" U00BD # VULGAR FRACTION ONE HALF
<Multi_key> <3> <4> : "¾" U00BE # VULGAR FRACTION THREE QUARTERS
<dead_grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
<Multi_key> <grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
<combining_grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
<dead_acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<combining_acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<dead_circumflex> <A> : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <A> : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<dead_tilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
<Multi_key> <asciitilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
<combining_tilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
<dead_diaeresis> <A> : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <A> : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
<dead_abovering> <A> : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
<Multi_key> <o> <A> : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
<dead_cedilla> <C> : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
<Multi_key> <comma> <C> : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
<dead_grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
<Multi_key> <grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
<combining_grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
<dead_acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<combining_acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<dead_circumflex> <E> : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <E> : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <E> : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <E> : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
<dead_grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
<Multi_key> <grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
<combining_grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
<dead_acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<combining_acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<dead_circumflex> <I> : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <I> : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <I> : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <I> : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <D> <H> : "Ð" U00D0 # LATIN CAPITAL LETTER ETH
<dead_tilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
<Multi_key> <asciitilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
<combining_tilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
<dead_grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
<Multi_key> <grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
<combining_grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
<dead_acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<combining_acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<dead_circumflex> <O> : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <O> : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<dead_tilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
<Multi_key> <asciitilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
<combining_tilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
<dead_diaeresis> <O> : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <O> : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <x> <x> : "×" U00D7 # MULTIPLICATION SIGN
<Multi_key> <slash> <O> : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <O> : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE
<dead_grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
<Multi_key> <grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
<combining_grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
<dead_acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<combining_acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<dead_circumflex> <U> : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <U> : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <U> : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <U> : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
<dead_acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<combining_acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <T> <H> : "Þ" U00DE # LATIN CAPITAL LETTER THORN
<dead_grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
<Multi_key> <grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
<combining_grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
<dead_acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<combining_acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<dead_circumflex> <a> : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <a> : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
<dead_tilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
<Multi_key> <asciitilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
<combining_tilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
<dead_diaeresis> <a> : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <a> : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
<dead_abovering> <a> : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
<Multi_key> <o> <a> : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
<dead_cedilla> <c> : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA
<Multi_key> <comma> <c> : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA
<dead_grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
<Multi_key> <grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
<combining_grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
<dead_acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<combining_acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<dead_circumflex> <e> : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <e> : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <e> : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <e> : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS
<dead_grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
<Multi_key> <grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
<combining_grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
<dead_acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<combining_acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<dead_circumflex> <i> : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <i> : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <i> : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <i> : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <d> <h> : "ð" U00F0 # LATIN SMALL LETTER ETH
<dead_tilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
<Multi_key> <asciitilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
<combining_tilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
<dead_grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
<Multi_key> <grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
<combining_grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
<dead_acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<combining_acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<dead_circumflex> <o> : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <o> : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
<dead_tilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
<Multi_key> <asciitilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
<combining_tilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
<dead_diaeresis> <o> : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <o> : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <colon> <minus> : "÷" U00F7 # DIVISION SIGN
<Multi_key> <minus> <colon> : "÷" U00F7 # DIVISION SIGN
<Multi_key> <slash> <o> : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <o> : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE
<dead_grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
<Multi_key> <grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
<combining_grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
<dead_acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<combining_acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<dead_circumflex> <u> : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <u> : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <u> : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <u> : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS
<dead_acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<combining_acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <t> <h> : "þ" U00FE # LATIN SMALL LETTER THORN
<dead_diaeresis> <y> : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
<Multi_key> <quotedbl> <y> : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
<Multi_key> <comma> <minus> : "¬" notsign # NOT SIGN
<Multi_key> <minus> <comma> : "¬" notsign # NOT SIGN
<dead_circumflex> <Multi_key> <underscore> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<dead_circumflex> <2> : "²" twosuperior # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <2> : "²" twosuperior # SUPERSCRIPT TWO
<dead_circumflex> <KP_Space> : "²" twosuperior # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_Space> : "²" twosuperior # SUPERSCRIPT TWO
<dead_circumflex> <KP_2> : "²" twosuperior # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_2> : "²" twosuperior # SUPERSCRIPT TWO
<dead_circumflex> <3> : "³" threesuperior # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <3> : "³" threesuperior # SUPERSCRIPT THREE
<dead_circumflex> <KP_3> : "³" threesuperior # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <KP_3> : "³" threesuperior # SUPERSCRIPT THREE
<Multi_key> <m> <u> : "µ" mu # MICRO SIGN
<dead_circumflex> <1> : "¹" onesuperior # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <1> : "¹" onesuperior # SUPERSCRIPT ONE
<dead_circumflex> <KP_1> : "¹" onesuperior # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <KP_1> : "¹" onesuperior # SUPERSCRIPT ONE
<dead_circumflex> <Multi_key> <underscore> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<Multi_key> <1> <4> : "¼" onequarter # VULGAR FRACTION ONE QUARTER
<Multi_key> <1> <2> : "½" onehalf # VULGAR FRACTION ONE HALF
<Multi_key> <3> <4> : "¾" threequarters # VULGAR FRACTION THREE QUARTERS
<dead_grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
<Multi_key> <grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
<combining_grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
<dead_acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<combining_acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<dead_circumflex> <A> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <A> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<dead_tilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
<Multi_key> <asciitilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
<combining_tilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
<dead_diaeresis> <A> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <A> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
<dead_abovering> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
<Multi_key> <o> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
<dead_cedilla> <C> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
<Multi_key> <comma> <C> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
<dead_grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
<Multi_key> <grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
<combining_grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
<dead_acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<combining_acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<dead_circumflex> <E> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <E> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <E> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <E> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
<dead_grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
<Multi_key> <grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
<combining_grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
<dead_acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<combining_acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<dead_circumflex> <I> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <I> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <D> <H> : "Ð" ETH # LATIN CAPITAL LETTER ETH
<dead_tilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
<Multi_key> <asciitilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
<combining_tilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
<dead_grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
<Multi_key> <grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
<combining_grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
<dead_acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<combining_acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<dead_circumflex> <O> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <O> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<dead_tilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
<Multi_key> <asciitilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
<combining_tilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
<dead_diaeresis> <O> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <O> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <x> <x> : "×" multiply # MULTIPLICATION SIGN
<Multi_key> <slash> <O> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <O> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
<dead_grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
<Multi_key> <grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
<combining_grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
<dead_acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<combining_acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<dead_circumflex> <U> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <U> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <U> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <U> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
<dead_acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<combining_acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <T> <H> : "Þ" THORN # LATIN CAPITAL LETTER THORN
<dead_grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
<Multi_key> <grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
<combining_grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
<dead_acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<combining_acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<dead_circumflex> <a> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <a> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
<dead_tilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
<Multi_key> <asciitilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
<combining_tilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
<dead_diaeresis> <a> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <a> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
<dead_abovering> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
<Multi_key> <o> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
<dead_cedilla> <c> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
<Multi_key> <comma> <c> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
<dead_grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
<Multi_key> <grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
<combining_grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
<dead_acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<combining_acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<dead_circumflex> <e> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <e> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <e> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <e> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
<dead_grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
<Multi_key> <grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
<combining_grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
<dead_acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<combining_acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<dead_circumflex> <i> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <i> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <d> <h> : "ð" eth # LATIN SMALL LETTER ETH
<dead_tilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
<Multi_key> <asciitilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
<combining_tilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
<dead_grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
<Multi_key> <grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
<combining_grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
<dead_acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<combining_acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<dead_circumflex> <o> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <o> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
<dead_tilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
<Multi_key> <asciitilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
<combining_tilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
<dead_diaeresis> <o> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <o> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <colon> <minus> : "÷" division # DIVISION SIGN
<Multi_key> <minus> <colon> : "÷" division # DIVISION SIGN
<Multi_key> <slash> <o> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <o> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
<dead_grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
<Multi_key> <grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
<combining_grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
<dead_acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<combining_acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<dead_circumflex> <u> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <u> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <u> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <u> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
<dead_acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<combining_acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <t> <h> : "þ" thorn # LATIN SMALL LETTER THORN
<dead_diaeresis> <y> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
<Multi_key> <quotedbl> <y> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
<dead_macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
<Multi_key> <macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
<Multi_key> <underscore> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
@ -4982,8 +4995,20 @@ XCOMM group 1: cluster jamos made of three basic jamos
<Multi_key> <underbar> <parenright> : "₎" U208E # SUBSCRIPT RIGHT PARENTHESIS
<dead_circumflex> <Multi_key> <S> <M> : "℠" U2120 # SERVICE MARK
<Multi_key> <S> <M> : "℠" U2120 # SERVICE MARK
<dead_circumflex> <Multi_key> <s> <M> : "℠" U2120 # SERVICE MARK
<Multi_key> <s> <M> : "℠" U2120 # SERVICE MARK
<dead_circumflex> <Multi_key> <S> <m> : "℠" U2120 # SERVICE MARK
<Multi_key> <S> <m> : "℠" U2120 # SERVICE MARK
<dead_circumflex> <Multi_key> <s> <m> : "℠" U2120 # SERVICE MARK
<Multi_key> <s> <m> : "℠" U2120 # SERVICE MARK
<dead_circumflex> <Multi_key> <T> <M> : "™" U2122 # TRADE MARK SIGN
<Multi_key> <T> <M> : "™" U2122 # TRADE MARK SIGN
<dead_circumflex> <Multi_key> <t> <M> : "™" U2122 # TRADE MARK SIGN
<Multi_key> <t> <M> : "™" U2122 # TRADE MARK SIGN
<dead_circumflex> <Multi_key> <T> <m> : "™" U2122 # TRADE MARK SIGN
<Multi_key> <T> <m> : "™" U2122 # TRADE MARK SIGN
<dead_circumflex> <Multi_key> <t> <m> : "™" U2122 # TRADE MARK SIGN
<Multi_key> <t> <m> : "™" U2122 # TRADE MARK SIGN
<Multi_key> <slash> <leftarrow> : "↚" U219A # LEFTWARDS ARROW WITH STROKE
<Multi_key> <KP_Divide> <leftarrow> : "↚" U219A # LEFTWARDS ARROW WITH STROKE
<Multi_key> <slash> <rightarrow> : "↛" U219B # RIGHTWARDS ARROW WITH STROKE
@ -5556,25 +5581,25 @@ XCOMM group 1: cluster jamos made of three basic jamos
<Multi_key> <U100005BF> <hebrew_beth> : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE
<Multi_key> <U100005BF> <hebrew_kaph> : "כֿ" UFB4D # HEBREW LETTER KAF WITH RAFE
<Multi_key> <U100005BF> <hebrew_pe> : "פֿ" UFB4E # HEBREW LETTER PE WITH RAFE
<Multi_key> <U1001D157> <U1001D165> : "" U1D15E # MUSICAL SYMBOL HALF NOTE
<Multi_key> <U1001D158> <U1001D165> : "" U1D15F # MUSICAL SYMBOL QUARTER NOTE
<Multi_key> <U1001D15F> <U1001D16E> : "" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D16E> : "" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
<Multi_key> <U1001D15F> <U1001D16F> : "" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D16F> : "" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
<Multi_key> <U1001D15F> <U1001D170> : "" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D170> : "" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
<Multi_key> <U1001D15F> <U1001D171> : "" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D171> : "" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
<Multi_key> <U1001D15F> <U1001D172> : "" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D172> : "" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
<Multi_key> <U1001D1B9> <U1001D165> : "" U1D1BB # MUSICAL SYMBOL MINIMA
<Multi_key> <U1001D1BA> <U1001D165> : "" U1D1BC # MUSICAL SYMBOL MINIMA BLACK
<Multi_key> <U1001D1BB> <U1001D16E> : "" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
##<Multi_key> <U1001D1B9> <U1001D165> <U1001D16E> : "" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
<Multi_key> <U1001D1BC> <U1001D16E> : "" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
##<Multi_key> <U1001D1BA> <U1001D165> <U1001D16E> : "" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
<Multi_key> <U1001D1BB> <U1001D16F> : "" U1D1BF # MUSICAL SYMBOL FUSA WHITE
##<Multi_key> <U1001D1B9> <U1001D165> <U1001D16F> : "" U1D1BF # MUSICAL SYMBOL FUSA WHITE
<Multi_key> <U1001D1BC> <U1001D16F> : "" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
##<Multi_key> <U1001D1BA> <U1001D165> <U1001D16F> : "" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
<Multi_key> <U1001D157> <U1001D165> : "𝅗𝅥" U1D15E # MUSICAL SYMBOL HALF NOTE
<Multi_key> <U1001D158> <U1001D165> : "𝅘𝅥" U1D15F # MUSICAL SYMBOL QUARTER NOTE
<Multi_key> <U1001D15F> <U1001D16E> : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D16E> : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
<Multi_key> <U1001D15F> <U1001D16F> : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D16F> : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
<Multi_key> <U1001D15F> <U1001D170> : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D170> : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
<Multi_key> <U1001D15F> <U1001D171> : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D171> : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
<Multi_key> <U1001D15F> <U1001D172> : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
##<Multi_key> <U1001D158> <U1001D165> <U1001D172> : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
<Multi_key> <U1001D1B9> <U1001D165> : "𝆹𝅥" U1D1BB # MUSICAL SYMBOL MINIMA
<Multi_key> <U1001D1BA> <U1001D165> : "𝆺𝅥" U1D1BC # MUSICAL SYMBOL MINIMA BLACK
<Multi_key> <U1001D1BB> <U1001D16E> : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
##<Multi_key> <U1001D1B9> <U1001D165> <U1001D16E> : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
<Multi_key> <U1001D1BC> <U1001D16E> : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
##<Multi_key> <U1001D1BA> <U1001D165> <U1001D16E> : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
<Multi_key> <U1001D1BB> <U1001D16F> : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE
##<Multi_key> <U1001D1B9> <U1001D165> <U1001D16F> : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE
<Multi_key> <U1001D1BC> <U1001D16F> : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
##<Multi_key> <U1001D1BA> <U1001D165> <U1001D16F> : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK

View file

@ -56,8 +56,12 @@ XCOMM Special Character
<Multi_key> <equal> <L> : "\243" sterling
<Multi_key> <C> <equal> : "\244" EuroSign
<Multi_key> <equal> <C> : "\244" EuroSign
<Multi_key> <c> <equal> : "\244" EuroSign
<Multi_key> <equal> <c> : "\244" EuroSign
<Multi_key> <E> <equal> : "\244" EuroSign
<Multi_key> <equal> <E> : "\244" EuroSign
<Multi_key> <e> <equal> : "\244" EuroSign
<Multi_key> <equal> <e> : "\244" EuroSign
<Multi_key> <y> <minus> : "\245" yen
<Multi_key> <minus> <y> : "\245" yen
<Multi_key> <Y> <minus> : "\245" yen

View file

@ -47,6 +47,10 @@ XCOMM Special Character
<Multi_key> <equal> <L> : "\243" sterling
<Multi_key> <C> <equal> : "\244" EuroSign
<Multi_key> <equal> <C> : "\244" EuroSign
<Multi_key> <c> <equal> : "\244" EuroSign
<Multi_key> <equal> <c> : "\244" EuroSign
<Multi_key> <E> <equal> : "\244" EuroSign
<Multi_key> <equal> <E> : "\244" EuroSign
<Multi_key> <e> <equal> : "\244" EuroSign
<Multi_key> <equal> <e> : "\244" EuroSign
<Multi_key> <y> <minus> : "\245" yen

View file

@ -55,6 +55,10 @@ XCOMM Special Character
<Multi_key> <equal> <L> : "\243" sterling
<Multi_key> <C> <equal> : "\244" EuroSign
<Multi_key> <equal> <C> : "\244" EuroSign
<Multi_key> <c> <equal> : "\244" EuroSign
<Multi_key> <equal> <c> : "\244" EuroSign
<Multi_key> <E> <equal> : "\244" EuroSign
<Multi_key> <equal> <E> : "\244" EuroSign
<Multi_key> <e> <equal> : "\244" EuroSign
<Multi_key> <equal> <e> : "\244" EuroSign
<Multi_key> <y> <minus> : "\245" yen

View file

@ -54,6 +54,10 @@ XCOMM Special Character
<Multi_key> <equal> <L> : "\243" sterling
<Multi_key> <C> <equal> : "\244" EuroSign
<Multi_key> <equal> <C> : "\244" EuroSign
<Multi_key> <c> <equal> : "\244" EuroSign
<Multi_key> <equal> <c> : "\244" EuroSign
<Multi_key> <E> <equal> : "\244" EuroSign
<Multi_key> <equal> <E> : "\244" EuroSign
<Multi_key> <e> <equal> : "\244" EuroSign
<Multi_key> <equal> <e> : "\244" EuroSign
<Multi_key> <y> <minus> : "\245" yen

View file

@ -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

View file

@ -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

View file

@ -89,7 +89,7 @@ XCOMM Spaces
<Multi_key> <period> <greater> : "" U203a
<Multi_key> <period> <less> : "" U2039
<Multi_key> <period> <period> : "·" U00B7
<Multi_key> <period> <period> : "·" periodcentered
<Multi_key> <exclam> <asciicircum> : "¦" brokenbar
<Multi_key> <exclam> <exclam> : "¡" exclamdown
<Multi_key> <p> <exclam> : "¶" paragraph
@ -149,11 +149,15 @@ XCOMM "₪" U20aa NEW SHEQEL SIGN
<Multi_key> <d> <minus> : "₫" U20ab # DONG SIGN
<Multi_key> <C> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <C> : "€" EuroSign # EURO SIGN
<Multi_key> <c> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <c> : "€" EuroSign # EURO SIGN
<Multi_key> <E> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <E> : "€" EuroSign # EURO SIGN
<Multi_key> <e> <equal> : "€" EuroSign # EURO SIGN
<Multi_key> <equal> <e> : "€" EuroSign # EURO SIGN
<Multi_key> <L> <minus> : "£" U00a3 # POUND SIGN
<Multi_key> <minus> <L> : "£" U00a3 # POUND SIGN
<Multi_key> <L> <minus> : "£" sterling # POUND SIGN
<Multi_key> <minus> <L> : "£" sterling # POUND SIGN
<Multi_key> <Y> <equal> : "¥" yen
<Multi_key> <equal><Y> : "¥" yen
@ -420,178 +424,178 @@ XCOMM group 1: cluster jamos made of three basic jamos
<Multi_key> <U11b7> <U11bb> : "ᇞ" U11de : ᅟᅠᆷ ᅟᅠᆻ = ᅟᅠᇞ
<Multi_key> <U11bc> <U11a9> : "ᇭ" U11ed : ᅟᅠᆼ ᅟᅠᆩ = ᅟᅠᇭ
<dead_circumflex> <Multi_key> <underscore> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <a> : "ª" U00AA # FEMININE ORDINAL INDICATOR
<dead_circumflex> <2> : "²" U00B2 # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <2> : "²" U00B2 # SUPERSCRIPT TWO
<dead_circumflex> <KP_Space> : "²" U00B2 # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_Space> : "²" U00B2 # SUPERSCRIPT TWO
<dead_circumflex> <KP_2> : "²" U00B2 # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_2> : "²" U00B2 # SUPERSCRIPT TWO
<dead_circumflex> <3> : "³" U00B3 # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <3> : "³" U00B3 # SUPERSCRIPT THREE
<dead_circumflex> <KP_3> : "³" U00B3 # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <KP_3> : "³" U00B3 # SUPERSCRIPT THREE
<dead_circumflex> <1> : "¹" U00B9 # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <1> : "¹" U00B9 # SUPERSCRIPT ONE
<dead_circumflex> <KP_1> : "¹" U00B9 # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <KP_1> : "¹" U00B9 # SUPERSCRIPT ONE
<dead_circumflex> <Multi_key> <underscore> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <o> : "º" U00BA # MASCULINE ORDINAL INDICATOR
<dead_grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
<Multi_key> <grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
<combining_grave> <A> : "À" U00C0 # LATIN CAPITAL LETTER A WITH GRAVE
<dead_acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<combining_acute> <A> : "Á" U00C1 # LATIN CAPITAL LETTER A WITH ACUTE
<dead_circumflex> <A> : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <A> : "Â" U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<dead_tilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
<Multi_key> <asciitilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
<combining_tilde> <A> : "Ã" U00C3 # LATIN CAPITAL LETTER A WITH TILDE
<dead_diaeresis> <A> : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <A> : "Ä" U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
<dead_abovering> <A> : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
<Multi_key> <o> <A> : "Å" U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
<dead_cedilla> <C> : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
<Multi_key> <comma> <C> : "Ç" U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
<dead_grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
<Multi_key> <grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
<combining_grave> <E> : "È" U00C8 # LATIN CAPITAL LETTER E WITH GRAVE
<dead_acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<combining_acute> <E> : "É" U00C9 # LATIN CAPITAL LETTER E WITH ACUTE
<dead_circumflex> <E> : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <E> : "Ê" U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <E> : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <E> : "Ë" U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
<dead_grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
<Multi_key> <grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
<combining_grave> <I> : "Ì" U00CC # LATIN CAPITAL LETTER I WITH GRAVE
<dead_acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<combining_acute> <I> : "Í" U00CD # LATIN CAPITAL LETTER I WITH ACUTE
<dead_circumflex> <I> : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <I> : "Î" U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <I> : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <I> : "Ï" U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
<dead_tilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
<Multi_key> <asciitilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
<combining_tilde> <N> : "Ñ" U00D1 # LATIN CAPITAL LETTER N WITH TILDE
<dead_grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
<Multi_key> <grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
<combining_grave> <O> : "Ò" U00D2 # LATIN CAPITAL LETTER O WITH GRAVE
<dead_acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<combining_acute> <O> : "Ó" U00D3 # LATIN CAPITAL LETTER O WITH ACUTE
<dead_circumflex> <O> : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <O> : "Ô" U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<dead_tilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
<Multi_key> <asciitilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
<combining_tilde> <O> : "Õ" U00D5 # LATIN CAPITAL LETTER O WITH TILDE
<dead_diaeresis> <O> : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <O> : "Ö" U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <slash> <O> : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <O> : "Ø" U00D8 # LATIN CAPITAL LETTER O WITH STROKE
<dead_grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
<Multi_key> <grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
<combining_grave> <U> : "Ù" U00D9 # LATIN CAPITAL LETTER U WITH GRAVE
<dead_acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<combining_acute> <U> : "Ú" U00DA # LATIN CAPITAL LETTER U WITH ACUTE
<dead_circumflex> <U> : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <U> : "Û" U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <U> : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <U> : "Ü" U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
<dead_acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<combining_acute> <Y> : "Ý" U00DD # LATIN CAPITAL LETTER Y WITH ACUTE
<dead_grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
<Multi_key> <grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
<combining_grave> <a> : "à" U00E0 # LATIN SMALL LETTER A WITH GRAVE
<dead_acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<combining_acute> <a> : "á" U00E1 # LATIN SMALL LETTER A WITH ACUTE
<dead_circumflex> <a> : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <a> : "â" U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
<dead_tilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
<Multi_key> <asciitilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
<combining_tilde> <a> : "ã" U00E3 # LATIN SMALL LETTER A WITH TILDE
<dead_diaeresis> <a> : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <a> : "ä" U00E4 # LATIN SMALL LETTER A WITH DIAERESIS
<dead_abovering> <a> : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
<Multi_key> <o> <a> : "å" U00E5 # LATIN SMALL LETTER A WITH RING ABOVE
<dead_cedilla> <c> : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA
<Multi_key> <comma> <c> : "ç" U00E7 # LATIN SMALL LETTER C WITH CEDILLA
<dead_grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
<Multi_key> <grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
<combining_grave> <e> : "è" U00E8 # LATIN SMALL LETTER E WITH GRAVE
<dead_acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<combining_acute> <e> : "é" U00E9 # LATIN SMALL LETTER E WITH ACUTE
<dead_circumflex> <e> : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <e> : "ê" U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <e> : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <e> : "ë" U00EB # LATIN SMALL LETTER E WITH DIAERESIS
<dead_grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
<Multi_key> <grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
<combining_grave> <i> : "ì" U00EC # LATIN SMALL LETTER I WITH GRAVE
<dead_acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<combining_acute> <i> : "í" U00ED # LATIN SMALL LETTER I WITH ACUTE
<dead_circumflex> <i> : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <i> : "î" U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <i> : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <i> : "ï" U00EF # LATIN SMALL LETTER I WITH DIAERESIS
<dead_tilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
<Multi_key> <asciitilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
<combining_tilde> <n> : "ñ" U00F1 # LATIN SMALL LETTER N WITH TILDE
<dead_grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
<Multi_key> <grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
<combining_grave> <o> : "ò" U00F2 # LATIN SMALL LETTER O WITH GRAVE
<dead_acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<combining_acute> <o> : "ó" U00F3 # LATIN SMALL LETTER O WITH ACUTE
<dead_circumflex> <o> : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <o> : "ô" U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
<dead_tilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
<Multi_key> <asciitilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
<combining_tilde> <o> : "õ" U00F5 # LATIN SMALL LETTER O WITH TILDE
<dead_diaeresis> <o> : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <o> : "ö" U00F6 # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <slash> <o> : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <o> : "ø" U00F8 # LATIN SMALL LETTER O WITH STROKE
<dead_grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
<Multi_key> <grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
<combining_grave> <u> : "ù" U00F9 # LATIN SMALL LETTER U WITH GRAVE
<dead_acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<combining_acute> <u> : "ú" U00FA # LATIN SMALL LETTER U WITH ACUTE
<dead_circumflex> <u> : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <u> : "û" U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <u> : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <u> : "ü" U00FC # LATIN SMALL LETTER U WITH DIAERESIS
<dead_acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<combining_acute> <y> : "ý" U00FD # LATIN SMALL LETTER Y WITH ACUTE
<dead_diaeresis> <y> : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
<Multi_key> <quotedbl> <y> : "ÿ" U00FF # LATIN SMALL LETTER Y WITH DIAERESIS
<dead_circumflex> <Multi_key> <underscore> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <a> : "ª" ordfeminine # FEMININE ORDINAL INDICATOR
<dead_circumflex> <2> : "²" twosuperior # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <2> : "²" twosuperior # SUPERSCRIPT TWO
<dead_circumflex> <KP_Space> : "²" twosuperior # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_Space> : "²" twosuperior # SUPERSCRIPT TWO
<dead_circumflex> <KP_2> : "²" twosuperior # SUPERSCRIPT TWO
<Multi_key> <asciicircum> <KP_2> : "²" twosuperior # SUPERSCRIPT TWO
<dead_circumflex> <3> : "³" threesuperior # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <3> : "³" threesuperior # SUPERSCRIPT THREE
<dead_circumflex> <KP_3> : "³" threesuperior # SUPERSCRIPT THREE
<Multi_key> <asciicircum> <KP_3> : "³" threesuperior # SUPERSCRIPT THREE
<dead_circumflex> <1> : "¹" onesuperior # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <1> : "¹" onesuperior # SUPERSCRIPT ONE
<dead_circumflex> <KP_1> : "¹" onesuperior # SUPERSCRIPT ONE
<Multi_key> <asciicircum> <KP_1> : "¹" onesuperior # SUPERSCRIPT ONE
<dead_circumflex> <Multi_key> <underscore> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underscore> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<dead_circumflex> <Multi_key> <underbar> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<Multi_key> <asciicircum> <underbar> <o> : "º" masculine # MASCULINE ORDINAL INDICATOR
<dead_grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
<Multi_key> <grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
<combining_grave> <A> : "À" Agrave # LATIN CAPITAL LETTER A WITH GRAVE
<dead_acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<combining_acute> <A> : "Á" Aacute # LATIN CAPITAL LETTER A WITH ACUTE
<dead_circumflex> <A> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <A> : "Â" Acircumflex # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
<dead_tilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
<Multi_key> <asciitilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
<combining_tilde> <A> : "Ã" Atilde # LATIN CAPITAL LETTER A WITH TILDE
<dead_diaeresis> <A> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <A> : "Ä" Adiaeresis # LATIN CAPITAL LETTER A WITH DIAERESIS
<dead_abovering> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
<Multi_key> <o> <A> : "Å" Aring # LATIN CAPITAL LETTER A WITH RING ABOVE
<dead_cedilla> <C> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
<Multi_key> <comma> <C> : "Ç" Ccedilla # LATIN CAPITAL LETTER C WITH CEDILLA
<dead_grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
<Multi_key> <grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
<combining_grave> <E> : "È" Egrave # LATIN CAPITAL LETTER E WITH GRAVE
<dead_acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<combining_acute> <E> : "É" Eacute # LATIN CAPITAL LETTER E WITH ACUTE
<dead_circumflex> <E> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <E> : "Ê" Ecircumflex # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <E> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <E> : "Ë" Ediaeresis # LATIN CAPITAL LETTER E WITH DIAERESIS
<dead_grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
<Multi_key> <grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
<combining_grave> <I> : "Ì" Igrave # LATIN CAPITAL LETTER I WITH GRAVE
<dead_acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<combining_acute> <I> : "Í" Iacute # LATIN CAPITAL LETTER I WITH ACUTE
<dead_circumflex> <I> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <I> : "Î" Icircumflex # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <I> : "Ï" Idiaeresis # LATIN CAPITAL LETTER I WITH DIAERESIS
<dead_tilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
<Multi_key> <asciitilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
<combining_tilde> <N> : "Ñ" Ntilde # LATIN CAPITAL LETTER N WITH TILDE
<dead_grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
<Multi_key> <grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
<combining_grave> <O> : "Ò" Ograve # LATIN CAPITAL LETTER O WITH GRAVE
<dead_acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<combining_acute> <O> : "Ó" Oacute # LATIN CAPITAL LETTER O WITH ACUTE
<dead_circumflex> <O> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <O> : "Ô" Ocircumflex # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
<dead_tilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
<Multi_key> <asciitilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
<combining_tilde> <O> : "Õ" Otilde # LATIN CAPITAL LETTER O WITH TILDE
<dead_diaeresis> <O> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <O> : "Ö" Odiaeresis # LATIN CAPITAL LETTER O WITH DIAERESIS
<Multi_key> <slash> <O> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <O> : "Ø" Oslash # LATIN CAPITAL LETTER O WITH STROKE
<dead_grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
<Multi_key> <grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
<combining_grave> <U> : "Ù" Ugrave # LATIN CAPITAL LETTER U WITH GRAVE
<dead_acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<combining_acute> <U> : "Ú" Uacute # LATIN CAPITAL LETTER U WITH ACUTE
<dead_circumflex> <U> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <U> : "Û" Ucircumflex # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <U> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <U> : "Ü" Udiaeresis # LATIN CAPITAL LETTER U WITH DIAERESIS
<dead_acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<combining_acute> <Y> : "Ý" Yacute # LATIN CAPITAL LETTER Y WITH ACUTE
<dead_grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
<Multi_key> <grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
<combining_grave> <a> : "à" agrave # LATIN SMALL LETTER A WITH GRAVE
<dead_acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<Multi_key> <apostrophe> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<combining_acute> <a> : "á" aacute # LATIN SMALL LETTER A WITH ACUTE
<dead_circumflex> <a> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
<Multi_key> <asciicircum> <a> : "â" acircumflex # LATIN SMALL LETTER A WITH CIRCUMFLEX
<dead_tilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
<Multi_key> <asciitilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
<combining_tilde> <a> : "ã" atilde # LATIN SMALL LETTER A WITH TILDE
<dead_diaeresis> <a> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
<Multi_key> <quotedbl> <a> : "ä" adiaeresis # LATIN SMALL LETTER A WITH DIAERESIS
<dead_abovering> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
<Multi_key> <o> <a> : "å" aring # LATIN SMALL LETTER A WITH RING ABOVE
<dead_cedilla> <c> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
<Multi_key> <comma> <c> : "ç" ccedilla # LATIN SMALL LETTER C WITH CEDILLA
<dead_grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
<Multi_key> <grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
<combining_grave> <e> : "è" egrave # LATIN SMALL LETTER E WITH GRAVE
<dead_acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<Multi_key> <apostrophe> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<combining_acute> <e> : "é" eacute # LATIN SMALL LETTER E WITH ACUTE
<dead_circumflex> <e> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
<Multi_key> <asciicircum> <e> : "ê" ecircumflex # LATIN SMALL LETTER E WITH CIRCUMFLEX
<dead_diaeresis> <e> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
<Multi_key> <quotedbl> <e> : "ë" ediaeresis # LATIN SMALL LETTER E WITH DIAERESIS
<dead_grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
<Multi_key> <grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
<combining_grave> <i> : "ì" igrave # LATIN SMALL LETTER I WITH GRAVE
<dead_acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<Multi_key> <apostrophe> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<combining_acute> <i> : "í" iacute # LATIN SMALL LETTER I WITH ACUTE
<dead_circumflex> <i> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
<Multi_key> <asciicircum> <i> : "î" icircumflex # LATIN SMALL LETTER I WITH CIRCUMFLEX
<dead_diaeresis> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
<Multi_key> <quotedbl> <i> : "ï" idiaeresis # LATIN SMALL LETTER I WITH DIAERESIS
<dead_tilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
<Multi_key> <asciitilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
<combining_tilde> <n> : "ñ" ntilde # LATIN SMALL LETTER N WITH TILDE
<dead_grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
<Multi_key> <grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
<combining_grave> <o> : "ò" ograve # LATIN SMALL LETTER O WITH GRAVE
<dead_acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<Multi_key> <apostrophe> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<combining_acute> <o> : "ó" oacute # LATIN SMALL LETTER O WITH ACUTE
<dead_circumflex> <o> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
<Multi_key> <asciicircum> <o> : "ô" ocircumflex # LATIN SMALL LETTER O WITH CIRCUMFLEX
<dead_tilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
<Multi_key> <asciitilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
<combining_tilde> <o> : "õ" otilde # LATIN SMALL LETTER O WITH TILDE
<dead_diaeresis> <o> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <quotedbl> <o> : "ö" odiaeresis # LATIN SMALL LETTER O WITH DIAERESIS
<Multi_key> <slash> <o> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
<Multi_key> <KP_Divide> <o> : "ø" oslash # LATIN SMALL LETTER O WITH STROKE
<dead_grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
<Multi_key> <grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
<combining_grave> <u> : "ù" ugrave # LATIN SMALL LETTER U WITH GRAVE
<dead_acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<Multi_key> <apostrophe> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<combining_acute> <u> : "ú" uacute # LATIN SMALL LETTER U WITH ACUTE
<dead_circumflex> <u> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
<Multi_key> <asciicircum> <u> : "û" ucircumflex # LATIN SMALL LETTER U WITH CIRCUMFLEX
<dead_diaeresis> <u> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
<Multi_key> <quotedbl> <u> : "ü" udiaeresis # LATIN SMALL LETTER U WITH DIAERESIS
<dead_acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<Multi_key> <apostrophe> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<combining_acute> <y> : "ý" yacute # LATIN SMALL LETTER Y WITH ACUTE
<dead_diaeresis> <y> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
<Multi_key> <quotedbl> <y> : "ÿ" ydiaeresis # LATIN SMALL LETTER Y WITH DIAERESIS
<dead_macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
<Multi_key> <macron> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
<Multi_key> <underscore> <A> : "Ā" U0100 # LATIN CAPITAL LETTER A WITH MACRON
@ -5517,25 +5521,25 @@ XCOMM group 1: cluster jamos made of three basic jamos
<Multi_key> <U05bf> <hebrew_beth> : "בֿ" UFB4C # HEBREW LETTER BET WITH RAFE
<Multi_key> <U05bf> <hebrew_kaph> : "כֿ" UFB4D # HEBREW LETTER KAF WITH RAFE
<Multi_key> <U05bf> <hebrew_pe> : "פֿ" UFB4E # HEBREW LETTER PE WITH RAFE
<Multi_key> <U1d157> <U1d165> : "" U1D15E # MUSICAL SYMBOL HALF NOTE
<Multi_key> <U1d158> <U1d165> : "" U1D15F # MUSICAL SYMBOL QUARTER NOTE
<Multi_key> <U1d15f> <U1d16e> : "" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d16e> : "" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
<Multi_key> <U1d15f> <U1d16f> : "" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d16f> : "" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
<Multi_key> <U1d15f> <U1d170> : "" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
<Multi_key> <U1d158> <U1d165> <U1d170> : "" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
<Multi_key> <U1d15f> <U1d171> : "" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d171> : "" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
<Multi_key> <U1d15f> <U1d172> : "" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d172> : "" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
<Multi_key> <U1d1b9> <U1d165> : "" U1D1BB # MUSICAL SYMBOL MINIMA
<Multi_key> <U1d1ba> <U1d165> : "" U1D1BC # MUSICAL SYMBOL MINIMA BLACK
<Multi_key> <U1d1bb> <U1d16e> : "" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
<Multi_key> <U1d1b9> <U1d165> <U1d16e> : "" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
<Multi_key> <U1d1bc> <U1d16e> : "" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
<Multi_key> <U1d1ba> <U1d165> <U1d16e> : "" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
<Multi_key> <U1d1bb> <U1d16f> : "" U1D1BF # MUSICAL SYMBOL FUSA WHITE
<Multi_key> <U1d1b9> <U1d165> <U1d16f> : "" U1D1BF # MUSICAL SYMBOL FUSA WHITE
<Multi_key> <U1d1bc> <U1d16f> : "" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
<Multi_key> <U1d1ba> <U1d165> <U1d16f> : "" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
<Multi_key> <U1d157> <U1d165> : "𝅗𝅥" U1D15E # MUSICAL SYMBOL HALF NOTE
<Multi_key> <U1d158> <U1d165> : "𝅘𝅥" U1D15F # MUSICAL SYMBOL QUARTER NOTE
<Multi_key> <U1d15f> <U1d16e> : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d16e> : "𝅘𝅥𝅮" U1D160 # MUSICAL SYMBOL EIGHTH NOTE
<Multi_key> <U1d15f> <U1d16f> : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d16f> : "𝅘𝅥𝅯" U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE
<Multi_key> <U1d15f> <U1d170> : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
<Multi_key> <U1d158> <U1d165> <U1d170> : "𝅘𝅥𝅰" U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE
<Multi_key> <U1d15f> <U1d171> : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d171> : "𝅘𝅥𝅱" U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE
<Multi_key> <U1d15f> <U1d172> : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
<Multi_key> <U1d158> <U1d165> <U1d172> : "𝅘𝅥𝅲" U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE
<Multi_key> <U1d1b9> <U1d165> : "𝆹𝅥" U1D1BB # MUSICAL SYMBOL MINIMA
<Multi_key> <U1d1ba> <U1d165> : "𝆺𝅥" U1D1BC # MUSICAL SYMBOL MINIMA BLACK
<Multi_key> <U1d1bb> <U1d16e> : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
<Multi_key> <U1d1b9> <U1d165> <U1d16e> : "𝆹𝅥𝅮" U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE
<Multi_key> <U1d1bc> <U1d16e> : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
<Multi_key> <U1d1ba> <U1d165> <U1d16e> : "𝆺𝅥𝅮" U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK
<Multi_key> <U1d1bb> <U1d16f> : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE
<Multi_key> <U1d1b9> <U1d165> <U1d16f> : "𝆹𝅥𝅯" U1D1BF # MUSICAL SYMBOL FUSA WHITE
<Multi_key> <U1d1bc> <U1d16f> : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK
<Multi_key> <U1d1ba> <U1d165> <U1d16f> : "𝆺𝅥𝅯" U1D1C0 # MUSICAL SYMBOL FUSA BLACK

View file

@ -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

View file

@ -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';

View file

@ -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;

View file

@ -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:

View file

@ -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

View file

@ -33,7 +33,7 @@ in this Software without prior written authorization from The Open Group.
#include <X11/Xatom.h>
/* 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);
}

View file

@ -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

View file

@ -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);

View file

@ -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"}

View file

@ -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, &current->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;

View file

@ -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);
}

View file

@ -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;

View file

@ -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;