Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/LibreOffice/vcl/unx/generic/app/   (Office von Apache Version 25.8.3.2©)  Datei vom 5.10.2025 mit Größe 17 kB image not shown  

Quelle  keysymnames.cxx   Sprache: C

 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */


#include <o3tl/string_view.hxx>
#include <unx/saldisp.hxx>
#include <X11/keysym.h>
#include <sal/macros.h>

#if !defined (SunXK_Undo)
#define SunXK_Undo      0x0000FF65  // XK_Undo
#define SunXK_Again     0x0000FF66  // XK_Redo
#define SunXK_Find      0x0000FF68  // XK_Find
#define SunXK_Stop      0x0000FF69  // XK_Cancel
#define SunXK_Props     0x1005FF70
#define SunXK_Front     0x1005FF71
#define SunXK_Copy      0x1005FF72
#define SunXK_Open      0x1005FF73
#define SunXK_Paste     0x1005FF74
#define SunXK_Cut       0x1005FF75
#endif

#include <string.h>
#include <rtl/ustring.hxx>

namespace vcl_sal {

    namespace {

    struct KeysymNameReplacement
    {
        KeySym          aSymbol;
        const char*     pName;
    };

    struct KeyboardReplacements
    {
        const char*                     pLangName;
        const KeysymNameReplacement*    pReplacements;
        int                             nReplacements;
    };

    }

    // CAUTION CAUTION CAUTION
    // every string value in the replacements tables must be in UTF8
    // be careful with your editor !

    const struct KeysymNameReplacement aImplReplacements_English[] =
    {
        { XK_Control_L, "Ctrl" },
        { XK_Control_R, "Ctrl" },
        { XK_Escape, "Esc" },
        { XK_space, "Space" },
        { XK_Page_Up, "PgUp"},
        { XK_Page_Down, "PgDn"},
        { XK_grave, "`"}
    };

    const struct KeysymNameReplacement aImplReplacements_Turkish[] =
    {
        { XK_Control_L, "Ctrl" },
        { XK_Control_R, "Ctrl" },
        { XK_Right, "Sa\304\237" },
        { XK_Left, "Sol" },
        { XK_Up, "Yukar\304\261" },
        { XK_Down, "A\305\237a\304\237\304\261" },
        { XK_space, "Bo\305\237luk" }
    };

    const struct KeysymNameReplacement aImplReplacements_Russian[] =
    {
        { XK_Right, "\320\222\320\277\321\200\320\260\320\262\320\276" },
        { XK_Left, "\320\222\320\273\320\265\320\262\320\276" },
        { XK_Up, "\320\222\320\262\320\265\321\200\321\205" },
        { XK_Down, "\320\222\320\275\320\270\320\267" },
        { XK_space, "\320\237\321\200\320\276\320\261\320\265\320\273" }
    };

    const struct KeysymNameReplacement aImplReplacements_German[] =
    {
        { XK_Control_L, "Strg" },
        { XK_Control_R, "Strg" },
        { XK_Shift_L, "Umschalt" },
        { XK_Shift_R, "Umschalt" },
        { XK_Alt_L, "Alt" },
        { XK_Alt_R, "Alt Gr" },
        { XK_Page_Up, "Bild auf" },
        { XK_Page_Down, "Bild ab" },
        { XK_End, "Ende" },
        { XK_Home, "Pos 1" },
        { XK_Insert, "Einfg" },
        { XK_Delete, "Entf" },
        { XK_Escape, "Esc" },
        { XK_Right, "Rechts" },
        { XK_Left, "Links" },
        { XK_Up, "Oben" },
        { XK_Down, "Unten" },
        { XK_BackSpace, "R\303\274ckschritt" },
        { XK_Return, "Eingabe" },
        { XK_slash, "Schr\303\244gstrich" },
        { XK_space, "Leertaste" },
        { SunXK_Stop,  "Stop" },
        { SunXK_Again, "Wiederholen" },
        { SunXK_Props, "Eigenschaften" },
        { SunXK_Undo,  "Zur\303\274cknehmen" },
        { SunXK_Front, "Vordergrund" },
        { SunXK_Copy,  "Kopieren" },
        { SunXK_Open,  "\303\226ffnen" },
        { SunXK_Paste, "Einsetzen" },
        { SunXK_Find,  "Suchen" },
        { SunXK_Cut,   "Ausschneiden" },
    };

    const struct KeysymNameReplacement aImplReplacements_French[] =
    {
        { XK_Shift_L, "Maj" },
        { XK_Shift_R, "Maj" },
        { XK_Page_Up, "Pg. Pr\303\251c" },
        { XK_Page_Down, "Pg. Suiv" },
        { XK_End, "Fin" },
        { XK_Home, "Origine" },
        { XK_Insert, "Ins\303\251rer" },
        { XK_Delete, "Suppr" },
        { XK_Escape, "Esc" },
        { XK_Right, "Droite" },
        { XK_Left, "Gauche" },
        { XK_Up, "Haut" },
        { XK_Down, "Bas" },
        { XK_BackSpace, "Ret. Arr" },
        { XK_Return, "Retour" },
        { XK_space, "Espace" },
        { XK_KP_Enter, "Entr\303\251e" },
        { SunXK_Stop,  "Stop" },
        { SunXK_Again, "Encore" },
        { SunXK_Props, "Props" },
        { SunXK_Undo,  "Annuler" },
        { SunXK_Front, "Devant" },
        { SunXK_Copy,  "Copy" },
        { SunXK_Open,  "Ouvrir" },
        { SunXK_Paste, "Coller" },
        { SunXK_Find,  "Cher." },
        { SunXK_Cut,   "Couper" },
    };

    const struct KeysymNameReplacement aImplReplacements_Italian[] =
    {
        { XK_Shift_L, "Maiusc" },
        { XK_Shift_R, "Maiusc" },
        { XK_Page_Up, "PgSu" },
        { XK_Page_Down, "PgGiu" },
        { XK_End, "Fine" },
        { XK_Insert, "Ins" },
        { XK_Delete, "Canc" },
        { XK_Escape, "Esc" },
        { XK_Right, "A destra" },
        { XK_Left, "A sinistra" },
        { XK_Up, "Sposta verso l'alto" },
        { XK_Down, "Sposta verso il basso" },
        { XK_BackSpace, "Backspace" },
        { XK_Return, "Invio" },
        { XK_space, "Spazio" },
        { SunXK_Stop,  "Stop" },
        { SunXK_Again, "Ancora" },
        { SunXK_Props, "Propriet\303\240" },
        { SunXK_Undo,  "Annulla" },
        { SunXK_Front, "Davanti" },
        { SunXK_Copy,  "Copia" },
        { SunXK_Open,  "Apri" },
        { SunXK_Paste, "Incolla" },
        { SunXK_Find,  "Trova" },
        { SunXK_Cut,   "Taglia" },
    };

    const struct KeysymNameReplacement aImplReplacements_Dutch[] =
    {
        { XK_Page_Up, "PageUp" },
        { XK_Page_Down, "PageDown" },
        { XK_Escape, "Esc" },
        { XK_Right, "Rechts" },
        { XK_Left, "Links" },
        { XK_Up, "Boven" },
        { XK_Down, "Onder" },
        { XK_BackSpace, "Backspace" },
        { XK_Return, "Return" },
        { XK_space, "Spatiebalk" },
        { SunXK_Stop,  "Stop" },
        { SunXK_Again, "Again" },
        { SunXK_Props, "Props" },
        { SunXK_Undo,  "Undo" },
        { SunXK_Front, "Front" },
        { SunXK_Copy,  "Copy" },
        { SunXK_Open,  "Open" },
        { SunXK_Paste, "Paste" },
        { SunXK_Find,  "Find" },
        { SunXK_Cut,   "Cut" },
    };

    const struct KeysymNameReplacement aImplReplacements_Norwegian[] =
    {
        { XK_Shift_L, "Skift" },
        { XK_Shift_R, "Skift" },
        { XK_Page_Up, "PageUp" },
        { XK_Page_Down, "PageDown" },
        { XK_Escape, "Esc" },
        { XK_Right, "H\303\270yre" },
        { XK_Left, "Venstre" },
        { XK_Up, "Opp" },
        { XK_Down, "Ned" },
        { XK_BackSpace, "Tilbake" },
        { XK_Return, "Enter" },
        { SunXK_Stop,  "Avbryt" },
        { SunXK_Again, "Gjenta" },
        { SunXK_Props, "Egenskaper" },
        { SunXK_Undo,  "Angre" },
        { SunXK_Front, "Front" },
        { SunXK_Copy,  "Kopi" },
        { SunXK_Open,  "\303\205pne" },
        { SunXK_Paste, "Lim" },
        { SunXK_Find,  "S\303\270k" },
        { SunXK_Cut,   "Klipp" },
    };

    const struct KeysymNameReplacement aImplReplacements_Swedish[] =
    {
        { XK_Shift_L, "Skift" },
        { XK_Shift_R, "Skift" },
        { XK_Page_Up, "PageUp" },
        { XK_Page_Down, "PageDown" },
        { XK_Escape, "Esc" },
        { XK_Right, "H\303\266ger" },
        { XK_Left, "V\303\244nster" },
        { XK_Up, "Up" },
        { XK_Down, "Ned" },
        { XK_BackSpace, "Backsteg" },
        { XK_Return, "Retur" },
        { XK_space, "Blank" },
        { SunXK_Stop,  "Avbryt" },
        { SunXK_Again, "Upprepa" },
        { SunXK_Props, "Egenskaper" },
        { SunXK_Undo,  "\303\205ngra" },
        { SunXK_Front, "Fram" },
        { SunXK_Copy,  "Kopiera" },
        { SunXK_Open,  "\303\226ppna" },
        { SunXK_Paste, "Klistra in" },
        { SunXK_Find,  "S\303\266k" },
        { SunXK_Cut,   "Klipp ut" },
    };

    const struct KeysymNameReplacement aImplReplacements_Portuguese[] =
    {
        { XK_Page_Up, "PageUp" },
        { XK_Page_Down, "PageDown" },
        { XK_Escape, "Esc" },
        { XK_Right, "Direita" },
        { XK_Left, "Esquerda" },
        { XK_Up, "Acima" },
        { XK_Down, "Abaixo" },
        { XK_BackSpace, "Backspace" },
        { XK_Return, "Enter" },
        { XK_slash, "Barra" },
        { SunXK_Stop,  "Stop" },
        { SunXK_Again, "Again" },
        { SunXK_Props, "Props" },
        { SunXK_Undo,  "Undo" },
        { SunXK_Front, "Front" },
        { SunXK_Copy,  "Copy" },
        { SunXK_Open,  "Open" },
        { SunXK_Paste, "Paste" },
        { SunXK_Find,  "Find" },
        { SunXK_Cut,   "Cut" },
    };

    const struct KeysymNameReplacement aImplReplacements_Slovenian[] =
    {
        { XK_Control_L, "Krmilka" },
        { XK_Control_R, "Krmilka" },
        { XK_Shift_L, "Dvigalka" },
        { XK_Shift_R, "Dvigalka" },
        { XK_Alt_L, "Izmenjalka" },
        { XK_Alt_R, "Desna izmenjalka" },
        { XK_Page_Up, "Prej\305\241nja stranf" },
        { XK_Page_Down, "Naslednja stran" },
        { XK_End, "Konec" },
        { XK_Home, "Za\304\215etek" },
        { XK_Insert, "Vstavljalka" },
        { XK_Delete, "Brisalka" },
        { XK_Escape, "Ube\305\276nica" },
        { XK_Right, "Desno" },
        { XK_Left, "Levo" },
        { XK_Up, "Navzgor" },
        { XK_Down, "Navzdol" },
        { XK_BackSpace, "Vra\304\215alka" },
        { XK_Return, "Vna\305\241alka" },
        { XK_slash, "Po\305\241evnica" },
        { XK_space, "Preslednica" },
        { SunXK_Stop,  "Ustavi" },
        { SunXK_Again, "Ponovi" },
        { SunXK_Props, "Lastnosti" },
        { SunXK_Undo,  "Razveljavi" },
        { SunXK_Front, "Ospredje" },
        { SunXK_Copy,  "Kopiraj" },
        { SunXK_Open,  "Odpri" },
        { SunXK_Paste, "Prilepi" },
        { SunXK_Find,  "Najdi" },
        { SunXK_Cut,   "Izre\305\276i" },
    };

    const struct KeysymNameReplacement aImplReplacements_Spanish[] =
    {
        { XK_Shift_L, "May\303\272s" },
        { XK_Shift_R, "May\303\272s" },
        { XK_Page_Up, "ReP\303\241g" },
        { XK_Page_Down, "AvP\303\241g" },
        { XK_End, "Fin" },
        { XK_Home, "Inicio" },
        { XK_Delete, "Supr" },
        { XK_Escape, "Esc" },
        { XK_Right, "Derecha" },
        { XK_Left, "Izquierda" },
        { XK_Up, "Arriba" },
        { XK_Down, "Abajo" },
        { XK_BackSpace, "Ret" },
        { XK_Return, "Entrada" },
        { XK_space, "Espacio" },
        { XK_KP_Enter, "Intro" },
        { SunXK_Stop,  "Detener" },
        { SunXK_Again, "Repetir" },
        { SunXK_Props, "Props" },
        { SunXK_Undo,  "Anular" },
        { SunXK_Front, "Delante" },
        { SunXK_Copy,  "Copiar" },
        { SunXK_Open,  "Abrir" },
        { SunXK_Paste, "Pegar" },
        { SunXK_Find,  "Buscar" },
        { SunXK_Cut,   "Cortar" },
    };

    const struct KeysymNameReplacement aImplReplacements_Estonian[] =
    {
        { XK_Page_Up, "PgUp" },
        { XK_Page_Down, "PgDown" },
        { XK_End, "End" },
        { XK_Home, "Home" },
        { XK_Insert, "Ins" },
        { XK_Delete, "Del" },
        { XK_Escape, "Esc" },
        { XK_Right, "Nool paremale" },
        { XK_Left, "Nool vasakule" },
        { XK_Up, "Nool \303\274les" },
        { XK_Down, "Nool alla" },
        { XK_BackSpace, "Tagasil\303\274ke" },
        { XK_Return, "Enter" },
        { XK_slash, "Kaldkriips" },
        { XK_space, "T\303\274hik" },
        { XK_asterisk, "T\303\244rn" },
        { SunXK_Stop,  "Peata" },
        { SunXK_Again, "Korda" },
        { SunXK_Props, "Omadused" },
        { SunXK_Undo,  "V\303\265ta tagasi" },
        { SunXK_Front, "Esiplaanile" },
        { SunXK_Copy,  "Kopeeri" },
        { SunXK_Open,  "Ava" },
        { SunXK_Paste, "Aseta" },
        { SunXK_Find,  "Otsi" },
        { SunXK_Cut,   "L\303\265ika" },
    };

    const struct KeysymNameReplacement aImplReplacements_Catalan[] =
    {
        { XK_Shift_L, "Maj" },
        { XK_Shift_R, "Maj" },
        { XK_Page_Up, "Re P\303\240g" },
        { XK_Page_Down, "Av P\303\240g" },
        { XK_End, "Fi" },
        { XK_Home, "Inici" },
        { XK_Delete, "Supr" },
        { XK_Escape, "Esc" },
        { XK_Right, "Dreta" },
        { XK_Left, "Esquerra" },
        { XK_Up, "Amunt" },
        { XK_Down, "Avall" },
        { XK_BackSpace, "Retroc\303\251s" },
        { XK_Return, "Retorn" },
        { XK_space, "Espai" },
        { XK_KP_Enter, "Retorn" },
        { SunXK_Stop,  "Atura" },
        { SunXK_Again, "Repeteix" },
        { SunXK_Props, "Props" },
        { SunXK_Undo,  "Desf\303\251s" },
        { SunXK_Front, "Davant" },
        { SunXK_Copy,  "C\303\262pia" },
        { SunXK_Open,  "Obre" },
        { SunXK_Paste, "Enganxa" },
        { SunXK_Find,  "Cerca" },
        { SunXK_Cut,   "Retalla" },
    };

    const struct KeysymNameReplacement aImplReplacements_Lithuanian[] =
    {
        { XK_Control_L, "Vald" },
        { XK_Control_R, "Vald" },
        { XK_Shift_L, "Lyg2" },
        { XK_Shift_R, "Lyg2" },
        { XK_Alt_L, "Alt" },
        { XK_Alt_R, "Lyg3" },
        { XK_Page_Up, "Psl\342\206\221" },
        { XK_Page_Down, "Psl\342\206\223" },
        { XK_End, "Pab" },
        { XK_Home, "Prad" },
        { XK_Insert, "\304\256terpti" },
        { XK_Delete, "\305\240al" },
        { XK_Escape, "Gr" },
        { XK_Right, "De\305\241in\304\227n" },
        { XK_Left, "Kair\304\227n" },
        { XK_Up, "Auk\305\241tyn" },
        { XK_Down, "\305\275emyn" },
        { XK_BackSpace, "Naikinti" },
        { XK_Return, "\304\256vesti" },
        { XK_asterisk, "\305\275vaig\305\276dut\304\227" },
        { XK_slash, "De\305\241ininis br\305\253k\305\241nys" },
        { XK_space, "Tarpas" },
        { SunXK_Stop,  "Stabdyti" },
        { SunXK_Again, "Kartoti" },
        { SunXK_Props, "Savyb\304\227s" },
        { SunXK_Undo,  "At\305\241aukti" },
        { SunXK_Front, "Priekinis planas" },
        { SunXK_Copy,  "Kopijuoti" },
        { SunXK_Open,  "Atverti" },
        { SunXK_Paste, "\304\256d\304\227ti" },
        { SunXK_Find,  "Ie\305\241koti" },
        { SunXK_Cut,   "I\305\241kirpti" },
    };

    const struct KeysymNameReplacement aImplReplacements_Hungarian[] =
    {
        { XK_Right, "Jobbra" },
        { XK_Left, "Balra" },
        { XK_Up, "Fel" },
        { XK_Down, "Le" },
        { XK_Return, "Enter" },
        { XK_space, "Sz\303\263k\303\266z" },
        { XK_asterisk, "Csillag" },
        { XK_slash, "Oszt\303\241sjel" },
    };

    const struct KeyboardReplacements aKeyboards[] =
    {
        { "ca", aImplReplacements_Catalan, std::size(aImplReplacements_Catalan) },
        { "de", aImplReplacements_German, std::size(aImplReplacements_German) },
        { "sl", aImplReplacements_Slovenian, std::size(aImplReplacements_Slovenian) },
        { "es", aImplReplacements_Spanish, std::size(aImplReplacements_Spanish) },
        { "et", aImplReplacements_Estonian, std::size(aImplReplacements_Estonian) },
        { "fr", aImplReplacements_French, std::size(aImplReplacements_French) },
        { "hu", aImplReplacements_Hungarian, std::size(aImplReplacements_Hungarian) },
        { "it", aImplReplacements_Italian, std::size(aImplReplacements_Italian) },
        { "lt", aImplReplacements_Lithuanian, std::size(aImplReplacements_Lithuanian) },
        { "nl", aImplReplacements_Dutch, std::size(aImplReplacements_Dutch) },
        { "no", aImplReplacements_Norwegian, std::size(aImplReplacements_Norwegian) },
        { "pt", aImplReplacements_Portuguese, std::size(aImplReplacements_Portuguese) },
        { "ru", aImplReplacements_Russian, std::size(aImplReplacements_Russian) },
        { "sv", aImplReplacements_Swedish, std::size(aImplReplacements_Swedish) },
        { "tr", aImplReplacements_Turkish, std::size(aImplReplacements_Turkish) },
    };

    // translate keycodes, used within the displayed menu shortcuts
    OUString getKeysymReplacementName( std::u16string_view pLang, KeySym nSymbol )
    {
        for(const auto & rKeyboard : aKeyboards)
        {
            if( o3tl::equalsAscii( pLang, rKeyboard.pLangName ) )
            {
                const struct KeysymNameReplacement* pRepl = rKeyboard.pReplacements;
                forint m = rKeyboard.nReplacements ; m ; )
                {
                    if( nSymbol == pRepl[--m].aSymbol )
                        return OUString( pRepl[m].pName, strlen(pRepl[m].pName), RTL_TEXTENCODING_UTF8 );
                }
            }
        }

        // try english fallbacks
        const struct KeysymNameReplacement* pRepl = aImplReplacements_English;
        forint m = SAL_N_ELEMENTS(aImplReplacements_English); m ; )
        {
            if( nSymbol == pRepl[--m].aSymbol )
                return OUString( pRepl[m].pName, strlen(pRepl[m].pName), RTL_TEXTENCODING_UTF8 );
        }

        return OUString();
    }
}

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Messung V0.5
C=97 H=86 G=91

¤ Dauer der Verarbeitung: 0.6 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.