net.sourceforge.plantuml.syntax.SyntaxChecker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of plantuml-mit Show documentation
Show all versions of plantuml-mit Show documentation
PlantUML is a component that allows to quickly write diagrams from text.
// THIS FILE HAS BEEN GENERATED BY A PREPROCESSOR.
package net.sourceforge.plantuml.syntax;
import java.util.Collections;
import java.util.List;
import net.sourceforge.plantuml.BlockUml;
import net.sourceforge.plantuml.ErrorUml;
import net.sourceforge.plantuml.OptionFlags;
import net.sourceforge.plantuml.SourceStringReader;
import net.sourceforge.plantuml.UmlDiagram;
import net.sourceforge.plantuml.core.Diagram;
import net.sourceforge.plantuml.error.PSystemError;
import net.sourceforge.plantuml.preproc.Defines;
import net.sourceforge.plantuml.text.BackSlash;
import net.sourceforge.plantuml.utils.LineLocation;
import net.sourceforge.plantuml.utils.LineLocationImpl;
public class SyntaxChecker {
// ::remove folder when __HAXE__
// ::remove file when __CORE__
public static SyntaxResult checkSyntax(List source) {
final StringBuilder sb = new StringBuilder();
for (String s : source) {
sb.append(s);
sb.append(BackSlash.NEWLINE);
}
return checkSyntax(sb.toString());
}
public static SyntaxResult checkSyntax(String source) {
OptionFlags.getInstance().setQuiet(true);
final SyntaxResult result = new SyntaxResult();
if (source.startsWith("@startuml\n") == false) {
result.setError(true);
result.setLineLocation(new LineLocationImpl("", null).oneLineRead());
result.addErrorText("No @startuml/@enduml found");
return result;
}
if (source.endsWith("@enduml\n") == false && source.endsWith("@enduml") == false) {
result.setError(true);
result.setLineLocation(lastLineNumber2(source));
result.addErrorText("No @enduml found");
return result;
}
final SourceStringReader sourceStringReader = new SourceStringReader(Defines.createEmpty(), source,
Collections.emptyList());
final List blocks = sourceStringReader.getBlocks();
if (blocks.size() == 0) {
result.setError(true);
result.setLineLocation(lastLineNumber2(source));
result.addErrorText("No @enduml found");
return result;
}
final Diagram system = blocks.get(0).getDiagram();
result.setCmapData(system.hasUrl());
if (system instanceof UmlDiagram) {
result.setUmlDiagramType(((UmlDiagram) system).getUmlDiagramType());
result.setDescription(system.getDescription().getDescription());
} else if (system instanceof PSystemError) {
result.setError(true);
final PSystemError sys = (PSystemError) system;
result.setLineLocation(sys.getLineLocation());
result.setSystemError(sys);
for (ErrorUml er : sys.getErrorsUml())
result.addErrorText(er.getError());
} else {
result.setDescription(system.getDescription().getDescription());
}
return result;
}
public static SyntaxResult checkSyntaxFair(String source) {
final SyntaxResult result = new SyntaxResult();
final SourceStringReader sourceStringReader = new SourceStringReader(Defines.createEmpty(), source,
Collections.emptyList());
final List blocks = sourceStringReader.getBlocks();
if (blocks.size() == 0) {
result.setError(true);
result.setLineLocation(lastLineNumber2(source));
result.addErrorText("No @enduml found");
return result;
}
final Diagram system = blocks.get(0).getDiagram();
result.setCmapData(system.hasUrl());
if (system instanceof UmlDiagram) {
result.setUmlDiagramType(((UmlDiagram) system).getUmlDiagramType());
result.setDescription(system.getDescription().getDescription());
} else if (system instanceof PSystemError) {
result.setError(true);
final PSystemError sys = (PSystemError) system;
result.setLineLocation(sys.getLineLocation());
for (ErrorUml er : sys.getErrorsUml()) {
result.addErrorText(er.getError());
}
result.setSystemError(sys);
} else {
result.setDescription(system.getDescription().getDescription());
}
return result;
}
private static int lastLineNumber(String source) {
int result = 0;
for (int i = 0; i < source.length(); i++)
if (source.charAt(i) == '\n')
result++;
return result;
}
private static LineLocation lastLineNumber2(String source) {
LineLocationImpl result = new LineLocationImpl("", null).oneLineRead();
for (int i = 0; i < source.length(); i++)
if (source.charAt(i) == '\n')
result = result.oneLineRead();
return result;
}
}