Module:String: Difference between revisions

Jump to navigation Jump to search
Content added Content deleted
(Update to allow for unnamed parameters. This is necessary because some string function need to preserve leading / trailing whitespace in order to work properly.)
(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