Module:Road data/parser/hooks

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 = 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