diff options
Diffstat (limited to 'src/main/java/bjc/rgens/parser/templates/GrammarTemplate.java')
| -rw-r--r-- | src/main/java/bjc/rgens/parser/templates/GrammarTemplate.java | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/main/java/bjc/rgens/parser/templates/GrammarTemplate.java b/src/main/java/bjc/rgens/parser/templates/GrammarTemplate.java new file mode 100644 index 0000000..a257fbd --- /dev/null +++ b/src/main/java/bjc/rgens/parser/templates/GrammarTemplate.java @@ -0,0 +1,75 @@ +package bjc.rgens.parser.templates; + +import bjc.rgens.parser.ConfigSet; +import bjc.rgens.parser.GenerationState; + +import java.io.Reader; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +public class GrammarTemplate { + public ConfigSet belongsTo; + + public String name; + + public final List<TemplateElement> elements; + + public boolean doSpacing = true; + + public GrammarTemplate(List<TemplateElement> elements) { + this.elements = elements; + } + + public void generate(GenerationState state) { + for(TemplateElement element : elements) { + element.generate(state); + + if(doSpacing && element.type.spacing) + state.contents.append("\n"); + } + } + + public static GrammarTemplate readTemplate(Reader rdr) { + List<TemplateElement> elements = new ArrayList<>(); + GrammarTemplate template = new GrammarTemplate(elements); + + Scanner scn = new Scanner(rdr); + scn.useDelimiter("\\R"); + + int lno = 0; + while(scn.hasNextLine()) { + String ln = scn.nextLine(); + lno += 1; + + switch(ln.charAt(0)) { + case '#': + // Ignore comments + break; + case '/': + handlePragma(elements, template, ln.substring(1)); + break; + default: + handleLine(elements, template, ln); + } + } + + + return template; + } + + private static void handleLine(List<TemplateElement> elements, GrammarTemplate template, String ln) { + if(ln.matches("^.*?\\$@.+?@\\$.*$")) { + /* + * Handle live templates + */ + elements.add(new LiveTemplateElement(ln)); + } else { + elements.add(new LiteralTemplateElement(ln)); + } + } + + private static void handlePragma(List<TemplateElement> elements, GrammarTemplate template, String ln) { + + } +} |
