This module directly imports all functions from the mw.ustring library. Documentation for each function can be found there.

The module takes an indefinite number of arguments. Arguments given as |s1=, |s2=, etc, are read first, and are used as strings. All remaining numerical arguments are coerced to number type if possible, and remain strings if not. If you wish for a numerical (i.e. unnamed or "|1=", "|2=") to remain a string, you can simply escape it by inserting \ at the beginning of the string.

Note that MediaWiki will always trim whitespace from named arguments; to give arguments with surrounding whitespace you must use unnamed parameters starting with \.

How to pass inconvenient strings
To pass this... Write this Explanation
" 0123 " |\ 123 To get surrounding whitespace must use unnamed, but must precede with \ to indicate that it isn't a number.
"0123" |s1=0123 If you don't need to preserve whitespace use |s1= etc.
"0123" |1=\0123 If you don't need to preserve whitespace explicitly use |1= etc.
In another template, to pass its parameter (({1))}, preserving whitespace |\(({1))} Must provide the \ with unknown string input.
In another template, to pass its parameter (({1))}, stripping whitespace |s1=(({1))}
In another template, to pass its parameter (({1))}, stripping whitespace |1=\((#if:1|(({1))))}

You can also wrap results in tags. All other unused arguments will be passed to frame:extensionTag

Usage

[kulemba source]

((#invoke:Ustring|function_name|arg1|arg2|...)) is equivalent to mw.ustring.function_name( arg1, arg2, ... )

Example using mw.ustring.sub

[kulemba source]

((#invoke:Ustring|sub|s1=abcde|2|4))

produces:

bcd

Example using mw.ustring.gsub

[kulemba source]

((#invoke:Ustring|gsub|s1=1234|23|))

produces:

14

Example using mw.ustring.char

[kulemba source]

&#((#invoke:ustring|char|49|48|59))

produces:




Example using mw.ustring.match

[kulemba source]

((#invoke:Ustring|match|s1=abcde|s2=(c%w)))

produces:

cd

Note: Only the first match is returned. Additional returns are omitted because mw.ustring.gsub's second return value is generally undesirable.

Example using tag arguments

[kulemba source]
((#invoke:Ustring|match
|s1=((Module:Ustring))|%s%s%sif%snot%s[^%s]+%sthen.+%
<!--enter an actual newline character to match '\n'-->%s%s%send
|tag=syntaxhighlight|lang=lua))

produces:

			if not fargs.tag then
				return (what(unpack(args)))		-- Outside parens truncate to first result avoiding tail call
			end
			local tagargs = {}
			for x, y in pairs(fargs) do
				if not fargsused[x] then tagargs[x] = y end
			end

Note that:

<syntaxhighlight lang="lua">((#invoke:Ustring|match
|s1=((Module:Ustring))|%s%s%sif%snot%s[^%s]+%sthen.+%
<!--enter an actual newline character to match '\n'-->%s%s%send))</syntaxhighlight>

produces:

((#invoke:Ustring|match
|s1=((Module:Ustring))|%s%s%sif%snot%s[^%s]+%sthen.+%
<!--enter an actual newline character to match '\n'-->%s%s%send))

Errors

[kulemba source]

Errors from accessing mw.ustring should be maintained, e.g.:

((#invoke:Ustring|xyzzy))

should produce:

Script error: The function "xyzzy" does not exist.

and

((#invoke:Ustring|maxPatternLength))

should produce:

Script error: "maxPatternLength" is not a function.

See also

[kulemba source]

require('strict')
return setmetatable({}, {
	__index = function(t, k)
		local what = mw.ustring[k]
		if type(what) ~= "function" then
			return what
		end
		return function(frame)
			local fargs = frame.args
			local fargsused = { tag = true }
			local args = {}
			local str_i = 1
			while fargs['s' .. str_i] do
				fargsused['s' .. str_i] = true
				args[str_i] = fargs['s' .. str_i]
				str_i = str_i + 1
			end
			for i, v in ipairs(fargs) do
				fargsused[i] = true
				args[i + str_i - 1] = tonumber(v) or v:gsub("^\\", "", 1)
			end
			if not fargs.tag then
				return (what(unpack(args)))		-- Outside parens truncate to first result avoiding tail call
			end
			local tagargs = {}
			for x, y in pairs(fargs) do
				if not fargsused[x] then tagargs[x] = y end
			end
			return frame:extensionTag{name = fargs.tag, content = what(unpack(args)), args = tagargs}
		end
	end
})