모듈:Road data/parser/hooks
이 문서는 번역된 지 얼마 지나지 않은 문서로, 검토와 교정이 필요합니다. (원문: en:Module:Road data/parser/hooks/doc) 내용을 수정, 보완하여 더 나은 문서를 만들어 주세요. 의견이 있으시다면 토론 문서에 남겨주시고 문서 역사도 참고하시기 바랍니다. |
이 모듈에는 모듈:Road data/parser 및 관련 문자열 모듈에 추가 기능을 제공하는 후크 기능이 포함되어 있습니다.
기본[편집]
각 후크는 이 모듈에서 내보낸 p
패키지 테이블에 저장된 함수입니다. 각 함수는 두 개의 인수를 수용합니다.:
parameters
: 후크를 참조하는 문자열 모듈의 테이블입니다. 이 예시에서 이 인수는 유형 테이블의shield
필드에 저장된 테이블입니다.(모듈: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
: 이 인수는 원래 구문 분석에 전달됩니다.
후크는 단순히 계산된 값과 동일한 새 키를 설정함으로써 인수 테이블를 수정할 수 있습니다. 기존 값을 수정할 수는 있지만 권장하지 않습니다.
후크의 반환 값은 일반적인 형식 문자열로, 함수 내에서 계산하거나 parameters
인수에서 가져올 수 있습니다. 일반적으로 후크가 반환할 형식 문자열을 계산하지 않을 경우, 후크는 parameters.default
를 반환해야 하며, 이는 형식 문자열과 같아야 합니다.
후크[편집]
split
[편집]
이 후크는 노선 번호가 특정 번호보다 위인지 아래인지에 따라 구문 분석이 사용할 형식 문자열을 결정합니다.
매개변수:
split
: 분할할 번호.below
: 노선 번호가split
이하인 경우 사용할 형식 문자열.above
: 노선 번호가split
이상인 경우 사용할 형식 문자열.
splitlen
[편집]
이 고리는 split
와 유사한 방식으로 작동하지만, 지정 값 대신 노선 번호의 길이를 검사합니다.
매개변수:
split
: 분할할 길이.below
: 노선 번호의 길이가split
이하인 경우 사용할 형식 문자열.above
: 노선 번호의 길이가split
이상인 경우 사용할 형식 문자열.
between
[편집]
이 후크는 노선 번호가 두개의 지정된 번호 사이에 있는지 여부에 따라 구문 분석이 사용할 형식 문자열을 결정합니다.
매개변수:
lower
: 시험의 하위(포함).upper
: 시험의 상위(제외).yes
: 노선 번호가lower
와upper
사이인 경우 사용할 형식 문자열.no
: 노선 번호가lower
와upper
사이에 있지 않은 경우 사용할 형식 문자열.
mask
[편집]
이 후크는 제공된 마스크를 특정 인수에 적용한 결과에 따라 args
테이블에 인수를 추가합니다.
매개변수:
base
: 마스크될 인수.masked
: 마스크 결과를args
테이블에 저장하는 데 사용되는 키입니다.mask
: "Module:" 접두사가 없이 마스크로 사용할 모듈의 이름. 모듈은base
인수를args
의masked
필드에 저장된 값에 매핑하는 테이블을 반환해야 합니다.default
: 구문 분석이 처리할 형식 문자열. 이 문자열은 이 후크에 의해 인수에 저장된 인수를 참조 할 수 있습니다
padroute
[편집]
이 후크는 노선 번호를 0으로 표시하여 노선 번호가 특정 자릿수를 갖도록 합니다.
매개변수:
paddedLength
: 노선 번호를 0으로 채워야하는 길이.default
: 구문 분석이 처리할 형식 문자열. 이 문자열은 0으로 채워진 노선 번호를paddedRoute
인수로 참조할 수 있습니다.
lowercase
[편집]
이 후크는 노선"number(번호)"를 소문자로 변환합니다.
매개변수:
default
: 구문 분석이 처리할 형식 문자열. 이 문자열은 하단 구획된 소문자 노선 번호를lowercase
인수로 참조할 수 있습니다.
startswith
[편집]
이 후크는 특정 인수가 지정된 패턴 중 하나에서 시작하는지 여부를 결정하고 일치하는 패턴과 관련된 값을 반환합니다.
매개변수:
base
: 시험할 인수.startPatterns
: 시작 패턴의 키값 쌍과 일치 항목이 발견될 경우 반환할 값.default
: 일치하는 항목이 없는 경우 반환할 값.
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 < 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, .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