Module:Logoform



From Wikimedia Commons, the free media repository



Jump to navigation  Jump to search  

Lua

CodeDiscussionEditHistoryLinksLink count Subpages:DocumentationTestsResultsSandboxLive code All modules

global function "format"

is invoked from e.g. Created with/layout when

  1. analize logo: when it contains a dot, it cannot be a codepoint
    no further checks are performed whether is is a valid file name, e.g. "U+2861.svg";
    without a dot it is assumed to be a codepoint, as e.g. ⡡
    no further checks are performed whether is is a valid codepoint,
    but the notation U+ is converted to &#x... and the display becomes tooltipped
  2. analize iconsize: when it is missing, useful defaults are set: 33px for Unicode, 36x22px for files
    when it is specified, the absence/presence of the px dimension is verified
  3. either the file, or the codepoint is displayed

With other file names and no iconsize, no invocation occurs

Code

--  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

Retrieved from "https://commons.wikimedia.org/w/index.php?title=Module:Logoform&oldid=879366154"

Category: 
Modules for general use
 


Navigation menu


Personal tools  




English
Not logged in
Talk
Contributions
Create account
Log in
 


Namespaces  




Module
Discussion