View difference between Paste ID: AqhH7JGe and g2EnDYLp
SHOW: | | - or go back to the newest paste.
1-
local tArg = {...}
1+
2
local controls = {["\n"]="\\n", ["\r"]="\\r", ["\t"]="\\t", ["\b"]="\\b", ["\f"]="\\f", ["\""]="\\\"", ["\\"]="\\\\"}
3
local function isArray(t)
4
	local max = 0
5
	for k,v in pairs(t) do
6
		if type(k) ~= "number" then
7
			return false
8
		elseif k > max then
9
			max = k
10
		end
11
	end
12
	return max == #t
13
end
14
local whites = {['\n']=true; ['\r']=true; ['\t']=true; [' ']=true; [',']=true; [':']=true}
15
local function removeWhite(str)
16
	while whites[str:sub(1, 1)] do
17
		str = str:sub(2)
18
	end
19
	return str
20
end
21
local encodeCommon, arrEncoding, parseNumber, parseString, parseArray, parseMember, parseValue, parseObject, decode, decodeFromFile
22
23
------------------------------------------------------------------ encoding
24
25
function encodeCommon(val, pretty, tabLevel, tTracking)
26
	local str = ""
27
	local function tab(s)
28
		str = str .. ("\t"):rep(tabLevel) .. s
29
	end
30
	function arrEncoding(val, bracket, closeBracket, iterator, loopFunc)
31
		str = str .. bracket
32
		if pretty then
33
			str = str .. "\n"
34
			tabLevel = tabLevel + 1
35
		end
36
		for k,v in iterator(val) do
37
			tab("")
38
			loopFunc(k,v)
39
			str = str .. ","
40
			if pretty then str = str .. "\n" end
41
		end
42
		if pretty then
43
			tabLevel = tabLevel - 1
44
		end
45
		if str:sub(-2) == ",\n" then
46
			str = str:sub(1, -3) .. "\n"
47
		elseif str:sub(-1) == "," then
48
			str = str:sub(1, -2)
49
		end
50
		tab(closeBracket)
51
	end
52
	if type(val) == "table" then
53
		assert(not tTracking[val], "Cannot encode a table holding itself recursively")
54
		tTracking[val] = true
55
		if isArray(val) then
56
			arrEncoding(val, "[", "]", ipairs, function(k,v)
57
				str = str .. encodeCommon(v, pretty, tabLevel, tTracking)
58
			end)
59
		else
60
			arrEncoding(val, "{", "}", pairs, function(k,v)
61
				assert(type(k) == "string", "JSON object keys must be strings", 2)
62
				str = str .. encodeCommon(k, pretty, tabLevel, tTracking)
63
				str = str .. (pretty and ": " or ":") .. encodeCommon(v, pretty, tabLevel, tTracking)
64
			end)
65
		end
66
	elseif type(val) == "string" then
67
		str = '"' .. val:gsub("[%c\"\\]", controls) .. '"'
68
	elseif type(val) == "number" or type(val) == "boolean" then
69
		str = tostring(val)
70
	else
71
		error("JSON only supports arrays, objects, numbers, booleans, and strings", 2)
72
	end
73
	return str
74
end
75
local function encode(val)
76
	return encodeCommon(val, false, 0, {})
77
end
78
local function encodePretty(val)
79
	return encodeCommon(val, true, 0, {})
80
end
81
82
------------------------------------------------------------------ decoding
83
84
local decodeControls = {}
85
for k,v in pairs(controls) do
86
	decodeControls[v] = k
87
end
88
local function parseBoolean(str)
89
	if str:sub(1, 4) == "true" then
90
		return true, removeWhite(str:sub(5))
91
	else
92
		return false, removeWhite(str:sub(6))
93
	end
94
end
95
local function parseNull(str)
96
	return nil, removeWhite(str:sub(5))
97
end
98
local numChars = {['e']=true; ['E']=true; ['+']=true; ['-']=true; ['.']=true}
99
function parseNumber(str)
100
	local i = 1
101
	while numChars[str:sub(i, i)] or tonumber(str:sub(i, i)) do
102
		i = i + 1
103
	end
104
	local val = tonumber(str:sub(1, i - 1))
105
	str = removeWhite(str:sub(i))
106
	return val, str
107
end
108
function parseString(str)
109
	str = str:sub(2)
110
	local s = ""
111
	while str:sub(1,1) ~= "\"" do
112
		local next = str:sub(1,1)
113
		str = str:sub(2)
114
		assert(next ~= "\n", "Unclosed string")
115
116
		if next == "\\" then
117
			local escape = str:sub(1,1)
118
			str = str:sub(2)
119
120
			next = assert(decodeControls[next..escape], "Invalid escape character")
121
		end
122
		s = s .. next
123
	end
124
	return s, removeWhite(str:sub(2))
125
end
126
function parseArray(str)
127
	str = removeWhite(str:sub(2))
128
	local val = {}
129
	local i = 1
130
	while str:sub(1, 1) ~= "]" do
131
		local v = nil
132
		v, str = parseValue(str)
133
		val[i] = v
134
		i = i + 1
135
		str = removeWhite(str)
136
	end
137
	str = removeWhite(str:sub(2))
138
	return val, str
139
end
140
function parseValue(str)
141
	local fchar = str:sub(1, 1)
142
	if fchar == "{" then
143
		return parseObject(str)
144
	elseif fchar == "[" then
145
		return parseArray(str)
146
	elseif tonumber(fchar) ~= nil or numChars[fchar] then
147
		return parseNumber(str)
148
	elseif str:sub(1, 4) == "true" or str:sub(1, 5) == "false" then
149
		return parseBoolean(str)
150
	elseif fchar == "\"" then
151
		return parseString(str)
152
	elseif str:sub(1, 4) == "null" then
153
		return parseNull(str)
154
	end
155
	return nil
156
end
157
function parseMember(str)
158
	local k = nil
159
	k, str = parseValue(str)
160
	local val = nil
161
	val, str = parseValue(str)
162
	return k, val, str
163
end
164
function parseObject(str)
165
	str = removeWhite(str:sub(2))
166
	local val = {}
167
	while str:sub(1, 1) ~= "}" do
168
		local k, v = nil, nil
169
		k, v, str = parseMember(str)
170
		val[k] = v
171
		str = removeWhite(str)
172
	end
173
	str = removeWhite(str:sub(2))
174
	return val, str
175
end
176
function decode(str)
177
	str = removeWhite(str)
178
	t = parseValue(str)
179
	return t
180
end
181
function decodeFromFile(path)
182
	local file = assert(fs.open(path, "r"))
183
	local decoded = decode(file.readAll())
184
	file.close()
185
	return decoded
186
end
187
188
189
std.storeCatagoryNames = {}
190-
local getTableSize = function(tbl)
190+
local boardIDs = {}
191-
	local amnt = 0
191+
local req = http.get("http://backend.jouhou.ml/api/Boards")
192-
	for k,v in pairs(tbl) do
192+
193-
		amnt = amnt + 1
193+
194
end
195-
	return amnt
195+
196
for a = 1, #req do
197
	boardIDs[req[a].id] = a
198-
if tArg[1] ~= "storelengthcheck" then
198+
	std.storeCatagoryNames[#std.storeCatagoryNames+1] = req[a].name
199-
	std.storeCatagoryNames = {"Programs"}
199+
200
201
local req = http.get("http://backend.jouhou.ml/api/Posts")
202-
local req = http.get("http://twijnweb.com/cc/api/v1.0/programs/getall.php")
202+
203
    return false
204
end
205
req = decode(req.readAll())
206
std.storeURLs = {}
207-
if type(req) ~= "table" then
207+
208
for k,v in pairs(req) do
209-
elseif req.programs then
209+
210-
	req = req.programs
210+
        title = v.id,
211-
else
211+
        url = {v.id},
212
        creator = "n/a",
213
        description = "Timestamp: "..v.creation,
214
        catagory = boardIDs[v.id],
215-
local laURLs = {}
215+
216
        keywords = {tostring(v.content)},
217
    }
218-
        title = v.name,
218+
    std.storeURLs[v.code] = buffer
219-
        url = "http://get.twijnweb.com/"..v.code,
219+
220-
        creator = v.owner,
220+
221-
        description = v.description,
221+
std.contextualGet = function(appid)
222-
        catagory = 1,
222+
	local url = "http://backend.jouhou.ml/api/Posts/"
223
	local out = http.get(url..appid)
224-
        keywords = {},
224+
	if out then
225
		out = decode(out.readAll())
226-
	laURLs[v.code] = buffer
226+
		return out.content
227
	else
228-
if tArg[1] == "storelengthcheck" then
228+
		return false
229-
	return getTableSize(laURLs)
229+
230-
else
230+