View difference between Paste ID: wNf8kU5P and yc2Z9Hxw
SHOW: | | - or go back to the newest paste.
1
-- Buffer API, By Symmetryc
2
-- Edited by AgentE382 to change ":" OO-syntax to "." OO-syntax. (First step to redirect target based on this.)
3
-- Edited by AgentE382 to add preliminary redirect-target capability.
4
return {
5
	new = function()
6
		local self = {
7
			act = {pos = {}};
8
			pos = {};
9
			back = colors.white;
10
			text = colors.lightGray;
11
		}
12
13
		function self.write(_str)
14
			local act = self.act
15
			local selfpos = self.pos
16
			local append = true
17
			if selfpos[1] ~= act.pos[1] or selfpos[2] ~= act.pos[2] then
18
				act[#act + 1] = {term.setCursorPos, selfpos[1], selfpos[2]}
19
				append = false
20
			end
21
			if self.back ~= act.back then
22
				act[#act + 1] = {term.setBackgroundColor, self.back}
23
				act.back = self.back
24
				append = false
25
			end
26
			if self.text ~= act.text then
27
				act[#act + 1] = {term.setTextColor, self.text}
28
				act.text = self.text
29
				append = false
30
			end
31
			for line, nl in _str:gmatch("([^\n]*)(\n?)") do
32
				if append then
33
					act[#act][2] = act[#act][2]..line
34
					append = false
35
				else
36
					act[#act + 1] = {term.write, line}
37
				end
38
				selfpos[1] = selfpos[1] + #line
39
				if nl == "\n" then
40
					selfpos[1] = 1
41
					selfpos[2] = selfpos[2] + 1
42
					act[#act + 1] = {term.setCursorPos, 1, selfpos[2]}
43
				end
44
			end
45
			act.pos = {selfpos[1], selfpos[2]}
46
			return self
47
		end;
48
		function self.draw(self)
49
			for i, v in ipairs(self.act) do
50
				if v[3] then
51
					v[1](v[2], v[3])
52
				else
53
					v[1](v[2])
54
				end
55
			end
56
			self.act = {}
57
			return self
58
		end;
59
60
		function self.clear()
61
			for i = #act, 1 do
62
				act[i] = nil
63
			end
64
			return self
65
		end
66
67
		function self.clearLine()
68
69
		end
70
71
		function self.getCursorPos()
72
			local p = self.pos
73
			return p[1], p[2]
74
		end
75
76
		function self.setCursorPos(x, y)
77
			local p = self.pos
78
			p[1], p[2] = x, y
79
			return self
80
		end
81
82
		function self.setCursorBlink(state)
83
			
84
		end
85
86
		self.isColor = term.isColor
87
88
		self.getSize = term.getSize
89
90
		self.redirect = term.redirect
91
92
		self.restore = term.restore
93
94
		function self.scroll(n)
95
			
96
		end
97
98
		function self.setTextColor(color)
99
			self.text = color
100
			return self
101
		end
102
103
		function self.setBackgroundColor(color)
104
			self.back = color
105
			return self
106
		end
107
108
		return self
109
	end;
110
}