function Argument.Transform(a)if#a.TransformedValues~=0 then return end if a.Type.Listable and#a.RawValue>0 then local D=Util.SplitStringSimple(a.RawValue,"\044")if a.RawValue:sub(#a.RawValue,#a.RawValue)=="\044"then D[#D+1]=""end for D,r in ipairs(D)do a.RawSegments[D]=r a.TransformedValues[D]={a:TransformSegment(r)}end else a.RawSegments[1]=a.RawValue a.TransformedValues[1]={a:TransformSegment(a.RawValue)}end end function Argument.TransformSegment(D,a)if D.Type.Transform then return D.Type.Transform(a,D.Executor)else return a end end

function Argument:Transform()
	if #self.TransformedValues ~= 0 then
		return
	end

	if self.Type.Listable and #self.RawValue > 0 then
		local rawSegments = Util.SplitStringSimple(self.RawValue, ",")

		if self.RawValue:sub(#self.RawValue, #self.RawValue) == "," then
			rawSegments[#rawSegments + 1] = "" -- makes auto complete tick over right after pressing ,
		end

		for i, rawSegment in ipairs(rawSegments) do
			self.RawSegments[i] = rawSegment
			self.TransformedValues[i] = { self:TransformSegment(rawSegment) }
		end
	else
		self.RawSegments[1] = self.RawValue
		self.TransformedValues[1] = { self:TransformSegment(self.RawValue) }
	end
end

function Argument:TransformSegment(rawSegment)
	if self.Type.Transform then
		return self.Type.Transform(rawSegment, self.Executor)
	else
		return rawSegment
	end
end
