mirror of https://github.com/plexusorg/Plex.git
64 lines
2.0 KiB
Java
64 lines
2.0 KiB
Java
package com.moandjiezana.toml;
|
|
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
|
|
class TomlParser {
|
|
|
|
static Results run(String tomlString) {
|
|
final Results results = new Results();
|
|
|
|
if (tomlString.isEmpty()) {
|
|
return results;
|
|
}
|
|
|
|
AtomicInteger index = new AtomicInteger();
|
|
boolean inComment = false;
|
|
AtomicInteger line = new AtomicInteger(1);
|
|
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) {
|
|
Identifier id = IdentifierConverter.IDENTIFIER_CONVERTER.convert(tomlString, index, new Context(null, line, results.errors));
|
|
|
|
if (id != 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 Context(identifier, line, results.errors));
|
|
|
|
if (value instanceof Results.Errors) {
|
|
results.errors.add((Results.Errors) value);
|
|
} else {
|
|
results.addValue(identifier.getName(), value, line);
|
|
}
|
|
} else if (value != null && !inComment && !Character.isWhitespace(c)) {
|
|
results.errors.invalidTextAfterIdentifier(identifier, c, line.get());
|
|
}
|
|
}
|
|
|
|
return results;
|
|
}
|
|
|
|
private TomlParser() {}
|
|
}
|