मोड्युल:Csdcheck

विकिपिडिया, एक स्वतन्त्र विश्वकोशबाट
--
-- This module checks whether any of a given set of input criteria are valid CSD criteria.
-- It is also possible to specify pre-defined or custom sets of CSD criteria to check against.
--

local p = {}

function critMatch(s,test_values) -- returns true if s matches one of the table of test_values
    if type(test_values) == "table" then
        for n,value in ipairs(test_values) do
           if s == value then
               return true
           end
        end
    else
        error("the second parameter passed to critMatch() must be a table",2)
    end
end

function p.check(frame) -- the main CSD check function

    -- get arguments
    local args;
    if frame == mw.getCurrentFrame() then
        -- We're being called via #invoke. If the invoking template passed any args, use
        -- them. Otherwise, use the args that were passed into the template.
        args = frame:getParent().args;
        for k, v in pairs(frame.args) do
            args = frame.args;
            break
        end
    else
        -- We're being called from another module or from the debug console, so assume
        -- the args are passed in directly.
        args = frame;
    end

    -- define variables
    local input_values = {};
    local test_criteria = {};
    local all_criteria = { -- all valid CSD criteria
        "सा१" , "सा२" , "सा३" , "सा४" , "सा५" , "सा६" , "सा७" , "सा८" , "सा९" , "सा१०" , "सा११" , "सा१२" , "सा१३" , "सा१४" ,
        "ले१" , "ले२" , "ले३" , "ले५" , "ले७" , "ले९" , "ले१०" , "ले११",
        "फा१" , "फा२" , "फा३" , "फा४" , "फा५" , "फा६" , "फा७" , "फा८" , "फा९" , "फा१०" , "फा११" ,
        "श्रे१" , "श्रे२" ,
        "प्र१" , "प्र२" , "प्र३" , "प्र५" ,
        "अ२" , "अ३" , "अ४" ,
        "ढाँ२" , "ढाँ३" ,
        "पो१" , "पो२"
    };
    local tag_criteria = { -- all CSD criteria used by [[Template:Db-multiple]]
        "सा१" , "सा२" , "सा३" , "सा४" , "सा५" , "सा६" , "सा७" , "सा८" , "सा१०" , "सा११" , "सा१२" , "सा१३" , "सा१४" ,
        "ले१" , "ले२" , "ले३" , "ले५" , "ले७" , "ले९" , "ले१०" , "ले११",
        "फा१" , "फा२" , "फा३" , "फा७" , "फा८" , "फा९" , "फा१०" ,
        "श्रे१" ,
        "प्र१" , "प्र२" , "प्र३" , "प्र५" ,
        "अ२" , "अ३" , "अ४" ,
        "ढाँ२" ,
        "पो१" , "पो२"
    };
    local notice_criteria = { -- all CSD criteria used by [[Template:Db-notice-multiple]]
        "सा१" , "सा२" , "सा३" , "सा४" , "सा१०" , "सा११" , "सा१२" , "सा१३" , "सा१४" ,
        "ले१" , "ले२" , "ले३" , "ले५" , "ले७" , "ले९" , "ले१०" , "ले११",
        "फा१" , "फा२" , "फा३" , "फा७" , "फा९" , "फा१०" ,
        "श्रे१" ,
        "प्र३" , "प्र५" ,
        "अ२" , "अ३" , "अ४" ,
        "ढाँ२" ,
        "पो१" , "पो२"
    };

    -- build tables of input values and test criteria
    for k,v in pairs(args) do
        v = mw.ustring.upper(v);

        -- insert positional parameter values into input_values
        if type(k) == "number" then
            v = mw.ustring.gsub(v,"^%s*(.-)%s*$","%1"); -- strip whitespace from positional parameters
            table.insert(input_values,v)

        -- insert critn parameter values into test_criteria
        elseif mw.ustring.match(k,"^crit[1-9]%d*$") then
            if critMatch(v,all_criteria) then -- check to make sure the criteria are valid
                table.insert(test_criteria,v)
            end
        end
    end

    -- work out which set of CSD criteria to check against
    local criteria_set = {}
    if next(test_criteria) then -- if any test criteria are specified, use those regardless of the "set" parameter
        criteria_set = test_criteria;
    elseif args["set"] == "tag" then
        criteria_set = tag_criteria;
    elseif args["set"] == "notice" then
        criteria_set = notice_criteria;
    else
        criteria_set = all_criteria;
    end

    -- check the input values against the criteria set and output "yes" if there is a match
    for i,v in ipairs(input_values) do
        if critMatch(v,criteria_set) then
            return "yes"
        end
    end
end

return p