Jump to content

Module:Road data/parser/hooks/sandbox

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Chinissai (talk | contribs) at 13:24, 18 April 2016 (Added match hook.). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}

-- Change the following to main module upon deployment.
local parserModuleName = "Module:Road data/parser/sandbox"

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

--[[
For the first element (pattern, action) in .actions such that
args[.base] begins with pattern, return action.
If no such element exists, return .default if specified, or nil.
]]
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 or nil
end

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

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

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

return p