| ?????????????????????????????
?????????????????
?????????????????????????????????????????????????????????????????????????????????? ?????????????????????????????????????????????????????????? ? ???????????????????????????????????????????? ???????????????????????????????????????????? ??????????????
????????????????????
??????????????????????????????? ?
|
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
\
.
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.
|
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:
??????:Script error
and
{{#invoke:Ustring|maxPatternLength}}
should produce:
??????:Script error
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
})