More actions
Created page with "-- 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..." |
(No difference)
|
Latest revision as of 04:45, 5 August 2025
Documentation for this module may be created at Module:Logoform/doc
-- 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