Module:Ustring
This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
This module directly imports all functions from the ແມ່ແບບ:Luaref 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 \
.
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.
|
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}}} |
You can also wrap results in tags. All non-number indexed arguments will be passed to ແມ່ແບບ:Luaref
Usage
ດັດແກ້{{#invoke:Ustring|function_name|arg1|arg2|...}}
is equivalent to ແມ່ແບບ:Luaref
Example using mw.ustring.sub
ດັດແກ້{{#invoke:Ustring|sub|s1=abcde|2|4}}
produces:
bcd
Example using mw.ustring.gsub
ດັດແກ້{{#invoke:Ustring|gsub|s1=1234|23|}}
produces:
14
Example using mw.ustring.char
ດັດແກ້&#{{#invoke:ustring|char|49|48|59}}
produces:
Example using mw.ustring.match
ດັດແກ້{{#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
ດັດແກ້{{#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
ດັດແກ້Errors from accessing ແມ່ແບບ:Luaref should be maintained, e.g.:
{{#invoke:Ustring|xyzzy}}
should produce:
and
{{#invoke:Ustring|maxPatternLength}}
should produce:
See also
ດັດແກ້ແມ່ແບບ:String handling templates
require('Module:No globals')
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
})