|
|
| Line 1: |
Line 1: |
| -- Module for: Formatting Logo
| |
| local p = {}
| |
|
| |
|
| local concat = table.concat
| |
| local split = mw.text.split
| |
| local trim = mw.text.trim
| |
| local upper = mw.ustring.upper
| |
| local sub = mw.ustring.sub
| |
|
| |
| local function ucfirst(s)
| |
| return upper(sub(s, 1, 1)) .. sub(s, 2)
| |
| end
| |
|
| |
| function p.format(frame)
| |
| local gpar = frame.args -- global
| |
|
| |
| local fname = ucfirst(trim(gpar[1] or ''))
| |
| if fname == '' then return '' end -- if file name is "unspecified"
| |
|
| |
| local size = trim(gpar[2] or '') -- or '0' for "unspecified"
| |
| if size:sub(-2) == 'px' then size = size:sub(1, -3) end -- discard 'px' unit if present
| |
| size = split(size, 'x') -- {width, height} or {height}
| |
| size = size[2] and size[2] or size[1] -- keep only the specified height (in px)
| |
|
| |
| local style = trim(gpar[3] or '') -- or '-' for "unspecified"
| |
| if style == '-' then style = '' end
| |
|
| |
| local title = trim(gpar[4] or '') -- or '' for "unspecified"
| |
| local what = split(fname, '.', true--[[plain, not regexp]]) --[[detect a filename extension]]
| |
| --[[if there's a non-empty part before a supported extension, with 1 to 4 characters: 'jpg', 'jpeg', 'gif', 'png', 'svg', 'webp', 'djvu', 'tif', 'tiff'...]]
| |
| if #what > 1 and #(what[#what]) > 0 and #(what[#what]) < 5 then
| |
| if title == '' then
| |
| title = concat(what, '.', 1, -2):gsub('_', ' ') --[[default title from fname without this extension, underscores replaced by spaces]]
| |
| end
| |
| what = 'F' -- displaying a file
| |
| if size == '' or size == '0' then
| |
| size = '36' -- default file size (in px)
| |
| end
| |
| elseif fname:sub(1, 2) == 'U+' or fname:sub(1, 2) == '&#' then
| |
| what = 'U' -- displaying an Unicode code point instead of a file
| |
| if size == '' or size == '0' then
| |
| size = '15' -- Unicode default font-size (in px)
| |
| end
| |
| if title == '' then
| |
| title = fname--[[default title]]
| |
| end
| |
| title = trim(title
| |
| :gsub('U%+([0-9A-Fa-f]+) ?', function(x) return 'U+' .. upper(x) .. ' ' end)
| |
| :gsub('&#([0-9A-Fa-f]+);?', function(x) return 'U+' .. upper(x) .. ' ' end))
| |
| fname = fname
| |
| :gsub('&#([0-9A-Fa-f]+);?', function(x) return '&#x' .. upper(x) .. ';' end)
| |
| :gsub('U%+([0-9A-Fa-f]+) ?', function(x) return '&#x' .. upper(x) .. ';' end) .. '️'--[[Emoji-style variation selector 16]]
| |
| end
| |
|
| |
| if what == 'F' then -- displaying a file
| |
| if style ~= '' then
| |
| style = '|' .. style
| |
| end
| |
| if title ~= '' then
| |
| title = '|' .. title
| |
| :gsub('%[', '[')
| |
| :gsub('%]', ']')
| |
| :gsub('%|', '{')
| |
| end
| |
| return concat{ '[[File:', fname, '|', size, 'x22px', style--[[allow linking]], title, ']]' }
| |
| else -- displaying an Unicode code point
| |
| if title ~= '' then
| |
| title = concat{ ' title="', title:gsub('"', '"'), '"' }
| |
| end
| |
| return concat{ '<div style="display:inline-block;position:relative;font-size:', size, 'px;line-height:22px;vertical-align:middle;top:-1px', style, '"', title, '>', fname, '</div>' }
| |
| end
| |
| end -- function format
| |
|
| |
| return p
| |