Jump to content

Wikipedia:Comparable Lua functions to wikitext

From Wikipedia, the free encyclopedia

This page provides a comparative reference of Lua functions and equivalent wikitext parser functions and magic words. It may be particularly helpful to editors transitioning from wikitext to Lua scripting within the Scribunto extension on MediaWiki.

It is somewhat outdated for newer wikitext parser function capabilities.

Parser functions

[edit]
WikitextLua
{{#if:x |not empty |empty}}
if x then
    'not empty'
else
    'empty'
end
{{#ifeq:x |y |identical |different}}
if x == y then
    'identical'
else
    'different'
end
{{#iferror:function |bad |good}}
 
if tostring(mw.getCurrentFrame():preprocess('function')):find('<strong class="error"') then
    'bad'
else
    'good'
end
{{#ifexpr:1+2=3 |true|false}}
if 1 + 2 == 3 then
    'true'
else
    'false'
end
[Expensive]
{{#ifexist:namespace:title |exists |doesn't exist}}
[Expensive]
if mw.title.new('title', 'namespace').exists == true then
    "exists"
else
    "doesn't exist"
end
{{#rel2abs:path |basepath}}
{{#switch:{{{1}}} |foo=Foo |Bar}}
local cases = {
    default = "Bar",
    foo = "Foo",
}

local pframe = mw.getCurrentFrame():getParent()
local arg = pframe.args[1]
cases[arg] or cases["default"]
{{#time:format |timestamp}}
mw.getContentLanguage():formatDate('format', 'timestamp')
{{#timel:format |timestamp}}
mw.getContentLanguage():formatDate('format', 'timestamp', 1)
{{#titleparts:pagename |number of segments to return |first segment to return}}

Math

[edit]

Unlike in wikicode, Lua does not use functions like #ifexpr and #expr. Add the Lua operators and functions straight into your module. See mw:Help:Calculation for details on how #expr and mw.ext.ParserFunctions.expr() evaluates expressions.

Grouping
WikicodeLua
()()
Numbers
WikicodeLua
1234.51234.5
2e32e3
pimath.pi
emath.exp(1)
2+22+2
2-12-1
Unary
WikicodeLua
notnot
ceil1.2math.ceil(1.2)
trunc
floor1.2math.floor(1.2)
abs-2math.abs(-2)
exp43math.exp(43)
ln2math.log(2)
cos0.1math.cos(0.1)
tan0.1math.tan(0.1)
acos0.1math.acos(0.1)
asin0.1math.asin(0.1)
atan0.1math.atan(0.1)
Binary
WikicodeLua
2^32^3
2*32*3
2/3
2div3
2/3
30mod730%7
+22
-2-2
Logic
WikicodeData typeLuaData type
3.0=3Integer (0 or 1)3.0==3Boolean (true or false)
3!=4
3<>4
Integer3~=4Boolean
4>3Integer4>3Boolean
4>=3Integer4>=3Boolean
3<=4Integer3<=4Boolean
3<=4Integer3<=4Boolean
andIntegerandBoolean
orIntegerorBoolean

Magic words

[edit]

Date and time

[edit]
WikicodeLua
{{CURRENTYEAR}}
mw.getContentLanguage():formatDate("Y")
or
os.date("!%Y")
{{CURRENTMONTH}}
{{CURRENTMONTH2}}
mw.getContentLanguage():formatDate("m")
or
os.date("!%m")
{{CURRENTMONTH1}}
mw.getContentLanguage():formatDate("n")
or
("%d"):format(os.date("!%m"))
{{CURRENTMONTHNAME}}
mw.getContentLanguage():formatDate("F")
or (if the wiki's language is set to English):
os.date("!%B")
{{CURRENTMONTHNAMEGEN}}
mw.getContentLanguage():formatDate("xg")
or (if the wiki's language is set to English):
os.date("!%B")
{{CURRENTMONTHABBREV}}
mw.getContentLanguage():formatDate("M")
or (if the wiki's language is set to English):
os.date("!%b")
{{CURRENTDAY}}
mw.getContentLanguage():formatDate("j")
or
("%d"):format(os.date("!%d"))
{{CURRENTDAY2}}
mw.getContentLanguage():formatDate("d")
or
os.date("!%d")
{{CURRENTDOW}}
mw.getContentLanguage():formatDate("w")
or
os.date("!%w")
{{CURRENTDAYNAME}}
mw.getContentLanguage():formatDate("l")
or (if the wiki's language is set to English):
os.date("!%A")
{{CURRENTTIME}}
mw.getContentLanguage():formatDate("H:i")
or
os.date("!%R")
{{CURRENTHOUR}}
mw.getContentLanguage():formatDate("H")
or
os.date("!%H")
{{CURRENTWEEK}}
("%d"):format(mw.getContentLanguage():formatDate("W"))
or
("%d"):format(os.date("!%V"))
{{CURRENTTIMESTAMP}}
mw.getContentLanguage():formatDate("YmdHis")
or
os.date("!%Y%m%d%H%M%S")
{{LOCALYEAR}}
mw.getContentLanguage():formatDate("Y", nil, true)
or
os.date("%Y")
{{LOCALMONTH}}
{{LOCALMONTH2}}
mw.getContentLanguage():formatDate("m", nil, true)
or
os.date("%m")
{{LOCALMONTH1}}
mw.getContentLanguage():formatDate("n", nil, true)
or
("%d"):format(os.date("%m"))
{{LOCALMONTHNAME}}
mw.getContentLanguage():formatDate("F", nil, true)
or (if the wiki's language is set to English):
os.date("%B")
{{LOCALMONTHNAMEGEN}}
mw.getContentLanguage():formatDate("xg", nil, true)
or (if the wiki's language is set to English):
os.date("%B")
{{LOCALMONTHABBREV}}
mw.getContentLanguage():formatDate("M", nil, true)
or (if the wiki's language is set to English):
os.date("%b")
{{LOCALDAY}}
mw.getContentLanguage():formatDate("j", nil, true)
or
("%d"):format(os.date("%d"))
{{LOCALDAY2}}
mw.getContentLanguage():formatDate("d", nil, true)
or
os.date("%d")
{{LOCALDOW}}
mw.getContentLanguage():formatDate("w", nil, true)
or
os.date("%w")
{{LOCALDAYNAME}}
mw.getContentLanguage():formatDate("l", nil, true)
or (if the wiki's language is set to English):
os.date("%A")
{{LOCALTIME}}
mw.getContentLanguage():formatDate("H:i", nil, true)
or
os.date("%R")
{{LOCALHOUR}}
mw.getContentLanguage():formatDate("H", nil, true)
or
os.date("%H")
{{LOCALWEEK}}
("%d"):format(mw.getContentLanguage():formatDate("W", nil, true))
or
("%d"):format(os.date("%V"))
{{LOCALTIMESTAMP}}
mw.getContentLanguage():formatDate("YmdHis", nil, true)
or
os.date("%Y%m%d%H%M%S")

Technical metadata

[edit]
WikicodeLua
{{SITENAME}}
mw.site.siteName
{{SERVER}}
mw.site.server
{{SERVERNAME}}
{{DIRMARK}}
mw.language.getContentLanguage():getDirMark()
{{SCRIPTPATH}}
mw.site.scriptPath
{{STYLEPATH}}
mw.site.stylePath
{{CURRENTVERSION}}
mw.site.currentVersion
{{CONTENTLANGUAGE}}
mw.getContentLanguage():getCode()
{{PAGEID}}
mw.title.getCurrentTitle().id
{{PAGESIZE:pagename}}
{{PAGESIZE:pagename|R}}
mw.getContentLanguage():formatNum(mw.title.new(pagename):getContent():len())
mw.title.new(pagename):getContent():len()
{{PROTECTIONLEVEL:edit}}
[Expensive]
{{PROTECTIONLEVEL:action|pagename}}
table.concat(mw.title.getCurrentTitle().protectionLevels["edit"])
[Expensive]
table.concat(mw.title.new(pagename).protectionLevels[action])
[Expensive]
{{CASCADINGSOURCES}}
{{CASCADINGSOURCES:pagename}}
[Expensive]
table.concat(mw.title.getCurrentTitle().cascadingProtection.sources, "|")
table.concat(mw.title.new(pagename).cascadingProtection.sources, "|")
{{REVISIONID}}
{{REVISIONDAY}}
{{REVISIONDAY2}}
{{REVISIONMONTH}}
{{REVISIONMONTH1}}
{{REVISIONYEAR}}
{{REVISIONTIMESTAMP}}
{{REVISIONUSER}}
{{DISPLAYTITLE:title}}
{{DEFAULTSORT:sortkey}}

Statistics

[edit]
WikicodeLua
{{NUMBEROFPAGES}}
mw.site.stats.pages
{{NUMBEROFARTICLES}}
mw.site.stats.articles
{{NUMBEROFFILES}}
mw.site.stats.files
{{NUMBEROFEDITS}}
mw.site.stats.edits
{{NUMBEROFVIEWS}}
mw.site.stats.views
{{NUMBEROFUSERS}}
mw.site.stats.users
{{NUMBEROFADMINS}}
mw.site.stats.admins
{{NUMBEROFACTIVEUSERS}}
mw.site.stats.activeUsers
[Expensive]
{{PAGESINCATEGORY:categoryname}}
[Expensive]
mw.site.stats.pagesInCategory('categoryname')
{{NUMBERINGROUP:groupname}}
mw.site.stats.usersInGroup('groupname')

Page names

[edit]
WikicodeLua
{{FULLPAGENAME}}
{{FULLPAGENAMEE}}
mw.title.getCurrentTitle().prefixedText
mw.uri.encode(mw.title.getCurrentTitle().prefixedText, "WIKI")
{{PAGENAME}}
{{PAGENAMEE}}
mw.title.getCurrentTitle().text
mw.uri.encode(mw.title.getCurrentTitle().text, "WIKI")
{{BASEPAGENAME}}
{{BASEPAGENAMEE}}
mw.title.getCurrentTitle().baseText
mw.uri.encode(mw.title.getCurrentTitle().baseText, "WIKI")
{{ROOTPAGENAME}}
{{ROOTPAGENAMEE}}
mw.title.getCurrentTitle().rootText
mw.uri.encode(mw.title.getCurrentTitle().rootText, "WIKI")
{{SUBPAGENAME}}
{{SUBPAGENAMEE}}
mw.title.getCurrentTitle().subpageText
mw.uri.encode(mw.title.getCurrentTitle().subpageText, "WIKI")
{{SUBJECTPAGENAME}}
{{ARTICLEPAGENAME}}

{{SUBJECTPAGENAMEE}}
{{ARTICLEPAGENAMEE}}
[Expensive]
mw.title.getCurrentTitle().subjectPageTitle

or a non-expensive alternative:

mw.title.getCurrentTitle().subjectNsText .. ':' .. mw.title.getCurrentTitle().text
[Expensive]
mw.uri.encode(mw.title.getCurrentTitle().subjectPageTitle, "WIKI")

or a non-expensive alternative:

mw.uri.encode(mw.title.getCurrentTitle().subjectNsText .. ':' .. mw.title.getCurrentTitle().text, "WIKI")
{{TALKPAGENAME}}
{{TALKPAGENAMEE}}
[Expensive]
mw.title.getCurrentTitle().talkPageTitle
mw.uri.encode(mw.title.getCurrentTitle().talkPageTitle, "WIKI")

Namespaces

[edit]
WikicodeLua
{{NAMESPACE}}
{{NAMESPACEE}}
mw.title.getCurrentTitle().nsText
mw.uri.encode(mw.title.getCurrentTitle().nsText, "WIKI")
{{NAMESPACENUMBER}}
mw.title.getCurrentTitle().namespace
{{SUBJECTSPACE}}
{{ARTICLESPACE}}
{{SUBJECTSPACEE}}
{{ARTICLESPACEE}}
mw.title.getCurrentTitle().subjectNsText

mw.uri.encode(mw.title.getCurrentTitle().subjectNsText, "WIKI")
{{TALKSPACE}}
{{TALKSPACEE}}
mw.site.namespaces[title.namespace].talk.canonicalName
mw.uri.encode(mw.site.namespaces[title.namespace].talk.canonicalName, "WIKI")

URL data

[edit]
WikicodeLua
{{localurl:page|query}}
mw.uri.localUrl('page', 'query')
{{fullurl:page|query}}
mw.uri.fullUrl('page', 'query')
{{canonicalurl:page|query}}
mw.uri.canonicalUrl('page', 'query')
{{filepath:file name}}
{{urlencode:string|QUERY}}
mw.uri.encode('string', QUERY)
{{anchorencode:string}}
mw.uri.anchorEncode('string')

Namespaces

[edit]
WikicodeLua
{{ns:0}}
mw.site.namespaces[0].name
{{ns:Project}}
mw.site.namespaces.Project.name

Formatting

[edit]
WikicodeLua
{{formatnum:number}}
mw.getContentLanguage():formatNum(number)
{{#formatdate:date}}
{{#dateformat:date|format}}
{{lc:string}}
mw.ustring.lower('string')
{{lcfirst:string}}
mw.getContentLanguage():lcfirst('string')
{{uc:string}}
mw.ustring.upper('string')
{{ucfirst:string}}
mw.getContentLanguage():ucfirst('string')
{{padleft:xyz|stringlength}}
{{padright:xyz|stringlength}}

Localisation

[edit]
WikicodeLua
{{plural:2|is|are}}
mw.getContentLanguage():plural(2, 'is', 'are')
{{grammar:N|noun}}
mw.getContentLanguage():grammar('N', 'noun')
{{gender:username|male|female|neutral}}
mw.getContentLanguage():gender('username', { 'male', 'female', 'neutral' })
{{int:message}}
{{int:editsectionhint|MediaWiki}}
mw.message.new('message'):plain()
mw.message.new('editsectionhint', 'MediaWiki'):plain()

Miscellaneous

[edit]
WikicodeLua
 {{#language:code|inlanguage}}
mw.language.fetchLanguageName('code', 'inLanguage')
{{#special:special page name}}
{{#speciale:special page name}}
{{#tag:tagname |some text |attribute1=value1 |attribute2=value2}}
mw.getCurrentFrame():callParserFunction('#tag', { 'tagname', 'some text', attribute1 = 'value1', attribute2 = 'value2' })
mw.getCurrentFrame():extensionTag('tagname', 'some text', { attribute1 = 'value1', attribute2 = 'value2' })