Edukira joan

Modulu:StringFunc

Wikipedia, Entziklopedia askea

Documentation for this module may be created at Modulu:StringFunc/dok

local p = {}

--[[ 
Strip

This function Strips characters from string

Usage:
{{#invoke:StringFunc|strip|source_string|characters_to_strip|plain_flag}}

Parameters
	source: The string to strip
	chars:  The pattern or list of characters 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 '' or 'characters';
	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 = _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 = _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

return p