Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local Utils = script.Parent
- local IsInString = require(Utils.IsInString).is
- local function ISO(l,si)
- if type(si) == "table" then
- if si[l] then
- return true
- else
- return false
- end
- else
- if l == si then
- return true
- else
- return false
- end
- end
- end
- local function isV3(location,str,settings) -- incomprehensible code cause i wrote it like 1.5 years ago when i made the first version
- local start = nil
- if string.sub(str,location,location) == string.sub(settings["Vector3Identifier"],1,1) then
- start = location
- for i = location,#str,1 do
- local letter = string.sub(str,i,i)
- if letter == settings["Vector3Open"] then
- if string.sub(str,start,i) == settings["Vector3Identifier"]..settings["Vector3Open"] then
- return true,i
- end
- end
- end
- end
- return false,nil
- end
- local module = {}
- function module.scrape(str,settings)
- local variables = {}
- local identifier = settings["VarIdentifier"]
- local stringIdentifier = settings["StringIdentifier"]
- local v3Identifier = settings["Vector3Identifier"]
- local v3Open = settings["Vector3Open"]
- local v3Close = settings["Vector3Close"]
- local v3Sep = settings["Vector3Seperator"]
- local foundvariable = false
- local hasVarName = false
- local hasValStart = false
- local variableStart = nil
- local variableEnd = nil
- local valueStart = nil
- local valueEnd = nil
- local hasVarType = false
- local isString = false
- local isNumberVar = false
- local isVector3 = false
- local x,y,z = nil,nil,nil
- local xStart,yStart,zStart = nil,nil,nil
- local xEnd,yEnd,zEnd = nil,nil,nil
- local v3hasOpened = false
- for textIndex = 1,#str do
- local letter = string.sub(str,textIndex,textIndex)
- if foundvariable == false then
- if letter == identifier then
- if IsInString(str,textIndex,settings) == false then
- variableStart = textIndex+1
- foundvariable = true
- end
- end
- continue
- end
- if letter == " " and hasVarName == false then
- if str:sub(textIndex+1,textIndex+1) ~= "=" then
- warn("Expected letter got ' '")
- return {"ERROR","Expected letter got ' '"}
- else
- hasVarName = true
- variableEnd = textIndex-1
- continue
- end
- end
- if tonumber(letter) ~= nil and hasVarName == false then
- warn("Expected letter got number")
- return {"ERROR","Expected letter got number"}
- end
- if letter == "&" then
- warn("Cannot use variable identifier in variable name")
- return {"ERROR","Cannot use variable identifier in variable name"}
- end
- if hasVarName == false then
- continue
- end
- do -- String variable checker
- if ISO(letter,stringIdentifier) == true and isString == false and hasVarType == false then
- isString = true
- hasVarType = true
- valueStart = textIndex
- continue
- end
- if ISO(letter,stringIdentifier) == true and isString == true then
- valueEnd = textIndex
- table.insert(variables,{
- ["Name"] = str:sub(variableStart,variableEnd),
- ["Value"] = str:sub(valueStart,valueEnd),
- ["Type"] = "string"
- })
- foundvariable = false
- hasVarName = false
- isString = false
- hasVarType = false
- continue
- end
- end
- do -- Number variable checker
- local allowed = {
- ["1"] = true,
- ["2"] = true,
- ["3"] = true,
- ["4"] = true,
- ["5"] = true,
- ["6"] = true,
- ["7"] = true,
- ["8"] = true,
- ["9"] = true,
- ["0"] = true,
- ["-"] = true,
- ["."] = true,
- }
- if allowed[letter] ~= nil and isNumberVar == false and hasVarType == false then
- isNumberVar = true
- hasVarType = true
- valueStart = textIndex
- continue
- end
- if isNumberVar == true then
- if allowed[letter] == nil and letter ~= " " then
- warn("Var type number got letter")
- return {"ERROR","Var type number got letter"}
- end
- if textIndex == #str then -- variable end
- valueEnd = textIndex
- if tonumber(str:sub(valueStart,valueEnd)) == nil then
- warn("Attempt to save variable of type number but variable value is not a number")
- return {"ERROR","Attempt to save variable of type number but variable value is not a number"}
- end
- table.insert(variables,{
- ["Name"] = str:sub(variableStart,variableEnd),
- ["Value"] = tonumber(str:sub(valueStart,valueEnd)),
- ["Type"] = "number"
- })
- foundvariable = false
- hasVarName = false
- isNumberVar = false
- hasVarType = false
- continue
- end
- if letter == " " then
- valueEnd = textIndex
- if tonumber(str:sub(valueStart,valueEnd)) == nil then
- warn("Attempt to save variable of type number but variable value is not a number")
- return {"ERROR","Attempt to save variable of type number but variable value is not a number"}
- end
- table.insert(variables,{
- ["Name"] = str:sub(variableStart,variableEnd),
- ["Value"] = tonumber(str:sub(valueStart,valueEnd)),
- ["Type"] = "number"
- })
- foundvariable = false
- hasVarName = false
- isNumberVar = false
- hasVarType = false
- continue
- end
- end
- end
- do -- Vector3 variable checker
- local is,e = isV3(textIndex,str,settings)
- if is == true and hasVarType == false then
- valueStart = e
- isVector3 = true
- hasVarType = true
- end
- if isVector3 == true then
- if letter == v3Open then
- xStart = textIndex+1
- v3hasOpened = true
- continue
- --else
- -- continue
- end
- if v3hasOpened == false then
- continue
- end
- if xStart ~= nil and xEnd == nil then
- if letter == v3Sep then
- xEnd = textIndex-1
- yStart = textIndex+1
- continue
- else
- continue
- end
- end
- if yStart ~= nil and yEnd == nil then
- if letter == v3Sep then
- yEnd = textIndex-1
- zStart = textIndex+1
- continue
- else
- continue
- end
- end
- if zStart ~= nil and zEnd == nil then
- if letter == v3Close then
- zEnd = textIndex-1
- else
- continue
- end
- end
- x = tonumber(str:sub(xStart,xEnd))
- y = tonumber(str:sub(yStart,yEnd))
- z = tonumber(str:sub(zStart,zEnd))
- if x == nil then warn("X of vector 3 is not a number") return {"ERROR","X of vector 3 is not a number"} end
- if y == nil then warn("Y of vector 3 is not a number") return {"ERROR","Y of vector 3 is not a number"} end
- if z == nil then warn("Z of vector 3 is not a number") return {"ERROR","Z of vector 3 is not a number"} end
- table.insert(variables,{
- ["Name"] = str:sub(variableStart,variableEnd),
- ["Value"] = Vector3.new(x,y,z),
- ["Type"] = "vector3"
- })
- hasVarType = false
- xStart = nil
- xEnd = nil
- yStart = nil
- yEnd = nil
- zStart = nil
- zEnd = nil
- x = nil
- y = nil
- z = nil
- continue
- end
- end
- end
- return variables
- end
- return module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement