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í funkce | Kategorie Unicode | Vliv na šířku zobrazení |
|---|---|---|
| tuix.tuix_codepoint_cell_width(cp) | Standard Codepoint | Vrací 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}')