Modul:Road data/parser/hooks
local p = {}
local parserModuleName = "Module:Road data/parser" -- SANDBOX REFERENCE
function p.split(parameters, args)
local route = tonumber(args.route) 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(args.route) 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
return p