Skip to content

Commit

Permalink
Start working on new tag parser
Browse files Browse the repository at this point in the history
  • Loading branch information
Patbox committed Jan 20, 2024
1 parent 4cd9676 commit 8c2de63
Show file tree
Hide file tree
Showing 9 changed files with 364 additions and 32 deletions.
2 changes: 2 additions & 0 deletions src/main/java/eu/pb4/placeholders/api/Placeholders.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import eu.pb4.placeholders.api.node.parent.ParentNode;
import eu.pb4.placeholders.api.parsers.NodeParser;
import eu.pb4.placeholders.api.parsers.PatternPlaceholderParser;
import eu.pb4.placeholders.api.parsers.TagLikeParser;
import eu.pb4.placeholders.impl.placeholder.PlaceholderNode;
import eu.pb4.placeholders.impl.placeholder.builtin.PlayerPlaceholders;
import eu.pb4.placeholders.impl.placeholder.builtin.ServerPlaceholders;
import eu.pb4.placeholders.impl.placeholder.builtin.WorldPlaceholders;
Expand Down
22 changes: 20 additions & 2 deletions src/main/java/eu/pb4/placeholders/api/node/TranslatedNode.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,19 @@
package eu.pb4.placeholders.api.node;

import eu.pb4.placeholders.api.ParserContext;
import eu.pb4.placeholders.api.parsers.NodeParser;
import eu.pb4.placeholders.api.parsers.TagLikeParser;
import eu.pb4.placeholders.impl.GeneralUtils;
import net.minecraft.text.Text;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;

public record TranslatedNode(String key, @Nullable String fallback, Object[] args) implements TextNode {
@Deprecated
public TranslatedNode(String key, Object[] args) {
this(key, null, new Object[0]);
}


public static TranslatedNode of(String key, Object... args) {
return new TranslatedNode(key, null, args);
}
Expand Down Expand Up @@ -48,4 +50,20 @@ public boolean isDynamic() {

return false;
}

public TextNode transform(NodeParser parser) {
if (this.args.length == 0) {
return this;
}

var list = new ArrayList<>();
for (var arg : this.args()) {
if (arg instanceof TextNode textNode) {
list.add(parser.parseNode(textNode));
} else {
list.add(arg);
}
}
return TranslatedNode.ofFallback(this.key(), this.fallback(), list.toArray());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,7 @@ public TextNode[] parseNodes(TextNode input, List<TextNode> nextNodes) {
if (input instanceof LiteralNode literalNode) {
return parseLiteral(literalNode, nextNodes);
} else if (input instanceof TranslatedNode translatedNode) {
var list = new ArrayList<>();
for (var arg : translatedNode.args()) {
if (arg instanceof TextNode textNode) {
list.add(TextNode.asSingle(this.parseNodes(textNode)));
} else {
list.add(arg);
}
}
return new TextNode[] { TranslatedNode.ofFallback(translatedNode.key(), translatedNode.fallback(), list.toArray()) };
return new TextNode[] { translatedNode.transform(this) };
} else if (input instanceof ParentTextNode parentTextNode) {
return parseParents(parentTextNode);
} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,15 +80,7 @@ public TextNode[] parseNodes(TextNode input) {
parseLiteral(literalNode, list::add);
return parseSubNodes(list.listIterator(), null, -1, false);
} else if (input instanceof TranslatedNode translatedNode) {
var list = new ArrayList<>();
for (var arg : translatedNode.args()) {
if (arg instanceof TextNode textNode) {
list.add(TextNode.asSingle(this.parseNodes(textNode)));
} else {
list.add(arg);
}
}
return new TextNode[]{TranslatedNode.ofFallback(translatedNode.key(), translatedNode.fallback(), list.toArray())};
return new TextNode[]{ translatedNode.transform(this) };
} else if (input instanceof ParentTextNode parentTextNode) {
var list = new ArrayList<SubNode<?>>();
for (var children : parentTextNode.getChildren()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,18 +55,7 @@ public static PatternPlaceholderParser ofTextMap(Pattern pattern, Map<String, Te
@Override
public TextNode[] parseNodes(TextNode text) {
if (text instanceof TranslatedNode translatedNode) {
var list = new ArrayList<>();

for (var arg : translatedNode.args()) {
if (arg instanceof TextNode textNode) {
list.add(TextNode.asSingle(this.parseNodes(textNode)));
} else {
list.add(arg);
}
}

return new TextNode[]{TranslatedNode.ofFallback(translatedNode.key(), translatedNode.fallback(), list.toArray())};

return new TextNode[]{ translatedNode.transform(this) };
} else if (text instanceof LiteralNode literalNode) {
var out = new ArrayList<TextNode>();

Expand Down
Loading

0 comments on commit 8c2de63

Please sign in to comment.