Регистронезависимый поиск в моде unified_inventory для Русского языка

Поскольку lua изначально не поддерживал UTF-8, то перевод между регистрами работает только для английского языка.

Чтобы поиск предметов в инвентаре работал во всех регистрах, нужно в поиске заменить вызов функции string.lower на кастомную функцию, поддерживающую русскую локаль ru_lower

  1. function ru_lower(text)
  2. local lenght = #text
  3. local out = ''
  4. local i = 1
  5. while i <= lenght do
  6. local sym = string.byte(string.sub(text, i, i))
  7. if sym < 128 or i == lenght then
  8. out = out .. string.sub(text, i, i)
  9. else
  10. local symNext = string.byte(string.sub(text, i+1, i+1))
  11. if sym ~= 208 or symNext < 144 or symNext > 175 then
  12. out = out .. string.sub(text, i, i+1)
  13. else
  14. local num = string.byte(string.sub(text, i+1, i+1)) + 32
  15. if num > 191 then
  16. out = out .. string.char(209) .. string.char(num-64)
  17. else
  18. out = out .. string.char(208) .. string.char(num)
  19. end
  20. end
  21. i = i + 1
  22. end
  23. i = i + 1
  24. end
  25. return string.lower(out)
  26. end

В данной функции не учтены случаи присутствия 3-х или 4-х байтных последовательностей UTF-8, поскольку это не вредит функционалу поиска.

Изображение

12:13
Нет комментариев. Ваш будет первым!
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.