LINUX.ORG.RU

uni-algo 0.8.0 - библиотека алгоритмов Unicode для C++

 , , ,


4

1

uni-algo - быстрая C++ (диалект C++17) header-only библиотека алгоритмов Unicode 15.0, лицензированная как MIT/Public Domain.


Изменения:

  • добавлена поддержка scripts и script extensions (UAX #24);
  • в реализацию сегментации текста добавлена поддержка курсора;
  • оптимизировано конвертирование строк ASCII в UTF;
  • в класс una::error добавлен una::error::code;
  • версии в una::version преобразованы в классы;
  • файл uni_algo/version.h больше не используется несколькими файлами;
  • переименование UNI_ALGO_DISABLE_SHRINK_TO_FIT в UNI_ALGO_NO_SHRINK_TO_FIT;
  • переименование UNI_ALGO_DISABLE_BREAK_GRAPHEME в UNI_ALGO_DISABLE_SEGMENT_GRAPHEME;
  • переименование UNI_ALGO_DISABLE_BREAK_WORD в UNI_ALGO_DISABLE_SEGMENT_WORD;
  • переименование функций поиска в find;
  • переименование класса una::search в una::found.

>>> Подробности

★★★★★

Проверено: cetjs2 ()
Последнее исправление: hobbit (всего исправлений: 2)

Из новости непонятно зачем оно нужно.

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

В simdutf есть только декодирование utf, валидация и конвертирование.

А в uni-algo ещё и свойства кодпойнтов, преобразование регистра, сегментация, нормализация и транслитерация некоторых алфавитов.

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

уни, пасс, актив… и еще 100500 гендеров

быстрая C++

А на Си еще быстрее бы была, потому что бесклассовое общество прогрессивнее… Ну а на ASS-емблер - и подавно, ведь ядерную войну переживут только одноклеточные. Хоть они с эволюционной точки зрения самые самые живучие, это их не делает лучшими, как и эта очередная сверхбыстрая чудо-библиотека не равно лучшая. Спасибо, что не на ржавом крабе…

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

И, конечно же, я ее буду использовать нигде. Я думаю стоит в новостях какие-нибудь утилиты рассматривать вместо узкоспециализорованных библиотек, лучшие из которых тупо ищутся через поиск с фильтрацией по звездам. Стоит, наверное, минимум фреймворки рассматривать, да и то не все, то что какие-нибудь новые pyramid или tornado вышли, ну или koa - интересно примерно никому.

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

Я думаю стоит в новостях какие-нибудь утилиты рассматривать

Классно! Когда начнёте?

тупо ищутся через поиск с фильтрацией по звездам

А утилиты не ищутся?

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

утилита хорошая есть topgrade

Которая на «ржавом крабе»? :)

обзор напишешь

Нет уж. Я пишу только о том, что сам использую или пробовал.

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

он !краб, а рак всепожирающий, который напару с вирусом go-сексуализма захватят мир. да я просто накинул о чем можно написать, учитывая весьма специфическую публику, которая состоит в основном из непогроммистов

uwuwuu
()
Последнее исправление: uwuwuu (всего исправлений: 1)
Ответ на: комментарий от zx_gamer

Вроде норм. Но зачем она нужна? Текстовый редактор писать?

Обрабатывать юникодные строки. В частности, даже просто проверить две строки на равенство - в ублюдочном юникоде задача нетривиальная. Нужна библиотека. Сейчас все таскают libicu, но libicu сама по себе тоже ублюдочная.

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

И, конечно же, я ее буду использовать нигде

Всем это интересно примерно никак

BydymTydym
()
Ответ на: комментарий от zx_gamer

std::string Вроде в большинстве GNU/Linux дистрибутивов unicode. Можно просто использовать operator==

Можно, но не всегда успешно: он для одинаковых по сути строк может выдать false. Если интересно, попробуй осознать что такое canonical equivalence и чем отличаются, например, nfd и nfc - https://unicode.org/reports/tr15/

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

Для любых операций с внутренностями контейнера (и для корректного не побайтового сравнения, в том числе), нужно уметь разбирать unicode строки. А там нюансов - заколебёшься. Нормализация, лигатуры, кодировка и ещё дофига нюансов.

SkyMaverick ★★★★★
()
Последнее исправление: SkyMaverick (всего исправлений: 1)
Ответ на: комментарий от SkyMaverick

Я у себя решил этот вопрос довольно-таки просто: использую в своих строках UTF-32. Для этого мне надо просто один раз преобразовать последовательность в UTF-32 или наоборот.

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

Ничего вы не решили. Надо брать либу и не выёживаться со своими костылями избавив себя от всей этой наркомании. А по юникоду плачет костёр.

kvpfs ★★
()

Посмотришь на погромистов, все такие умные из себя, но то X сервер запилят, то юникод, то пхп какой, и начинаешь сомневаться.

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

Пока это самое странное сообщение в этом треде. :)

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

Сочувствую. Но есть откровенное дерьмо вроде ICU, я такое и сам никогда не заюзаю, в такую крайность тоже не надо. Разбираться же самому в Юникодной ахинеи, читать его стандарты - мне жалко своего времени (у меня был такой опыт). Очень жаль, что юникод получился вот таким, с ним всегда будут проблемы в софте, никто его толком не понимает.

kvpfs ★★
()

Ну так когда ждать человеческие строки в плюсиках? Через пол-века сделают?

Xintrea ★★★★★
()
Последнее исправление: Xintrea (всего исправлений: 1)
Ответ на: комментарий от kvpfs

На самом деле, для большинства приложений достаточно просто уметь отличить один codepoint от другого (вспомним про то, что один codepoint в UTF-8 можно записать несколькими способами). Реже - уметь выполнять правильный collate в зависимости от локали и преобразование регистра. Ещё реже - поддерживать всякие хитрые диактрики и эмодзи.

В любом случае, работать с UTF-32 намного проще, чем с UTF-8 и UTF-16. Недостаток тут только один - потребление памяти в четыре раза увеличивается, т.к. вместо байта на code point надо хранить 4.

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

На самом деле, для большинства приложений достаточно просто уметь

Основное умение - отличать графемы друг от друга, а не кодпоинты. Это естественно и логично, мы не знаем чего там юзер будет на вход давать. Значит мы должны уметь анальные алгоритмы юникода (которые ещё и меняются), держать какие-то таблицы (которые так же меняются), которые классифицирует кодпоинты. А сравнение - вообще отдельный геморрой. Даром мне это удовольствие не нужно.

Если мы и ограничиваемся каким-то подмножеством, то это должно быть ASCII, единственное, что осталось чем-то адекватным и универсальным.

PS: я бы даже так сказал - Юникод окончательно закрепил что существует ASCII и какая-то хрень рядом на табуретке на птичьих правах. А это напрямую влияет на судьбу алфавитов в долгосроке, тренд задан.

kvpfs ★★
()
Последнее исправление: kvpfs (всего исправлений: 1)
Ответ на: комментарий от kvpfs

А какие живые альтернативы юникоду были? Нет, просто набор кодовых страниц не предлагать - даже в случаи с кириллицей это головняк был, а наш случай это еще далеко не самое страшное, что может произойти с человеком…

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