Skip to content

Commit

Permalink
Implement continued searching for gibberish unparsed literals
Browse files Browse the repository at this point in the history
  • Loading branch information
APickledWalrus committed Jan 22, 2024
1 parent 67c4e0e commit 2d992e7
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 6 deletions.
13 changes: 13 additions & 0 deletions src/main/java/ch/njol/skript/log/ParseLogHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,19 @@ public class ParseLogHandler extends LogHandler {
private LogEntry error = null;

private final List<LogEntry> log = new ArrayList<>();

public ParseLogHandler backup() {
ParseLogHandler copy = new ParseLogHandler();
copy.error = this.error;
copy.log.addAll(this.log);
return copy;
}

public void paste(ParseLogHandler parseLogHandler) {
this.error = parseLogHandler.error;
this.log.clear();
this.log.addAll(parseLogHandler.log);
}

@Override
public LogResult log(LogEntry entry) {
Expand Down
39 changes: 33 additions & 6 deletions src/main/java/ch/njol/skript/patterns/TypePatternElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import ch.njol.skript.lang.Literal;
import ch.njol.skript.lang.SkriptParser;
import ch.njol.skript.lang.SkriptParser.ExprInfo;
import ch.njol.skript.lang.UnparsedLiteral;
import ch.njol.skript.lang.parser.ParserInstance;
import ch.njol.skript.log.ErrorQuality;
import ch.njol.skript.log.ParseLogHandler;
Expand Down Expand Up @@ -138,6 +139,10 @@ public MatchResult match(String expr, MatchResult matchResult) {

ExprInfo exprInfo = getExprInfo();

MatchResult matchBackup = null;
ParseLogHandler loopLogHandlerBackup = null;
ParseLogHandler expressionLogHandlerBackup = null;

ParseLogHandler loopLogHandler = SkriptLogger.startParseLogHandler();
try {
while (newExprOffset != -1) {
Expand Down Expand Up @@ -168,11 +173,27 @@ public MatchResult match(String expr, MatchResult matchResult) {
}
}

expressionLogHandler.printLog();
loopLogHandler.printLog();

newMatchResult.expressions[expressionIndex] = expression;
return newMatchResult;

boolean hasUnparsedLiteral = false;
for (int i = expressionIndex + 1; i < newMatchResult.expressions.length; i++) {
if (newMatchResult.expressions[i] instanceof UnparsedLiteral) {
hasUnparsedLiteral = Classes.parse(((UnparsedLiteral) newMatchResult.expressions[i]).getData(), Object.class, newMatchResult.parseContext) == null;
if (hasUnparsedLiteral) {
break;
}
}
}

if (!hasUnparsedLiteral) {
expressionLogHandler.printLog();
loopLogHandler.printLog();
return newMatchResult;
} else if (matchBackup == null) {
matchBackup = newMatchResult;
loopLogHandlerBackup = loopLogHandler.backup();
expressionLogHandlerBackup = expressionLogHandler.backup();
}
}
} finally {
expressionLogHandler.printError();
Expand All @@ -193,11 +214,17 @@ public MatchResult match(String expr, MatchResult matchResult) {
}
}
} finally {
if (!loopLogHandler.isStopped())
if (loopLogHandlerBackup != null) {
loopLogHandler.paste(loopLogHandlerBackup);
assert expressionLogHandlerBackup != null;
expressionLogHandlerBackup.printLog();
}
if (!loopLogHandler.isStopped()) {
loopLogHandler.printError();
}
}

return null;
return matchBackup;
}

@Override
Expand Down

0 comments on commit 2d992e7

Please sign in to comment.