Module:Buffer: Difference between revisions
From Zoophilia Wiki
Jump to navigationJump to search
meta>Codehydro No edit summary |
meta>Codehydro move out to meta |
||
Line 21: | Line 21: | ||
return setmetatable({ | return setmetatable({ | ||
parent = self, | parent = self, | ||
getmetatable(self).check(v) | getmetatable(self).check(v) | ||
}, getmetatable(self)) | }, getmetatable(self)) | ||
end, | |||
_out = function(child, v2, outs) | |||
local parent = child.parent:_(child(v2)) | |||
if outs and outs > 0 then repeat | |||
child = parent | |||
parent = parent.parent | |||
outs = parent and parent:_(child()) and (outs - 1) or 0 | |||
until outs == 0 end | |||
return parent or child | |||
end | end | ||
}, | }, |
Revision as of 13:46, 30 January 2015
Documentation for this module may be created at Module:Buffer/doc
return setmetatable({
check = function(v)
if v and v ~= true then
if type(v) == 'table' then
return getmetatable(v) and getmetatable(v).__tostring and
tostring(v)
or table.concat(v)
end
return v--i.e. numbers or strings
end
end,
__index = {
_ = function(self, v)
local valid = getmetatable(self).check(v)
if valid then
table.insert(self, valid)
end
return self
end,
_in = function(self, v)
return setmetatable({
parent = self,
getmetatable(self).check(v)
}, getmetatable(self))
end,
_out = function(child, v2, outs)
local parent = child.parent:_(child(v2))
if outs and outs > 0 then repeat
child = parent
parent = parent.parent
outs = parent and parent:_(child()) and (outs - 1) or 0
until outs == 0 end
return parent or child
end
},
__call = function(t, i)
return table.concat(t, i)
end
},
{__call = function(self, v)
return setmetatable({self.check(v)}, self)
end
})