پودمان:Ustring

    از ویکی‌نور

    توضیحات این پودمان می‌تواند در پودمان:Ustring/توضیحات قرار گیرد.

    require('strict')
    return setmetatable({}, {
    	__index = function(t, k)
    		local what = mw.ustring[k]
    		if type(what) ~= "function" then
    			return what
    		end
    		return function(frame)
    			local fargs = frame.args
    			local fargsused = { tag = true }
    			local args = {}
    			local str_i = 1
    			while fargs['s' .. str_i] do
    				fargsused['s' .. str_i] = true
    				args[str_i] = fargs['s' .. str_i]
    				str_i = str_i + 1
    			end
    			for i, v in ipairs(fargs) do
    				fargsused[i] = true
    				args[i + str_i - 1] = tonumber(v) or v:gsub("^\\", "", 1)
    			end
    			if not fargs.tag then
    				return (what(unpack(args)))		-- Outside parens truncate to first result avoiding tail call
    			end
    			local tagargs = {}
    			for x, y in pairs(fargs) do
    				if not fargsused[x] then tagargs[x] = y end
    			end
    			return frame:extensionTag{name = fargs.tag, content = what(unpack(args)), args = tagargs}
    		end
    	end
    })