Модуль:Meta Sprite: различия между версиями

мНет описания правки
мНет описания правки
 
(не показано 9 промежуточных версий этого же участника)
Строка 3: Строка 3:


local p = {}
local p = {}
-- Функция для разделения строки по разделителю
local function split(str, delimiter)
    local result = {}
    for token in string.gmatch(str, "([^" .. delimiter .. "]+)") do
        table.insert(result, token)
    end
    return result
end


function p.main(frame)
function p.main(frame)
     local mode = frame.args[1] -- Режим
     local mode = frame.args[1] -- Режим
     local path = frame.args[2] -- Путь
    local filePath = require('Module:FilePath')
     local path = filePath.getOthersPath({ args = { frame.args[2] } }) -- Входной путь


     if not mode or not path then
     if not mode or not path then
Строка 21: Строка 13:
     end
     end


    -- Поиск точного совпадение
     local entry = nil
     local entry = data[path]


     -- Если не найдено, ищем по последним трём сегментам пути
     -- Ищем среди всех ключей JSON по полному совпадению суффикса
     if not entry then
     for key, value in pairs(data) do
         local segments = split(path, "/")
         if key:sub(-#path) == path then
        local count = #segments
             entry = value
        local suffix
             break
        if count >= 3 then
             suffix = table.concat({ segments[count-2], segments[count-1], segments[count] }, "/")
        else
             suffix = path
         end
         end
    end


        -- Ищем среди всех ключей, заканчивающихся на полученный суффикс
    -- Если ничего не найдено
        for key, value in pairs(data) do
    if not entry then
            if key:sub(-#suffix) == suffix then
        return ""
                entry = value
                break
            end
        end
 
        if not entry then
            return ""
        end
     end
     end