Search in sources :

Example 1 with Defines

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());
    }
}
Also used : PackageDoc(com.sun.javadoc.PackageDoc) ProgramElementDoc(com.sun.javadoc.ProgramElementDoc) Defines(net.sourceforge.plantuml.preproc.Defines) SourceStringReader(net.sourceforge.plantuml.SourceStringReader) IOException(java.io.IOException) RootDoc(com.sun.javadoc.RootDoc) File(java.io.File)

Aggregations

PackageDoc (com.sun.javadoc.PackageDoc)1 ProgramElementDoc (com.sun.javadoc.ProgramElementDoc)1 RootDoc (com.sun.javadoc.RootDoc)1 File (java.io.File)1 IOException (java.io.IOException)1 SourceStringReader (net.sourceforge.plantuml.SourceStringReader)1 Defines (net.sourceforge.plantuml.preproc.Defines)1