lower() или как там?

Bene //

Участник
Автор темы
131
6
Версия MoonLoader
.026-beta
Вообщем, нужно чтобы я писал в imgui текст с маленькими буквами, а он выводил мне слово на любой раскладке
 
Решение

функция для русских символов:
Lua:
--Вырезал у космо

local russian_characters = {
    [168] = 'Ё', [184] = 'ё', [192] = 'А', [193] = 'Б', [194] = 'В', [195] = 'Г', [196] = 'Д',
    [197] = 'Е', [198] = 'Ж', [199] = 'З', [200] = 'И', [201] = 'Й', [202] = 'К', [203] = 'Л',
    [204] = 'М', [205] = 'Н', [206] = 'О', [207] = 'П', [208] = 'Р', [209] = 'С', [210] = 'Т',
    [211] = 'У', [212] = 'Ф', [213] = 'Х', [214] = 'Ц', [215] = 'Ч', [216] = 'Ш', [217] = 'Щ',
    [218] = 'Ъ', [219] = 'Ы', [220] = 'Ь', [221] = 'Э', [222] = 'Ю', [223] = 'Я', [224] = 'а',
    [225] = 'б', [226] = 'в', [227] = 'г', [228] = 'д', [229] = 'е', [230] = 'ж', [231] = 'з',
    [232] =...

sdfy

Известный
346
228

функция для русских символов:
Lua:
--Вырезал у космо

local russian_characters = {
    [168] = 'Ё', [184] = 'ё', [192] = 'А', [193] = 'Б', [194] = 'В', [195] = 'Г', [196] = 'Д',
    [197] = 'Е', [198] = 'Ж', [199] = 'З', [200] = 'И', [201] = 'Й', [202] = 'К', [203] = 'Л',
    [204] = 'М', [205] = 'Н', [206] = 'О', [207] = 'П', [208] = 'Р', [209] = 'С', [210] = 'Т',
    [211] = 'У', [212] = 'Ф', [213] = 'Х', [214] = 'Ц', [215] = 'Ч', [216] = 'Ш', [217] = 'Щ',
    [218] = 'Ъ', [219] = 'Ы', [220] = 'Ь', [221] = 'Э', [222] = 'Ю', [223] = 'Я', [224] = 'а',
    [225] = 'б', [226] = 'в', [227] = 'г', [228] = 'д', [229] = 'е', [230] = 'ж', [231] = 'з',
    [232] = 'и', [233] = 'й', [234] = 'к', [235] = 'л', [236] = 'м', [237] = 'н', [238] = 'о',
    [239] = 'п', [240] = 'р', [241] = 'с', [242] = 'т', [243] = 'у', [244] = 'ф', [245] = 'х',
    [246] = 'ц', [247] = 'ч', [248] = 'ш', [249] = 'щ', [250] = 'ъ', [251] = 'ы', [252] = 'ь',
    [253] = 'э', [254] = 'ю', [255] = 'я',
}
function string.rlower(s)
    s = s:lower()
    local strlen = s:len()
    if strlen == 0 then return s end
    s = s:lower()
    local output = ''
    for i = 1, strlen do
        local ch = s:byte(i)
        if ch >= 192 and ch <= 223 then -- upper russian characters
            output = output .. russian_characters[ch + 32]
        elseif ch == 168 then -- Ё
            output = output .. russian_characters[184]
        else
            output = output .. string.char(ch)
        end
    end
    return output
end

Если ты именно про раскладку, а не про регистр, то в функцию поиска добавь смену регистра. Можешь посмотреть как реализовано здесь https://www.blast.hk/threads/19148/
 

xColorized

Известный
1,114
493
Вообщем, нужно чтобы я писал в imgui текст с маленькими буквами, а он выводил мне слово на любой раскладке
Lua:
function stringToLower(s)
    for i = 192, 223 do
        s = s:gsub(_G.string.char(i), _G.string.char(i + 32))
    end
    s = s:gsub(_G.string.char(168), _G.string.char(184))
    return s:lower()
end


Lua:
if gps_state[0] then
    imgui.Begin('GPS Helper')          
    imgui.SetNextWindowPos(imgui.ImVec2(sx / 2, sy / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
    imgui.InputText(u8'Поиск', input, sizeof(input))
    for i = 1, #tbl do
        local t = u8:decode(str(input))
        if #t == 0 or #t > 0 and stringToLower(tbl[i]):find(stringToLower(t)) then
            if imgui.Button(u8(tbl[i])) then
                answer(tbl[i])
            end
        end
    end
end
- вырезка из одного тулса, который я делал для знакомого

tbl - таблица с ответами в GPS