Jump to content

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

From Wikipedia, the free encyclopedia
Content deleted Content added
m Belated sync with the live module - lowercase hook
m Corrected parser argument order.
 
Line 1: Line 1:
local p = {}
local p = {}


-- Change to "" upon deployment.
local parserModuleName = "Module:Road data/parser/sandbox" -- SANDBOX REFERENCE
local moduleSuffix = "/sandbox"

local parserModuleName = "Module:Road data/parser" .. moduleSuffix


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


.path and .kind are optional.
.kind and .path are optional.
]]
]]
function p.match(parameters, args)
function p.match(parameters, args)
Line 84: Line 87:


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

Latest revision as of 03:53, 20 May 2016

local p = {}

-- Change to "" upon deployment.
local moduleSuffix = "/sandbox"

local parserModuleName = "Module:Road data/parser" .. moduleSuffix

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, .kind, .path)
matches pattern as a regular expression, return action.
If no such element exists, return .default (nil if unspecified).

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

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

return p