Modul:StringFunc
Loncat ke navigasi
Loncat ke pencarian
Dokumentasi untuk modul ini dapat dibuat di Modul:StringFunc/doc
local p = {} --[[ Strip This function Strips charecters from string Usage: {{#invoke:StringFunc|strip|source_string|charecters_to_strip|plain_flag}} Parameters source: The string to strip chars: The pattern or list of charecters to strip from string, replaced with '' plain: A flag indicating that the chars should be understood as plain text. defaults to true. Leading and trailing whitespace is also automatically stripped from the string. ]] function p.strip( frame ) local new_args = p._getParameters( frame.args, {'source', 'chars', 'plain'} ) local source_str = new_args['source'] or ''; local chars = new_args['chars'] or ''; source_str = mw.text.trim(source_str); if source_str == '' or chars == '' then return source_str; end local l_plain = p._getBoolean( new_args['plain'] or true ); if l_plain then chars = p._escapePattern( chars ); end local result; result = mw.ustring.gsub(source_str, "["..chars.."]", '') return result; end --[[ Split This function Splits a string based on a separator, returns nth substring based on count. Usage: {{#invoke:StringFunc|split|source_string|separator|count}} Parameters: source: The string to return a subset of separator: The string to split on count: The nth substring based on the separator to return ]] function p.split( frame ) local new_args = p._getParameters( frame.args, {'source', 'separator', 'count'} ) local source_str = new_args['source'] or ''; local separator = new_args['separator'] or ''; local separator_len = mw.ustring.len(separator); if source_str == '' or separator == '' then return source_str; end local ret_count = tonumber( new_args['count'] ) or 1; if ret_count < 1 then return ""; end local start = 1; local iter = mw.ustring.find(source_str, separator, start, true); if iter == nil then if ret_count == 1 then return source_str; else return ""; end else iter = iter - 1; end if ret_count == 1 then return mw.ustring.sub( source_str, start, iter); end for i=2, ret_count do start = iter+separator_len + 1; iter = mw.ustring.find(source_str, separator, start, true); if iter == nil then if ret_count == i then return mw.ustring.sub(source_str, start, mw.ustring.len(source_str)); else return ""; end else iter = iter - 1; end end return mw.ustring.sub( source_str,start,iter); end function p.isNumber( frame ) local new_args = p._getParameters( frame.args, {'source'} ) local source_str = new_args['source'] or '' if source_str == '' then return "false" end if tonumber(source_str) == nil and tonumber(string.gsub(source_str, ",", ".", 1) .. '') == nil then return "false" end return "true" end -- Argument list helper function, as per Module:String function p._getParameters( frame_args, arg_list) local new_args = {}; local index = 1; local value; for i, arg in ipairs( arg_list ) do value = frame_args[arg] if value == nil then value = frame_args[index]; index = index + 1; end new_args[arg] = value; end return new_args; end -- Escape Pattern helper function so that all charecters are treated as plain text, as per Module:String function p._escapePattern( pattern_str) return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" ); end -- Helper Function to interpret boolean strings, as per Module:String function p._getBoolean( boolean_str ) local boolean_value; if type( boolean_str ) == 'string' then boolean_str = boolean_str:lower(); if boolean_str == 'false' or boolean_str == 'no' or boolean_str == 'O' or boolean_str == '' then boolean_value = false; else boolean_value = true; end elseif type(boolean_str) == 'boolean' then boolean_value = boolean_str; else error( 'No boolean value found' ); end return boolean_value end return p