<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ar">
	<id>https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AStringUtils</id>
	<title>وحدة:StringUtils - تاريخ المراجعة</title>
	<link rel="self" type="application/atom+xml" href="https://3rabica.org/index.php?action=history&amp;feed=atom&amp;title=%D9%88%D8%AD%D8%AF%D8%A9%3AStringUtils"/>
	<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:StringUtils&amp;action=history"/>
	<updated>2026-06-05T06:04:33Z</updated>
	<subtitle>تاريخ التعديل لهذه الصفحة في الويكي</subtitle>
	<generator>MediaWiki 1.43.7</generator>
	<entry>
		<id>https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:StringUtils&amp;diff=1428&amp;oldid=prev</id>
		<title>عبد العزيز: أنشأ الصفحة ب&#039;local p = {} local arguments = require(&#039;وحدة:Arguments&#039;) local TableTools = require(&#039;وحدة:TableTools&#039;)  local function makeInvokeFunc(funcName) 	return function...&#039;</title>
		<link rel="alternate" type="text/html" href="https://3rabica.org/index.php?title=%D9%88%D8%AD%D8%AF%D8%A9:StringUtils&amp;diff=1428&amp;oldid=prev"/>
		<updated>2017-11-26T09:40:50Z</updated>

		<summary type="html">&lt;p&gt;أنشأ الصفحة ب&amp;#039;local p = {} local arguments = require(&amp;#039;وحدة:Arguments&amp;#039;) local TableTools = require(&amp;#039;وحدة:TableTools&amp;#039;)  local function makeInvokeFunc(funcName) 	return function...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;صفحة جديدة&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
local arguments = require(&amp;#039;وحدة:Arguments&amp;#039;)&lt;br /&gt;
local TableTools = require(&amp;#039;وحدة:TableTools&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunc(funcName)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		local args = arguments.getArgs(frame, { frameOnly = true })&lt;br /&gt;
		local firstRet,secondRet = p[funcName](args)&lt;br /&gt;
		return firstRet&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Adaugă la începutul unui șir un prefix, dacă nu există deja acolo el sau unul dintre cele listate în ultimul argument&lt;br /&gt;
function p._prependIfMissing(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	local prefix = args[2]&lt;br /&gt;
	local others = {}&lt;br /&gt;
	for argK,argV in pairs(args) do&lt;br /&gt;
		if argK &amp;gt; 1 then&lt;br /&gt;
			table.insert(others, argV)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if str == nil then return nil end&lt;br /&gt;
	if prefix == nil then return str end&lt;br /&gt;
	&lt;br /&gt;
	for i, eachPrefix in pairs(others) do	&lt;br /&gt;
		if mw.ustring.find(str, eachPrefix, 1, true) == 1 then return str end&lt;br /&gt;
	end&lt;br /&gt;
	return prefix .. str&lt;br /&gt;
end&lt;br /&gt;
p.prependIfMissing = makeInvokeFunc(&amp;#039;_prependIfMissing&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
-- Adaugă la sfârșitul unui șir un sufix, dacă nu există deja acolo el sau unul dintre cele listate în ultimul argument&lt;br /&gt;
function p._appendIfMissing(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	local suffix = args[2]&lt;br /&gt;
	local others = {}&lt;br /&gt;
	for argK,argV in pairs(args) do&lt;br /&gt;
		if argK &amp;gt; 1 then&lt;br /&gt;
			table.insert(others, argV)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if str == nil then return nil end&lt;br /&gt;
	if suffix == nil then return str end&lt;br /&gt;
&lt;br /&gt;
	for i, eachSuffix in pairs(others) do&lt;br /&gt;
		local suffixStart&lt;br /&gt;
		local suffixEnd&lt;br /&gt;
		suffixStart, suffixEnd = mw.ustring.find(str, eachSuffix, 1, true) &lt;br /&gt;
		if suffixEnd == mw.ustring.len(str) then return str end&lt;br /&gt;
	end&lt;br /&gt;
	return str .. suffix&lt;br /&gt;
end&lt;br /&gt;
p.appendIfMissing = makeInvokeFunc(&amp;#039;_appendIfMissing&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._emptyToNil(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if str == &amp;#039;&amp;#039; then return nil end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
p.emptyToNil = makeInvokeFunc(&amp;#039;_emptyToNil&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._capitalize(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if str == nil then return nil end&lt;br /&gt;
	return mw.ustring.upper(mw.ustring.sub(str, 1, 1)) .. mw.ustring.sub(str,2);&lt;br /&gt;
end&lt;br /&gt;
p.capitalize = makeInvokeFunc(&amp;#039;_capitalize&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._removeStart(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if str == nil then return nil end&lt;br /&gt;
	local prefix = args[2]&lt;br /&gt;
	if prefix == nil then return str end&lt;br /&gt;
	if mw.ustring.sub(str, 1, mw.ustring.len(prefix)) == prefix then return mw.ustring.sub(str, mw.ustring.len(prefix) + 1, mw.ustring.len(str)) end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
p.removeStart = makeInvokeFunc(&amp;#039;_removeStart&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._removeEnd(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if str == nil then return nil end&lt;br /&gt;
	local suffix = args[2]&lt;br /&gt;
	if suffix == nil then return str end&lt;br /&gt;
	if mw.ustring.sub(str, -mw.ustring.len(suffix)) == suffix then return mw.ustring.sub(str, 1, -mw.ustring.len(suffix) - 1) end&lt;br /&gt;
	return str&lt;br /&gt;
end&lt;br /&gt;
p.removeEnd = makeInvokeFunc(&amp;#039;_removeEnd&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p.__isEmpty(str)&lt;br /&gt;
	return str == nil or (type(str) == &amp;#039;string&amp;#039; and mw.ustring.len(str) == 0)&lt;br /&gt;
end&lt;br /&gt;
function p._isEmpty(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	return p.__isEmpty(str)&lt;br /&gt;
end&lt;br /&gt;
p.isEmpty = makeInvokeFunc(&amp;#039;_isEmpty&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._trim(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if not str then return nil end&lt;br /&gt;
	return mw.text.trim(str)&lt;br /&gt;
end&lt;br /&gt;
p.trim = makeInvokeFunc(&amp;#039;_trim&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._startsWithAny(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if not str then return false end&lt;br /&gt;
	local idx = 2&lt;br /&gt;
	while idx &amp;lt;= TableTools.size(args) do&lt;br /&gt;
		if args[idx] and mw.ustring.sub(str, 1, mw.ustring.len(args[idx])) == args[idx] then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
		idx = idx + 1&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
p.startsWithAny = makeInvokeFunc(&amp;#039;_startsWithAny&amp;#039;)&lt;br /&gt;
p._startsWith = p._startsWithAny&lt;br /&gt;
p.startsWith = makeInvokeFunc(&amp;#039;_startsWith&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._endsWithAny(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if not str then return false end&lt;br /&gt;
	local idx = 2&lt;br /&gt;
	while idx &amp;lt;= TableTools.size(args) do&lt;br /&gt;
		if args[idx] and mw.ustring.sub(str, mw.ustring.len(str) - mw.ustring.len(args[idx]) + 1, mw.ustring.len(str)) == args[idx] then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
		idx = idx + 1&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
p.endsWithAny = makeInvokeFunc(&amp;#039;_endsWith&amp;#039;)&lt;br /&gt;
p._endsWith = p._endsWithAny&lt;br /&gt;
p.endsWith = makeInvokeFunc(&amp;#039;_endsWith&amp;#039;)&lt;br /&gt;
	&lt;br /&gt;
function p._substringBefore(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if not str then return nil end&lt;br /&gt;
	local idx = 2&lt;br /&gt;
	local substringEndPos = 1 + mw.ustring.len(str)&lt;br /&gt;
	local firstSep = &amp;#039;&amp;#039;&lt;br /&gt;
	while idx &amp;lt;= TableTools.size(args) do&lt;br /&gt;
		if args[idx] then&lt;br /&gt;
			local substringStart = mw.ustring.find(str, args[idx], 1, true)&lt;br /&gt;
			if substringStart and substringStart &amp;lt; substringEndPos then&lt;br /&gt;
				substringEndPos = substringStart&lt;br /&gt;
				firstSep = args[idx]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		idx = idx + 1&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.sub(str, 1, substringEndPos-1), firstSep&lt;br /&gt;
end&lt;br /&gt;
p.substringBefore = makeInvokeFunc(&amp;#039;_substringBefore&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
function p._substringAfter(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	if not str then return nil end&lt;br /&gt;
	local idx = 2&lt;br /&gt;
	local substringStartPos = 1 + mw.ustring.len(str)&lt;br /&gt;
	local firstSep = &amp;#039;&amp;#039;&lt;br /&gt;
	while args[idx] ~= nil do&lt;br /&gt;
		local substringStart = mw.ustring.find(str, args[idx], 1, true)&lt;br /&gt;
		if substringStart and substringStart &amp;lt; substringStartPos then&lt;br /&gt;
			substringStartPos = substringStart + mw.ustring.len(args[idx])&lt;br /&gt;
			firstSep = args[idx]&lt;br /&gt;
		end&lt;br /&gt;
		idx = idx + 1&lt;br /&gt;
	end&lt;br /&gt;
	if substringStartPos &amp;gt; mw.ustring.len(str) then return str end&lt;br /&gt;
	return mw.ustring.sub(str, substringStartPos), firstSep&lt;br /&gt;
end&lt;br /&gt;
p.substringAfter = makeInvokeFunc(&amp;#039;_substringAfter&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._defaultString(args)&lt;br /&gt;
	local compressedArgs = TableTools.compressSparseArray(args)&lt;br /&gt;
&lt;br /&gt;
	if #compressedArgs == 0 then return &amp;#039;&amp;#039; end&lt;br /&gt;
	return compressedArgs[1]&lt;br /&gt;
end&lt;br /&gt;
p.defaultString = makeInvokeFunc(&amp;#039;_defaultString&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._appendToString(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	local suffix = args[2]&lt;br /&gt;
	if str then&lt;br /&gt;
		return tostring(str) .. tostring(suffix or &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
p.appendToString = makeInvokeFunc(&amp;#039;_appendToString&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._prependToString(args)&lt;br /&gt;
	local str = args[1]&lt;br /&gt;
	local prefix = args[2]&lt;br /&gt;
	if str then&lt;br /&gt;
		return tostring(prefix or &amp;#039;&amp;#039;) .. tostring(str)&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
p.prependToString = makeInvokeFunc(&amp;#039;_prependToString&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._encloseString(args)&lt;br /&gt;
	return p._prependToString({p._emptyToNil({p._appendToString({args[1], args[3]})}), args[2]})&lt;br /&gt;
end&lt;br /&gt;
p.encloseString = makeInvokeFunc(&amp;#039;_encloseString&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
function p._stripNamespace(args)&lt;br /&gt;
	s,_ = p._substringAfter({args[1],&amp;#039;:&amp;#039;})&lt;br /&gt;
	return s&lt;br /&gt;
end&lt;br /&gt;
p.stripNamespace = makeInvokeFunc(&amp;#039;_stripNamespace&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>عبد العزيز</name></author>
	</entry>
</feed>