Module:Road data/parser/hooks
| This module is rated as ready for general use. It has reached a mature state, is considered relatively stable and bug-free, and may be used wherever appropriate. It can be mentioned on help pages and other Wikipedia resources as an option for new users. To minimise server load and avoid disruptive output, improvements should be developed through sandbox testing rather than repeated trial-and-error editing. |
| This module is currently protected from editing. See the protection policy and protection log for more details. Please discuss any changes on the talk page; you may submit an edit request to ask an administrator to make an edit if it is uncontroversial or supported by consensus. You may also request that this page be unprotected. |
| This Lua module is used on approximately 20,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module includes hook functions that provide extra functionality to Module:Road data/parser and its associated string modules.
Basics
Each hook is simply a function stored in the p package table exported by this module. Each function accepts two arguments:
parameters: The table in the string module that references the hook. In this example, this argument would be the table stored in theshieldfield of the type table (from Module:Road data/strings/USA/KY):
KY["KY 1966"] = {
shield = {
hook = "split",
split = 100,
below = "Elongated circle %route%.svg",
above = "Circle sign %route%.svg"
},
link = KY.KY.link,
abbr = KY.KY.abbr
}
args: The arguments originally passed to the parser.
Hooks may modify the argument table by simply setting a new key as equal to a computed value. Modifying existing values is allowed, but discouraged.
The return value of a hook is an ordinary format string, which may be computed within the function or pulled from the parameters argument. Generally, if the hook does not compute the format string to be returned, the hook should return parameters.default, which should equal a format string.
Hooks
split
This hook determines the format string to be used by the parser based on whether the route number is above or below a particular number.
Parameters:
split: The number on which to split.below: The format string to use if the route number is belowsplit.above: The format string to use if the route number is equal to or abovesplit.
splitlen
This hook operates in a similar fashion to split, but tests the length of the route number instead of its value.
Parameters:
split: The length on which to split.below: The format string to use if the route number's length is belowsplit.above: The format string to use if the route number's length is equal to or abovesplit.
between
This hook determines the format string to be used by the parser based on whether the route number is between two given numbers.
Parameters:
lower: The lower limit of the test (inclusive).upper: The upper limit of the test (exclusive).yes: The format string to use if the route number is betweenlowerandupper.no: The format string to use if the route number is not betweenlowerandupper.
mask
This hook adds an argument to the args table based on the result of applying a supplied mask to a particular argument.
Parameters:
base: The argument to be masked.masked: The key used to store the mask result in theargstable.mask: The name of the module to be used as a mask, without the "Module:" prefix. The module must return a table which maps abaseargument to the value stored in themaskedfield ofargs.default: The format string to be processed by the parser. This string may reference the argument stored inargsby this hook.
padroute
This hook zero-pads the route number so that the route number has a particular number of digits.
Parameters:
paddedLength: The length to which the route number should be zero-padded.default: The format string to be processed by the parser. This string may reference the zero-padded route number as thepaddedRouteargument.
pagename
This hook is similar to running an {{[[Template:#ifeq|#ifeq]]}} to match the title of an article to a specified value in order to display certain content. Particularly useful for images with Fair-use rationales.
Parameters:
article: The title against which the page name is compared.iftrue: The result if article and the page name match.default: The result if article and the page name do not match. Defaults to''if not specified.
lowercase
This hook converts the route "number" to lowercase.
Parameters:
default: The format string to be processed by the parser. This string may reference the lowercased route number as thelowercaseargument.
startswith
This hook determines whether a particular argument starts with any of the given patterns, and returns the value associated with the matching pattern.
Parameters:
base: The argument to test.startPatterns: Key-value pairs of starting patterns and the values to return if a match is found.default: The value to return if no match is found.
local p = {}
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.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
-- Return a file name in the argument table based on the value of arg in that
-- table, or the default file name if an existent file name is not found in the
-- table.
function p.fileexists(parameters, args)
local pattern = "%%(%w+)%%"
local pageName = parameters[1] or parameters[args[parameters.arg or "route"]]
pageName = pageName and mw.text.trim(mw.ustring.gsub(pageName, pattern, args))
if pageName and mw.title.makeTitle("Media", pageName).fileExists then
return pageName
else
return parameters.default -- assumed to exist
end
end
return p