Piszę aplikację terminalową (konsolową), która powinna owijać dowolny tekst w Unicode.określają, czy znak Unicode jest pełnowartościowy czy o połowie szerokości w C++
Terminale zazwyczaj używają czcionki o stałej szerokości (stałej szerokości), więc aby zawinąć tekst, jest to tylko więcej niż zliczanie znaków i obserwowanie, czy słowo pasuje do linii, czy też nie, i stosownie do tego.
Problem polega na tym, że w tabeli Unicode występują znaki o pełnej szerokości, które zajmują szerokość 2 znaków w terminalu.
Zliczanie tych znaków spowoduje wyświetlenie 1 znaku Unicode, ale drukowany znak ma 2 znaki "normalne" (połowa szerokości), łamiąc procedurę owijania, ponieważ nie jest świadomy znaków, które zajmują dwa razy większą szerokość.
Jako przykład, jest to pełnej szerokości znaków (U + 3004, symbol JIS)
〄 12
To nie zajmuje całą szerokość 2 znaki tutaj chociaż jest sformatowane, ale nie używać dwa razy szerokość zachodniej postaci w terminalu.
Aby sobie z tym poradzić, muszę rozróżnić znaki o pełnej lub połówkowej szerokości, ale nie mogę znaleźć sposobu, aby to zrobić w C++. Czy naprawdę trzeba znać wszystkie znaki o pełnej szerokości w tabeli unicode, aby obejść problem?
Ważne http://www.icu-project.org/apiref/icu4c/uchar_8h.html#a3376f0d34bb23c54671859f1978b4226 i http://www.unicode.org/reports/tr11/ –
Dla których OS/platformy? –
Przepraszam, że to przegapiłem. System operacyjny to Linux. – Noice