aboutsummaryrefslogtreecommitdiff
path: root/libX11/src/xkb/XKBCvt.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-08-26 09:04:58 +0200
committermarha <marha@users.sourceforge.net>2013-08-26 09:04:58 +0200
commit5ee5b91b019005aa27273dff01388a68c12be293 (patch)
treed2db8b0d1533d2eea8bfe77f8a6b3d52fa3f633e /libX11/src/xkb/XKBCvt.c
parent854ec4da20ddff9b830be0a7d5b81d8cb4774132 (diff)
downloadvcxsrv-5ee5b91b019005aa27273dff01388a68c12be293.tar.gz
vcxsrv-5ee5b91b019005aa27273dff01388a68c12be293.tar.bz2
vcxsrv-5ee5b91b019005aa27273dff01388a68c12be293.zip
xserver mesa fontconfig libX11 libxcb libxcb/xcb-proto xkeyboard-config git update 26 Aug 2013
xserver commit e01a3f65d3e6d92f92ef2992b338cc9625bde082 libxcb commit c52f2891b43ae77008f63700982f800371458f4d libxcb/xcb-proto commit bd7708ac1037e647b094fa7440ebb6171b9bc75f xkeyboard-config commit 77026e8c59cc64856180452c5f89be86928fea7c libX11 commit e9b14d10d0258bfcc273ff8bc84cd349dccda62c libXdmcp commit 66514a4af7eaa47e8718434356d7efce95e570cf libXext commit 7378d4bdbd33ed49ed6cfa5c4f73d7527982aab4 libfontenc commit 3acba630d8b57084f7e92c15732408711ed5137a libXinerama commit 6e1d1dc328ba8162bba2f4694e7f3c706a1491ff libXau commit 899790011304c4029e15abf410e49ce7cec17e0a xkbcomp commit 0ebdf47fd4bc434ac3d2339544c022a869510738 pixman commit 3518a0dafa63098d41e466f73d105b7e3e4b12de xextproto commit f27fcc99d1cf935cc289933326f7d3baacd5107a randrproto commit ca7cc541c2e43e6c784df19b4583ac35829d2f72 glproto commit 8e3407e02980d088e20041e79bdcdd3737e7827e mkfontscale commit f48de13423c7300f4da9f61993b624426b38ddc0 xwininfo commit ba0d1b0da21d2dbdd81098ed5778f3792b472e13 libXft commit c5e760a239afc62a1c75e0509868e35957c8df52 libXmu commit d5dac08d65c4865f311cb62c161dbb1300eecd11 libxtrans commit f6a161f2a003f4da0a2e414b4faa0ee0de0c01f0 fontconfig commit fba9efecd2ef3aca84e0a4806899c09ba95f4c19 mesa commit 7fa18774bd9d0e97a82ee9b7dfce8fc5a1041c3a
Diffstat (limited to 'libX11/src/xkb/XKBCvt.c')
-rw-r--r--libX11/src/xkb/XKBCvt.c294
1 files changed, 153 insertions, 141 deletions
diff --git a/libX11/src/xkb/XKBCvt.c b/libX11/src/xkb/XKBCvt.c
index da74fc047..5317a0a5c 100644
--- a/libX11/src/xkb/XKBCvt.c
+++ b/libX11/src/xkb/XKBCvt.c
@@ -60,94 +60,99 @@ _XkbHandleSpecialSym(KeySym keysym, char *buffer, int nbytes, int *extra_rtrn)
/* try to convert to Latin-1, handling ctrl */
if (!(((keysym >= XK_BackSpace) && (keysym <= XK_Clear)) ||
- (keysym == XK_Return) || (keysym == XK_Escape) ||
- (keysym == XK_KP_Space) || (keysym == XK_KP_Tab) ||
- (keysym == XK_KP_Enter) ||
- ((keysym >= XK_KP_Multiply) && (keysym <= XK_KP_9)) ||
- (keysym == XK_KP_Equal) ||
- (keysym == XK_Delete)))
- return 0;
-
- if (nbytes<1) {
- if (extra_rtrn)
- *extra_rtrn= 1;
- return 0;
+ (keysym == XK_Return) || (keysym == XK_Escape) ||
+ (keysym == XK_KP_Space) || (keysym == XK_KP_Tab) ||
+ (keysym == XK_KP_Enter) ||
+ ((keysym >= XK_KP_Multiply) && (keysym <= XK_KP_9)) ||
+ (keysym == XK_KP_Equal) || (keysym == XK_Delete)))
+ return 0;
+
+ if (nbytes < 1) {
+ if (extra_rtrn)
+ *extra_rtrn = 1;
+ return 0;
}
/* if X keysym, convert to ascii by grabbing low 7 bits */
if (keysym == XK_KP_Space)
- buffer[0] = XK_space & 0x7F; /* patch encoding botch */
+ buffer[0] = XK_space & 0x7F; /* patch encoding botch */
else if (keysym == XK_hyphen)
- buffer[0] = (char)(XK_minus & 0xFF); /* map to equiv character */
- else buffer[0] = (char)(keysym & 0x7F);
+ buffer[0] = (char) (XK_minus & 0xFF); /* map to equiv character */
+ else
+ buffer[0] = (char) (keysym & 0x7F);
return 1;
}
/*ARGSUSED*/
static int
-_XkbKSToKnownSet ( XPointer priv,
- KeySym keysym,
- char * buffer,
- int nbytes,
- int * extra_rtrn)
+_XkbKSToKnownSet(XPointer priv,
+ KeySym keysym,
+ char *buffer,
+ int nbytes,
+ int *extra_rtrn)
{
- char tbuf[8],*buf;
+ char tbuf[8], *buf;
if (extra_rtrn)
- *extra_rtrn= 0;
+ *extra_rtrn = 0;
/* convert "dead" diacriticals for dumb applications */
- if ( (keysym&0xffffff00)== 0xfe00 ) {
- switch ( keysym ) {
- case XK_dead_grave: keysym = XK_grave; break;
- case XK_dead_acute: keysym = XK_acute; break;
- case XK_dead_circumflex: keysym = XK_asciicircum; break;
- case XK_dead_tilde: keysym = XK_asciitilde; break;
- case XK_dead_macron: keysym = XK_macron; break;
- case XK_dead_breve: keysym = XK_breve; break;
- case XK_dead_abovedot: keysym = XK_abovedot; break;
- case XK_dead_diaeresis: keysym = XK_diaeresis; break;
- case XK_dead_abovering: keysym = XK_degree; break;
- case XK_dead_doubleacute: keysym = XK_doubleacute; break;
- case XK_dead_caron: keysym = XK_caron; break;
- case XK_dead_cedilla: keysym = XK_cedilla; break;
- case XK_dead_ogonek : keysym = XK_ogonek; break;
- case XK_dead_iota: keysym = XK_Greek_iota; break;
+ if ((keysym & 0xffffff00) == 0xfe00) {
+ switch (keysym) {
+ case XK_dead_grave: keysym = XK_grave; break;
+ case XK_dead_acute: keysym = XK_acute; break;
+ case XK_dead_circumflex: keysym = XK_asciicircum; break;
+ case XK_dead_tilde: keysym = XK_asciitilde; break;
+ case XK_dead_macron: keysym = XK_macron; break;
+ case XK_dead_breve: keysym = XK_breve; break;
+ case XK_dead_abovedot: keysym = XK_abovedot; break;
+ case XK_dead_diaeresis: keysym = XK_diaeresis; break;
+ case XK_dead_abovering: keysym = XK_degree; break;
+ case XK_dead_doubleacute: keysym = XK_doubleacute; break;
+ case XK_dead_caron: keysym = XK_caron; break;
+ case XK_dead_cedilla: keysym = XK_cedilla; break;
+ case XK_dead_ogonek: keysym = XK_ogonek; break;
+ case XK_dead_iota: keysym = XK_Greek_iota; break;
#ifdef XK_KATAKANA
- case XK_dead_voiced_sound: keysym = XK_voicedsound; break;
- case XK_dead_semivoiced_sound:keysym = XK_semivoicedsound; break;
+ case XK_dead_voiced_sound: keysym = XK_voicedsound; break;
+ case XK_dead_semivoiced_sound: keysym = XK_semivoicedsound; break;
#endif
- }
+ }
}
- if (nbytes<1) buf= tbuf;
- else buf= buffer;
+ if (nbytes < 1)
+ buf = tbuf;
+ else
+ buf = buffer;
- if ((keysym&0xffffff00)==0xff00) {
- return _XkbHandleSpecialSym(keysym, buf, nbytes, extra_rtrn);
+ if ((keysym & 0xffffff00) == 0xff00) {
+ return _XkbHandleSpecialSym(keysym, buf, nbytes, extra_rtrn);
}
- return _XimGetCharCode (priv, keysym, (unsigned char *)buf, nbytes);
+ return _XimGetCharCode(priv, keysym, (unsigned char *) buf, nbytes);
}
typedef struct _XkbToKS {
- unsigned prefix;
- char *map;
+ unsigned prefix;
+ char *map;
} XkbToKS;
/*ARGSUSED*/
static KeySym
-_XkbKnownSetToKS(XPointer priv,char *buffer,int nbytes,Status *status)
+_XkbKnownSetToKS(XPointer priv, char *buffer, int nbytes, Status *status)
{
- if (nbytes!=1)
- return NoSymbol;
- if (((buffer[0]&0x80)==0)&&(buffer[0]>=32))
- return buffer[0];
- else if ((buffer[0]&0x7f)>=32) {
- XkbToKS *map= (XkbToKS *)priv;
- if ( map ) {
- if ( map->map ) return map->prefix|map->map[buffer[0]&0x7f];
- else return map->prefix|buffer[0];
- }
- return buffer[0];
+ if (nbytes != 1)
+ return NoSymbol;
+ if (((buffer[0] & 0x80) == 0) && (buffer[0] >= 32))
+ return buffer[0];
+ else if ((buffer[0] & 0x7f) >= 32) {
+ XkbToKS *map = (XkbToKS *) priv;
+
+ if (map) {
+ if (map->map)
+ return map->prefix | map->map[buffer[0] & 0x7f];
+ else
+ return map->prefix | buffer[0];
+ }
+ return buffer[0];
}
return NoSymbol;
}
@@ -155,7 +160,7 @@ _XkbKnownSetToKS(XPointer priv,char *buffer,int nbytes,Status *status)
static KeySym
__XkbDefaultToUpper(KeySym sym)
{
- KeySym lower,upper;
+ KeySym lower, upper;
XConvertCase(sym, &lower, &upper);
return upper;
@@ -172,13 +177,13 @@ Strcmp(char *str1, char *str2)
* unchecked strings from the environment can end up here, so check
* the length before copying.
*/
- if (strlen(str1) >= sizeof(str)) /* almost certain it's a mismatch */
- return 1;
+ if (strlen(str1) >= sizeof(str)) /* almost certain it's a mismatch */
+ return 1;
- for (s = str; (c = *str1++); ) {
- if (isupper(c))
- c = tolower(c);
- *s++ = c;
+ for (s = str; (c = *str1++);) {
+ if (isupper(c))
+ c = tolower(c);
+ *s++ = c;
}
*s = '\0';
return (strcmp(str, str2));
@@ -186,9 +191,10 @@ Strcmp(char *str1, char *str2)
#endif
int
-_XkbGetConverters(const char *encoding_name, XkbConverters *cvt_rtrn)
+_XkbGetConverters(const char *encoding_name, XkbConverters * cvt_rtrn)
{
- if ( !cvt_rtrn ) return 0;
+ if (!cvt_rtrn)
+ return 0;
cvt_rtrn->KSToMB = _XkbKSToKnownSet;
cvt_rtrn->KSToMBPriv = _XimGetLocaleCode(encoding_name);
@@ -214,9 +220,14 @@ _XkbGetConverters(const char *encoding_name, XkbConverters *cvt_rtrn)
*/
#define CHARSET_FILE "/usr/lib/X11/input/charsets"
-static char *_XkbKnownLanguages = "c=ascii:da,de,en,es,fr,is,it,nl,no,pt,sv=iso8859-1:hu,pl,cs=iso8859-2:eo=iso8859-3:sp=iso8859-5:ar,ara=iso8859-6:el=iso8859-7:he=iso8859-8:tr=iso8859-9:lt,lv=iso8859-13:et,fi=iso8859-15:ru=koi8-r:uk=koi8-u:th,th_TH,th_TH.iso8859-11=iso8859-11:th_TH.TIS620=tis620:hy=armscii-8:vi=tcvn-5712:ka=georgian-academy:be,bg=microsoft-cp1251";
-
-char *
+static char *_XkbKnownLanguages =
+ "c=ascii:da,de,en,es,fr,is,it,nl,no,pt,sv=iso8859-1:hu,pl,cs=iso8859-2:"
+ "eo=iso8859-3:sp=iso8859-5:ar,ara=iso8859-6:el=iso8859-7:he=iso8859-8:"
+ "tr=iso8859-9:lt,lv=iso8859-13:et,fi=iso8859-15:ru=koi8-r:uk=koi8-u:"
+ "th,th_TH,th_TH.iso8859-11=iso8859-11:th_TH.TIS620=tis620:hy=armscii-8:"
+ "vi=tcvn-5712:ka=georgian-academy:be,bg=microsoft-cp1251";
+
+char *
_XkbGetCharset(void)
{
/*
@@ -225,49 +236,51 @@ _XkbGetCharset(void)
*/
static char buf[100] = { 0 };
char lang[256];
- char *start,*tmp,*end,*next,*set;
- char *country,*charset;
+ char *start, *tmp, *end, *next, *set;
+ char *country, *charset;
char *locale;
- tmp = getenv( "_XKB_CHARSET" );
- if ( tmp )
- return tmp;
- locale = setlocale(LC_CTYPE,NULL);
+ tmp = getenv("_XKB_CHARSET");
+ if (tmp)
+ return tmp;
+ locale = setlocale(LC_CTYPE, NULL);
- if ( locale == NULL )
- return NULL;
+ if (locale == NULL)
+ return NULL;
if (strlen(locale) >= sizeof(lang))
- return NULL;
+ return NULL;
for (tmp = lang; *tmp = *locale++; tmp++) {
- if (isupper(*tmp))
- *tmp = tolower(*tmp);
+ if (isupper(*tmp))
+ *tmp = tolower(*tmp);
}
- country = strchr( lang, '_');
- if ( country ) {
- *country++ = '\0';
- charset = strchr( country, '.' );
- if ( charset ) *charset++ = '\0';
- if ( charset ) {
- strncpy(buf,charset,99);
- buf[99] = '\0';
- return buf;
- }
+ country = strchr(lang, '_');
+ if (country) {
+ *country++ = '\0';
+ charset = strchr(country, '.');
+ if (charset)
+ *charset++ = '\0';
+ if (charset) {
+ strncpy(buf, charset, 99);
+ buf[99] = '\0';
+ return buf;
+ }
}
else {
- charset = NULL;
+ charset = NULL;
}
- if ((tmp = getenv("_XKB_LOCALE_CHARSETS"))!=NULL) {
- start = _XkbAlloc(strlen(tmp) + 1);
- strcpy(start, tmp);
- tmp = start;
- } else {
- struct stat sbuf;
- FILE *file;
+ if ((tmp = getenv("_XKB_LOCALE_CHARSETS")) != NULL) {
+ start = _XkbAlloc(strlen(tmp) + 1);
+ strcpy(start, tmp);
+ tmp = start;
+ }
+ else {
+ struct stat sbuf;
+ FILE *file;
#ifndef __UNIXOS2__
- char *cf = CHARSET_FILE;
+ char *cf = CHARSET_FILE;
#else
char *cf = __XOS2RedirRoot(CHARSET_FILE);
#endif
@@ -276,62 +289,61 @@ _XkbGetCharset(void)
# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG)
#endif
- if ( (stat(cf,&sbuf)==0) && S_ISREG(sbuf.st_mode) &&
- (file = fopen(cf,"r")) ) {
- tmp = _XkbAlloc(sbuf.st_size+1);
- if (tmp!=NULL) {
- sbuf.st_size = (long)fread(tmp,1,sbuf.st_size,file);
- tmp[sbuf.st_size] = '\0';
- }
- fclose(file);
- }
+ if ((stat(cf, &sbuf) == 0) && S_ISREG(sbuf.st_mode) &&
+ (file = fopen(cf, "r"))) {
+ tmp = _XkbAlloc(sbuf.st_size + 1);
+ if (tmp != NULL) {
+ sbuf.st_size = (long) fread(tmp, 1, sbuf.st_size, file);
+ tmp[sbuf.st_size] = '\0';
+ }
+ fclose(file);
+ }
}
- if ( tmp == NULL ) {
- tmp = _XkbAlloc(strlen(_XkbKnownLanguages) + 1);
- if (!tmp)
- return NULL;
- strcpy(tmp, _XkbKnownLanguages);
+ if (tmp == NULL) {
+ tmp = _XkbAlloc(strlen(_XkbKnownLanguages) + 1);
+ if (!tmp)
+ return NULL;
+ strcpy(tmp, _XkbKnownLanguages);
}
start = tmp;
do {
- if ( (set=strchr(tmp,'=')) == NULL )
- break;
- *set++ = '\0';
- if ( (next=strchr(set,':')) != NULL )
- *next++ = '\0';
- while ( tmp && *tmp ) {
- if ( (end=strchr(tmp,',')) != NULL )
- *end++ = '\0';
- if ( Strcmp( tmp, lang ) == 0 ) {
- strncpy(buf,set,100);
- buf[99] = '\0';
- Xfree(start);
- return buf;
- }
- tmp = end;
- }
- tmp = next;
- } while ( tmp && *tmp );
+ if ((set = strchr(tmp, '=')) == NULL)
+ break;
+ *set++ = '\0';
+ if ((next = strchr(set, ':')) != NULL)
+ *next++ = '\0';
+ while (tmp && *tmp) {
+ if ((end = strchr(tmp, ',')) != NULL)
+ *end++ = '\0';
+ if (Strcmp(tmp, lang) == 0) {
+ strncpy(buf, set, 100);
+ buf[99] = '\0';
+ Xfree(start);
+ return buf;
+ }
+ tmp = end;
+ }
+ tmp = next;
+ } while (tmp && *tmp);
Xfree(start);
return NULL;
}
#else
-char *
+char *
_XkbGetCharset(void)
{
char *tmp;
XLCd lcd;
- tmp = getenv( "_XKB_CHARSET" );
- if ( tmp )
- return tmp;
+ tmp = getenv("_XKB_CHARSET");
+ if (tmp)
+ return tmp;
lcd = _XlcCurrentLC();
- if ( lcd )
- return XLC_PUBLIC(lcd,encoding_name);
+ if (lcd)
+ return XLC_PUBLIC(lcd, encoding_name);
return NULL;
}
#endif
-