Module:String: Difference between revisions
Continuing trials and tribulations of string trimming and Wikipedia template quirks
m>Dragons flight (Update to allow for unnamed parameters. This is necessary because some string function need to preserve leading / trailing whitespace in order to work properly.) |
m>Dragons flight (Continuing trials and tribulations of string trimming and Wikipedia template quirks) |
||
Line 17: | Line 17: | ||
function str.match( frame ) | function str.match( frame ) | ||
return mw.ustring.match( frame.args.s, frame.args.pattern, tonumber( frame.args.i ) ) | return mw.ustring.match( frame.args.s, frame.args.pattern, tonumber( frame.args.i ) ) | ||
end | |||
--[====[ | |||
pos | |||
This function returns a single character from the target string at position pos. | |||
Usage: | |||
{{#invoke:String|pos|target_string|index_value}} | |||
OR | |||
{{#invoke:String|pos|target=target_string|pos=index_value}} | |||
Parameters | |||
target: The string to search | |||
pos: The index for the character to return | |||
If invoked using named parameters, Mediawiki will automatically remove any leading or | |||
trailing whitespace from the target string. In some circumstances this is desirable, in | |||
other cases one may want to preserve the whitespace. | |||
The first character has an index value of 1. | |||
If one requests a negative value, this function will select a character by counting backwards | |||
from the end of the string. In other words pos = -1 is the same as asking for the last character. | |||
A requested value of zero, or a value greater than the length of the string returns an error. | |||
]====] | |||
function str.pos( frame ) | |||
local new_args = str._getParameters( frame.args, {'target', 'pos'} ); | |||
local target_str = new_args['target'] or ''; | |||
local pos = tonumber( new_args['pos'] ) or 0; | |||
if pos == 0 or math.abs(pos) > mw.ustring.len( target_str ) then | |||
return '<strong class="error">String index out of range</strong>'; | |||
end | |||
return mw.ustring.sub( target_str, pos, pos ); | |||
end | end | ||
Line 38: | Line 75: | ||
local target_str = new_args['target'] or ''; | local target_str = new_args['target'] or ''; | ||
if target_str == '' then | if target_str == '' then | ||
return 1; | return 1; | ||
end | end |