Skip to content
Snippets Groups Projects
Commit fe18e34c authored by René Schöne's avatar René Schöne
Browse files

0.2

- use packaged plantuml to create png files per default
- add option "--printSource" to create a md file instead
parent 0b85c32e
Branches
No related tags found
No related merge requests found
Pipeline #12753 passed
...@@ -24,6 +24,7 @@ jar { ...@@ -24,6 +24,7 @@ jar {
dependencies { dependencies {
implementation project(':relast.preprocessor') implementation project(':relast.preprocessor')
implementation fileTree(include: ['plantuml.jar'], dir: '../libs')
implementation group: 'com.github.spullara.mustache.java', name: 'compiler', version: "${mustache_java_version}" implementation group: 'com.github.spullara.mustache.java', name: 'compiler', version: "${mustache_java_version}"
runtime group: 'org.jastadd', name: 'jastadd', version: '2.3.4' runtime group: 'org.jastadd', name: 'jastadd', version: '2.3.4'
......
package de.tudresden.inf.st.jastadd.grammar2uml.compiler; package de.tudresden.inf.st.jastadd.grammar2uml.compiler;
import beaver.Parser; import beaver.Parser;
import org.jastadd.option.BooleanOption;
import org.jastadd.option.ValueOption;
import org.jastadd.relast.compiler.AbstractCompiler;
import org.jastadd.relast.compiler.CompilerException;
import de.tudresden.inf.st.jastadd.grammar2uml.ast.ErrorMessage; import de.tudresden.inf.st.jastadd.grammar2uml.ast.ErrorMessage;
import de.tudresden.inf.st.jastadd.grammar2uml.ast.Grammar2Uml;
import de.tudresden.inf.st.jastadd.grammar2uml.ast.GrammarFile; import de.tudresden.inf.st.jastadd.grammar2uml.ast.GrammarFile;
import de.tudresden.inf.st.jastadd.grammar2uml.ast.Program; import de.tudresden.inf.st.jastadd.grammar2uml.ast.Program;
import de.tudresden.inf.st.jastadd.grammar2uml.ast.Grammar2Uml;
import de.tudresden.inf.st.jastadd.grammar2uml.parser.Grammar2UmlParser; import de.tudresden.inf.st.jastadd.grammar2uml.parser.Grammar2UmlParser;
import de.tudresden.inf.st.jastadd.grammar2uml.scanner.Grammar2UmlScanner; import de.tudresden.inf.st.jastadd.grammar2uml.scanner.Grammar2UmlScanner;
import net.sourceforge.plantuml.SourceStringReader;
import org.jastadd.option.BooleanOption;
import org.jastadd.option.ValueOption;
import org.jastadd.relast.compiler.AbstractCompiler;
import org.jastadd.relast.compiler.CompilerException;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
...@@ -26,6 +26,7 @@ public class Compiler extends AbstractCompiler { ...@@ -26,6 +26,7 @@ public class Compiler extends AbstractCompiler {
private ValueOption optionOutputFile; private ValueOption optionOutputFile;
private ValueOption optionInputGrammar2Uml; private ValueOption optionInputGrammar2Uml;
private BooleanOption optionDefaultFolders; private BooleanOption optionDefaultFolders;
private BooleanOption optionPrintSource;
private BooleanOption optionHelp; private BooleanOption optionHelp;
private BooleanOption optionVersion; private BooleanOption optionVersion;
private BooleanOption optionVerbose; private BooleanOption optionVerbose;
...@@ -67,16 +68,6 @@ public class Compiler extends AbstractCompiler { ...@@ -67,16 +68,6 @@ public class Compiler extends AbstractCompiler {
System.out.println(message); System.out.println(message);
} }
private void writeToFile(String filename, String str) throws CompilerException {
try {
PrintWriter writer = new PrintWriter(filename);
writer.print(str);
writer.close();
} catch (Exception e) {
throw new CompilerException("Could not write to file " + filename, e);
}
}
protected void initOptions() { protected void initOptions() {
optionOutputFile = addOption( optionOutputFile = addOption(
new ValueOption("output", "target file to be generated.") new ValueOption("output", "target file to be generated.")
...@@ -90,6 +81,9 @@ public class Compiler extends AbstractCompiler { ...@@ -90,6 +81,9 @@ public class Compiler extends AbstractCompiler {
new BooleanOption("defaultFolders", new BooleanOption("defaultFolders",
"Creates a default folder per grammar file.") "Creates a default folder per grammar file.")
.defaultValue(false)); .defaultValue(false));
optionPrintSource = addOption(
new BooleanOption("printSource", "The output will be the source code instead of a png.")
.defaultValue(false));
optionHelp = addOption( optionHelp = addOption(
new BooleanOption("help", "Print usage and exit.") new BooleanOption("help", "Print usage and exit.")
.defaultValue(false)); .defaultValue(false));
...@@ -160,13 +154,7 @@ public class Compiler extends AbstractCompiler { ...@@ -160,13 +154,7 @@ public class Compiler extends AbstractCompiler {
printMessage("Running grammar2uml " + readVersion()); printMessage("Running grammar2uml " + readVersion());
String output; Path destination = getDestinationPath();
if (optionOutputFile.isMatched()) {
output = optionOutputFile.value();
} else {
output = "uml.md";
System.out.println("No output output file is set. Assuming '" + output + "'.");
}
Path parent = Paths.get(optionOutputFile.value()).toAbsolutePath().getParent(); Path parent = Paths.get(optionOutputFile.value()).toAbsolutePath().getParent();
try { try {
Files.createDirectories(parent); Files.createDirectories(parent);
...@@ -188,8 +176,32 @@ public class Compiler extends AbstractCompiler { ...@@ -188,8 +176,32 @@ public class Compiler extends AbstractCompiler {
System.exit(1); System.exit(1);
} }
printMessage("Writing output file " + output); printMessage("Writing output file " + destination);
writeToFile(output, grammar2uml.generateAspect());
String sourceCode = grammar2uml.generateAspect();
try {
if (optionPrintSource.isMatched()) {
Files.writeString(destination, sourceCode);
} else {
SourceStringReader reader = new SourceStringReader(sourceCode);
reader.outputImage(Files.newOutputStream(destination));
}
} catch (Exception e) {
throw new CompilerException("Could not write to file " + destination, e);
}
return 0; return 0;
} }
private Path getDestinationPath() {
final String outputFileName;
if (optionOutputFile.isMatched()) {
outputFileName = optionOutputFile.value();
} else {
outputFileName = optionPrintSource.isMatched() ? "uml.md" : "uml.png";
System.out.println("No output output file is set. Assuming '" + outputFileName + "'.");
}
return Paths.get(outputFileName).toAbsolutePath();
}
} }
#Fri Jan 15 20:11:10 CET 2021 #Thu Feb 24 16:08:53 CET 2022
version=0.1.1 version=0.2
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment