Module:String: Difference between revisions

    From Nonbinary Wiki
    (update renamed variable)
    m (9 revisions imported from wikipedia:Module:String: see Topic:Vtixlm0q28eo6jtf)
     
    (5 intermediate revisions by 3 users not shown)
    Line 42: Line 42:
    ]]
    ]]
    function str.len( frame )
    function str.len( frame )
    local new_args = str._getParameters( frame.args, {'s'} );
    local new_args = str._getParameters( frame.args, {'s'} )
    local s = new_args['s'] or '';
    local s = new_args['s'] or ''
    return mw.ustring.len( s )
    return mw.ustring.len( s )
    end
    end
    Line 71: Line 71:
    ]]
    ]]
    function str.sub( frame )
    function str.sub( frame )
    local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } );
    local new_args = str._getParameters( frame.args, { 's', 'i', 'j' } )
    local s = new_args['s'] or '';
    local s = new_args['s'] or ''
    local i = tonumber( new_args['i'] ) or 1;
    local i = tonumber( new_args['i'] ) or 1
    local j = tonumber( new_args['j'] ) or -1;
    local j = tonumber( new_args['j'] ) or -1


    local len = mw.ustring.len( s );
    local len = mw.ustring.len( s )


    -- Convert negatives for range checking
    -- Convert negatives for range checking
    if i < 0 then
    if i < 0 then
    i = len + i + 1;
    i = len + i + 1
    end
    end
    if j < 0 then
    if j < 0 then
    j = len + j + 1;
    j = len + j + 1
    end
    end


    if i > len or j > len or i < 1 or j < 1 then
    if i > len or j > len or i < 1 or j < 1 then
    return str._error( 'String subset index out of range' );
    return str._error( 'String subset index out of range' )
    end
    end
    if j < i then
    if j < i then
    return str._error( 'String subset indices out of order' );
    return str._error( 'String subset indices out of order' )
    end
    end


    Line 107: Line 107:


    --[[
    --[[
    match
    _match


    This function returns a substring from the source string that matches a
    This function returns a substring from the source string that matches a
    specified pattern.
    specified pattern. It is exported for use in other modules


    Usage:
    Usage:
    {{#invoke:String|match|source_string|pattern_string|start_index|match_number|plain_flag|nomatch_output}}
    strmatch = require("Module:String")._match
    OR
    sresult = strmatch( s, pattern, start, match, plain, nomatch )
    {{#invoke:String|pos|s=source_string|pattern=pattern_string|start=start_index
        |match=match_number|plain=plain_flag|nomatch=nomatch_output}}


    Parameters
    Parameters
    Line 131: Line 129:
             text.  Defaults to false.
             text.  Defaults to false.
         nomatch: If no match is found, output the "nomatch" value rather than an error.
         nomatch: If no match is found, output the "nomatch" value rather than an error.
    If invoked using named parameters, Mediawiki will automatically remove any leading or
    trailing whitespace from each string.  In some circumstances this is desirable, in
    other cases one may want to preserve the whitespace.
    If the match_number or start_index are out of range for the string being queried, then
    this function generates an error.  An error is also generated if no match is found.
    If one adds the parameter ignore_errors=true, then the error will be suppressed and
    an empty string will be returned on any failure.


    For information on constructing Lua patterns, a form of [regular expression], see:
    For information on constructing Lua patterns, a form of [regular expression], see:
    Line 151: Line 140:
    function str._match( s, pattern, start, match_index, plain_flag, nomatch )
    function str._match( s, pattern, start, match_index, plain_flag, nomatch )
    if s == '' then
    if s == '' then
    return str._error( 'Target string is empty' );
    return str._error( 'Target string is empty' )
    end
    end
    if pattern == '' then
    if pattern == '' then
    return str._error( 'Pattern string is empty' );
    return str._error( 'Pattern string is empty' )
    end
    end
    start = tonumber(start) or 1
    start = tonumber(start) or 1
    if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
    if math.abs(start) < 1 or math.abs(start) > mw.ustring.len( s ) then
    return str._error( 'Requested start is out of range' );
    return str._error( 'Requested start is out of range' )
    end
    end
    if match_index == 0 then
    if match_index == 0 then
    return str._error( 'Match index is out of range' );
    return str._error( 'Match index is out of range' )
    end