LINUX.ORG.RU

История изменений

Исправление intelfx, (текущая версия) :

Посчитать codepoint-ы — это тоже хрень:

size_t utf8_strcodepoints (const char* ptr)
{
    size_t ret = 0;
    while (*ptr) {
        if (*ptr < 0x80 || *ptr > 0xBF)
            ++ret;
        ++ptr;
    }
    return ret;
}

Всё дело в том, что подсчёт количества codepoint-ов, подсчёт количества знакомест и подсчёт количества байт — задачи совершенно разные. При этом первая (если подумать) не имеет практического смысла, вторая не имеет смысла для немоноширинных шрифтов, а третья выполняется обычным strlen-ом.

Отсюда и вопрос: а чего он, собственно, хочет получить?

Исправление intelfx, :

Посчитать codepoint-ы — это тоже хрень:

size_t utf8_strcodepoints (const char* ptr)
{
    size_t ret = 0;
    while (*ptr) {
        if (*ptr < 0x80 || *ptr > 0xBF)
            ++ret;
        ++ptr;
    }
    return ret;
}

Всё дело в том, что подсчёт количества codepoint-ов, подсчёт количества знакомест и подсчёт количества байт — задачи совершенно разные.

Но, вообще говоря, первая задача не имеет практического смысла, вторая не имеет смысла для немоноширинных шрифтов, а третья выполняется обычным strlen-ом. Отсюда и вопрос: а чего он, собственно, хочет получить?

Исходная версия intelfx, :

Посчитать codepoint-ы — это тоже хрень:

size_t utf8_strcodepoints (const char* ptr)
{
    size_t ret = 0;
    while (*ptr) {
        if (*ptr < 0x80 || *ptr > 0xBF)
            ++ret;
        ++ptr;
    }
    return ret;
}

Всё дело в том, что подсчёт количества codepoint-ов, подсчёт количества знакомест и подсчёт количества байт — задачи совершенно разные.

Но, вообще говоря, первая задача не имеет практического смысла, вторая не имеет смысла для немоноширинных шрифтов, а третья выполняется обычным strlen-ом. Отсюда и вопрос: а чего он, собственно, хочет получить своим strlen'ом?