Zpět na projekty
TUIX v0.6Beta

Naposledy aktualizováno: 2026-08-14

Unicode, internované symboly a měření textu

TUIX v0.6 poskytuje kompletní Unicode textovou pipeline navrženou pro bezalokační renderování, iteraci po grafémových clusterech a přesné počítání šířky v buňkách terminálu. V terminálových rozhraních se bajtová délka, počet kódových bodů a vizuální šířka na obrazovce často liší; TUIX toto řeší nativně.

Architektura internovaných symbolů (TuixSymbol)

Každá buňka v bufferu `TuixPixel` odkazuje na neměnný identifikátor internovaného UTF-8 symbolu (`TuixSymbol`). Běžné ASCII znaky používají statické globální ukazatele na symboly, zatímco vícebajtové UTF-8 sekvence a grafémové clustery jsou internovány ve vláknově bezpečném fondu. To zcela eliminuje dynamické alokace na haldě během renderování a výpočtu diffů.

Segmentace grafémových clusterů a klasifikace kódových bodů

Klasifikační funkceKategorie UnicodeVliv na šířku zobrazení
tuix.tuix_codepoint_cell_width(cp)Standard CodepointVrací 0 (netisknutelné/kombinující), 1 (standardní latinka/symboly) nebo 2 (široké/CJK).
tuix.tuix_codepoint_is_combining(cp)Combining DiacriticsŠířka 0; připojuje se přímo k předchozímu klastru základního znaku.
tuix.tuix_codepoint_is_wide(cp)East Asian Wide / FullwidthŠířka 2; zabírá dva po sobě jdoucí sloupce obrazovky terminálu.
tuix.tuix_codepoint_is_emoji(cp)Emoji / PictographsŠířka 2; zpracovává emoji modifikátory, ZWJ sekvence a regionální indikátory.
tuix.tuix_codepoint_is_box(cp)Box-Drawing GlyphsŠířka 1; účastní se souvislého vykreslování rámečků a ohraničení.

128bajtový UTF-8 payload klávesnice

Struktury klávesových událostí ve v0.6 obsahují vyhrazený 128bajtový buffer `payload_utf8`. Při vkládání textu, psaní znaků s diakritikou nebo použití vstupních editorů (IME) jsou vícebajtové UTF-8 znaky zachyceny a předány vcelku do interaktivních vstupních widgetů.

from tuix.core import tuix

text = 'TUIX 🚀 (Český text)'.encode('utf-8')

# Calculate visible terminal cell columns (not byte length!)
visible_width = tuix.tuix_text_cell_count(text)
print(f'Byte length: {len(text)}, Visual width: {visible_width}')