Documentation for this module may be created at Module:Link/doc
local p = {}
local namespaces = {
'',
'Core',
'Keyword',
'Category',
'Condition',
'Damage',
'Drain',
'Property',
'Ability',
}
local upperCaseNS = {
'Ability',
'Class',
}
local upperCaseText = {
'Ethereal',
'Ethereal Realm',
'HP',
'MP',
'STR',
'INT',
'MOV',
'SNK',
'PER',
'SIZE',
'P',
'L',
'M',
'R',
'S',
'W',
'Material',
'Material Realm',
'GM',
'UB',
'AP',
'AV0',
'AV',
'BV',
'AC',
'DC',
'ES',
'Elder Sorcery',
}
function contains(tbl, value)
for _, v in ipairs(tbl) do
if v == value then
return true
end
end
return false
end
function findNamespace ( title )
for _, namespace in ipairs(namespaces) do
local fullTitle = namespace == '' and title or (namespace .. ':' .. title)
local page = mw.title.new(fullTitle)
if page and page.exists then
return namespace
end
end
return ''
end
function p.l ( frame )
local args = frame.args
local title = args[1]
for _, namespace in ipairs(namespaces) do
local fullTitle = namespace == '' and title or (namespace .. ':' .. title)
local page = mw.title.new(fullTitle)
if page and page.exists then
if namespace == 'Category' then
return ' :' .. fullTitle
else
return fullTitle
end
end
end
return title
end
function p.m ( frame )
local args = frame.args
local a1 = args['i']
local a2 = args['ii']
local a3 = args['iii']
if a1 == '0' then
a1 = nil
end
if a2 == '0' then
a2 = nil
end
if a3 == '0' then
a3 = nil
end
local alc = args['lc']
local auc = args['uc']
if alc == '0' then
alc = nil
end
if auc == '0' then
auc = nil
end
local ns = ''
local page = ''
local text = ''
local lc = true
local textPre = ''
local textPost = ''
if args['pre'] then
textPre = args['pre']
end
if args['post'] then
textPost = args['post']
end
if a3 then
ns = a1
page = a2
text = a3
elseif a2 then
if contains(namespaces, a1) then
ns = a1
page = a2
text = a2
else
ns = findNamespace(a1)
page = a1
text = a2
end
else
ns = findNamespace(a1)
page = a1
text = a1
end
if contains(upperCaseNS, ns) or contains(upperCaseText, text) then
lc = false
end
if auc then
lc = false
end
if alc then
lc = true
end
text = textPre .. text .. textPost
if lc then
text = frame:preprocess( string.lower(text) )
end
if ns == '' then
return frame:preprocess( '[[' .. page .. '|' .. text .. ']]' )
else
return frame:preprocess( '[[:' .. ns .. ':' .. page .. '|' .. text .. ']]' )
end
end
function p.n ( frame )
local args = frame.args
local ns = args[1]
for _, namespace in ipairs(namespaces) do
if ns == namespace then
return 'true'
end
end
return ''
end
return p