Модуль:Сущность/data: различия между версиями

мНет описания правки
Отмена версии 315901, сделанной Pok (обсуждение)
Метка: отмена
 
(не показаны 4 промежуточные версии этого же участника)
Строка 239: Строка 239:


     return table.concat(out, "\n")
     return table.concat(out, "\n")
end
local function normalizeFilterKey(s)
    s = trim(s or "")
    s = s:gsub("%s*_%s*", "_")
    return s
end
end


Строка 245: Строка 251:
         return false
         return false
     end
     end
    callKey = normalizeFilterKey(callKey)
    compositeKey = normalizeFilterKey(compositeKey)
     return list[callKey] or list[compositeKey] or false
     return list[callKey] or list[compositeKey] or false
end
end
Строка 512: Строка 520:
     if not str or str == "" then return res end
     if not str or str == "" then return res end
     for item in string.gmatch(str, "[^,]+") do
     for item in string.gmatch(str, "[^,]+") do
         local s = trim(item)
         local s = normalizeFilterKey(item)
         if s ~= "" then
         if s ~= "" then
             local a, b = s:match("^([^_]+)_(.+)$")
             local a, b = s:match("^([^_]+)_(.+)$")
Строка 697: Строка 705:
end
end


local function each_entity_data(frame, id, onEntity, onMissing)
local function extract_whitelist_search_strings(keyFilter)
    if not keyFilter or not keyFilter.hasWhitelist then
        return nil
    end
 
    local strings = {}
    for sw, keys in pairs(keyFilter.whitelist) do
        if type(keys) == "table" then
            for key in pairs(keys) do
                strings[#strings + 1] = key
            end
        end
    end
 
    if #strings == 0 then
        return nil
    end
 
    return strings
end
 
local function content_matches_whitelist(content, searchStrings)
    if not searchStrings then
        return true
    end
    if not content then
        return false
    end
 
    for _, s in ipairs(searchStrings) do
        if string.find(content, s, 1, true) then
            return true
        end
    end
 
    return false
end
 
local function each_entity_data(frame, id, onEntity, onMissing, keyFilter)
     local componentWhitelist = frame.args.componentWhitelist or frame.args.componentwhitelist or ""
     local componentWhitelist = frame.args.componentWhitelist or frame.args.componentwhitelist or ""
     local componentBlacklist = frame.args.componentBlacklist or frame.args.componentblacklist or ""
     local componentBlacklist = frame.args.componentBlacklist or frame.args.componentblacklist or ""
Строка 720: Строка 766:
     local protoHasWhitelist = next(protoWhitelistSet) ~= nil
     local protoHasWhitelist = next(protoWhitelistSet) ~= nil
     local anyEntityWhitelist = compHasWhitelist or protoHasWhitelist
     local anyEntityWhitelist = compHasWhitelist or protoHasWhitelist
    local whitelistSearchStrings = extract_whitelist_search_strings(keyFilter)


     local function processEntity(kind, name, isStore)
     local function processEntity(kind, name, isStore)
Строка 733: Строка 781:
                 onMissing(kind, name, isStore, tplPath)
                 onMissing(kind, name, isStore, tplPath)
             end
             end
            return
        end
        if not content_matches_whitelist(content, whitelistSearchStrings) then
             return
             return
         end
         end
Строка 915: Строка 967:
             errors[#errors + 1] = build_missing_template_error(kind, name, isStore, tplPath)
             errors[#errors + 1] = build_missing_template_error(kind, name, isStore, tplPath)
         end
         end
     end)
     end, filter)
     if not ok then return "" end
     if not ok then return "" end