See usage on Template:T, Template:u, and template:l.
local p = {} --p stands for package langObject = mw.getLanguage('simple') local function has_value (tab, val) for index, value in ipairs(tab) do if langObject:lc(value) == langObject:lc(val) then return true end end return false end function p.title_case(frame) plain = false if frame.args.plain == "true" then plain = true end split = frame.args.split if split == "space" then split = " " end replace = split if frame.args.replace ~= "" then replace = frame.args.replace end parts = mw.text.split(frame.args.link, split, plain) lower = mw.text.split(frame.args.lower, ",", true) title = "" for i, part in pairs(parts) do if i > 1 and i < table.getn(parts) and has_value(lower, part) then title = title .. langObject:lc(part) .. replace else title = title .. langObject:ucfirst(langObject:lc(part)) .. replace end end if table.getn(parts) > 1 then title = string.sub(title, 0, string.len(title) - string.len(replace)) end if frame.args.nolink == "true" then return title end return "[[" .. frame.args.link .. "|" .. title .. "]]" end function p.uppercase_first_letter(frame) uc_first_letter = langObject:ucfirst(langObject:lc(frame.args.link)) if frame.args.nolink == "true" then return uc_first_letter end return "[[" .. frame.args.link .. "|" .. uc_first_letter .. "]]" end function p.lowercase(frame) lc = langObject:lc(frame.args.link) if frame.args.nolink == "true" then return lc end return "[[" .. frame.args.link .. "|" .. lc .. "]]" end return p