ncursesw und der Datentyp cchar_t



  • Wenn man sich den Datentyp cchar_t anschaut, dann steht dazu in den ncurses man pages, dass er mehr als ein non spacing character enthalten darf. Weiß jemand, ob die fünf wchar_t, die man in der ncursesw Library gewählt irgend einer Definition aus Unicode entstammen, oder ist das eine mehr oder minder willkürlich gewählte Implementationsdefinition?

    Gibt es eine Möglichkeit auf einfache Art und Weise abzuleiten, ob ein Zeichen half oder full Size ist (sprich ob es ein klassisches ASCII Zeichen in einem Terminal belegt oder deren zwei)?



  • Wenn man sich den Datentyp cchar_t anschaut, dann steht dazu in den ncurses man pages, dass er mehr als ein non spacing character enthalten darf. Weiß jemand, ob die fünf wchar_t, die man in der ncursesw Library gewählt irgend einer Definition aus Unicode entstammen, oder ist das eine mehr oder minder willkürlich gewählte Implementationsdefinition?
    Gibt es eine Möglichkeit auf einfache Art und Weise abzuleiten, ob ein Zeichen half oder full Size ist (sprich ob es ein klassisches ASCII Zeichen in einem Terminal belegt oder deren zwei)?

    Die fünf wchar_t in cchar_t sind meines Wissens keine Unicode-Vorgabe, sondern eine Implementationsentscheidung von ncurses. Unicode schreibt nicht vor, wie viele Combining Characters eine Zelle maximal puffern muss. Entscheidend ist eher, dass ein Base Character zusammen mit seinen Nonspacing Marks dargestellt werden kann; die Begrenzung auf fünf ist also eine praktische interne Grenze.

    Für die Breite würde ich nicht selbst anhand der Unicode-Codepoints zwischen „half“ und „full“ unterscheiden. Dafür gibt es wcwidth() bzw. wcswidth(). wcwidth() liefert typischerweise 0 für Combining Characters, 1 für normale Zeichen und 2 für Wide Characters. Allerdings hängt das Ergebnis auch von Locale und Unicode-/Terminal-Unterstützung ab. Außerdem ist die tatsächliche Darstellung letztlich Sache des Terminals, weshalb wcwidth() nicht in jedem exotischen Fall exakt das Verhalten des Terminals vorhersagen kann.


Anmelden zum Antworten