«Виселица»: правлю баги
Игрушка «Виселица» для «Флиппера Зеро», которую мы как-то написали с дочкой, давно перешла из стадии весёлой разработки в стадию унылой поддержки — пользователи потихоньку находят баги, я правлю. Не самая моя любимая стадия, но один баг повеселил.
Один из пользователей пожаловался, что слова с русской буквой «Р» отображаются иногда как-то неадекватно — крайние буквы как будто «срезаются». Выкинув из словаря всё, кроме слов, начинающихся или кончающихся на эту букву, я и сам убедился в наличии этого странного эффекта.
Проблема оказалось в сочетании того как я кодирую символы русских слов и следующей строки кода:
furi_string_trim(line);
Для экономии места и производительности словарь у меня хранится в кодировке UCS-2 с выкинутыми кодами 0x04, из-за чего русская буква «Р» (с кодом 0x0420) записывается как 0x20, а это код пробела.
Вызов furi_string_trim мне нужен, чтобы срезать перевод строки, после её считывания. Только я не учёл, что срезаются там все пробельные символы, включая урезанную до одного байта букву «Р».
В общем, создал себе проблем на ровном месте. Надо было хранить буквы как есть и не выпендриваться. Впрочем, баг правится просто:
furi_string_trim(line, "\n");