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