use of net.sourceforge.plantuml.preproc.Defines in project markdown-doclet by Abnaxos.
the class UmlTagRenderer method render.
@Override
public void render(Tag tag, StringBuilder target, MarkdownDoclet doclet) {
if (config == null) {
if (doclet.getOptions().getPlantUmlConfigFile() != null) {
try {
config = Collections.singletonList(Files.toString(doclet.getOptions().getPlantUmlConfigFile(), doclet.getOptions().getEncoding()));
} catch (IOException e) {
doclet.printError("Error loading PlantUML configuration file " + doclet.getOptions().getPlantUmlConfigFile() + ": " + e.getLocalizedMessage());
}
} else {
config = Collections.emptyList();
}
}
String packageName;
if (tag.holder() instanceof ProgramElementDoc) {
packageName = ((ProgramElementDoc) tag.holder()).containingPackage().name();
} else if (tag.holder() instanceof PackageDoc) {
packageName = ((PackageDoc) (tag.holder())).name();
} else if (tag.holder() instanceof RootDoc) {
packageName = null;
} else {
doclet.printError(tag.position(), "Cannot handle tag for holder " + tag.holder());
return;
}
String source = tag.text().trim();
int pos = CharMatcher.WHITESPACE.indexIn(source);
if (pos < 0) {
doclet.printError(tag.position(), "Invalid @startuml tag: Expected filename and PlantUML source");
return;
}
String fileName = source.substring(0, pos);
source = "@startuml " + fileName + "\n" + source.substring(pos).trim() + "\n@enduml";
File outputFile;
if (packageName == null) {
outputFile = doclet.getOptions().getDestinationDir();
} else {
outputFile = new File(doclet.getOptions().getDestinationDir(), packageName.replace(".", File.separator));
}
outputFile.mkdirs();
outputFile = new File(outputFile, fileName.replace("/", File.separator));
doclet.printNotice("Generating UML diagram " + outputFile);
// render
SourceStringReader reader = new SourceStringReader(new Defines(), source, config);
try {
reader.generateImage(outputFile);
} catch (IOException e) {
doclet.printError(tag.position(), "Error generating UML image " + outputFile + ": " + e.getLocalizedMessage());
}
}
Aggregations