Jump to content

Module:Road data/parser/hooks/sandbox: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
m Missing variable.
m False should not be turned to nil.
Line 52: Line 52:
For the first element (pattern, action) in .actions such that
For the first element (pattern, action) in .actions such that
args[.base] begins with pattern, return action.
args[.base] begins with pattern, return action.
If no such element exists, return .default if specified, or nil.
If no such element exists, return .default (nil if unspecified).
]]
]]
function p.beginswith(parameters, args)
function p.beginswith(parameters, args)
Line 63: Line 63:
end
end
end
end
return parameters.default or nil
return parameters.default
end
end


Line 70: Line 70:
require(Module:Road data/parser).parser(args, .arg, .path, .kind)
require(Module:Road data/parser).parser(args, .arg, .path, .kind)
matches pattern as a regular expression, return action.
matches pattern as a regular expression, return action.
If no such element exists, return .default if specified, or nil.
If no such element exists, return .default (nil if unspecified).


.path and .kind are optional.
.path and .kind are optional.
Line 88: Line 88:
end
end
end
end
return parameters.default or nil
return parameters.default
end
end



Revision as of 14:09, 18 April 2016

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 (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, .arg, .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 arg = parameters.arg
	local path = parameters.path
	local kind = parameters.kind
	local actions = parameters.actions
	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
end

return p