Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  gdk-keysyms-update.py

  Sprache: Python
 

#!/usr/bin/env python3

# Author  : Simos Xenitellis <simos at gnome dot org>.
# Author  : Bastien Nocera <hadess@hadess.net>
# Author  : Alberto Ruiz <aruiz@gnome.org>
# Version : 1.2
#
# Notes   : It downloads keysymdef.h from the Internet,
# Notes   : and creates an updated clutter-keysyms.h

import os
import sys
import re
from typing import TextIO, Iterable

import requests  # type: ignore[import-untyped]

KEYSYMDEF_URL = "https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/raw/master/include/X11/keysymdef.h"
XF86KEYSYM_URL = "https://gitlab.freedesktop.org/xorg/proto/xorgproto/-/raw/master/include/X11/XF86keysym.h"

HEADER = f"""/* GDK - The GIMP Drawing Kit
 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
 * Copyright (C) 2005200620072009 GNOME Foundation
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 */

/*
 * File auto-generated from script at:
 * https://gitlab.gnome.org/GNOME/gtk/-/raw/main/gdk/gdk-keysyms-update.py?ref_type=heads&inline=false
 *
 * using the input files:
 *  {KEYSYMDEF_URL}
 * and
 *  {XF86KEYSYM_URL}
 */

#pragma once

#if !defined (__GDK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gdk/gdk.h> can be included directly."
#endif

#include <glib.h>

G_BEGIN_DECLS
"""

FOOTER = f"""
G_END_DECLS"""

GDK_KEYSYMS_H = "gdkkeysyms.h"


def get_and_filter_header(
    url: str,
    prefix: str,
    output_file: TextIO,
    filter_out: Iterable[str] | None = None,
    replaces: dict[str, str] | None = None,
):
    """
    Fetches and processes a header file containing macro definitions, filtering
    and transforming entries based on the specified prefix, exclusions, and
    replacements.

    Args:
        url: The URL to fetch the file content from.
        prefix: The prefix to filter the macro definitions in the file.
        output_file: The file object where the filtered and transformed
                     definitions will be written.
        filter_out: An iterable producing macro names to exclude from
                    processing. Defaults to None.
        replaces: A dictionary mapping macro names to their replacements.
                  Defaults to None.
    """
    for line in requests.get(url, timeout=5).text.splitlines():
        if not line.startswith("#define " + prefix):
            continue

        keysymelements = line.split()
        if len(keysymelements) < 3:
            sys.exit(
                f"Internal error, no properly defined keysym entry: {line}",
            )

        if keysymelements[2].startswith("_EVDEVK("):
            value = int(keysymelements[2][8:-1], 0)
            value += 0x10081000  # _EVDEVK macro does this
            keysymelements[2] = hex(value)
        elif not keysymelements[2].startswith("0x"):
            sys.exit(
                f'Internal error, was expecting "0x*", found: {keysymelements[2]}',
            )

        if filter_out and keysymelements[1in filter_out:
            continue

        if replaces and keysymelements[1in replaces.keys():
            keysymelements[1] = replaces[keysymelements[1]]

        binding = re.sub(f"^{prefix}""GDK_KEY_", keysymelements[1])
        print(
            f"#define {binding} 0x{int(keysymelements[2], 0):03x}",
            file=output_file,
        )


if __name__ == "__main__":
    if os.path.exists(GDK_KEYSYMS_H):
        sys.exit(
            f"""There is already a {GDK_KEYSYMS_H} file in this directory. We are not overwriting it.
Please move it somewhere else in order to run this script.
Exiting...""",
        )

    with open(GDK_KEYSYMS_H, "x", encoding="utf8"as output_file:
        print(HEADER, file=output_file)

        get_and_filter_header(KEYSYMDEF_URL, "XK_", output_file)

        # Work-around https://bugs.freedesktop.org/show_bug.cgi?id=11193
        # XF86XK_Clear could end up a dupe of XK_Clear
        # XF86XK_Select could end up a dupe of XK_Select
        # Ignore XF86XK_Qu, XF86XK_Calculater is misspelled, and a dupe
        get_and_filter_header(
            XF86KEYSYM_URL,
            "XF86XK_",
            output_file,
            ("XF86XK_Q""XF86XK_Calculater""XF86XK_Break"),
            {
                "XF86XK_XF86BackForward""XF86XK_AudioForward",
                "XF86XK_Clear""XF86XK_WindowClear",
                "XF86XK_Select""XF86XK_SelectButton",
            },
        )

        print(FOOTER, file=output_file)

Messung V0.5 in Prozent
C=98 H=95 G=96

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet am  2026-07-02) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik