I'm making a ROBLOX implementation of CSS (to be used with GUIs) with a ModuleScript, and I'm getting an error. (These scripts are long but you shouldn't need to read the whole thing)
ModuleScript:
local module = {}
local function splitStylesheet(sheet)
local split = {}
local char = 1
local line = 1
for i = 1, string.len(sheet) do
if string.sub(sheet, char, char) ~= "}" then
table.insert(split, line, split[line]..string.sub(sheet, char, char))
char = char + 1
else
line = line + 1
char = char + 1
end
end
return split
end
local function findSubstyles(dump)
print("Splitting dump...")
local open = 0
local close = 0
for brackets in string.gmatch(dump, "{") do
open = open + 1
end
for brackets in string.gmatch(dump, "}") do
close = close + 1
end
if open == close then
local substyles = open
return substyles
elseif open > close then
return "open"
elseif close > open then
return "close"
else
return "fatal"
end
end
module.readStylesheet = function(name, dump)
print("Reading stylesheet \""..name.."\"")
if not name or not dump then
error("Missing arg (function readStylesheet)")
script:Destroy()
end
-- find number of substyles
local substyles = findSubstyles(dump)
if substyles == "open" then
error("Assembler detected stray open bracket. Please check stylesheet")
script:Destroy()
elseif substyles == "close" then
error("Assembler detected stray close bracket. Please check stylesheet")
script:Destroy()
elseif substyles == "fatal" then
error("Assembler encountered fatal error. Please check stylesheet")
script:Destroy()
else
print(substyles.." substyles found")
end
-- split substyles into a table
local styletable = splitStylesheet(dump)
print(styletable)
end
return module
Script I'm using the Module with (it's in a ScreenGui):
local css = require(game.Workspace.CSS)
css.readStylesheet("stylesheet1", "constructor1{background:none;}constructor2{background:none;}")
Output:
20:53:53.339 - Workspace.CSS:10: attempt to concatenate field '?' (a nil value)
20:53:53.359 - Stack Begin
20:53:53.359 - Script 'Workspace.CSS', Line 10 - upvalue splitStylesheet
20:53:53.360 - Script 'Workspace.CSS', Line 73 - field readStylesheet
20:53:53.360 - Script 'Players.Player.PlayerGui.PlayerGui.Main', Line 3
20:53:53.361 - Stack End
Anyone know what the problem is? Thanks to anyone who helps :)

4 comments
string[line] is nil while you're still inserting the value into the table, so you're going to have to find a way around using string[line]. I would also suggest using tostring() to make sure the entire value you're going to insert is a string.
Not sure what you mean by this...
On line 10 when you attempt to call split[line], there is no value in spilt at the spot corresponding with the value for line. You then attempt to concatenate that value (nil) with something else, which is why the error is being thrown.
Couldn't have put it any better myself @Masta