Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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) .. '&#xFE0F;'--[[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('%[', '&#91;')
				:gsub('%]', '&#93;')
				:gsub('%|', '&#123;')
		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('"', '&#34;'), '"' }
		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