Plex/proxy/src/main/java/dev/plex/toml/TomlParser.java

89 lines
2.7 KiB
Java
Raw Normal View History

package dev.plex.toml;
import java.util.concurrent.atomic.AtomicInteger;
2022-05-10 05:08:45 +00:00
class TomlParser
{
2022-05-10 05:08:45 +00:00
static dev.plex.toml.Results run(String tomlString)
{
final dev.plex.toml.Results results = new dev.plex.toml.Results();
if (tomlString.isEmpty())
{
return results;
}
2022-05-10 05:08:45 +00:00
AtomicInteger index = new AtomicInteger();
boolean inComment = false;
AtomicInteger line = new AtomicInteger(1);
dev.plex.toml.Identifier identifier = null;
Object value = null;
for (int i = index.get(); i < tomlString.length(); i = index.incrementAndGet())
{
char c = tomlString.charAt(i);
if (results.errors.hasErrors())
{
break;
}
if (c == '#' && !inComment)
{
inComment = true;
}
else if (!Character.isWhitespace(c) && !inComment && identifier == null)
{
dev.plex.toml.Identifier id = dev.plex.toml.IdentifierConverter.IDENTIFIER_CONVERTER.convert(tomlString, index, new dev.plex.toml.Context(null, line, results.errors));
if (id != dev.plex.toml.Identifier.INVALID)
{
if (id.isKey())
{
identifier = id;
}
else if (id.isTable())
{
results.startTables(id, line);
}
else if (id.isTableArray())
{
results.startTableArray(id, line);
}
}
}
else if (c == '\n')
{
inComment = false;
identifier = null;
value = null;
line.incrementAndGet();
}
else if (!inComment && identifier != null && identifier.isKey() && value == null && !Character.isWhitespace(c))
{
value = ValueReaders.VALUE_READERS.convert(tomlString, index, new dev.plex.toml.Context(identifier, line, results.errors));
if (value instanceof dev.plex.toml.Results.Errors)
{
2022-05-19 18:59:16 +00:00
results.errors.add((dev.plex.toml.Results.Errors) value);
2022-05-10 05:08:45 +00:00
}
else
{
results.addValue(identifier.getName(), value, line);
}
}
else if (value != null && !inComment && !Character.isWhitespace(c))
{
results.errors.invalidTextAfterIdentifier(identifier, c, line.get());
}
}
2022-05-10 05:08:45 +00:00
return results;
}
2022-05-10 05:08:45 +00:00
private TomlParser()
{
}
}