Skip to content

Commit fdb23ed

Browse files
committed
VariableString - fix Type#variableNameFunc being applied to ALL strings
1 parent 92af2f6 commit fdb23ed

File tree

2 files changed

+12
-8
lines changed

2 files changed

+12
-8
lines changed

src/main/java/io/github/syst3ms/skriptparser/lang/VariableString.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.github.syst3ms.skriptparser.registration.tags.Tag;
99
import io.github.syst3ms.skriptparser.registration.tags.TagManager;
1010
import io.github.syst3ms.skriptparser.types.TypeManager;
11+
import io.github.syst3ms.skriptparser.types.TypeManager.StringMode;
1112
import io.github.syst3ms.skriptparser.util.CollectionUtils;
1213
import io.github.syst3ms.skriptparser.util.StringUtils;
1314
import org.jetbrains.annotations.Contract;
@@ -27,10 +28,12 @@ public class VariableString extends TaggedExpression {
2728
*/
2829
private final Object[] data;
2930
private final boolean simple;
31+
private final StringMode stringMode;
3032

31-
private VariableString(Object[] data) {
33+
private VariableString(Object[] data, StringMode stringMode) {
3234
this.data = data;
3335
this.simple = data.length == 1 && data[0] instanceof String;
36+
this.stringMode = stringMode;
3437
}
3538

3639
/**
@@ -41,19 +44,19 @@ private VariableString(Object[] data) {
4144
* @return {@code null} if either:
4245
* <ul>
4346
* <li>The argument isn't quoted correctly</li>
44-
* <li>{@link #newInstance(String, ParserState, SkriptLogger)} returned null, which can happen when the string literal is of the form
47+
* <li>{@link #newInstance(String, ParserState, SkriptLogger, StringMode)} returned null, which can happen when the string literal is of the form
4548
* {@code "..."}</li>
4649
* <li>Something went very wrong when parsing a raw literal {@code R"possible delimiter(...)possible delimiter'}
4750
* </li>
4851
* </ul>. Returns a new instance of a VariableString otherwise.
4952
*/
5053
public static Optional<VariableString> newInstanceWithQuotes(String s, ParserState parserState, SkriptLogger logger) {
5154
if (s.startsWith("\"") && s.endsWith("\"") && StringUtils.nextSimpleCharacterIndex(s, 0) == s.length()) {
52-
return newInstance(s.substring(1, s.length() - 1), parserState, logger);
55+
return newInstance(s.substring(1, s.length() - 1), parserState, logger, StringMode.STRING);
5356
} else if (s.startsWith("'") && s.endsWith("'") && StringUtils.nextSimpleCharacterIndex(s, 0) == s.length()) {
5457
return Optional.of(new VariableString(new String[]{
5558
s.substring(1, s.length() - 1).replace("\\\"", "\"")
56-
}));
59+
}, StringMode.STRING));
5760
}
5861
return Optional.empty();
5962
}
@@ -66,7 +69,7 @@ public static Optional<VariableString> newInstanceWithQuotes(String s, ParserSta
6669
* @param logger the logger
6770
* @return a new instance of a VariableString, or {@code null} if there are unbalanced {@literal %} symbols
6871
*/
69-
public static Optional<VariableString> newInstance(String s, ParserState parserState, SkriptLogger logger) {
72+
public static Optional<VariableString> newInstance(String s, ParserState parserState, SkriptLogger logger, StringMode stringMode) {
7073
List<Object> data = new ArrayList<>(StringUtils.count(s, "%"));
7174
var sb = new StringBuilder();
7275
var charArray = s.toCharArray();
@@ -162,7 +165,7 @@ public static Optional<VariableString> newInstance(String s, ParserState parserS
162165
if (sb.length() > 0) {
163166
data.add(sb.toString());
164167
}
165-
return Optional.of(new VariableString(data.toArray()));
168+
return Optional.of(new VariableString(data.toArray(), stringMode));
166169
}
167170

168171
@Override
@@ -200,7 +203,7 @@ public String toString(TriggerContext ctx, String tagCtx) {
200203
for (int i = 0; i < actualData.length; i++) {
201204
var o = actualData[i];
202205
if (o instanceof Expression) {
203-
sb.append(TypeManager.toString(((Expression<?>) o).getValues(ctx), TypeManager.StringMode.VARIABLE));
206+
sb.append(TypeManager.toString(((Expression<?>) o).getValues(ctx), this.stringMode));
204207
} else if (o instanceof Tag) {
205208
ongoingTags.add((Tag) o);
206209
int indexOfNext = CollectionUtils.ordinalConditionalIndexOf(actualData, ++currentTags, t -> t instanceof Tag);

src/main/java/io/github/syst3ms/skriptparser/variables/Variables.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.github.syst3ms.skriptparser.log.ErrorType;
99
import io.github.syst3ms.skriptparser.log.SkriptLogger;
1010
import io.github.syst3ms.skriptparser.parsing.ParserState;
11+
import io.github.syst3ms.skriptparser.types.TypeManager.StringMode;
1112
import io.github.syst3ms.skriptparser.util.MultiMap;
1213
import org.jetbrains.annotations.Nullable;
1314

@@ -153,7 +154,7 @@ public static <T> Optional<? extends Expression<T>> parseVariable(String input,
153154
var vs = VariableString.newInstance(
154155
input.startsWith(LOCAL_VARIABLE_TOKEN) ? input.substring(LOCAL_VARIABLE_TOKEN.length()).strip() : input,
155156
parserState,
156-
logger
157+
logger, StringMode.VARIABLE
157158
);
158159
var finalS = input;
159160
return vs.map(v -> new Variable<>(v, finalS.startsWith(LOCAL_VARIABLE_TOKEN), finalS.endsWith(LIST_SEPARATOR + "*"), types));

0 commit comments

Comments
 (0)