summaryrefslogtreecommitdiff
path: root/src/main/java/bjc/rgens/parser/templates/LiveTemplateElement.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/bjc/rgens/parser/templates/LiveTemplateElement.java')
-rw-r--r--src/main/java/bjc/rgens/parser/templates/LiveTemplateElement.java33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/main/java/bjc/rgens/parser/templates/LiveTemplateElement.java b/src/main/java/bjc/rgens/parser/templates/LiveTemplateElement.java
index 80c8315..81c0c47 100644
--- a/src/main/java/bjc/rgens/parser/templates/LiveTemplateElement.java
+++ b/src/main/java/bjc/rgens/parser/templates/LiveTemplateElement.java
@@ -6,6 +6,12 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import bjc.utils.data.BooleanToggle;
+import bjc.utils.data.ITree;
+import bjc.utils.data.Tree;
+import bjc.utils.funcdata.FunctionalList;
+import bjc.utils.funcdata.IList;
+
import bjc.rgens.parser.GenerationState;
import bjc.rgens.parser.RGrammarParser;
import bjc.rgens.parser.elements.CaseElement;
@@ -13,12 +19,30 @@ import bjc.rgens.parser.elements.LiteralCaseElement;
import bjc.utils.data.BooleanToggle;
import bjc.utils.funcdata.FunctionalList;
+/**
+ * A template element that can contain rule elements.
+ *
+ * @author Ben Culkin.
+ */
public class LiveTemplateElement extends TemplateElement {
+ // Pattern for matching elements (any number of characters bracketed by '$@' and '@$')
private static final Pattern INSERT_PAT = Pattern.compile("\\$@(.+?)@\\$");
+ /**
+ * The sub-elements of this element.
+ */
public final List<List<CaseElement>> elements;
- public LiveTemplateElement(String val) {
+ /**
+ * Create a new template element.
+ *
+ * @param val
+ * The string to parse this element from.
+ *
+ * @param errs
+ * A tree to add errors &amp; information to.
+ */
+ public LiveTemplateElement(String val, ITree<String> errs) {
super(true);
elements = new ArrayList<>();
@@ -30,10 +54,12 @@ public class LiveTemplateElement extends TemplateElement {
mat.appendReplacement(sb, "");
String body = mat.group(1);
- FunctionalList<CaseElement> elms = (FunctionalList<CaseElement>)RGrammarParser.parseElementString(body).getLeft();
+ List<CaseElement> elms = new ArrayList<>();
+
+ int weight = RGrammarParser.parseElementString(body, elms, errs);
elements.add(Arrays.asList(new LiteralCaseElement(sb.toString())));
- elements.add(elms.getInternal());
+ elements.add(elms);
sb = new StringBuffer();
}
@@ -42,6 +68,7 @@ public class LiveTemplateElement extends TemplateElement {
elements.add(Arrays.asList(new LiteralCaseElement(sb.toString())));
}
+ @Override
public void generate(GenerationState state) {
BooleanToggle bt = new BooleanToggle(false);