Módulo:Road data/parser/hooks

Origem: Wikipédia, a enciclopédia livre.
local p = {}

local parserModuleName = "Module:Road data/parser" -- SANDBOX REFERENCE

function p.split(parameters, args)
    local route = tonumber(string.match(args.route, "%d+")) or 0
    if route < parameters.split then
        return parameters.below
    else
        return parameters.above
    end
end

function p.splitlen(parameters, args)
    local route = args.route
    if #route < parameters.split then
        return parameters.below
    else
        return parameters.above
    end
end

function p.between(parameters, args)
    local lower = parameters.lower
    local upper = parameters.upper
    local route = tonumber(string.match(args.route, "%d+")) or 0
    if route < lower or route >= upper then
        return parameters.no
    else
        return parameters.yes
    end
end

function p.mask(parameters, args)
    local baseParam = parameters.base
    local maskedParam = parameters.masked
    local maskModule = "Module:" .. parameters.mask
    local mask = mw.loadData(maskModule)
    args[maskedParam] = mask[args[baseParam]]
    return parameters.default
end

function p.padroute(parameters, args)
    local route = args.route
    local paddedLength = parameters.paddedLength
    args.paddedRoute = string.format("%0" .. tostring(paddedLength) .. "d", route)
    return parameters.default
end

function p.lowercase(parameters, args)
    local route = args.route
    args.lowercase = string.lower(route)
    return parameters.default
end

--[[
For the first element (pattern, action) in .actions such that
args[.base] begins with pattern, return action.
If no such element exists, return .default (nil if unspecified).
]]
function p.beginswith(parameters, args)
    local baseParam = parameters.base
    local actions = parameters.actions
    local arg = args[baseParam]
    for pattern,action in pairs(actions) do
        if mw.ustring.sub(arg, 1, mw.ustring.len(pattern)) == pattern then
            return action
        end
    end
    return parameters.default
end

--[[
For the first element (pattern, action) in .actions such that
require(Module:Road data/parser).parser(args, .entry, .path, .kind)
matches pattern as a regular expression, return action.
If no such element exists, return .default (nil if unspecified).

.path and .kind are optional.
]]
function p.match(parameters, args)
    local parserModule = require(parserModuleName)
    local parser = parserModule.parser

    local entry = parameters.entry
    local path = parameters.path
    local kind = parameters.kind
    local actions = parameters.actions
    local value = parser(args, entry, path, kind)
    for pattern,action in pairs(actions) do
        if mw.ustring.match(value, pattern) then
            return action
        end
    end
    return parameters.default
end

function p.iso3166Sub(parameters, args)
    local country = args.country
    local subParam = parameters.sub
    local subCode = args[subParam]

    local iso3166Module = require("Module:ISO 3166")
    args.iso3166Sub = iso3166Module.luaname{country, subCode}
    return parameters.default
end

return p