Blame src/ibuskeynames.c

Packit Service 1d8f1c
/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
Packit Service 1d8f1c
/* vim:set et sts=4: */
Packit Service 1d8f1c
/* GDK - The GIMP Drawing Kit
Packit Service 1d8f1c
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * This library is free software; you can redistribute it and/or
Packit Service 1d8f1c
 * modify it under the terms of the GNU Lesser General Public
Packit Service 1d8f1c
 * License as published by the Free Software Foundation; either
Packit Service 1d8f1c
 * version 2 of the License, or (at your option) any later version.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * This library is distributed in the hope that it will be useful,
Packit Service 1d8f1c
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 1d8f1c
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 1d8f1c
 * Lesser General Public License for more details.
Packit Service 1d8f1c
 *
Packit Service 1d8f1c
 * You should have received a copy of the GNU Lesser General Public
Packit Service 1d8f1c
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Packit Service 1d8f1c
 */
Packit Service 1d8f1c
Packit Service 1d8f1c
/*
Packit Service 1d8f1c
 * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
Packit Service 1d8f1c
 * file for a list of people on the GTK+ Team.  See the ChangeLog
Packit Service 1d8f1c
 * files for a list of changes.  These files are distributed with
Packit Service 1d8f1c
 * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
Packit Service 1d8f1c
 */
Packit Service 1d8f1c
Packit Service 1d8f1c
/* Key handling not part of the keymap */
Packit Service 1d8f1c
#include <glib.h>
Packit Service 1d8f1c
#include <glib/gprintf.h>
Packit Service 1d8f1c
#include <stdlib.h>
Packit Service 1d8f1c
#include <string.h>
Packit Service 1d8f1c
#include "ibuskeysyms.h"
Packit Service 1d8f1c
#include "keyname-table.h"
Packit Service 1d8f1c
#include "ibuskeys.h"
Packit Service 1d8f1c
Packit Service 1d8f1c
#define IBUS_NUM_KEYS G_N_ELEMENTS (gdk_keys_by_keyval)
Packit Service 1d8f1c
Packit Service 1d8f1c
static int
Packit Service 1d8f1c
gdk_keys_keyval_compare (const void *pkey, const void *pbase)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
  return (*(int *) pkey) - ((gdk_key *) pbase)->keyval;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
const gchar*
Packit Service 1d8f1c
ibus_keyval_name (guint keyval)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
  static gchar buf[100];
Packit Service 1d8f1c
  gdk_key *found;
Packit Service 1d8f1c
Packit Service 1d8f1c
  /* Check for directly encoded 24-bit UCS characters: */
Packit Service 1d8f1c
  if ((keyval & 0xff000000) == 0x01000000)
Packit Service 1d8f1c
    {
Packit Service 1d8f1c
      g_sprintf (buf, "U+%.04X", (keyval & 0x00ffffff));
Packit Service 1d8f1c
      return buf;
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
  found = bsearch (&keyval, gdk_keys_by_keyval,
Packit Service 1d8f1c
                   IBUS_NUM_KEYS, sizeof (gdk_key),
Packit Service 1d8f1c
           gdk_keys_keyval_compare);
Packit Service 1d8f1c
Packit Service 1d8f1c
  if (found != NULL)
Packit Service 1d8f1c
    {
Packit Service 1d8f1c
      while ((found > gdk_keys_by_keyval) &&
Packit Service 1d8f1c
             ((found - 1)->keyval == keyval))
Packit Service 1d8f1c
        found--;
Packit Service 1d8f1c
Packit Service 1d8f1c
      return (gchar *) (keynames + found->offset);
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
  else if (keyval != 0)
Packit Service 1d8f1c
    {
Packit Service 1d8f1c
      g_sprintf (buf, "%#x", keyval);
Packit Service 1d8f1c
      return buf;
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
  return NULL;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static int
Packit Service 1d8f1c
gdk_keys_name_compare (const void *pkey, const void *pbase)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
  return strcmp ((const char *) pkey,
Packit Service 1d8f1c
         (const char *) (keynames + ((const gdk_key *) pbase)->offset));
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
guint
Packit Service 1d8f1c
ibus_keyval_from_name (const gchar *keyval_name)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
  gdk_key *found;
Packit Service 1d8f1c
Packit Service 1d8f1c
  g_return_val_if_fail (keyval_name != NULL, 0);
Packit Service 1d8f1c
Packit Service 1d8f1c
  found = bsearch (keyval_name, gdk_keys_by_name,
Packit Service 1d8f1c
           IBUS_NUM_KEYS, sizeof (gdk_key),
Packit Service 1d8f1c
           gdk_keys_name_compare);
Packit Service 1d8f1c
  if (found != NULL)
Packit Service 1d8f1c
    return found->keyval;
Packit Service 1d8f1c
  else
Packit Service 1d8f1c
    return IBUS_KEY_VoidSymbol;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
static const gchar *
Packit Service 1d8f1c
modifier_name[] = {
Packit Service 1d8f1c
    "Shift",       // 0
Packit Service 1d8f1c
    "Lock",        // 1
Packit Service 1d8f1c
    "Control",    // 2
Packit Service 1d8f1c
    "Alt",        // 3
Packit Service 1d8f1c
    "Mod2",        // 4
Packit Service 1d8f1c
    "Mod3",        // 5
Packit Service 1d8f1c
    "Mod4",        // 6
Packit Service 1d8f1c
    "Mod5",        // 7
Packit Service 1d8f1c
    "Button1",    // 8
Packit Service 1d8f1c
    "Button2",    // 9
Packit Service 1d8f1c
    "Button3",    // 10
Packit Service 1d8f1c
    "Button4",    // 11
Packit Service 1d8f1c
    "Button5",    // 12
Packit Service 1d8f1c
    NULL, NULL, NULL, NULL, NULL, // 13 - 17
Packit Service 1d8f1c
    NULL, NULL, NULL, NULL, NULL, // 18 - 22
Packit Service 1d8f1c
    NULL, NULL, NULL, // 23 - 25
Packit Service 1d8f1c
    "Super",    // 26
Packit Service 1d8f1c
    "Hyper",    // 27
Packit Service 1d8f1c
    "Meta",        // 28
Packit Service 1d8f1c
    NULL,        // 29
Packit Service 1d8f1c
    "Release",    // 30
Packit Service 1d8f1c
    NULL,        // 31
Packit Service 1d8f1c
};
Packit Service 1d8f1c
Packit Service 1d8f1c
gchar *
Packit Service 1d8f1c
ibus_key_event_to_string (guint keyval,
Packit Service 1d8f1c
                          guint modifiers)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    guint i;
Packit Service 1d8f1c
    GString *str;
Packit Service 1d8f1c
    const gchar *keyval_name;
Packit Service 1d8f1c
Packit Service 1d8f1c
    g_return_val_if_fail (keyval != IBUS_KEY_VoidSymbol, NULL);
Packit Service 1d8f1c
Packit Service 1d8f1c
    keyval_name = ibus_keyval_name (keyval);
Packit Service 1d8f1c
    g_return_val_if_fail (keyval_name != NULL, NULL);
Packit Service 1d8f1c
Packit Service 1d8f1c
    str = g_string_new ("");
Packit Service 1d8f1c
Packit Service 1d8f1c
    for (i = 0; i < 32; i++) {
Packit Service 1d8f1c
        guint mask = 1 << i;
Packit Service 1d8f1c
Packit Service 1d8f1c
        if ((modifiers & mask) == 0)
Packit Service 1d8f1c
            continue;
Packit Service 1d8f1c
        if (modifier_name[i] == NULL)
Packit Service 1d8f1c
            continue;
Packit Service 1d8f1c
Packit Service 1d8f1c
        g_string_append (str, modifier_name[i]);
Packit Service 1d8f1c
        g_string_append_c (str, '+');
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
    g_string_append (str, keyval_name);
Packit Service 1d8f1c
Packit Service 1d8f1c
    return g_string_free (str, FALSE);
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
gboolean
Packit Service 1d8f1c
ibus_key_event_from_string (const gchar *string,
Packit Service 1d8f1c
                            guint       *keyval,
Packit Service 1d8f1c
                            guint       *modifiers)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
    g_return_val_if_fail (string != NULL, FALSE);
Packit Service 1d8f1c
    g_return_val_if_fail (keyval != NULL, FALSE);
Packit Service 1d8f1c
    g_return_val_if_fail (modifiers != NULL, FALSE);
Packit Service 1d8f1c
Packit Service 1d8f1c
    gchar **tokens = NULL;
Packit Service 1d8f1c
    gchar **p;
Packit Service 1d8f1c
    gboolean retval = FALSE;
Packit Service 1d8f1c
Packit Service 1d8f1c
    tokens = g_strsplit (string, "+", 0);
Packit Service 1d8f1c
    g_return_val_if_fail (tokens != NULL, FALSE);
Packit Service 1d8f1c
Packit Service 1d8f1c
    *keyval = 0;
Packit Service 1d8f1c
    *modifiers = 0;
Packit Service 1d8f1c
Packit Service 1d8f1c
    for (p = tokens; *(p + 1) != NULL; p++) {
Packit Service 1d8f1c
        gint i;
Packit Service 1d8f1c
        for (i = 0; i < 32; i++) {
Packit Service 1d8f1c
            if (g_strcmp0 (modifier_name[i], *p) != 0)
Packit Service 1d8f1c
                continue;
Packit Service 1d8f1c
            *modifiers |= (1 << i);
Packit Service 1d8f1c
            break;
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
        if (i == 32) {
Packit Service 1d8f1c
            goto _out;
Packit Service 1d8f1c
        }
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
    *keyval = ibus_keyval_from_name (*p);
Packit Service 1d8f1c
    if (*keyval != IBUS_KEY_VoidSymbol)
Packit Service 1d8f1c
        retval = TRUE;
Packit Service 1d8f1c
_out:
Packit Service 1d8f1c
    g_strfreev (tokens);
Packit Service 1d8f1c
    return retval;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
guint
Packit Service 1d8f1c
ibus_keyval_to_upper (guint keyval)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
  guint result;
Packit Service 1d8f1c
Packit Service 1d8f1c
  ibus_keyval_convert_case (keyval, NULL, &result);
Packit Service 1d8f1c
Packit Service 1d8f1c
  return result;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
guint
Packit Service 1d8f1c
ibus_keyval_to_lower (guint keyval)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
  guint result;
Packit Service 1d8f1c
Packit Service 1d8f1c
  ibus_keyval_convert_case (keyval, &result, NULL);
Packit Service 1d8f1c
Packit Service 1d8f1c
  return result;
Packit Service 1d8f1c
}
Packit Service 1d8f1c
Packit Service 1d8f1c
void
Packit Service 1d8f1c
ibus_keyval_convert_case (guint symbol,
Packit Service 1d8f1c
                         guint *lower,
Packit Service 1d8f1c
                         guint *upper)
Packit Service 1d8f1c
{
Packit Service 1d8f1c
  guint xlower, xupper;
Packit Service 1d8f1c
Packit Service 1d8f1c
  xlower = symbol;
Packit Service 1d8f1c
  xupper = symbol;
Packit Service 1d8f1c
Packit Service 1d8f1c
  /* Check for directly encoded 24-bit UCS characters: */
Packit Service 1d8f1c
  if ((symbol & 0xff000000) == 0x01000000)
Packit Service 1d8f1c
    {
Packit Service 1d8f1c
      if (lower)
Packit Service 1d8f1c
        *lower = ibus_unicode_to_keyval (g_unichar_tolower (symbol & 0x00ffffff));
Packit Service 1d8f1c
      if (upper)
Packit Service 1d8f1c
        *upper = ibus_unicode_to_keyval (g_unichar_toupper (symbol & 0x00ffffff));
Packit Service 1d8f1c
      return;
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
  switch (symbol >> 8)
Packit Service 1d8f1c
    {
Packit Service 1d8f1c
    case 0: /* Latin 1 */
Packit Service 1d8f1c
      if ((symbol >= IBUS_KEY_A) && (symbol <= IBUS_KEY_Z))
Packit Service 1d8f1c
        xlower += (IBUS_KEY_a - IBUS_KEY_A);
Packit Service 1d8f1c
      else if ((symbol >= IBUS_KEY_a) && (symbol <= IBUS_KEY_z))
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_a - IBUS_KEY_A);
Packit Service 1d8f1c
      else if ((symbol >= IBUS_KEY_Agrave) && (symbol <= IBUS_KEY_Odiaeresis))
Packit Service 1d8f1c
        xlower += (IBUS_KEY_agrave - IBUS_KEY_Agrave);
Packit Service 1d8f1c
      else if ((symbol >= IBUS_KEY_agrave) && (symbol <= IBUS_KEY_odiaeresis))
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_agrave - IBUS_KEY_Agrave);
Packit Service 1d8f1c
      else if ((symbol >= IBUS_KEY_Ooblique) && (symbol <= IBUS_KEY_Thorn))
Packit Service 1d8f1c
        xlower += (IBUS_KEY_oslash - IBUS_KEY_Ooblique);
Packit Service 1d8f1c
      else if ((symbol >= IBUS_KEY_oslash) && (symbol <= IBUS_KEY_thorn))
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_oslash - IBUS_KEY_Ooblique);
Packit Service 1d8f1c
      break;
Packit Service 1d8f1c
Packit Service 1d8f1c
    case 1: /* Latin 2 */
Packit Service 1d8f1c
      /* Assume the KeySym is a legal value (ignore discontinuities) */
Packit Service 1d8f1c
      if (symbol == IBUS_KEY_Aogonek)
Packit Service 1d8f1c
        xlower = IBUS_KEY_aogonek;
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Lstroke && symbol <= IBUS_KEY_Sacute)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_lstroke - IBUS_KEY_Lstroke);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Scaron && symbol <= IBUS_KEY_Zacute)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_scaron - IBUS_KEY_Scaron);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Zcaron && symbol <= IBUS_KEY_Zabovedot)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_zcaron - IBUS_KEY_Zcaron);
Packit Service 1d8f1c
      else if (symbol == IBUS_KEY_aogonek)
Packit Service 1d8f1c
        xupper = IBUS_KEY_Aogonek;
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_lstroke && symbol <= IBUS_KEY_sacute)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_lstroke - IBUS_KEY_Lstroke);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_scaron && symbol <= IBUS_KEY_zacute)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_scaron - IBUS_KEY_Scaron);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_zcaron && symbol <= IBUS_KEY_zabovedot)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_zcaron - IBUS_KEY_Zcaron);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Racute && symbol <= IBUS_KEY_Tcedilla)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_racute - IBUS_KEY_Racute);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_racute && symbol <= IBUS_KEY_tcedilla)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_racute - IBUS_KEY_Racute);
Packit Service 1d8f1c
      break;
Packit Service 1d8f1c
Packit Service 1d8f1c
    case 2: /* Latin 3 */
Packit Service 1d8f1c
      /* Assume the KeySym is a legal value (ignore discontinuities) */
Packit Service 1d8f1c
      if (symbol >= IBUS_KEY_Hstroke && symbol <= IBUS_KEY_Hcircumflex)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_hstroke - IBUS_KEY_Hstroke);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Gbreve && symbol <= IBUS_KEY_Jcircumflex)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_gbreve - IBUS_KEY_Gbreve);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_hstroke && symbol <= IBUS_KEY_hcircumflex)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_hstroke - IBUS_KEY_Hstroke);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_gbreve && symbol <= IBUS_KEY_jcircumflex)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_gbreve - IBUS_KEY_Gbreve);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Cabovedot && symbol <= IBUS_KEY_Scircumflex)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_cabovedot - IBUS_KEY_Cabovedot);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_cabovedot && symbol <= IBUS_KEY_scircumflex)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_cabovedot - IBUS_KEY_Cabovedot);
Packit Service 1d8f1c
      break;
Packit Service 1d8f1c
Packit Service 1d8f1c
    case 3: /* Latin 4 */
Packit Service 1d8f1c
      /* Assume the KeySym is a legal value (ignore discontinuities) */
Packit Service 1d8f1c
      if (symbol >= IBUS_KEY_Rcedilla && symbol <= IBUS_KEY_Tslash)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_rcedilla - IBUS_KEY_Rcedilla);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_rcedilla && symbol <= IBUS_KEY_tslash)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_rcedilla - IBUS_KEY_Rcedilla);
Packit Service 1d8f1c
      else if (symbol == IBUS_KEY_ENG)
Packit Service 1d8f1c
        xlower = IBUS_KEY_eng;
Packit Service 1d8f1c
      else if (symbol == IBUS_KEY_eng)
Packit Service 1d8f1c
        xupper = IBUS_KEY_ENG;
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Amacron && symbol <= IBUS_KEY_Umacron)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_amacron - IBUS_KEY_Amacron);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_amacron && symbol <= IBUS_KEY_umacron)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_amacron - IBUS_KEY_Amacron);
Packit Service 1d8f1c
      break;
Packit Service 1d8f1c
Packit Service 1d8f1c
    case 6: /* Cyrillic */
Packit Service 1d8f1c
      /* Assume the KeySym is a legal value (ignore discontinuities) */
Packit Service 1d8f1c
      if (symbol >= IBUS_KEY_Serbian_DJE && symbol <= IBUS_KEY_Serbian_DZE)
Packit Service 1d8f1c
        xlower -= (IBUS_KEY_Serbian_DJE - IBUS_KEY_Serbian_dje);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Serbian_dje && symbol <= IBUS_KEY_Serbian_dze)
Packit Service 1d8f1c
        xupper += (IBUS_KEY_Serbian_DJE - IBUS_KEY_Serbian_dje);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Cyrillic_YU && symbol <= IBUS_KEY_Cyrillic_HARDSIGN)
Packit Service 1d8f1c
        xlower -= (IBUS_KEY_Cyrillic_YU - IBUS_KEY_Cyrillic_yu);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Cyrillic_yu && symbol <= IBUS_KEY_Cyrillic_hardsign)
Packit Service 1d8f1c
        xupper += (IBUS_KEY_Cyrillic_YU - IBUS_KEY_Cyrillic_yu);
Packit Service 1d8f1c
      break;
Packit Service 1d8f1c
Packit Service 1d8f1c
    case 7: /* Greek */
Packit Service 1d8f1c
      /* Assume the KeySym is a legal value (ignore discontinuities) */
Packit Service 1d8f1c
      if (symbol >= IBUS_KEY_Greek_ALPHAaccent && symbol <= IBUS_KEY_Greek_OMEGAaccent)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_Greek_alphaaccent - IBUS_KEY_Greek_ALPHAaccent);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Greek_alphaaccent && symbol <= IBUS_KEY_Greek_omegaaccent &&
Packit Service 1d8f1c
               symbol != IBUS_KEY_Greek_iotaaccentdieresis &&
Packit Service 1d8f1c
               symbol != IBUS_KEY_Greek_upsilonaccentdieresis)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_Greek_alphaaccent - IBUS_KEY_Greek_ALPHAaccent);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Greek_ALPHA && symbol <= IBUS_KEY_Greek_OMEGA)
Packit Service 1d8f1c
        xlower += (IBUS_KEY_Greek_alpha - IBUS_KEY_Greek_ALPHA);
Packit Service 1d8f1c
      else if (symbol >= IBUS_KEY_Greek_alpha && symbol <= IBUS_KEY_Greek_omega &&
Packit Service 1d8f1c
               symbol != IBUS_KEY_Greek_finalsmallsigma)
Packit Service 1d8f1c
        xupper -= (IBUS_KEY_Greek_alpha - IBUS_KEY_Greek_ALPHA);
Packit Service 1d8f1c
      break;
Packit Service 1d8f1c
    }
Packit Service 1d8f1c
Packit Service 1d8f1c
  if (lower)
Packit Service 1d8f1c
    *lower = xlower;
Packit Service 1d8f1c
  if (upper)
Packit Service 1d8f1c
    *upper = xupper;
Packit Service 1d8f1c
}