LINUX.ORG.RU

Ширина символа в терминале

 


0

1

Хеллоу ворлд!

Господа, достаточно ли одного первого символа юникодной последовательности для определения ширины символа? Т.е. корректно ли предположение, что в юникоде нет никаких модификаторов, которые могут изменить ширину символа? Пример (в функцию передаётся один символ, основа и модификаторы):

#include <wchar.h>
int usym_width(wchar_t *begin, wchar_t *last) {
    return wcwidth(*begin);
}

// или же стоит перебдеть невзирая на большую цену:
int usym_width(wchar_t *begin, wchar_t *last) {
    return wcswidth(begin, last-begin);
}

возможность передачи в [begin, last) нескольких символов исключена.

★★

Последнее исправление: kvpfs (всего исправлений: 1)

Т.е. корректно ли предположение, что в юникоде нет никаких модификаторов, которые могут изменить ширину символа?

Конечно же нет.

slovazap ★★★★★
()
Ответ на: комментарий от slovazap

Какой пример можно загуглить? Например есть некий \u1111 занимает на экранет два знакоместа, делаю последовательность \u1111\u2222 и она уже занимает 3 или 1 знакоместа. При этом \u2222 не самостоятельный символ, а модификатор (т.е. отдельно не используется и за символ не считается, общее количество символов на экране не изменяется).

kvpfs ★★
() автор топика

Наткнулся на искодники wcwidth() и wcswidth() - нет, нет никакого смысла вызывать wcswidth() для символа с его non-spacing модификаторами (в моём случае, когда границы символов известны), ширина которых безусловно равна нулю и они никак не влияют на spacing символы.

kvpfs ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.