Difference between revisions of "Module: Coa/core"
From A Wiki of Ice and Fire
Line 7: | Line 7: | ||
key = mw.ustring.lower(key) -- make lowercase | key = mw.ustring.lower(key) -- make lowercase | ||
local patterns = { | local patterns = { | ||
+ | "^%[%[file:", | ||
+ | "^%[%[image:", | ||
+ | "%|.*]]$", | ||
" of ", | " of ", | ||
" the ", | " the ", |
Revision as of 00:23, 23 November 2022
Documentation for this module may be created at Module:Coa/core/doc
local getArgs = require('Module:Arguments').getArgs
local data = require('Module:Coa/data')
local p = {}
local function find_key(key)
key = mw.ustring.lower(key) -- make lowercase
local patterns = {
"^%[%[file:",
"^%[%[image:",
"%|.*]]$",
" of ",
" the ",
"^house ",
"%.png$",
"%.svg$",
"%.jpe?g$",
}
for _, pattern in pairs(patterns) do -- remove some words
key = mw.ustring.gsub(key, pattern, " ")
end
key = mw.ustring.gsub(key, "[^a-z]", "") -- remove all non-letter characters
return key
end
local function get(key)
house = data[find_key(key)]
if house == nil then
error('"' .. key .. '" is not a valid COA')
else
return house
end
end
local function coa(file, link, text, size, format)
if format == 'file' then
return file
elseif format == 'image' then
return '[[File:' .. file .. '|' .. size .. '|link=' .. link .. ']]'
elseif format == 'text' then
if link == nil or text == nil then
return '[[File:' .. file .. '|' .. size .. '|link=]]'
else
return '[[File:' .. file .. '|' .. size .. '|link=' .. link .. ']] [[' .. link .. '|' .. text .. ']]'
end
end
end
local function get_size(size)
local sizes = {
xs = '16x18px',
s = '20x22px',
m = '32x35px',
l = '100x110px',
xl = '250x275px',
infobox = '50x55px',
}
return sizes[size] or sizes['xs']
end
function p.main(frame)
local args = getArgs(frame)
local key = args[1]
if key == nil then
error("No key given")
end
local house = get(key)
local file = args['file'] or house['file'] or "None.svg"
local link = args['link'] or house['page'] or ""
local text = args['text'] or house['name'] or house['page']
local size = get_size(args['size'] or args[2])
local format = args['format']
return coa(file, link, text, size, format)
end
function p.list(frame)
local t = '{| class="wikitable"'
for key, house in pairs(data) do
t = t .. '\n|-\n| <code>' .. key .. '</code> || ' .. coa(
house['file'] or "None.svg",
house['page'],
house['name'] or house['page'],
'16x18px',
'text'
)
end
t = t .. '\n|}'
return t
end
function p.png_list(frame)
local t = '{| class="wikitable"'
for key, house in pairs(data) do
local file = house['file'] or "None.svg"
if mw.ustring.match(file, "%.svg$") == nil then
t = t .. '\n|-\n| <code>' .. key .. '</code> || ' .. coa(
file,
":File:" .. file,
file,
'100x110px',
'text'
)
end
end
t = t .. '\n|}'
return t
end
return p