diff --git a/src/main/java/net/signbit/samx/ExtractCode.java b/src/main/java/net/signbit/samx/ExtractCode.java index eadf077..479af4a 100644 --- a/src/main/java/net/signbit/samx/ExtractCode.java +++ b/src/main/java/net/signbit/samx/ExtractCode.java @@ -37,6 +37,11 @@ public static void main(String[] args) throws IOException output.setRequired(true); options.addOption(output); + Option elements = new Option("e", "elements", true, "selected elements"); + elements.setRequired(false); + elements.setArgs(Option.UNLIMITED_VALUES); + options.addOption(elements); + CommandLineParser cmdLine = new DefaultParser(); HelpFormatter helpFmt = new HelpFormatter(); @@ -66,7 +71,7 @@ public static void main(String[] args) throws IOException outputDir = new File("."); } - EmbeddedCodeVisitor visitor = new EmbeddedCodeVisitor(result.tokens, outputDir); + EmbeddedCodeVisitor visitor = new EmbeddedCodeVisitor(result.tokens, outputDir, cmd.getOptionValues("elements")); visitor.visit(result.document); diff --git a/src/main/java/net/signbit/samx/visitors/EmbeddedCodeVisitor.java b/src/main/java/net/signbit/samx/visitors/EmbeddedCodeVisitor.java index 300f94b..103740d 100644 --- a/src/main/java/net/signbit/samx/visitors/EmbeddedCodeVisitor.java +++ b/src/main/java/net/signbit/samx/visitors/EmbeddedCodeVisitor.java @@ -19,6 +19,8 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; import org.antlr.v4.runtime.BufferedTokenStream; @@ -29,11 +31,18 @@ public class EmbeddedCodeVisitor extends SamXParserBaseVisitor { private final BufferedTokenStream tokenStream; private final File parentDir; + private final HashSet elements; - public EmbeddedCodeVisitor(BufferedTokenStream tokenStream, File parentDir) + + public EmbeddedCodeVisitor(BufferedTokenStream tokenStream, File parentDir, String[] elements) { this.tokenStream = tokenStream; this.parentDir = parentDir; + this.elements = new HashSet<>(); + if (elements != null) + { + this.elements.addAll(Arrays.asList(elements)); + } } @Override @@ -65,8 +74,15 @@ public StringBuilder visitCodeBlock(SamXParser.CodeBlockContext ctx) attributeVisitor.visit(ctx.metadata()); final String fileStem = attributeVisitor.getId(); + final String fileExtension = ctx.language.getText(); + if ((!elements.isEmpty()) && (!elements.contains(fileStem))) + { + System.out.println(String.format("Skipping unselected element %s (%s)", fileStem, fileExtension)); + return null; + } + final File outputFile = new File(parentDir, fileStem + "." + fileExtension); try