mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 02:49:06 +00:00
feat: work on chronology
This commit is contained in:
parent
d7727c5c87
commit
c20b3d9642
@ -1,4 +1,4 @@
|
||||
# Warning, "version" should be the same in gradle.properties and Version.java
|
||||
# Any idea anyone how to magically synchronize those :-) ?
|
||||
version = 1.2023.13beta3
|
||||
version = 1.2023.13beta4
|
||||
org.gradle.workers.max = 3
|
@ -53,6 +53,7 @@ import net.sourceforge.plantuml.BlockUml;
|
||||
import net.sourceforge.plantuml.BlockUmlBuilder;
|
||||
import net.sourceforge.plantuml.ErrorUml;
|
||||
import net.sourceforge.plantuml.FileFormat;
|
||||
import net.sourceforge.plantuml.FileFormatOption;
|
||||
import net.sourceforge.plantuml.core.Diagram;
|
||||
import net.sourceforge.plantuml.error.PSystemError;
|
||||
import net.sourceforge.plantuml.klimt.color.ColorMapper;
|
||||
@ -122,7 +123,7 @@ public class DirectDraw {
|
||||
ug.apply(back).apply(back.bg()).draw(URectangle.build(frameWidth, frameHeight));
|
||||
WasmLog.log("...drawing...");
|
||||
|
||||
system.exportDiagramGraphic(ug);
|
||||
system.exportDiagramGraphic(ug, new FileFormatOption(FileFormat.PNG));
|
||||
|
||||
WasmLog.log("done!");
|
||||
|
||||
|
@ -55,6 +55,7 @@ import net.sourceforge.plantuml.BlockUmlBuilder;
|
||||
import net.sourceforge.plantuml.EmptyImageBuilder;
|
||||
import net.sourceforge.plantuml.ErrorUml;
|
||||
import net.sourceforge.plantuml.FileFormat;
|
||||
import net.sourceforge.plantuml.FileFormatOption;
|
||||
import net.sourceforge.plantuml.api.ImageDataSimple;
|
||||
import net.sourceforge.plantuml.core.Diagram;
|
||||
import net.sourceforge.plantuml.core.ImageData;
|
||||
@ -124,7 +125,7 @@ public class Raw {
|
||||
ug.resetMax();
|
||||
WasmLog.log("...drawing...");
|
||||
|
||||
system.exportDiagramGraphic(ug);
|
||||
system.exportDiagramGraphic(ug, new FileFormatOption(FileFormat.PNG));
|
||||
|
||||
final int width = (int) (2 + ug.getMaxX());
|
||||
final int height = (int) (2 + ug.getMaxY());
|
||||
@ -208,7 +209,7 @@ public class Raw {
|
||||
ug.resetMax();
|
||||
WasmLog.log("...drawing...");
|
||||
|
||||
system.exportDiagramGraphic(ug);
|
||||
system.exportDiagramGraphic(ug, new FileFormatOption(FileFormat.PNG));
|
||||
|
||||
final int width = (int) (2 + ug.getMaxX());
|
||||
final int height = (int) (2 + ug.getMaxY());
|
||||
|
@ -376,13 +376,13 @@ public abstract class CucaDiagram extends UmlDiagram implements GroupHierarchy,
|
||||
// ::done
|
||||
|
||||
@Override
|
||||
final public void exportDiagramGraphic(UGraphic ug) {
|
||||
final public void exportDiagramGraphic(UGraphic ug, FileFormatOption fileFormatOption) {
|
||||
final CucaDiagramFileMaker maker = new CucaDiagramFileMakerSmetana(this, ug.getStringBounder());
|
||||
maker.createOneGraphic(ug);
|
||||
}
|
||||
|
||||
@Override
|
||||
final protected TextBlock getTextBlock() {
|
||||
final protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
@ -114,14 +114,14 @@ public abstract class AbstractPSystem implements Diagram {
|
||||
}
|
||||
|
||||
final public String getMetadata() {
|
||||
if (source == null)
|
||||
if (source == null)
|
||||
return getVersion();
|
||||
|
||||
|
||||
final String rawString = source.getRawString("\n");
|
||||
final String plainString = source.getPlainString("\n");
|
||||
if (rawString != null && rawString.equals(plainString))
|
||||
if (rawString != null && rawString.equals(plainString))
|
||||
return rawString + BackSlash.NEWLINE + getVersion();
|
||||
|
||||
|
||||
return rawString + BackSlash.NEWLINE + plainString + BackSlash.NEWLINE + getVersion();
|
||||
}
|
||||
|
||||
@ -130,9 +130,9 @@ public abstract class AbstractPSystem implements Diagram {
|
||||
}
|
||||
|
||||
final public long seed() {
|
||||
if (source == null)
|
||||
if (source == null)
|
||||
return 42;
|
||||
|
||||
|
||||
return getSource().seed();
|
||||
}
|
||||
|
||||
@ -159,9 +159,9 @@ public abstract class AbstractPSystem implements Diagram {
|
||||
}
|
||||
|
||||
public DisplayPositionned getTitle() {
|
||||
if (source == null)
|
||||
if (source == null)
|
||||
return DisplayPositioned.single(Display.empty(), HorizontalAlignment.CENTER, VerticalAlignment.TOP);
|
||||
|
||||
|
||||
return DisplayPositioned.single(source.getTitle(), HorizontalAlignment.CENTER, VerticalAlignment.TOP);
|
||||
}
|
||||
|
||||
@ -247,7 +247,7 @@ public abstract class AbstractPSystem implements Diagram {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportDiagramGraphic(UGraphic ug) {
|
||||
public void exportDiagramGraphic(UGraphic ug, FileFormatOption fileFormatOption) {
|
||||
final UFont font = UFont.monospaced(14);
|
||||
final FontConfiguration fc = FontConfiguration.blackBlueTrue(font);
|
||||
final UText text = UText.build("Not implemented yet for " + getClass().getName(), fc);
|
||||
|
@ -440,9 +440,11 @@ public class Option {
|
||||
|
||||
} else if (s.equalsIgnoreCase("-preproc")) {
|
||||
preprocessorOutput = OptionPreprocOutputMode.NORMAL;
|
||||
setFileFormatOption(new FileFormatOption(FileFormat.PREPROC));
|
||||
|
||||
} else if (s.equalsIgnoreCase("-cypher")) {
|
||||
preprocessorOutput = OptionPreprocOutputMode.CYPHER;
|
||||
setFileFormatOption(new FileFormatOption(FileFormat.PREPROC));
|
||||
|
||||
} else if (s.equalsIgnoreCase("-checkmetadata")) {
|
||||
checkMetadata = true;
|
||||
|
@ -48,6 +48,7 @@ import net.sourceforge.plantuml.activitydiagram3.ActivityDiagramFactory3;
|
||||
import net.sourceforge.plantuml.api.PSystemFactory;
|
||||
import net.sourceforge.plantuml.board.BoardDiagramFactory;
|
||||
import net.sourceforge.plantuml.bpm.BpmDiagramFactory;
|
||||
import net.sourceforge.plantuml.chronology.ChronologyDiagramFactory;
|
||||
import net.sourceforge.plantuml.classdiagram.ClassDiagramFactory;
|
||||
import net.sourceforge.plantuml.core.Diagram;
|
||||
import net.sourceforge.plantuml.core.DiagramType;
|
||||
@ -223,7 +224,8 @@ public class PSystemBuilder {
|
||||
// factories.add(new PSystemSudokuFactory());
|
||||
// ::done
|
||||
|
||||
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or __LGPL__
|
||||
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or
|
||||
// __LGPL__
|
||||
factories.add(new PSystemJcckitFactory());
|
||||
factories.add(new PSystemSudokuFactory());
|
||||
// ::done
|
||||
@ -247,11 +249,13 @@ public class PSystemBuilder {
|
||||
// ::done
|
||||
|
||||
factories.add(new PSystemCharlieFactory());
|
||||
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or __LGPL__
|
||||
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or
|
||||
// __LGPL__
|
||||
factories.add(new PSystemXearthFactory());
|
||||
// ::done
|
||||
|
||||
factories.add(new GanttDiagramFactory());
|
||||
factories.add(new ChronologyDiagramFactory());
|
||||
factories.add(new FlowDiagramFactory());
|
||||
|
||||
// ::comment when __CORE__
|
||||
|
@ -66,14 +66,13 @@ public abstract class PlainDiagram extends AbstractPSystem {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void exportDiagramGraphic(UGraphic ug) {
|
||||
final FileFormatOption option = new FileFormatOption(FileFormat.PNG);
|
||||
public void exportDiagramGraphic(UGraphic ug, FileFormatOption fileFormatOption) {
|
||||
try {
|
||||
final UDrawable rootDrawable = getRootDrawable(option);
|
||||
final UDrawable rootDrawable = getRootDrawable(fileFormatOption);
|
||||
rootDrawable.drawU(ug);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
super.exportDiagramGraphic(ug);
|
||||
super.exportDiagramGraphic(ug, fileFormatOption);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,6 +54,7 @@ import net.sourceforge.plantuml.klimt.shape.GraphicStrings;
|
||||
import net.sourceforge.plantuml.klimt.shape.TextBlock;
|
||||
import net.sourceforge.plantuml.preproc.Defines;
|
||||
import net.sourceforge.plantuml.security.SFile;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.utils.Log;
|
||||
|
||||
public class SourceStringReader {
|
||||
@ -157,6 +158,14 @@ public class SourceStringReader {
|
||||
noValidStartFound(os, fileFormatOption);
|
||||
return null;
|
||||
}
|
||||
if (fileFormatOption.getFileFormat() == FileFormat.PREPROC) {
|
||||
final BlockUml first = blocks.get(0);
|
||||
for (StringLocated s : first.getData()) {
|
||||
os.write(s.getString().getBytes(UTF_8));
|
||||
os.write("\n".getBytes(UTF_8));
|
||||
}
|
||||
return new DiagramDescription("PREPROC");
|
||||
}
|
||||
for (BlockUml b : blocks) {
|
||||
final Diagram system = b.getDiagram();
|
||||
final int nbInSystem = system.getNbImages();
|
||||
@ -231,7 +240,8 @@ public class SourceStringReader {
|
||||
}
|
||||
|
||||
public ImageData noValidStartFound(OutputStream os, FileFormatOption fileFormatOption) throws IOException {
|
||||
final TextBlock error = GraphicStrings.createForError(Arrays.asList("No valid @start/@end found, please check the version"),
|
||||
final TextBlock error = GraphicStrings.createForError(
|
||||
Arrays.asList("No valid @start/@end found, please check the version"),
|
||||
fileFormatOption.isUseRedForError());
|
||||
|
||||
return plainImageBuilder(error, fileFormatOption).write(os);
|
||||
|
@ -253,11 +253,11 @@ public abstract class TitledDiagram extends AbstractPSystem implements Diagram,
|
||||
|
||||
}
|
||||
|
||||
protected abstract TextBlock getTextBlock();
|
||||
protected abstract TextBlock getTextMainBlock(FileFormatOption fileFormatOption);
|
||||
|
||||
@Override
|
||||
public void exportDiagramGraphic(UGraphic ug) {
|
||||
final TextBlock textBlock = getTextBlock();
|
||||
public void exportDiagramGraphic(UGraphic ug, FileFormatOption fileFormatOption) {
|
||||
final TextBlock textBlock = getTextMainBlock(fileFormatOption);
|
||||
textBlock.drawU(ug);
|
||||
}
|
||||
|
||||
|
@ -61,6 +61,7 @@ import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexPartialMatch;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -81,9 +82,7 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
new RegexLeaf("CODE", "([%pLN][%pLN_.]*)"), //
|
||||
new RegexLeaf("BAR", "(?:==+)[%s]*([%pLN_.]+)[%s]*(?:==+)"), //
|
||||
new RegexLeaf("QUOTED", "[%g]([^%g]+)[%g](?:[%s]+as[%s]+([%pLN_.]+))?"))), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
ColorParser.exp2(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
@ -105,9 +104,7 @@ public class CommandLinkActivity extends SingleLineCommand2<ActivityDiagram> {
|
||||
new RegexLeaf("BAR2", "(?:==+)[%s]*([%pLN_.]+)[%s]*(?:==+)"), //
|
||||
new RegexLeaf("QUOTED2", "[%g]([^%g]+)[%g](?:[%s]+as[%s]+([%pLN][%pLN_.]*))?"), //
|
||||
new RegexLeaf("QUOTED_INVISIBLE2", "(\\w.*?)")), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE2"), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
new RegexLeaf("in"), //
|
||||
|
@ -64,6 +64,7 @@ import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.text.BackSlash;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
@ -91,9 +92,7 @@ public class CommandLinkLongActivity extends CommandMultilines2<ActivityDiagram>
|
||||
new RegexLeaf("CODE", "([%pLN][%pLN_.]*)"), //
|
||||
new RegexLeaf("BAR", "(?:==+)[%s]*([%pLN_.]+)[%s]*(?:==+)"), //
|
||||
new RegexLeaf("QUOTED", "[%g]([^%g]+)[%g](?:[%s]+as[%s]+([%pLN_.]+))?"))), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("BACKCOLOR", "(#\\w+)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -52,6 +52,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public class CommandPartition extends SingleLineCommand2<ActivityDiagram> {
|
||||
@ -69,9 +70,7 @@ public class CommandPartition extends SingleLineCommand2<ActivityDiagram> {
|
||||
new RegexOr(//
|
||||
color().getRegex(), //
|
||||
new RegexLeaf("LEGACYCOLORIGNORED", "(#[0-9a-fA-F]{6}|#?\\w+)?")), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("\\{?"), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
@ -89,12 +88,10 @@ public class CommandPartition extends SingleLineCommand2<ActivityDiagram> {
|
||||
final Entity p = diagram.getCurrentGroup();
|
||||
|
||||
final Colors colors = color().getColor(arg, diagram.getSkinParam().getIHtmlColorSet());
|
||||
if (colors.isEmpty() == false) {
|
||||
if (colors.isEmpty() == false)
|
||||
p.setColors(colors);
|
||||
}
|
||||
if (arg.get("STEREOTYPE", 0) != null) {
|
||||
p.setStereotype(Stereotype.build(arg.get("STEREOTYPE", 0)));
|
||||
}
|
||||
|
||||
p.setStereotype(Stereotype.build(arg.get("STEREOTYPE", 0)));
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -40,7 +40,6 @@ import java.io.OutputStream;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.sourceforge.plantuml.FileFormat;
|
||||
import net.sourceforge.plantuml.FileFormatOption;
|
||||
import net.sourceforge.plantuml.UmlDiagram;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.BoxStyle;
|
||||
@ -208,8 +207,7 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
final FileFormatOption fileFormatOption = new FileFormatOption(FileFormat.PNG);
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
final StringBounder stringBounder = fileFormatOption.getDefaultStringBounder(getSkinParam());
|
||||
return getTextBlock(stringBounder);
|
||||
}
|
||||
@ -318,10 +316,10 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||
return CommandExecutionResult.error("Cannot find switch");
|
||||
}
|
||||
|
||||
public void startIf(Display test, Display whenThen, HColor color, Url url) {
|
||||
public void startIf(Display test, Display whenThen, HColor color, Url url, Stereotype stereotype) {
|
||||
manageSwimlaneStrategy();
|
||||
final InstructionIf instructionIf = new InstructionIf(swinlanes.getCurrentSwimlane(), current(), test,
|
||||
LinkRendering.none().withDisplay(whenThen), nextLinkRenderer(), color, getSkinParam(), url);
|
||||
LinkRendering.none().withDisplay(whenThen), nextLinkRenderer(), color, getSkinParam(), url, stereotype);
|
||||
current().add(instructionIf);
|
||||
setNextLinkRendererInternal(LinkRendering.none());
|
||||
setCurrent(instructionIf);
|
||||
@ -392,7 +390,8 @@ public class ActivityDiagram3 extends UmlDiagram {
|
||||
manageSwimlaneStrategy();
|
||||
if (current() instanceof InstructionRepeat) {
|
||||
final InstructionRepeat instructionRepeat = (InstructionRepeat) current();
|
||||
instructionRepeat.setBackward(label, swinlanes.getCurrentSwimlane(), boxStyle, incoming1, incoming2, stereotype);
|
||||
instructionRepeat.setBackward(label, swinlanes.getCurrentSwimlane(), boxStyle, incoming1, incoming2,
|
||||
stereotype);
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
if (current() instanceof InstructionWhile) {
|
||||
|
@ -57,6 +57,7 @@ import net.sourceforge.plantuml.klimt.shape.TextBlock;
|
||||
import net.sourceforge.plantuml.klimt.shape.TextBlockUtils;
|
||||
import net.sourceforge.plantuml.sequencediagram.NotePosition;
|
||||
import net.sourceforge.plantuml.sequencediagram.NoteType;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.style.ISkinParam;
|
||||
import net.sourceforge.plantuml.style.PName;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
@ -95,12 +96,12 @@ public class Branch {
|
||||
}
|
||||
|
||||
public Branch(StyleBuilder styleBuilder, Swimlane swimlane, LinkRendering labelPositive, Display labelTest,
|
||||
HColor color, LinkRendering inlabel) {
|
||||
HColor color, LinkRendering inlabel, Stereotype stereotype) {
|
||||
this.inlabel = Objects.requireNonNull(inlabel);
|
||||
this.labelTest = Objects.requireNonNull(labelTest);
|
||||
this.labelPositive = Objects.requireNonNull(labelPositive);
|
||||
|
||||
final Style style = getDefaultStyleDefinitionDiamond().getMergedStyle(styleBuilder);
|
||||
final Style style = getDefaultStyleDefinitionDiamond().withTOBECHANGED(stereotype).getMergedStyle(styleBuilder);
|
||||
this.color = color == null
|
||||
? style.value(PName.BackGroundColor).asColor(styleBuilder.getSkinParam().getIHtmlColorSet())
|
||||
: color;
|
||||
|
@ -47,7 +47,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.FtileDecorateWelding;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.FtileFactory;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.WeldingPoint;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.FtileWithNoteOpale;
|
||||
import net.sourceforge.plantuml.activitydiagram3.gtile.Gtile;
|
||||
import net.sourceforge.plantuml.activitydiagram3.gtile.GtileIfAlone;
|
||||
import net.sourceforge.plantuml.activitydiagram3.gtile.GtileIfHexagon;
|
||||
@ -56,9 +55,9 @@ import net.sourceforge.plantuml.klimt.color.Colors;
|
||||
import net.sourceforge.plantuml.klimt.color.HColor;
|
||||
import net.sourceforge.plantuml.klimt.creole.Display;
|
||||
import net.sourceforge.plantuml.klimt.font.StringBounder;
|
||||
import net.sourceforge.plantuml.klimt.geom.VerticalAlignment;
|
||||
import net.sourceforge.plantuml.sequencediagram.NotePosition;
|
||||
import net.sourceforge.plantuml.sequencediagram.NoteType;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.style.ISkinParam;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
|
||||
@ -75,6 +74,7 @@ public class InstructionIf extends WithNote implements Instruction, InstructionC
|
||||
private Branch current;
|
||||
private final LinkRendering topInlinkRendering;
|
||||
private LinkRendering outColor = LinkRendering.none();
|
||||
private final Stereotype stereotype;
|
||||
|
||||
private final Swimlane swimlane;
|
||||
|
||||
@ -91,14 +91,15 @@ public class InstructionIf extends WithNote implements Instruction, InstructionC
|
||||
}
|
||||
|
||||
public InstructionIf(Swimlane swimlane, Instruction parent, Display labelTest, LinkRendering whenThen,
|
||||
LinkRendering inlinkRendering, HColor color, ISkinParam skinParam, Url url) {
|
||||
LinkRendering inlinkRendering, HColor color, ISkinParam skinParam, Url url, Stereotype stereotype) {
|
||||
this.url = url;
|
||||
this.stereotype = stereotype;
|
||||
this.parent = parent;
|
||||
this.skinParam = skinParam;
|
||||
this.topInlinkRendering = Objects.requireNonNull(inlinkRendering);
|
||||
this.swimlane = swimlane;
|
||||
this.thens.add(new Branch(skinParam.getCurrentStyleBuilder(), swimlane, whenThen, labelTest, color,
|
||||
LinkRendering.none()));
|
||||
LinkRendering.none(), stereotype));
|
||||
this.current = this.thens.get(0);
|
||||
}
|
||||
|
||||
@ -138,11 +139,11 @@ public class InstructionIf extends WithNote implements Instruction, InstructionC
|
||||
|
||||
if (elseBranch == null)
|
||||
this.elseBranch = new Branch(skinParam.getCurrentStyleBuilder(), swimlane, LinkRendering.none(),
|
||||
Display.NULL, null, LinkRendering.none());
|
||||
Display.NULL, null, LinkRendering.none(), stereotype);
|
||||
|
||||
elseBranch.updateFtile(factory);
|
||||
Ftile result = factory.createIf(swimlane, thens, elseBranch, outColor, topInlinkRendering, url,
|
||||
getPositionedNotes());
|
||||
getPositionedNotes(), stereotype);
|
||||
// if (getPositionedNotes().size() > 0)
|
||||
// result = FtileWithNoteOpale.create(result, getPositionedNotes(), false, VerticalAlignment.CENTER);
|
||||
|
||||
@ -169,7 +170,7 @@ public class InstructionIf extends WithNote implements Instruction, InstructionC
|
||||
|
||||
this.current.setInlinkRendering(nextLinkRenderer);
|
||||
this.elseBranch = new Branch(skinParam.getCurrentStyleBuilder(), swimlane, whenElse, Display.NULL, null,
|
||||
LinkRendering.none());
|
||||
LinkRendering.none(), stereotype);
|
||||
this.current = elseBranch;
|
||||
return true;
|
||||
}
|
||||
@ -180,7 +181,8 @@ public class InstructionIf extends WithNote implements Instruction, InstructionC
|
||||
return false;
|
||||
|
||||
this.current.setSpecial(nextLinkRenderer);
|
||||
this.current = new Branch(skinParam.getCurrentStyleBuilder(), swimlane, whenThen, test, color, inlabel);
|
||||
this.current = new Branch(skinParam.getCurrentStyleBuilder(), swimlane, whenThen, test, color, inlabel,
|
||||
stereotype);
|
||||
this.thens.add(current);
|
||||
return true;
|
||||
|
||||
@ -190,7 +192,7 @@ public class InstructionIf extends WithNote implements Instruction, InstructionC
|
||||
endifCalled = true;
|
||||
if (elseBranch == null)
|
||||
this.elseBranch = new Branch(skinParam.getCurrentStyleBuilder(), swimlane, LinkRendering.none(),
|
||||
Display.NULL, null, LinkRendering.none());
|
||||
Display.NULL, null, LinkRendering.none(), stereotype);
|
||||
|
||||
this.elseBranch.setSpecial(nextLinkRenderer);
|
||||
this.current.setInlinkRendering(nextLinkRenderer);
|
||||
|
@ -58,7 +58,7 @@ import net.sourceforge.plantuml.sequencediagram.NoteType;
|
||||
import net.sourceforge.plantuml.style.ISkinParam;
|
||||
|
||||
public class InstructionSwitch extends WithNote implements Instruction, InstructionCollection {
|
||||
// ::remove folder when __HAXE__
|
||||
// ::remove folder when __HAXE__
|
||||
|
||||
private final List<Branch> switches = new ArrayList<>();
|
||||
private final ISkinParam skinParam;
|
||||
@ -166,7 +166,7 @@ public class InstructionSwitch extends WithNote implements Instruction, Instruct
|
||||
this.current.setSpecial(nextLinkRenderer);
|
||||
this.current = new Branch(skinParam.getCurrentStyleBuilder(), swimlane,
|
||||
LinkRendering.none().withDisplay(labelCase), labelCase, null,
|
||||
LinkRendering.none().withDisplay(labelCase));
|
||||
LinkRendering.none().withDisplay(labelCase), null);
|
||||
this.switches.add(this.current);
|
||||
return true;
|
||||
}
|
||||
|
@ -52,6 +52,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -104,9 +105,7 @@ public class CommandActivity3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
return RegexConcat.build(CommandActivity3.class.getName(), RegexLeaf.start(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf(":"), //
|
||||
new RegexLeaf("LABEL", "(.*?)"), //
|
||||
new RegexLeaf("STYLE", endingGroupShort()), //
|
||||
|
@ -78,9 +78,8 @@ public class CommandArrow3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
diagram.setColorNextArrow(rainbow);
|
||||
}
|
||||
final String label = arg.get("LABEL", 0);
|
||||
if (label != null && label.length() > 0) {
|
||||
if (label != null && label.length() > 0)
|
||||
diagram.setLabelNextArrow(Display.getWithNewlines(label));
|
||||
}
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -47,6 +47,8 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -63,7 +65,7 @@ public class CommandIf2 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
UrlBuilder.OPTIONAL, //
|
||||
ColorParser.exp4(), //
|
||||
new RegexLeaf("if"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("\\("), //
|
||||
new RegexLeaf("TEST", "(.*?)"), //
|
||||
new RegexLeaf("\\)"), //
|
||||
@ -85,9 +87,8 @@ public class CommandIf2 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
final HColor color = s == null ? null : diagram.getSkinParam().getIHtmlColorSet().getColor(s);
|
||||
|
||||
String test = arg.get("TEST", 0);
|
||||
if (test.length() == 0) {
|
||||
if (test.length() == 0)
|
||||
test = null;
|
||||
}
|
||||
|
||||
final Url url;
|
||||
if (arg.get("URL", 0) == null) {
|
||||
@ -96,8 +97,9 @@ public class CommandIf2 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
final UrlBuilder urlBuilder = new UrlBuilder(diagram.getSkinParam().getValue("topurl"), UrlMode.STRICT);
|
||||
url = urlBuilder.getUrl(arg.get("URL", 0));
|
||||
}
|
||||
final Stereotype stereotype = Stereotype.build(arg.get("STEREO", 0));
|
||||
|
||||
diagram.startIf(Display.getWithNewlines(test), Display.getWithNewlines(arg.get("WHEN", 0)), color, url);
|
||||
diagram.startIf(Display.getWithNewlines(test), Display.getWithNewlines(arg.get("WHEN", 0)), color, url, stereotype);
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -82,10 +82,10 @@ public class CommandIf4 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
final HColor color = s == null ? null : diagram.getSkinParam().getIHtmlColorSet().getColor(s);
|
||||
|
||||
String test = arg.get("TEST", 0);
|
||||
if (test.length() == 0) {
|
||||
if (test.length() == 0)
|
||||
test = null;
|
||||
}
|
||||
diagram.startIf(Display.getWithNewlines(test), Display.getWithNewlines(arg.get("WHEN", 0)), color, null);
|
||||
|
||||
diagram.startIf(Display.getWithNewlines(test), Display.getWithNewlines(arg.get("WHEN", 0)), color, null, null);
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ public class CommandIfLegacy1 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
protected CommandExecutionResult executeArg(ActivityDiagram3 diagram, LineLocation location, RegexResult arg) {
|
||||
|
||||
diagram.startIf(Display.getWithNewlines(arg.get("TEST", 0)), Display.getWithNewlines(arg.get("WHEN", 0)), null,
|
||||
null);
|
||||
null, null);
|
||||
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
@ -54,6 +54,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.style.PName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
@ -77,9 +78,7 @@ public class CommandPartition3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
color("BACK2").getRegex())), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("\\{?"), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
@ -52,6 +52,7 @@ import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public class CommandRepeat3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
@ -62,7 +63,7 @@ public class CommandRepeat3 extends SingleLineCommand2<ActivityDiagram3> {
|
||||
|
||||
static IRegex getRegexConcat() {
|
||||
return RegexConcat.build(CommandRepeat3.class.getName(), RegexLeaf.start(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
ColorParser.exp4(), //
|
||||
new RegexLeaf("repeat"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
|
@ -89,7 +89,7 @@ public interface FtileFactory {
|
||||
HColor color, Instruction specialOut, Ftile backward, LinkRendering incoming1, LinkRendering incoming2);
|
||||
|
||||
public Ftile createIf(Swimlane swimlane, List<Branch> thens, Branch elseBranch, LinkRendering outColor,
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes);
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes, Stereotype stereotype);
|
||||
|
||||
public Ftile createSwitch(Swimlane swimlane, List<Branch> branches, LinkRendering afterEndwhile,
|
||||
LinkRendering topInlinkRendering, Display labelTest);
|
||||
|
@ -188,8 +188,8 @@ public class FtileFactoryDelegator implements FtileFactory {
|
||||
|
||||
@Override
|
||||
public Ftile createIf(Swimlane swimlane, List<Branch> thens, Branch elseBranch, LinkRendering afterEndwhile,
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes) {
|
||||
return factory.createIf(swimlane, thens, elseBranch, afterEndwhile, topInlinkRendering, url, notes);
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes, Stereotype stereotype) {
|
||||
return factory.createIf(swimlane, thens, elseBranch, afterEndwhile, topInlinkRendering, url, notes, stereotype);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -48,6 +48,7 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
|
||||
import net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.cond.ConditionalBuilder;
|
||||
import net.sourceforge.plantuml.klimt.color.HColor;
|
||||
import net.sourceforge.plantuml.skin.Pragma;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.style.PName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.svek.ConditionEndStyle;
|
||||
@ -65,14 +66,14 @@ public class FtileFactoryDelegatorIf extends FtileFactoryDelegator {
|
||||
|
||||
@Override
|
||||
public Ftile createIf(Swimlane swimlane, List<Branch> thens, Branch elseBranch, LinkRendering afterEndwhile,
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes) {
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes, Stereotype stereotype) {
|
||||
|
||||
final ConditionStyle conditionStyle = skinParam().getConditionStyle();
|
||||
final ConditionEndStyle conditionEndStyle = skinParam().getConditionEndStyle();
|
||||
final Branch branch0 = thens.get(0);
|
||||
|
||||
final Style styleArrow = getDefaultStyleDefinitionArrow().getMergedStyle(skinParam().getCurrentStyleBuilder());
|
||||
final Style styleDiamond = getDefaultStyleDefinitionDiamond()
|
||||
final Style styleDiamond = getDefaultStyleDefinitionDiamond().withTOBECHANGED(stereotype)
|
||||
.getMergedStyle(skinParam().getCurrentStyleBuilder());
|
||||
final HColor backColor = branch0.getColor() == null
|
||||
? styleDiamond.value(PName.BackGroundColor).asColor(skinParam().getIHtmlColorSet())
|
||||
|
@ -81,9 +81,9 @@ class FtileForkInner extends AbstractFtile {
|
||||
|
||||
public static Set<Swimlane> mergeSwimlanes(List<Ftile> tiles) {
|
||||
final Set<Swimlane> result = new HashSet<>();
|
||||
for (Ftile tile : tiles) {
|
||||
for (Ftile tile : tiles)
|
||||
result.addAll(tile.getSwimlanes());
|
||||
}
|
||||
|
||||
return Collections.unmodifiableSet(result);
|
||||
}
|
||||
|
||||
@ -105,9 +105,9 @@ class FtileForkInner extends AbstractFtile {
|
||||
for (Ftile ftile : forks) {
|
||||
final XDimension2D dim = ftile.calculateDimension(stringBounder);
|
||||
width += dim.getWidth();
|
||||
if (dim.getHeight() > height) {
|
||||
if (dim.getHeight() > height)
|
||||
height = dim.getHeight();
|
||||
}
|
||||
|
||||
}
|
||||
final XDimension2D dimTotal = new XDimension2D(width, height);
|
||||
return new FtileGeometry(dimTotal, dimTotal.getWidth() / 2, 0, dimTotal.getHeight());
|
||||
@ -116,9 +116,9 @@ class FtileForkInner extends AbstractFtile {
|
||||
public UTranslate getTranslateFor(Ftile searched, StringBounder stringBounder) {
|
||||
double xpos = 0;
|
||||
for (Ftile ftile : forks) {
|
||||
if (ftile == searched) {
|
||||
if (ftile == searched)
|
||||
return UTranslate.dx(xpos);
|
||||
}
|
||||
|
||||
final XDimension2D dim = ftile.calculateDimension(stringBounder);
|
||||
xpos += dim.getWidth();
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ public class ParallelBuilderFork extends AbstractParallelFtilesBuilder {
|
||||
Ftile result = middle;
|
||||
final List<Connection> conns = new ArrayList<>();
|
||||
final Swimlane swimlaneBlack = in;
|
||||
final Style style = getStyleSignature().getMergedStyle(skinParam().getCurrentStyleBuilder());
|
||||
final Style style = getStyleSignatureArrow().getMergedStyle(skinParam().getCurrentStyleBuilder());
|
||||
final Ftile black = new FtileBlackBlock(skinParam(), swimlaneBlack);
|
||||
double x = 0;
|
||||
for (Ftile tmp : list99) {
|
||||
|
@ -169,7 +169,7 @@ public class VCompactFactory implements FtileFactory {
|
||||
|
||||
@Override
|
||||
public Ftile createIf(Swimlane swimlane, List<Branch> thens, Branch elseBranch, LinkRendering afterEndwhile,
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes) {
|
||||
LinkRendering topInlinkRendering, Url url, Collection<PositionedNote> notes, Stereotype stereotype) {
|
||||
final List<Ftile> ftiles = new ArrayList<>();
|
||||
for (Branch branch : thens)
|
||||
ftiles.add(branch.getFtile());
|
||||
|
@ -73,11 +73,11 @@ public class BoardDiagram extends UmlDiagram {
|
||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return new AbstractTextBlock() {
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
|
@ -194,7 +194,7 @@ public class BpmDiagram extends UmlDiagram {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
853
src/net/sourceforge/plantuml/chronology/ChronologyDiagram.java
Normal file
853
src/net/sourceforge/plantuml/chronology/ChronologyDiagram.java
Normal file
@ -0,0 +1,853 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.sourceforge.plantuml.FileFormatOption;
|
||||
import net.sourceforge.plantuml.TitledDiagram;
|
||||
import net.sourceforge.plantuml.WithSprite;
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.core.DiagramDescription;
|
||||
import net.sourceforge.plantuml.core.ImageData;
|
||||
import net.sourceforge.plantuml.core.UmlSource;
|
||||
import net.sourceforge.plantuml.klimt.UTranslate;
|
||||
import net.sourceforge.plantuml.klimt.color.HColorSet;
|
||||
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
|
||||
import net.sourceforge.plantuml.klimt.font.StringBounder;
|
||||
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
|
||||
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
|
||||
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
|
||||
import net.sourceforge.plantuml.klimt.shape.TextBlock;
|
||||
import net.sourceforge.plantuml.project.GanttStyle;
|
||||
import net.sourceforge.plantuml.project.LabelPosition;
|
||||
import net.sourceforge.plantuml.project.LabelStrategy;
|
||||
import net.sourceforge.plantuml.project.LoadPlanable;
|
||||
import net.sourceforge.plantuml.project.TimeHeaderParameters;
|
||||
import net.sourceforge.plantuml.project.ToTaskDraw;
|
||||
import net.sourceforge.plantuml.project.core.PrintScale;
|
||||
import net.sourceforge.plantuml.project.core.Task;
|
||||
import net.sourceforge.plantuml.project.core.TaskCode;
|
||||
import net.sourceforge.plantuml.project.core.TaskGroup;
|
||||
import net.sourceforge.plantuml.project.draw.TaskDraw;
|
||||
import net.sourceforge.plantuml.project.draw.TaskDrawDiamond;
|
||||
import net.sourceforge.plantuml.project.draw.TimeHeader;
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.timescale.TimeScale;
|
||||
import net.sourceforge.plantuml.real.Real;
|
||||
import net.sourceforge.plantuml.real.RealOrigin;
|
||||
import net.sourceforge.plantuml.real.RealUtils;
|
||||
import net.sourceforge.plantuml.skin.UmlDiagramType;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
|
||||
public class ChronologyDiagram extends TitledDiagram implements ToTaskDraw, WithSprite, GanttStyle {
|
||||
|
||||
private final Map<Task, TaskDraw> draws = new LinkedHashMap<Task, TaskDraw>();
|
||||
private final Map<TaskCode, Task> tasks = new LinkedHashMap<TaskCode, Task>();
|
||||
private final Map<String, Task> byShortName = new HashMap<String, Task>();
|
||||
// private final List<GanttConstraint> constraints = new ArrayList<>();
|
||||
private final HColorSet colorSet = HColorSet.instance();
|
||||
//
|
||||
// private final OpenClose openClose = new OpenClose();
|
||||
//
|
||||
// private final Map<String, Resource> resources = new LinkedHashMap<String, Resource>();
|
||||
// private final Map<Day, HColor> colorDaysToday = new HashMap<Day, HColor>();
|
||||
// private final Map<Day, HColor> colorDaysInternal = new HashMap<Day, HColor>();
|
||||
// private final Map<DayOfWeek, HColor> colorDaysOfWeek = new HashMap<DayOfWeek, HColor>();
|
||||
// private final Map<Day, String> nameDays = new HashMap<Day, String>();
|
||||
private LabelStrategy labelStrategy = new LabelStrategy(LabelPosition.LEGACY, HorizontalAlignment.LEFT);
|
||||
//
|
||||
// // Let's follow ISO-8601 rules
|
||||
// private WeekNumberStrategy weekNumberStrategy = new WeekNumberStrategy(DayOfWeek.MONDAY, 4);
|
||||
//
|
||||
// private PrintScale printScale = PrintScale.DAILY;
|
||||
// private double factorScale = 1.0;
|
||||
private Locale locale = Locale.ENGLISH;
|
||||
//
|
||||
// private Day today;
|
||||
// private double totalHeightWithoutFooter;
|
||||
private Day min;
|
||||
private Day max;
|
||||
private TimeScaleChronology timeScale;
|
||||
//
|
||||
// private Day printStart;
|
||||
// private Day printEnd;
|
||||
//
|
||||
private final RealOrigin origin = RealUtils.createOrigin();
|
||||
//
|
||||
// private int defaultCompletion = 100;
|
||||
//
|
||||
// private Task it;
|
||||
// private Resource they;
|
||||
|
||||
public CommandExecutionResult changeLanguage(String lang) {
|
||||
this.locale = new Locale(lang);
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
public DiagramDescription getDescription() {
|
||||
return new DiagramDescription("(Chronology)");
|
||||
}
|
||||
|
||||
// public void setWeekNumberStrategy(DayOfWeek firstDayOfWeek, int minimalDaysInFirstWeek) {
|
||||
// this.weekNumberStrategy = new WeekNumberStrategy(firstDayOfWeek, minimalDaysInFirstWeek);
|
||||
// }
|
||||
|
||||
public ChronologyDiagram(UmlSource source) {
|
||||
super(source, UmlDiagramType.CHRONOLOGY, null);
|
||||
}
|
||||
|
||||
// public final int getDpi(FileFormatOption fileFormatOption) {
|
||||
// return 96;
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
// public void setPrintScale(PrintScale printScale) {
|
||||
// this.printScale = printScale;
|
||||
// }
|
||||
//
|
||||
// public void setFactorScale(double factorScale) {
|
||||
// this.factorScale = factorScale;
|
||||
// }
|
||||
//
|
||||
// private double getFactorScale() {
|
||||
// return this.printScale.getDefaultScale() * this.factorScale;
|
||||
// }
|
||||
//
|
||||
// private boolean isHidden(Task task) {
|
||||
// if (printStart == null || task instanceof TaskSeparator)
|
||||
// return false;
|
||||
//
|
||||
// if (task.getEnd().compareTo(min) < 0)
|
||||
// return true;
|
||||
//
|
||||
// if (task.getStart().compareTo(max) > 0)
|
||||
// return true;
|
||||
//
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String checkFinalError() {
|
||||
// try {
|
||||
// initMinMax();
|
||||
// } catch (ImpossibleSolvingException ex) {
|
||||
// return ex.getMessage();
|
||||
// }
|
||||
// return null;
|
||||
// }
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
final StringBounder stringBounder = fileFormatOption.getDefaultStringBounder(getSkinParam());
|
||||
initMinMax();
|
||||
|
||||
final TimeHeader timeHeader = new TimeHeaderChronology(stringBounder, thParam(), PrintScale.DAILY,
|
||||
this.timeScale);
|
||||
initTaskAndResourceDraws(timeHeader.getTimeScale(), timeHeader.getFullHeaderHeight(stringBounder),
|
||||
stringBounder);
|
||||
|
||||
return new AbstractTextBlock() {
|
||||
public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||
return new XDimension2D(1000, 1000);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawU(UGraphic ug) {
|
||||
timeHeader.drawTimeHeader(ug, 200);
|
||||
drawTasksRect(ug);
|
||||
drawTasksTitle(ug, 0, 0);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
// private double getTitlesColumnWidth(StringBounder stringBounder) {
|
||||
// if (labelStrategy.titleInside())
|
||||
// return 0;
|
||||
//
|
||||
// double width = 0;
|
||||
// for (Task task : tasks.values()) {
|
||||
// if (isHidden(task))
|
||||
// continue;
|
||||
//
|
||||
// width = Math.max(width, draws.get(task).getTitleWidth(stringBounder));
|
||||
// }
|
||||
// return width;
|
||||
// }
|
||||
//
|
||||
// public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||
// return new XDimension2D(getTitlesColumnWidth(stringBounder) + getBarsColumnWidth(timeHeader),
|
||||
// getTotalHeight(stringBounder, timeHeader));
|
||||
// }
|
||||
//
|
||||
// private double getBarsColumnWidth(final TimeHeader timeHeader) {
|
||||
// final double xmin = timeHeader.getTimeScale().getStartingPosition(min);
|
||||
// final double xmax = timeHeader.getTimeScale().getEndingPosition(max);
|
||||
// return xmax - xmin;
|
||||
// }
|
||||
//
|
||||
// };
|
||||
// }
|
||||
//
|
||||
// private TimeHeader getTimeHeader(StringBounder stringBounder) {
|
||||
// if (openClose.getStartingDay() == null)
|
||||
// return new TimeHeaderSimple(stringBounder, thParam(), printScale);
|
||||
// else if (printScale == PrintScale.DAILY)
|
||||
// return new TimeHeaderDaily(stringBounder, thParam(), nameDays, printStart, printEnd);
|
||||
// else if (printScale == PrintScale.WEEKLY)
|
||||
// return new TimeHeaderWeekly(stringBounder, thParam(), weekNumberStrategy, withCalendarDate);
|
||||
// else if (printScale == PrintScale.MONTHLY)
|
||||
// return new TimeHeaderMonthly(stringBounder, thParam());
|
||||
// else if (printScale == PrintScale.QUARTERLY)
|
||||
// return new TimeHeaderQuarterly(stringBounder, thParam());
|
||||
// else if (printScale == PrintScale.YEARLY)
|
||||
// return new TimeHeaderYearly(stringBounder, thParam());
|
||||
// else
|
||||
// throw new IllegalStateException();
|
||||
//
|
||||
// }
|
||||
|
||||
private TimeHeaderParameters thParam() {
|
||||
return new TimeHeaderParameters(null, 1, min, max, getIHtmlColorSet(), locale, null, null, null, this);
|
||||
}
|
||||
|
||||
// private Map<Day, HColor> colorDays() {
|
||||
// colorDaysInternal.putAll(colorDaysToday);
|
||||
// return Collections.unmodifiableMap(colorDaysInternal);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public final Style getStyle(SName param) {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.ganttDiagram, param)
|
||||
.getMergedStyle(getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
@Override
|
||||
public final Style getStyle(SName param1, SName param2) {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.ganttDiagram, param1, param2)
|
||||
.getMergedStyle(getCurrentStyleBuilder());
|
||||
}
|
||||
|
||||
// private double getTotalHeight(StringBounder stringBounder, TimeHeader timeHeader) {
|
||||
// if (showFootbox)
|
||||
// return totalHeightWithoutFooter + timeHeader.getTimeFooterHeight(stringBounder);
|
||||
//
|
||||
// return totalHeightWithoutFooter;
|
||||
// }
|
||||
|
||||
private void drawTasksRect(UGraphic ug) {
|
||||
for (Task task : tasks.values()) {
|
||||
// if (isHidden(task))
|
||||
// continue;
|
||||
|
||||
final TaskDraw draw = draws.get(task);
|
||||
final UTranslate move = UTranslate.dy(draw.getY(ug.getStringBounder()).getCurrentValue());
|
||||
draw.drawU(ug.apply(move));
|
||||
}
|
||||
}
|
||||
|
||||
// private void drawConstraints(final UGraphic ug, TimeScale timeScale) {
|
||||
// for (GanttConstraint constraint : constraints) {
|
||||
// if (printStart != null && constraint.isHidden(min, max))
|
||||
// continue;
|
||||
//
|
||||
// constraint.getUDrawable(timeScale, this).drawU(ug);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public StyleSignatureBasic getDefaultStyleDefinitionArrow() {
|
||||
// return StyleSignatureBasic.of(SName.root, SName.element, SName.ganttDiagram, SName.arrow);
|
||||
// }
|
||||
|
||||
private void drawTasksTitle(UGraphic ug, double colTitles, double colBars) {
|
||||
for (Task task : tasks.values()) {
|
||||
// if (isHidden(task))
|
||||
// continue;
|
||||
|
||||
final TaskDraw draw = draws.get(task);
|
||||
final UTranslate move = UTranslate.dy(draw.getY(ug.getStringBounder()).getCurrentValue());
|
||||
draw.drawTitle(ug.apply(move), labelStrategy, colTitles, colBars);
|
||||
}
|
||||
}
|
||||
|
||||
// private void drawResources(UGraphic ug) {
|
||||
// for (Resource res : resources.values()) {
|
||||
// final ResourceDraw draw = res.getResourceDraw();
|
||||
// final UTranslate move = UTranslate.dy(draw.getY());
|
||||
// draw.drawU(ug.apply(move));
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// public void closeDayOfWeek(DayOfWeek day, String task) {
|
||||
// openClose.close(day);
|
||||
// }
|
||||
//
|
||||
// public void openDayOfWeek(DayOfWeek day, String task) {
|
||||
// if (task.length() == 0)
|
||||
// openClose.open(day);
|
||||
// else
|
||||
// getOpenCloseForTask(task).open(day);
|
||||
// }
|
||||
//
|
||||
// public void closeDayAsDate(Day day, String task) {
|
||||
// if (task.length() == 0)
|
||||
// openClose.close(day);
|
||||
// else
|
||||
// getOpenCloseForTask(task).close(day);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// public void openDayAsDate(Day day, String task) {
|
||||
// if (task.length() == 0)
|
||||
// openClose.open(day);
|
||||
// else
|
||||
// getOpenCloseForTask(task).open(day);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// private OpenClose getOpenCloseForTask(String task) {
|
||||
// OpenClose except = openCloseForTask.get(task);
|
||||
// if (except == null) {
|
||||
// except = new OpenClose();
|
||||
// openCloseForTask.put(task, except);
|
||||
// }
|
||||
// return except;
|
||||
// }
|
||||
//
|
||||
// private final Map<String, OpenClose> openCloseForTask = new HashMap<>();
|
||||
//
|
||||
private void initTaskAndResourceDraws(TimeScale timeScale, double headerHeight, StringBounder stringBounder) {
|
||||
Real y = origin;
|
||||
y = y.addFixed(headerHeight);
|
||||
for (Task task : tasks.values()) {
|
||||
final TaskDraw draw;
|
||||
final String disp = task.getCode().getSimpleDisplay();
|
||||
draw = new TaskDrawDiamond(timeScale, y, disp, task.getStart(), task, this, task.getStyleBuilder());
|
||||
final double height = draw.getFullHeightTask(stringBounder);
|
||||
y = y.addAtLeast(height);
|
||||
// if (task instanceof TaskSeparator) {
|
||||
// final TaskSeparator taskSeparator = (TaskSeparator) task;
|
||||
// draw = new TaskDrawSeparator(taskSeparator.getName(), timeScale, y, min, max, task.getStyleBuilder(),
|
||||
// getSkinParam().getIHtmlColorSet());
|
||||
// } else if (task instanceof TaskGroup) {
|
||||
// final TaskGroup taskGroup = (TaskGroup) task;
|
||||
// draw = new TaskDrawGroup(timeScale, y, taskGroup.getCode().getSimpleDisplay(), getStart(taskGroup),
|
||||
// getEnd(taskGroup), task, this, task.getStyleBuilder());
|
||||
// } else {
|
||||
// final TaskImpl tmp = (TaskImpl) task;
|
||||
// final String disp = hideResourceName ? tmp.getCode().getSimpleDisplay() : tmp.getPrettyDisplay();
|
||||
// if (tmp.isDiamond()) {
|
||||
// draw = new TaskDrawDiamond(timeScale, y, disp, getStart(tmp), task, this, task.getStyleBuilder());
|
||||
// } else {
|
||||
// final boolean oddStart = printStart != null && min.compareTo(getStart(tmp)) == 0;
|
||||
// final boolean oddEnd = printStart != null && max.compareTo(getEnd(tmp)) == 0;
|
||||
// draw = new TaskDrawRegular(timeScale, y, disp, getStart(tmp), getEnd(tmp), oddStart, oddEnd,
|
||||
// getSkinParam(), task, this, getConstraints(task), task.getStyleBuilder());
|
||||
// }
|
||||
// draw.setColorsAndCompletion(tmp.getColors(), tmp.getCompletion(), tmp.getUrl(), tmp.getNote());
|
||||
// }
|
||||
// if (task.getRow() == null)
|
||||
// y = y.addAtLeast(draw.getFullHeightTask(stringBounder));
|
||||
//
|
||||
draws.put(task, draw);
|
||||
}
|
||||
// origin.compileNow();
|
||||
// magicPush(stringBounder);
|
||||
// double yy = lastY(stringBounder);
|
||||
// if (yy == 0) {
|
||||
// yy = headerHeight;
|
||||
// } else if (this.hideResourceFoobox == false)
|
||||
// for (Resource res : resources.values()) {
|
||||
// final ResourceDraw draw = buildResourceDraw(this, res, timeScale, yy, min, max);
|
||||
// res.setTaskDraw(draw);
|
||||
// yy += draw.getHeight(stringBounder);
|
||||
// }
|
||||
//
|
||||
// this.totalHeightWithoutFooter = yy;
|
||||
}
|
||||
|
||||
//
|
||||
// private ResourceDraw buildResourceDraw(ChronologyDiagram gantt, Resource res, TimeScale timeScale, double y, Day min,
|
||||
// Day max) {
|
||||
// return new ResourceDrawBasic(gantt, res, timeScale, y, min, max);
|
||||
// // return new ResourceDrawVersion2(gantt, res, timeScale, y, min, max);
|
||||
// }
|
||||
//
|
||||
// private Collection<GanttConstraint> getConstraints(Task task) {
|
||||
// final List<GanttConstraint> result = new ArrayList<>();
|
||||
// for (GanttConstraint constraint : constraints) {
|
||||
// if (constraint.isOn(task))
|
||||
// result.add(constraint);
|
||||
//
|
||||
// }
|
||||
// return Collections.unmodifiableCollection(result);
|
||||
// }
|
||||
//
|
||||
// private double lastY(StringBounder stringBounder) {
|
||||
// double result = 0;
|
||||
// for (TaskDraw td : draws.values())
|
||||
// result = Math.max(result, td.getY(stringBounder).getCurrentValue() + td.getHeightMax(stringBounder));
|
||||
//
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// private void magicPush(StringBounder stringBounder) {
|
||||
// final List<TaskDraw> notes = new ArrayList<>();
|
||||
// for (TaskDraw td : draws.values()) {
|
||||
// final FingerPrint taskPrint = td.getFingerPrint(stringBounder);
|
||||
// final FingerPrint fingerPrintNote = td.getFingerPrintNote(stringBounder);
|
||||
//
|
||||
// if (td.getTrueRow() == null)
|
||||
// for (TaskDraw note : notes) {
|
||||
// final FingerPrint otherNote = note.getFingerPrintNote(stringBounder);
|
||||
// final double deltaY = otherNote.overlap(taskPrint);
|
||||
// if (deltaY > 0) {
|
||||
// final Real bottom = note.getY(stringBounder).addAtLeast(note.getHeightMax(stringBounder));
|
||||
// td.getY(stringBounder).ensureBiggerThan(bottom);
|
||||
// origin.compileNow();
|
||||
// }
|
||||
//
|
||||
// }
|
||||
//
|
||||
// if (fingerPrintNote != null)
|
||||
// notes.add(td);
|
||||
//
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private Day getStart(final Task tmp) {
|
||||
// if (printStart == null)
|
||||
// return tmp.getStart();
|
||||
//
|
||||
// return Day.max(min, tmp.getStart());
|
||||
// }
|
||||
//
|
||||
// private Day getEnd(final Task tmp) {
|
||||
// if (printStart == null)
|
||||
// return tmp.getEnd();
|
||||
//
|
||||
// return Day.min(max, tmp.getEnd());
|
||||
// }
|
||||
//
|
||||
private void initMinMax() {
|
||||
if (tasks.size() == 0) {
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
for (Task task : tasks.values()) {
|
||||
if (this.min == null || this.max == null) {
|
||||
this.min = task.getStart();
|
||||
this.max = task.getEnd();
|
||||
continue;
|
||||
|
||||
}
|
||||
if (this.min.compareTo(task.getStart()) > 0)
|
||||
this.min = task.getStart();
|
||||
if (this.max.compareTo(task.getEnd()) < 0)
|
||||
this.max = task.getEnd();
|
||||
}
|
||||
|
||||
this.min = this.min.roundDayDown();
|
||||
this.max = this.max.roundDayUp();
|
||||
|
||||
this.timeScale = new TimeScaleChronology(1000);
|
||||
this.timeScale.setMin(this.min.getMillis());
|
||||
this.timeScale.setMax(this.max.getMillis());
|
||||
}
|
||||
|
||||
// public Day getThenDate() {
|
||||
// Day result = getStartingDate();
|
||||
// for (Day d : colorDays().keySet())
|
||||
// if (d.compareTo(result) > 0)
|
||||
// result = d;
|
||||
//
|
||||
// for (Day d : nameDays.keySet())
|
||||
// if (d.compareTo(result) > 0)
|
||||
// result = d;
|
||||
//
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// public Task getExistingTask(String id) {
|
||||
// final Task result = byShortName.get(Objects.requireNonNull(id));
|
||||
// if (result != null)
|
||||
// return result;
|
||||
//
|
||||
// final TaskCode code = new TaskCode(id);
|
||||
// return tasks.get(code);
|
||||
// }
|
||||
//
|
||||
// public GanttConstraint forceTaskOrder(Task task1, Task task2) {
|
||||
// final TaskInstant end1 = new TaskInstant(task1, TaskAttribute.END);
|
||||
// task2.setStart(end1.getInstantPrecise());
|
||||
// final GanttConstraint result = new GanttConstraint(this.getIHtmlColorSet(),
|
||||
// getSkinParam().getCurrentStyleBuilder(), end1, new TaskInstant(task2, TaskAttribute.START));
|
||||
// addContraint(result);
|
||||
// return result;
|
||||
// }
|
||||
|
||||
public Task getOrCreateTask(String codeOrShortName, String shortName, boolean linkedToPrevious) {
|
||||
Objects.requireNonNull(codeOrShortName);
|
||||
Task result = shortName == null ? null : byShortName.get(shortName);
|
||||
if (result != null)
|
||||
return result;
|
||||
|
||||
result = byShortName.get(codeOrShortName);
|
||||
if (result != null)
|
||||
return result;
|
||||
|
||||
final TaskCode code = new TaskCode(codeOrShortName);
|
||||
result = tasks.get(code);
|
||||
if (result == null) {
|
||||
|
||||
result = new TaskChronology(getSkinParam().getCurrentStyleBuilder(), code);
|
||||
if (currentGroup != null)
|
||||
currentGroup.addTask(result);
|
||||
|
||||
tasks.put(code, result);
|
||||
if (byShortName != null)
|
||||
byShortName.put(shortName, result);
|
||||
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// private Task getLastCreatedTask() {
|
||||
// final List<Task> all = new ArrayList<>(tasks.values());
|
||||
// for (int i = all.size() - 1; i >= 0; i--)
|
||||
// if (all.get(i) instanceof TaskImpl)
|
||||
// return all.get(i);
|
||||
//
|
||||
// return null;
|
||||
// }
|
||||
//
|
||||
// public void addSeparator(String comment) {
|
||||
// TaskSeparator separator = new TaskSeparator(getSkinParam().getCurrentStyleBuilder(), comment, tasks.size());
|
||||
// tasks.put(separator.getCode(), separator);
|
||||
// }
|
||||
//
|
||||
private TaskGroup currentGroup = null;
|
||||
//
|
||||
// public CommandExecutionResult addGroup(String name) {
|
||||
// TaskGroup group = new TaskGroup(this.currentGroup, getSkinParam().getCurrentStyleBuilder(), name);
|
||||
//
|
||||
// if (this.currentGroup != null)
|
||||
// this.currentGroup.addTask(group);
|
||||
//
|
||||
// this.currentGroup = group;
|
||||
// tasks.put(group.getCode(), group);
|
||||
// return CommandExecutionResult.ok();
|
||||
// }
|
||||
//
|
||||
// public CommandExecutionResult endGroup() {
|
||||
// if (this.currentGroup == null)
|
||||
// return CommandExecutionResult.error("No group to be closed");
|
||||
//
|
||||
// this.currentGroup = this.currentGroup.getParent();
|
||||
//
|
||||
// return CommandExecutionResult.ok();
|
||||
// }
|
||||
//
|
||||
// public void addContraint(GanttConstraint constraint) {
|
||||
// constraints.add(constraint);
|
||||
// }
|
||||
//
|
||||
// public HColorSet getIHtmlColorSet() {
|
||||
// return colorSet;
|
||||
// }
|
||||
//
|
||||
// public void setProjectStartingDate(Day start) {
|
||||
// openClose.setStartingDay(start);
|
||||
// this.min = start;
|
||||
// }
|
||||
//
|
||||
// public Day getStartingDate() {
|
||||
// if (openClose.getStartingDay() == null)
|
||||
// return min;
|
||||
//
|
||||
// return openClose.getStartingDay();
|
||||
// }
|
||||
//
|
||||
// public Day getEndingDate() {
|
||||
// initMinMax();
|
||||
// return max;
|
||||
// }
|
||||
//
|
||||
// public int daysInWeek() {
|
||||
// return openClose.daysInWeek();
|
||||
// }
|
||||
//
|
||||
// public boolean isOpen(Day day) {
|
||||
// return openClose.getLoadAt(day) > 0;
|
||||
// }
|
||||
//
|
||||
// public boolean affectResource(Task result, String description) {
|
||||
// final Pattern p = Pattern.compile("([^:]+)(:(\\d+))?");
|
||||
// final Matcher m = p.matcher(description);
|
||||
// if (m.find() == false)
|
||||
// throw new IllegalArgumentException();
|
||||
//
|
||||
// final Resource resource = getResource(m.group(1));
|
||||
// int percentage = 100;
|
||||
// if (m.group(3) != null)
|
||||
// percentage = Integer.parseInt(m.group(3));
|
||||
//
|
||||
// if (percentage == 0)
|
||||
// return false;
|
||||
//
|
||||
// result.addResource(resource, percentage);
|
||||
// return true;
|
||||
// }
|
||||
//
|
||||
// public Resource getResource(String resourceName) {
|
||||
// Resource resource = resources.get(resourceName);
|
||||
// if (resource == null)
|
||||
// resource = new Resource(resourceName);
|
||||
//
|
||||
// resources.put(resourceName, resource);
|
||||
// return resource;
|
||||
// }
|
||||
//
|
||||
// public int getLoadForResource(Resource res, Day i) {
|
||||
// int result = 0;
|
||||
// for (Task task : tasks.values()) {
|
||||
// if (task instanceof TaskSeparator)
|
||||
// continue;
|
||||
//
|
||||
// final TaskImpl task2 = (TaskImpl) task;
|
||||
// result += task2.loadForResource(res, i);
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// public Moment getExistingMoment(String id) {
|
||||
// Moment result = getExistingTask(id);
|
||||
// if (result == null) {
|
||||
// Day start = null;
|
||||
// Day end = null;
|
||||
// for (Map.Entry<Day, String> ent : nameDays.entrySet()) {
|
||||
// if (ent.getValue().equalsIgnoreCase(id) == false)
|
||||
// continue;
|
||||
//
|
||||
// start = min(start, ent.getKey());
|
||||
// end = max(end, ent.getKey());
|
||||
// }
|
||||
// if (start != null)
|
||||
// result = new MomentImpl(start, end);
|
||||
//
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// private Day min(Day d1, Day d2) {
|
||||
// if (d1 == null)
|
||||
// return d2;
|
||||
//
|
||||
// if (d1.compareTo(d2) > 0)
|
||||
// return d2;
|
||||
//
|
||||
// return d1;
|
||||
// }
|
||||
//
|
||||
// private Day max(Day d1, Day d2) {
|
||||
// if (d1 == null)
|
||||
// return d2;
|
||||
//
|
||||
// if (d1.compareTo(d2) < 0)
|
||||
// return d2;
|
||||
//
|
||||
// return d1;
|
||||
// }
|
||||
//
|
||||
// public void colorDay(Day day, HColor color) {
|
||||
// colorDaysInternal.put(day, color);
|
||||
// }
|
||||
//
|
||||
// public void colorDay(DayOfWeek day, HColor color) {
|
||||
// colorDaysOfWeek.put(day, color);
|
||||
// }
|
||||
//
|
||||
// public void nameDay(Day day, String name) {
|
||||
// nameDays.put(day, name);
|
||||
// }
|
||||
//
|
||||
// public Day getToday() {
|
||||
// if (today == null)
|
||||
// this.today = Day.today();
|
||||
//
|
||||
// return today;
|
||||
// }
|
||||
//
|
||||
// public void setTodayColors(CenterBorderColor colors) {
|
||||
// if (today == null)
|
||||
// this.today = Day.today();
|
||||
//
|
||||
// colorDaysToday.put(today, colors.getCenter());
|
||||
// }
|
||||
//
|
||||
// public CommandExecutionResult setToday(Day date) {
|
||||
// this.today = date;
|
||||
// return CommandExecutionResult.ok();
|
||||
// }
|
||||
//
|
||||
// public CommandExecutionResult deleteTask(Task task) {
|
||||
// task.setColors(new CenterBorderColor(HColors.WHITE, HColors.BLACK));
|
||||
// return CommandExecutionResult.ok();
|
||||
// }
|
||||
//
|
||||
// public void setPrintInterval(Day start, Day end) {
|
||||
// this.printStart = start;
|
||||
// this.printEnd = end;
|
||||
// }
|
||||
//
|
||||
// public TaskDraw getTaskDraw(Task task) {
|
||||
// return draws.get(task);
|
||||
// }
|
||||
//
|
||||
// public CommandExecutionResult addNote(Display note) {
|
||||
// Task last = null;
|
||||
// for (Task current : tasks.values())
|
||||
// last = current;
|
||||
// if (last == null)
|
||||
// return CommandExecutionResult.error("No task defined");
|
||||
//
|
||||
// last.setNote(note);
|
||||
// return CommandExecutionResult.ok();
|
||||
// }
|
||||
|
||||
public LoadPlanable getDefaultPlan() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public TaskDraw getTaskDraw(Task task) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HColorSet getIHtmlColorSet() {
|
||||
return colorSet;
|
||||
}
|
||||
|
||||
// private boolean showFootbox = true;
|
||||
//
|
||||
// public void setShowFootbox(boolean footbox) {
|
||||
// this.showFootbox = footbox;
|
||||
//
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public ClockwiseTopRightBottomLeft getDefaultMargins() {
|
||||
// return ClockwiseTopRightBottomLeft.none();
|
||||
// }
|
||||
//
|
||||
// public void setLabelStrategy(LabelStrategy strategy) {
|
||||
// this.labelStrategy = strategy;
|
||||
// }
|
||||
//
|
||||
// private boolean withCalendarDate;
|
||||
//
|
||||
// public void setWithCalendarDate(boolean withCalendarDate) {
|
||||
// this.withCalendarDate = withCalendarDate;
|
||||
// }
|
||||
//
|
||||
// private boolean hideResourceName;
|
||||
// private boolean hideResourceFoobox;
|
||||
//
|
||||
// public CommandExecutionResult hideResourceName() {
|
||||
// this.hideResourceName = true;
|
||||
// return CommandExecutionResult.ok();
|
||||
// }
|
||||
//
|
||||
// public CommandExecutionResult hideResourceFootbox() {
|
||||
// this.hideResourceFoobox = true;
|
||||
// return CommandExecutionResult.ok();
|
||||
// }
|
||||
//
|
||||
// private final Set<Day> verticalSeparatorBefore = new HashSet<>();
|
||||
//
|
||||
// public void addVerticalSeparatorBefore(Day day) {
|
||||
// verticalSeparatorBefore.add(day);
|
||||
// }
|
||||
//
|
||||
// public void setTaskDefaultCompletion(int defaultCompletion) {
|
||||
// this.defaultCompletion = defaultCompletion;
|
||||
// }
|
||||
//
|
||||
// public List<TaskDrawRegular> getAllTasksForResource(Resource res) {
|
||||
// final List<TaskDrawRegular> result = new ArrayList<TaskDrawRegular>();
|
||||
// for (Task task : tasks.values())
|
||||
// if (task.isAssignedTo(res)) {
|
||||
// final TaskDrawRegular draw = (TaskDrawRegular) draws.get(task);
|
||||
// result.add(draw);
|
||||
// }
|
||||
//
|
||||
// return Collections.unmodifiableList(result);
|
||||
// }
|
||||
//
|
||||
// public void setIt(Task result) {
|
||||
// this.it = result;
|
||||
// }
|
||||
//
|
||||
// public Task getIt() {
|
||||
// return it;
|
||||
// }
|
||||
//
|
||||
// public final Resource getThey() {
|
||||
// return they;
|
||||
// }
|
||||
//
|
||||
// public final void setThey(Resource they) {
|
||||
// this.they = they;
|
||||
// }
|
||||
|
||||
}
|
@ -0,0 +1,126 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import net.sourceforge.plantuml.command.Command;
|
||||
import net.sourceforge.plantuml.command.CommonCommands;
|
||||
import net.sourceforge.plantuml.command.PSystemCommandFactory;
|
||||
import net.sourceforge.plantuml.core.DiagramType;
|
||||
import net.sourceforge.plantuml.core.UmlSource;
|
||||
import net.sourceforge.plantuml.project.command.NaturalCommand;
|
||||
import net.sourceforge.plantuml.project.lang.SentenceAnd;
|
||||
import net.sourceforge.plantuml.project.lang.SentenceAndAnd;
|
||||
import net.sourceforge.plantuml.project.lang.SentenceSimple;
|
||||
import net.sourceforge.plantuml.project.lang.Subject;
|
||||
|
||||
public class ChronologyDiagramFactory extends PSystemCommandFactory {
|
||||
|
||||
static private final List<Subject<ChronologyDiagram>> subjects() {
|
||||
return Arrays.asList(SubjectTask.ME);
|
||||
}
|
||||
|
||||
public ChronologyDiagramFactory() {
|
||||
super(DiagramType.CHRONOLOGY);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initCommandsList(List<Command> cmds) {
|
||||
CommonCommands.addTitleCommands(cmds);
|
||||
CommonCommands.addCommonCommands2(cmds);
|
||||
|
||||
// cmds.add(CommandStyleMultilinesCSS.ME);
|
||||
// cmds.add(CommandStyleImport.ME);
|
||||
//
|
||||
// cmds.add(CommandNope.ME);
|
||||
|
||||
addLanguageCommands(cmds);
|
||||
|
||||
// cmds.add(new CommandGanttArrow());
|
||||
// cmds.add(new CommandGanttArrow2());
|
||||
// cmds.add(new CommandColorTask());
|
||||
// cmds.add(new CommandSeparator());
|
||||
// cmds.add(new CommandWeekNumberStrategy());
|
||||
// cmds.add(new CommandGroupStart());
|
||||
// cmds.add(new CommandGroupEnd());
|
||||
//
|
||||
// cmds.add(new CommandLanguage());
|
||||
// cmds.add(new CommandPrintScale());
|
||||
// cmds.add(new CommandPrintBetween());
|
||||
// cmds.add(new CommandNoteBottom());
|
||||
// cmds.add(new CommandFootbox());
|
||||
// cmds.add(new CommandLabelOnColumn());
|
||||
// cmds.add(new CommandHideResourceName());
|
||||
// cmds.add(new CommandHideResourceFootbox());
|
||||
// cmds.add(new CommandTaskCompleteDefault());
|
||||
}
|
||||
|
||||
private void addLanguageCommands(List<Command> cmd) {
|
||||
for (Subject<ChronologyDiagram> subject : subjects())
|
||||
for (SentenceSimple<ChronologyDiagram> sentenceA : subject.getSentences()) {
|
||||
cmd.add(NaturalCommand.create(sentenceA));
|
||||
for (SentenceSimple<ChronologyDiagram> sentenceB : subject.getSentences()) {
|
||||
final String signatureA = sentenceA.getSignature();
|
||||
final String signatureB = sentenceB.getSignature();
|
||||
if (signatureA.equals(signatureB) == false)
|
||||
cmd.add(NaturalCommand.create(new SentenceAnd<ChronologyDiagram>(sentenceA, sentenceB)));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for (Subject<ChronologyDiagram> subject : subjects())
|
||||
for (SentenceSimple<ChronologyDiagram> sentenceA : subject.getSentences())
|
||||
for (SentenceSimple<ChronologyDiagram> sentenceB : subject.getSentences())
|
||||
for (SentenceSimple<ChronologyDiagram> sentenceC : subject.getSentences()) {
|
||||
final String signatureA = sentenceA.getSignature();
|
||||
final String signatureB = sentenceB.getSignature();
|
||||
final String signatureC = sentenceC.getSignature();
|
||||
if (signatureA.equals(signatureB) == false && signatureA.equals(signatureC) == false
|
||||
&& signatureC.equals(signatureB) == false)
|
||||
cmd.add(NaturalCommand
|
||||
.create(new SentenceAndAnd<ChronologyDiagram>(sentenceA, sentenceB, sentenceC)));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public ChronologyDiagram createEmptyDiagram(UmlSource source, Map<String, String> skinParam) {
|
||||
return new ChronologyDiagram(source);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import net.sourceforge.plantuml.project.Failable;
|
||||
import net.sourceforge.plantuml.project.lang.Something;
|
||||
import net.sourceforge.plantuml.regex.IRegex;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
|
||||
public class ComplementAnything implements Something<ChronologyDiagram> {
|
||||
|
||||
public IRegex toRegex(String suffix) {
|
||||
return new RegexLeaf("ANYTHING" + suffix, "(.*?)");
|
||||
}
|
||||
|
||||
public Failable<String> getMe(ChronologyDiagram system, RegexResult arg, String suffix) {
|
||||
final String value = arg.get("ANYTHING" + suffix, 0);
|
||||
return Failable.ok(value);
|
||||
}
|
||||
}
|
84
src/net/sourceforge/plantuml/chronology/ComplementHour.java
Normal file
84
src/net/sourceforge/plantuml/chronology/ComplementHour.java
Normal file
@ -0,0 +1,84 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.TimeZone;
|
||||
|
||||
import net.sourceforge.plantuml.project.Failable;
|
||||
import net.sourceforge.plantuml.project.lang.Something;
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.regex.IRegex;
|
||||
import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
|
||||
public class ComplementHour implements Something<ChronologyDiagram> {
|
||||
|
||||
// [Task1] starts at 2023-11-28 15:41:21, ends at 2023-11-28 19:40:00
|
||||
|
||||
static private final SimpleDateFormat inputFormat;
|
||||
static private final SimpleDateFormat inputFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
|
||||
|
||||
static {
|
||||
inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
inputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
|
||||
|
||||
}
|
||||
|
||||
public IRegex toRegex(String suffix) {
|
||||
return new RegexConcat( //
|
||||
new RegexLeaf("TIME", "(\\d+-\\d+-\\d+ \\d+:\\d+:\\d+)"), //
|
||||
new RegexOptional(new RegexLeaf("MS", "\\.(\\d+)")) //
|
||||
); //
|
||||
}
|
||||
|
||||
public Failable<Day> getMe(ChronologyDiagram system, RegexResult arg, String suffix) {
|
||||
final String value = arg.get("TIME", 0);
|
||||
System.err.println("value=" + value);
|
||||
try {
|
||||
final Date date = inputFormat.parse(value);
|
||||
return Failable.ok(Day.create(date.getTime()));
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
throw new IllegalStateException();
|
||||
}
|
||||
|
||||
}
|
136
src/net/sourceforge/plantuml/chronology/HourPattern.java
Normal file
136
src/net/sourceforge/plantuml/chronology/HourPattern.java
Normal file
@ -0,0 +1,136 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.time.Month;
|
||||
import net.sourceforge.plantuml.regex.IRegex;
|
||||
import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
|
||||
public class HourPattern {
|
||||
|
||||
private final String id;
|
||||
private final String yearKeyA;
|
||||
private final String yearKeyB;
|
||||
private final String yearKeyC;
|
||||
private final String monthKeyA;
|
||||
private final String monthKeyB;
|
||||
private final String monthKeyC;
|
||||
private final String dayKeyA;
|
||||
private final String dayKeyB;
|
||||
private final String dayKeyC;
|
||||
|
||||
public HourPattern(String id) {
|
||||
this.id = id;
|
||||
this.yearKeyA = "AYEAR" + id;
|
||||
this.yearKeyB = "BYEAR" + id;
|
||||
this.yearKeyC = "CYEAR" + id;
|
||||
this.monthKeyA = "AMONTH" + id;
|
||||
this.monthKeyB = "BMONTH" + id;
|
||||
this.monthKeyC = "CMONTH" + id;
|
||||
this.dayKeyA = "ADAY" + id;
|
||||
this.dayKeyB = "BDAY" + id;
|
||||
this.dayKeyC = "CDAY" + id;
|
||||
}
|
||||
|
||||
public IRegex toRegex() {
|
||||
return new RegexOr(toRegexA_DD_MONTH_YYYY(), toRegexB_YYYY_MM_DD(), toRegexC_MONTH_DD_YYYY());
|
||||
}
|
||||
|
||||
public Day getDay(RegexResult arg) {
|
||||
if (arg.get(dayKeyA, 0) != null)
|
||||
return resultA(arg);
|
||||
|
||||
if (arg.get(dayKeyB, 0) != null)
|
||||
return resultB(arg);
|
||||
|
||||
if (arg.get(dayKeyC, 0) != null)
|
||||
return resultC(arg);
|
||||
return null;
|
||||
}
|
||||
|
||||
private IRegex toRegexA_DD_MONTH_YYYY() {
|
||||
return new RegexConcat( //
|
||||
new RegexLeaf(dayKeyA, "([\\d]{1,2})"), //
|
||||
new RegexLeaf("[\\w, ]*?"), //
|
||||
new RegexLeaf(monthKeyA, "(" + Month.getRegexString() + ")"), //
|
||||
new RegexLeaf("[\\w, ]*?"), //
|
||||
new RegexLeaf(yearKeyA, "([\\d]{1,4})"));
|
||||
}
|
||||
|
||||
private Day resultA(RegexResult arg) {
|
||||
final int day = Integer.parseInt(arg.get(dayKeyA, 0));
|
||||
final String month = arg.get(monthKeyA, 0);
|
||||
final int year = Integer.parseInt(arg.get(yearKeyA, 0));
|
||||
return Day.create(year, month, day);
|
||||
}
|
||||
|
||||
private IRegex toRegexB_YYYY_MM_DD() {
|
||||
return new RegexConcat( //
|
||||
new RegexLeaf(yearKeyB, "([\\d]{1,4})"), //
|
||||
new RegexLeaf("\\D"), //
|
||||
new RegexLeaf(monthKeyB, "([\\d]{1,2})"), //
|
||||
new RegexLeaf("\\D"), //
|
||||
new RegexLeaf(dayKeyB, "([\\d]{1,2})"));
|
||||
}
|
||||
|
||||
private Day resultB(RegexResult arg) {
|
||||
final int day = Integer.parseInt(arg.get(dayKeyB, 0));
|
||||
final int month = Integer.parseInt(arg.get(monthKeyB, 0));
|
||||
final int year = Integer.parseInt(arg.get(yearKeyB, 0));
|
||||
return Day.create(year, month, day);
|
||||
}
|
||||
|
||||
private IRegex toRegexC_MONTH_DD_YYYY() {
|
||||
return new RegexConcat( //
|
||||
new RegexLeaf(monthKeyC, "(" + Month.getRegexString() + ")"), //
|
||||
new RegexLeaf("[\\w, ]*?"), //
|
||||
new RegexLeaf(dayKeyC, "([\\d]{1,2})"), //
|
||||
new RegexLeaf("[\\w, ]*?"), //
|
||||
new RegexLeaf(yearKeyC, "([\\d]{1,4})"));
|
||||
}
|
||||
|
||||
private Day resultC(RegexResult arg) {
|
||||
final int day = Integer.parseInt(arg.get(dayKeyC, 0));
|
||||
final String month = arg.get(monthKeyC, 0);
|
||||
final int year = Integer.parseInt(arg.get(yearKeyC, 0));
|
||||
return Day.create(year, month, day);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.project.core.Task;
|
||||
import net.sourceforge.plantuml.project.lang.SentenceSimple;
|
||||
import net.sourceforge.plantuml.project.lang.Verbs;
|
||||
import net.sourceforge.plantuml.project.lang.Words;
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
|
||||
public class SentenceHappensChronology extends SentenceSimple<ChronologyDiagram> {
|
||||
|
||||
public SentenceHappensChronology() {
|
||||
super(SubjectTask.ME, Verbs.happens, Words.zeroOrMore(Words.THE, Words.ON, Words.AT), new ComplementHour());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommandExecutionResult execute(ChronologyDiagram project, Object subject, Object complement) {
|
||||
final Task task = (Task) subject;
|
||||
final Day start = (Day) complement;
|
||||
task.setStart(start);
|
||||
task.setEnd(start);
|
||||
return CommandExecutionResult.ok();
|
||||
}
|
||||
|
||||
}
|
92
src/net/sourceforge/plantuml/chronology/SubjectTask.java
Normal file
92
src/net/sourceforge/plantuml/chronology/SubjectTask.java
Normal file
@ -0,0 +1,92 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import net.sourceforge.plantuml.project.Failable;
|
||||
import net.sourceforge.plantuml.project.core.Task;
|
||||
import net.sourceforge.plantuml.project.lang.SentenceSimple;
|
||||
import net.sourceforge.plantuml.project.lang.Subject;
|
||||
import net.sourceforge.plantuml.project.lang.Words;
|
||||
import net.sourceforge.plantuml.regex.IRegex;
|
||||
import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
|
||||
public class SubjectTask implements Subject<ChronologyDiagram> {
|
||||
|
||||
public static final Subject<ChronologyDiagram> ME = new SubjectTask();
|
||||
|
||||
private SubjectTask() {
|
||||
}
|
||||
|
||||
public Failable<Task> getMe(ChronologyDiagram chronology, RegexResult arg) {
|
||||
final Task result;
|
||||
|
||||
final String subject = arg.get("SUBJECT", 0);
|
||||
final String shortName = arg.get("SHORTNAME", 0);
|
||||
final String stereotype = arg.get("STEREOTYPE", 0);
|
||||
|
||||
result = chronology.getOrCreateTask(subject, shortName, false);
|
||||
|
||||
if (stereotype != null)
|
||||
result.setStereotype(Stereotype.build(arg.get("STEREOTYPE", 0)));
|
||||
|
||||
return Failable.ok(result);
|
||||
}
|
||||
|
||||
public Collection<? extends SentenceSimple<ChronologyDiagram>> getSentences() {
|
||||
return Arrays.asList(new SentenceHappensChronology());
|
||||
}
|
||||
|
||||
public IRegex toRegex() {
|
||||
return new RegexOr( //
|
||||
new RegexLeaf("SUBJECT", "\\[([^\\[\\]]+?)\\]"), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexOptional(new RegexConcat(//
|
||||
Words.exactly(Words.AS), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("SHORTNAME", "\\[([^\\[\\]]+?)\\]"))) //
|
||||
);
|
||||
}
|
||||
|
||||
}
|
372
src/net/sourceforge/plantuml/chronology/TaskChronology.java
Normal file
372
src/net/sourceforge/plantuml/chronology/TaskChronology.java
Normal file
@ -0,0 +1,372 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import net.sourceforge.plantuml.klimt.creole.Display;
|
||||
import net.sourceforge.plantuml.project.Load;
|
||||
import net.sourceforge.plantuml.project.core.AbstractTask;
|
||||
import net.sourceforge.plantuml.project.core.Resource;
|
||||
import net.sourceforge.plantuml.project.core.Task;
|
||||
import net.sourceforge.plantuml.project.core.TaskCode;
|
||||
import net.sourceforge.plantuml.project.lang.CenterBorderColor;
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.time.DayOfWeek;
|
||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
|
||||
public class TaskChronology extends AbstractTask implements Task {
|
||||
|
||||
private Display note;
|
||||
|
||||
private Url url;
|
||||
private CenterBorderColor[] colors;
|
||||
|
||||
private Day start;
|
||||
private Day end;
|
||||
|
||||
public void setUrl(Url url) {
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
public TaskChronology(StyleBuilder styleBuilder, TaskCode code) {
|
||||
super(styleBuilder, code);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStart(Day start) {
|
||||
this.start = start;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Day getStart() {
|
||||
return this.start;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setEnd(Day end) {
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Day getEnd() {
|
||||
return this.end;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Load getLoad() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setLoad(Load load) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addResource(Resource resource, int percentage) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDiamond(boolean diamond) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isDiamond() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompletion(int completion) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPause(Day pause) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addPause(DayOfWeek pause) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAssignedTo(Resource res) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public int getLoadAt(Day instant) {
|
||||
// if (isPaused(instant))
|
||||
// return 0;
|
||||
//
|
||||
// LoadPlanable result = defaultPlan;
|
||||
// if (resources.size() > 0)
|
||||
// result = PlanUtils.multiply(defaultPlan, getResourcePlan());
|
||||
//
|
||||
// return result.getLoadAt(instant);
|
||||
// }
|
||||
//
|
||||
// private boolean isPaused(Day instant) {
|
||||
// if (pausedDay.contains(instant))
|
||||
// return true;
|
||||
//
|
||||
// if (pausedDayOfWeek(instant))
|
||||
// return true;
|
||||
//
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// private boolean pausedDayOfWeek(Day instant) {
|
||||
// for (DayOfWeek dayOfWeek : pausedDayOfWeek)
|
||||
// if (instant.getDayOfWeek() == dayOfWeek)
|
||||
// return true;
|
||||
//
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// public int loadForResource(Resource res, Day instant) {
|
||||
// if (resources.keySet().contains(res) && instant.compareTo(getStart()) >= 0
|
||||
// && instant.compareTo(getEnd()) <= 0) {
|
||||
// if (isPaused(instant))
|
||||
// return 0;
|
||||
//
|
||||
// if (res.isClosedAt(instant))
|
||||
// return 0;
|
||||
//
|
||||
// return resources.get(res);
|
||||
// }
|
||||
// return 0;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void addPause(Day pause) {
|
||||
// this.pausedDay.add(pause);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void addPause(DayOfWeek pause) {
|
||||
// this.pausedDayOfWeek.add(pause);
|
||||
// }
|
||||
//
|
||||
// private LoadPlanable getResourcePlan() {
|
||||
// if (resources.size() == 0)
|
||||
// throw new IllegalStateException();
|
||||
//
|
||||
// return new LoadPlanable() {
|
||||
// public int getLoadAt(Day instant) {
|
||||
// int result = 0;
|
||||
// for (Map.Entry<Resource, Integer> ent : resources.entrySet()) {
|
||||
// final Resource res = ent.getKey();
|
||||
// if (res.isClosedAt(instant))
|
||||
// continue;
|
||||
//
|
||||
// final int percentage = ent.getValue();
|
||||
// result += percentage;
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Day getLastDayIfAny() {
|
||||
// return TaskChronology.this.getLastDayIfAny();
|
||||
// }
|
||||
// };
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Day getLastDayIfAny() {
|
||||
// Day result = null;
|
||||
//
|
||||
// for (Resource res : resources.keySet()) {
|
||||
// if (res.getLastDayIfAny() == null)
|
||||
// return null;
|
||||
//
|
||||
// if (result == null || result.compareTo(res.getLastDayIfAny()) < 0)
|
||||
// result = res.getLastDayIfAny();
|
||||
// }
|
||||
//
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// public String getPrettyDisplay() {
|
||||
// if (resources.size() > 0) {
|
||||
// final StringBuilder result = new StringBuilder(getCode().getSimpleDisplay());
|
||||
// result.append(" ");
|
||||
// for (Iterator<Map.Entry<Resource, Integer>> it = resources.entrySet().iterator(); it.hasNext();) {
|
||||
// final Map.Entry<Resource, Integer> ent = it.next();
|
||||
// result.append("{");
|
||||
// result.append(ent.getKey().getName());
|
||||
// final int percentage = ent.getValue();
|
||||
// if (percentage != 100)
|
||||
// result.append(":" + percentage + "%");
|
||||
//
|
||||
// result.append("}");
|
||||
// if (it.hasNext())
|
||||
// result.append(" ");
|
||||
//
|
||||
// }
|
||||
// return result.toString();
|
||||
// }
|
||||
// return getCode().getSimpleDisplay();
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public String toString() {
|
||||
// return getCode().toString();
|
||||
// }
|
||||
//
|
||||
// public String debug() {
|
||||
// return "" + getStart() + " ---> " + getEnd() + " [" + getLoad() + "]";
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Day getStart() {
|
||||
// Day result = (Day) solver.getData(TaskAttribute.START);
|
||||
// if (diamond == false)
|
||||
// while (getLoadAt(result) == 0)
|
||||
// result = result.increment();
|
||||
//
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Day getEnd() {
|
||||
// return (Day) solver.getData(TaskAttribute.END);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public Load getLoad() {
|
||||
// return (Load) solver.getData(TaskAttribute.LOAD);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setLoad(Load load) {
|
||||
// solver.setData(TaskAttribute.LOAD, load);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setStart(Day start) {
|
||||
// solver.setData(TaskAttribute.START, start);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setEnd(Day end) {
|
||||
// solver.setData(TaskAttribute.END, end);
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void setColors(CenterBorderColor... colors) {
|
||||
this.colors = colors;
|
||||
}
|
||||
|
||||
// @Override
|
||||
// public void addResource(Resource resource, int percentage) {
|
||||
// this.resources.put(resource, percentage);
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setDiamond(boolean diamond) {
|
||||
// this.diamond = diamond;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean isDiamond() {
|
||||
// return this.diamond;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public void setCompletion(int completion) {
|
||||
// this.completion = completion;
|
||||
// }
|
||||
//
|
||||
// public final Url getUrl() {
|
||||
// return url;
|
||||
// }
|
||||
//
|
||||
// public final CenterBorderColor getColors() {
|
||||
// if (colors == null)
|
||||
// return null;
|
||||
//
|
||||
// if (colors.length == 1)
|
||||
// return colors[0];
|
||||
//
|
||||
// return colors[0].unlinearTo(colors[1], completion);
|
||||
// }
|
||||
//
|
||||
// public final int getCompletion() {
|
||||
// return completion;
|
||||
// }
|
||||
//
|
||||
// public final Collection<Day> getAllPaused() {
|
||||
// final SortedSet<Day> result = new TreeSet<>(pausedDay);
|
||||
// for (DayOfWeek dayOfWeek : pausedDayOfWeek)
|
||||
// addAll(result, dayOfWeek);
|
||||
//
|
||||
// return Collections.unmodifiableCollection(result);
|
||||
// }
|
||||
//
|
||||
// private void addAll(SortedSet<Day> result, DayOfWeek dayOfWeek) {
|
||||
// final Day start = getStart();
|
||||
// final Day end = getEnd();
|
||||
// for (Day current = start; current.compareTo(end) <= 0; current = current.increment())
|
||||
// if (current.getDayOfWeek() == dayOfWeek)
|
||||
// result.add(current);
|
||||
//
|
||||
// }
|
||||
|
||||
@Override
|
||||
public void setNote(Display note) {
|
||||
this.note = note;
|
||||
}
|
||||
|
||||
public Display getNote() {
|
||||
return note;
|
||||
}
|
||||
|
||||
// public LoadPlanable getDefaultPlan() {
|
||||
// return defaultPlan;
|
||||
// }
|
||||
//
|
||||
// @Override
|
||||
// public boolean isAssignedTo(Resource res) {
|
||||
// return resources.containsKey(res);
|
||||
// }
|
||||
|
||||
}
|
@ -0,0 +1,197 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import net.sourceforge.plantuml.klimt.UTranslate;
|
||||
import net.sourceforge.plantuml.klimt.color.HColor;
|
||||
import net.sourceforge.plantuml.klimt.creole.Display;
|
||||
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
|
||||
import net.sourceforge.plantuml.klimt.font.FontConfiguration;
|
||||
import net.sourceforge.plantuml.klimt.font.StringBounder;
|
||||
import net.sourceforge.plantuml.klimt.font.UFont;
|
||||
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
|
||||
import net.sourceforge.plantuml.klimt.shape.TextBlock;
|
||||
import net.sourceforge.plantuml.klimt.shape.ULine;
|
||||
import net.sourceforge.plantuml.klimt.sprite.SpriteContainerEmpty;
|
||||
import net.sourceforge.plantuml.project.TimeHeaderParameters;
|
||||
import net.sourceforge.plantuml.project.core.PrintScale;
|
||||
import net.sourceforge.plantuml.project.draw.TimeHeader;
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.timescale.TimeScale;
|
||||
import net.sourceforge.plantuml.style.PName;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
|
||||
public class TimeHeaderChronology extends TimeHeader {
|
||||
|
||||
private final PrintScale printScale;
|
||||
|
||||
@Override
|
||||
public double getFullHeaderHeight(StringBounder stringBounder) {
|
||||
return getTimeHeaderHeight(stringBounder) + getHeaderNameDayHeight();
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTimeHeaderHeight(StringBounder stringBounder) {
|
||||
final double h = thParam.getStyle(SName.timeline, SName.day).value(PName.FontSize).asDouble();
|
||||
return h + 6;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double getTimeFooterHeight(StringBounder stringBounder) {
|
||||
final double h = thParam.getStyle(SName.timeline, SName.day).value(PName.FontSize).asDouble();
|
||||
return h + 6;
|
||||
}
|
||||
|
||||
private double getHeaderNameDayHeight() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public TimeHeaderChronology(StringBounder stringBounder, TimeHeaderParameters thParam, PrintScale printScale,
|
||||
TimeScaleChronology timeScale) {
|
||||
super(thParam, timeScale);
|
||||
this.printScale = printScale;
|
||||
}
|
||||
|
||||
private void drawSmallVlinesDay(UGraphic ug, TimeScale timeScale, double totalHeightWithoutFooter) {
|
||||
ug = ug.apply(getLineColor());
|
||||
ug = ug.apply(UTranslate.dy(6));
|
||||
final ULine vbar = ULine.vline(totalHeightWithoutFooter + 2);
|
||||
for (Day i = getMin(); i.compareTo(getMax().increment()) < 0; i = i.increment(printScale)) {
|
||||
final double x1 = timeScale.getStartingPosition(i);
|
||||
ug.apply(UTranslate.dx(x1)).draw(vbar);
|
||||
}
|
||||
}
|
||||
|
||||
private void drawSimpleDayCounter(UGraphic ug, TimeScale timeScale) {
|
||||
for (Day i = getMin(); i.compareTo(getMax().increment()) < 0; i = i.increment(printScale)) {
|
||||
final UFont font = thParam.getStyle(SName.timeline, SName.day).getUFont();
|
||||
final FontConfiguration fontConfiguration = getFontConfiguration(font, false, openFontColor());
|
||||
final TextBlock num = Display.getWithNewlines(i.toStringShort(thParam.getLocale()))
|
||||
.create(fontConfiguration, HorizontalAlignment.LEFT, new SpriteContainerEmpty());
|
||||
final double x1 = timeScale.getStartingPosition(i);
|
||||
final double x2;
|
||||
if (printScale == PrintScale.WEEKLY)
|
||||
x2 = timeScale.getEndingPosition(i.addDays(6));
|
||||
else
|
||||
x2 = timeScale.getEndingPosition(i);
|
||||
final double width = num.calculateDimension(ug.getStringBounder()).getWidth();
|
||||
final double delta = (x2 - x1) - width;
|
||||
if (i.compareTo(getMax().increment()) < 0)
|
||||
num.drawU(ug.apply(UTranslate.dx(x1 + delta / 2)));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTimeHeader(UGraphic ug, double totalHeightWithoutFooter) {
|
||||
// drawTextsBackground(ug.apply(UTranslate.dy(-3)), totalHeightWithoutFooter +
|
||||
// 6);
|
||||
final double xmin = getTimeScale().getStartingPosition(getMin());
|
||||
final double xmax = getTimeScale().getEndingPosition(getMax());
|
||||
drawSmallVlinesDay(ug, getTimeScale(), totalHeightWithoutFooter);
|
||||
// printVerticalSeparators(ug, totalHeightWithoutFooter);
|
||||
drawSimpleDayCounter(ug, getTimeScale());
|
||||
// ug = ug.apply(getLineColor());
|
||||
// ug.draw(ULine.hline(xmax - xmin));
|
||||
// ug.apply(UTranslate.dy(getFullHeaderHeight(ug.getStringBounder()) -
|
||||
// 3)).draw(ULine.hline(xmax - xmin));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawTimeFooter(UGraphic ug) {
|
||||
final double xmin = getTimeScale().getStartingPosition(getMin());
|
||||
final double xmax = getTimeScale().getEndingPosition(getMax());
|
||||
ug = ug.apply(UTranslate.dy(3));
|
||||
// drawSmallVlinesDay(ug, getTimeScale(),
|
||||
// getTimeFooterHeight(ug.getStringBounder()) - 3);
|
||||
drawSimpleDayCounter(ug, getTimeScale());
|
||||
// ug.apply(getLineColor()).draw(ULine.hline(xmax - xmin));
|
||||
}
|
||||
|
||||
// Duplicate in TimeHeaderDaily
|
||||
class Pending {
|
||||
final double x1;
|
||||
double x2;
|
||||
final HColor color;
|
||||
|
||||
Pending(HColor color, double x1, double x2) {
|
||||
this.x1 = x1;
|
||||
this.x2 = x2;
|
||||
this.color = color;
|
||||
}
|
||||
|
||||
public void draw(UGraphic ug, double height) {
|
||||
drawRectangle(ug.apply(color.bg()), height, x1, x2);
|
||||
}
|
||||
}
|
||||
|
||||
protected final void drawTextsBackground(UGraphic ug, double totalHeightWithoutFooter) {
|
||||
|
||||
final double height = totalHeightWithoutFooter - getFullHeaderHeight(ug.getStringBounder());
|
||||
Pending pending = null;
|
||||
|
||||
for (Day wink = getMin(); wink.compareTo(getMax()) <= 0; wink = wink.increment()) {
|
||||
final double x1 = getTimeScale().getStartingPosition(wink);
|
||||
final double x2 = getTimeScale().getEndingPosition(wink);
|
||||
HColor back = thParam.getColor(wink);
|
||||
// // Day of week should be stronger than period of time (back color).
|
||||
// final HColor backDoW = colorDaysOfWeek.get(wink.getDayOfWeek());
|
||||
// if (backDoW != null) {
|
||||
// back = backDoW;
|
||||
// }
|
||||
// if (back == null && defaultPlan.getLoadAt(wink) == 0) {
|
||||
// back = closedBackgroundColor();
|
||||
// }
|
||||
if (back == null) {
|
||||
if (pending != null)
|
||||
pending.draw(ug, height);
|
||||
pending = null;
|
||||
} else {
|
||||
if (pending != null && pending.color.equals(back) == false) {
|
||||
pending.draw(ug, height);
|
||||
pending = null;
|
||||
}
|
||||
if (pending == null)
|
||||
pending = new Pending(back, x1, x2);
|
||||
else
|
||||
pending.x2 = x2;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
/* ========================================================================
|
||||
* PlantUML : a free UML diagram generator
|
||||
* ========================================================================
|
||||
*
|
||||
* (C) Copyright 2009-2024, Arnaud Roques
|
||||
*
|
||||
* Project Info: https://plantuml.com
|
||||
*
|
||||
* If you like this project or if you find it useful, you can support us at:
|
||||
*
|
||||
* https://plantuml.com/patreon (only 1$ per month!)
|
||||
* https://plantuml.com/paypal
|
||||
*
|
||||
* This file is part of PlantUML.
|
||||
*
|
||||
* PlantUML is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* PlantUML distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||
* License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||
* USA.
|
||||
*
|
||||
*
|
||||
* Original Author: Arnaud Roques
|
||||
*
|
||||
*
|
||||
*/
|
||||
package net.sourceforge.plantuml.chronology;
|
||||
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.timescale.TimeScale;
|
||||
|
||||
public class TimeScaleChronology implements TimeScale {
|
||||
|
||||
private final double fullWidth;
|
||||
private long min;
|
||||
private long max;
|
||||
|
||||
public TimeScaleChronology(double fullWidth) {
|
||||
this.fullWidth = fullWidth;
|
||||
}
|
||||
|
||||
public double getStartingPosition(Day instant) {
|
||||
final long wink = instant.getMillis();
|
||||
if (wink < min)
|
||||
throw new IllegalArgumentException();
|
||||
if (wink > max)
|
||||
throw new IllegalArgumentException();
|
||||
|
||||
return fullWidth * (wink - min) / (max - min);
|
||||
}
|
||||
|
||||
public double getEndingPosition(Day instant) {
|
||||
return getStartingPosition(instant);
|
||||
}
|
||||
|
||||
public double getWidth(Day instant) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public boolean isBreaking(Day instant) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
public final void setMin(long min) {
|
||||
this.min = min;
|
||||
}
|
||||
|
||||
public final void setMax(long max) {
|
||||
this.max = max;
|
||||
}
|
||||
|
||||
}
|
@ -58,6 +58,7 @@ import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -101,9 +102,7 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
|
||||
new RegexLeaf("GENERIC", "\\<(" + GenericRegexProducer.PATTERN + ")\\>"))), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -65,6 +65,7 @@ import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.skin.VisibilityModifier;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
@ -115,9 +116,7 @@ public class CommandCreateClassMultilines extends CommandMultilines2<ClassDiagra
|
||||
new RegexLeaf("GENERIC", "\\<(" + GenericRegexProducer.PATTERN + ")\\>"))), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -53,11 +53,11 @@ import net.sourceforge.plantuml.klimt.font.FontParam;
|
||||
import net.sourceforge.plantuml.plasma.Quark;
|
||||
import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -88,21 +88,14 @@ public class CommandCreateElementFull2 extends SingleLineCommand2<ClassDiagram>
|
||||
new RegexLeaf("CODE1", CommandCreateElementFull.CODE_WITH_QUOTE), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("DISPLAY2", CommandCreateElementFull.DISPLAY), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE2", "(\\<\\<.+\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE2"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE2", CommandCreateElementFull.CODE)) //
|
||||
), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
@ -118,21 +111,14 @@ public class CommandCreateElementFull2 extends SingleLineCommand2<ClassDiagram>
|
||||
new RegexLeaf("CODE1", CommandCreateElementFull.CODE_WITH_QUOTE), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("DISPLAY2", CommandCreateElementFull.DISPLAY), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE2", "(\\<\\<.+\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE2"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE2", CommandCreateElementFull.CODE)) //
|
||||
), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -47,6 +47,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public class CommandStereotype extends SingleLineCommand2<ClassDiagram> {
|
||||
@ -60,7 +61,8 @@ public class CommandStereotype extends SingleLineCommand2<ClassDiagram> {
|
||||
RegexLeaf.start(), //
|
||||
new RegexLeaf("NAME", "([%pLN_.]+|[%g][^%g]+[%g])"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)"), RegexLeaf.end()); //
|
||||
StereotypePattern.mandatory("STEREO"), //
|
||||
RegexLeaf.end()); //
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -50,6 +50,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -68,9 +69,7 @@ public class CommandNamespace extends SingleLineCommand2<ClassDiagram> {
|
||||
new RegexLeaf("namespace"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("NAME", NAMESPACE_REGEX), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -48,6 +48,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -72,9 +73,7 @@ public class CommandNamespace2 extends SingleLineCommand2<ClassDiagram> {
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
|
||||
new RegexLeaf("NAME", CommandNamespace.NAMESPACE_REGEX), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -48,6 +48,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -64,9 +65,7 @@ public class CommandNamespaceEmpty extends SingleLineCommand2<ClassDiagram> {
|
||||
new RegexLeaf("namespace"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("NAME", CommandNamespace.NAMESPACE_REGEX), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -55,6 +55,7 @@ import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -80,9 +81,7 @@ public class CommandPackage extends SingleLineCommand2<AbstractEntityDiagram> {
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -55,6 +55,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.utils.BlocLines;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
@ -70,9 +71,7 @@ public final class CommandFactoryNote implements SingleMultiFactoryCommand<Abstr
|
||||
new RegexLeaf("CODE", "([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
ColorParser.exp1(), //
|
||||
RegexLeaf.end() //
|
||||
);
|
||||
@ -91,9 +90,7 @@ public final class CommandFactoryNote implements SingleMultiFactoryCommand<Abstr
|
||||
new RegexLeaf("CODE", "([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
ColorParser.exp1(), //
|
||||
RegexLeaf.end() //
|
||||
);
|
||||
|
@ -63,6 +63,7 @@ import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -92,9 +93,7 @@ public final class CommandFactoryNoteOnEntity implements SingleMultiFactoryComma
|
||||
new RegexLeaf("")), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
color().getRegex(), //
|
||||
@ -127,9 +126,7 @@ public final class CommandFactoryNoteOnEntity implements SingleMultiFactoryComma
|
||||
new RegexLeaf("")), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
color().getRegex(), //
|
||||
@ -153,9 +150,7 @@ public final class CommandFactoryNoteOnEntity implements SingleMultiFactoryComma
|
||||
new RegexLeaf("")), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
color().getRegex(), //
|
||||
|
@ -61,6 +61,7 @@ import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -89,9 +90,7 @@ public final class CommandFactoryTipOnEntity implements SingleMultiFactoryComman
|
||||
partialPattern, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
@ -112,9 +111,7 @@ public final class CommandFactoryTipOnEntity implements SingleMultiFactoryComman
|
||||
partialPattern, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -57,6 +57,7 @@ import net.sourceforge.plantuml.sequencediagram.Participant;
|
||||
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -70,13 +71,9 @@ public final class FactorySequenceNoteAcrossCommand implements SingleMultiFactor
|
||||
new RegexLeaf("VMERGE", "(/)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("ACROSS", "(accross|across)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
@ -89,13 +86,9 @@ public final class FactorySequenceNoteAcrossCommand implements SingleMultiFactor
|
||||
new RegexLeaf("VMERGE", "(/)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("ACROSS", "(accross|across)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -59,6 +59,7 @@ import net.sourceforge.plantuml.sequencediagram.Participant;
|
||||
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -66,7 +67,7 @@ import net.sourceforge.plantuml.utils.BlocLines;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public final class FactorySequenceNoteCommand implements SingleMultiFactoryCommand<SequenceDiagram> {
|
||||
// ::remove folder when __HAXE__
|
||||
// ::remove folder when __HAXE__
|
||||
|
||||
private IRegex getRegexConcatMultiLine() {
|
||||
return RegexConcat.build(FactorySequenceNoteCommand.class.getName() + "multi", RegexLeaf.start(), //
|
||||
@ -74,15 +75,11 @@ public final class FactorySequenceNoteCommand implements SingleMultiFactoryComma
|
||||
new RegexLeaf("VMERGE", "(/)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("POSITION", "(right|left|over)"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("PARTICIPANT", "(?:of[%s]+)?([%pLN_.@]+|[%g][^%g]+[%g])"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
@ -95,15 +92,11 @@ public final class FactorySequenceNoteCommand implements SingleMultiFactoryComma
|
||||
new RegexLeaf("VMERGE", "(/)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("POSITION", "(right|left|over)"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("PARTICIPANT", "(?:of[%s])?([%pLN_.@]+|[%g][^%g]+[%g])"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -60,6 +60,7 @@ import net.sourceforge.plantuml.sequencediagram.NoteStyle;
|
||||
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -72,13 +73,9 @@ public final class FactorySequenceNoteOnArrowCommand implements SingleMultiFacto
|
||||
return RegexConcat.build(FactorySequenceNoteOnArrowCommand.class.getName() + "multi", RegexLeaf.start(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("POSITION", "(right|left|bottom|top)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
ColorParser.exp1(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
@ -89,13 +86,9 @@ public final class FactorySequenceNoteOnArrowCommand implements SingleMultiFacto
|
||||
return RegexConcat.build(FactorySequenceNoteOnArrowCommand.class.getName() + "single", RegexLeaf.start(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("POSITION", "(right|left|bottom|top)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
ColorParser.exp1(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -58,6 +58,7 @@ import net.sourceforge.plantuml.sequencediagram.Participant;
|
||||
import net.sourceforge.plantuml.sequencediagram.SequenceDiagram;
|
||||
import net.sourceforge.plantuml.skin.ColorParam;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -72,9 +73,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF
|
||||
new RegexLeaf("VMERGE", "(/)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("over"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("P1", "([%pLN_.@]+|[%g][^%g]+[%g])"), //
|
||||
@ -82,9 +81,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF
|
||||
new RegexLeaf(","), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("P2", "([%pLN_.@]+|[%g][^%g]+[%g])"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
@ -98,9 +95,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF
|
||||
new RegexLeaf("VMERGE", "(/)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STYLE", "(note|hnote|rnote)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO1", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO1"), //
|
||||
new RegexLeaf("over"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("P1", "([%pLN_.@]+|[%g][^%g]+[%g])"), //
|
||||
@ -108,9 +103,7 @@ public final class FactorySequenceNoteOverSeveralCommand implements SingleMultiF
|
||||
new RegexLeaf(","), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("P2", "([%pLN_.@]+|[%g][^%g]+[%g])"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO2", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO2"), //
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -68,7 +68,7 @@ public interface Diagram {
|
||||
*/
|
||||
ImageData exportDiagram(OutputStream os, int num, FileFormatOption fileFormat) throws IOException;
|
||||
|
||||
void exportDiagramGraphic(UGraphic ug);
|
||||
void exportDiagramGraphic(UGraphic ug, FileFormatOption fileFormat);
|
||||
|
||||
/**
|
||||
* Number of images in this diagram (usually, 1)
|
||||
|
@ -38,9 +38,9 @@ package net.sourceforge.plantuml.core;
|
||||
import net.sourceforge.plantuml.utils.StartUtils;
|
||||
|
||||
public enum DiagramType {
|
||||
// ::remove folder when __HAXE__
|
||||
UML, BPM, DITAA, DOT, PROJECT, JCCKIT, SALT, FLOW, CREOLE, MATH, LATEX, DEFINITION, GANTT, NW,
|
||||
MINDMAP, WBS, WIRE, JSON, GIT, BOARD, YAML, HCL, EBNF, REGEX, FILES, UNKNOWN;
|
||||
// ::remove folder when __HAXE__
|
||||
UML, BPM, DITAA, DOT, PROJECT, JCCKIT, SALT, FLOW, CREOLE, MATH, LATEX, DEFINITION, GANTT, CHRONOLOGY, NW, MINDMAP,
|
||||
WBS, WIRE, JSON, GIT, BOARD, YAML, HCL, EBNF, REGEX, FILES, UNKNOWN;
|
||||
|
||||
static public DiagramType getTypeFromArobaseStart(String s) {
|
||||
s = s.toLowerCase();
|
||||
@ -59,7 +59,8 @@ public enum DiagramType {
|
||||
if (StartUtils.startsWithSymbolAnd("startdot", s))
|
||||
return DOT;
|
||||
|
||||
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or __LGPL__
|
||||
// ::comment when __CORE__ or __MIT__ or __EPL__ or __BSD__ or __ASL__ or
|
||||
// __LGPL__
|
||||
if (StartUtils.startsWithSymbolAnd("startjcckit", s))
|
||||
return JCCKIT;
|
||||
// ::done
|
||||
@ -126,6 +127,9 @@ public enum DiagramType {
|
||||
if (StartUtils.startsWithSymbolAnd("startfiles", s))
|
||||
return FILES;
|
||||
|
||||
if (StartUtils.startsWithSymbolAnd("startchronology", s))
|
||||
return CHRONOLOGY;
|
||||
|
||||
return UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
@ -53,6 +53,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -73,11 +74,11 @@ public class CommandCreateDomain extends SingleLineCommand2<DescriptionDiagram>
|
||||
new RegexLeaf("DISPLAY", DISPLAY_WITH_GENERIC), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore(), new RegexLeaf("CODE", "([a-zA-Z0-9]+)"), RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE", "([a-zA-Z0-9]+)"), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
// domain: lexical, causal, biddable
|
||||
// requirement: FR, NFR, quality
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("GROUP", "(\\{)?"), RegexLeaf.end());
|
||||
}
|
||||
|
||||
|
@ -56,6 +56,7 @@ import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public class CommandArchimate extends SingleLineCommand2<DescriptionDiagram> {
|
||||
@ -74,44 +75,25 @@ public class CommandArchimate extends SingleLineCommand2<DescriptionDiagram> {
|
||||
new RegexLeaf("CODE1", CommandCreateElementFull.CODE_WITH_QUOTE), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("DISPLAY2", CommandCreateElementFull.DISPLAY), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE2", "(?:\\<\\<([-\\w]+)\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optionalArchimate("STEREOTYPE2"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE2", CommandCreateElementFull.CODE)), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("CODE3", CommandCreateElementFull.CODE), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE3", "(?:\\<\\<([-\\w]+)\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
StereotypePattern.optionalArchimate("STEREOTYPE3"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("DISPLAY3", CommandCreateElementFull.DISPLAY)), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("DISPLAY4", CommandCreateElementFull.DISPLAY_WITHOUT_QUOTE), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE4", "(?:\\<\\<([-\\w]+)\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optionalArchimate("STEREOTYPE4"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE4", CommandCreateElementFull.CODE)) //
|
||||
), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(?:\\<\\<([-\\w]+)\\>\\>)") //
|
||||
)), RegexLeaf.end());
|
||||
StereotypePattern.optionalArchimate("STEREOTYPE"), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
private static ColorParser color() {
|
||||
@ -134,7 +116,7 @@ public class CommandArchimate extends SingleLineCommand2<DescriptionDiagram> {
|
||||
entity = diagram.reallyCreateLeaf(quark, Display.getWithNewlines(display), LeafType.DESCRIPTION,
|
||||
USymbols.ARCHIMATE);
|
||||
|
||||
final String icon = arg.getLazzy("STEREOTYPE", 0);
|
||||
final String icon = StereotypePattern.removeChevronBrackets(arg.getLazzy("STEREOTYPE", 0));
|
||||
|
||||
entity.setDisplay(Display.getWithNewlines(display));
|
||||
entity.setUSymbol(USymbols.ARCHIMATE);
|
||||
|
@ -56,6 +56,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.utils.BlocLines;
|
||||
|
||||
@ -77,13 +78,7 @@ public class CommandArchimateMultilines extends CommandMultilines2<AbstractEntit
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE", "([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(?:\\<\\<([-\\w]+)\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optionalArchimate("STEREOTYPE"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
@ -108,7 +103,7 @@ public class CommandArchimateMultilines extends CommandMultilines2<AbstractEntit
|
||||
if (quark.getData() != null)
|
||||
return CommandExecutionResult.error("Already exists " + quark.getName());
|
||||
|
||||
final String icon = line0.getLazzy("STEREOTYPE", 0);
|
||||
final String icon = StereotypePattern.removeChevronBrackets(line0.getLazzy("STEREOTYPE", 0));
|
||||
|
||||
final Entity entity = diagram.reallyCreateLeaf(quark, Display.getWithNewlines(quark), LeafType.DESCRIPTION,
|
||||
USymbols.RECTANGLE);
|
||||
|
@ -57,11 +57,11 @@ import net.sourceforge.plantuml.plasma.Quark;
|
||||
import net.sourceforge.plantuml.regex.IRegex;
|
||||
import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -84,43 +84,26 @@ public class CommandCreateElementFull extends SingleLineCommand2<DescriptionDiag
|
||||
new RegexLeaf("CODE1", CODE_WITH_QUOTE), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("DISPLAY2", DISPLAY), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE2", "(\\<\\<.+\\>\\>)")//
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE2"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE2", CODE)), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("CODE3", CODE), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE3", "(\\<\\<.+\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE3"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("DISPLAY3", DISPLAY)), //
|
||||
new RegexConcat(//
|
||||
new RegexLeaf("DISPLAY4", DISPLAY_WITHOUT_QUOTE), //
|
||||
new RegexOptional( //
|
||||
new RegexConcat( //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE4", "(\\<\\<.+\\>\\>)") //
|
||||
)), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE4"), //
|
||||
new RegexLeaf("as"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("CODE4", CODE)) //
|
||||
), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -59,6 +59,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -93,9 +94,7 @@ public class CommandCreateElementMultilines extends CommandMultilines2<AbstractE
|
||||
return RegexConcat.build(CommandCreateElementMultilines.class.getName() + type, RegexLeaf.start(), //
|
||||
new RegexLeaf("TYPE", "(" + CommandCreateElementFull.ALL_TYPES + ")[%s]+"), //
|
||||
new RegexLeaf("CODE", "([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
@ -110,9 +109,7 @@ public class CommandCreateElementMultilines extends CommandMultilines2<AbstractE
|
||||
return RegexConcat.build(CommandCreateElementMultilines.class.getName() + type, RegexLeaf.start(), //
|
||||
new RegexLeaf("TYPE", "(" + CommandCreateElementFull.ALL_TYPES + ")[%s]+"), //
|
||||
new RegexLeaf("CODE", "([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -59,6 +59,7 @@ import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.skin.ActorStyle;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.utils.Direction;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
@ -104,9 +105,7 @@ public class CommandLinkElement extends SingleLineCommand2<DescriptionDiagram> {
|
||||
// RegexLeaf.spaceZeroOrMore(), //
|
||||
|
||||
color().getRegex(), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("LABEL_LINK", "(?::[%s]*(.+))?"), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
@ -57,6 +57,7 @@ import net.sourceforge.plantuml.regex.RegexOr;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotag;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -115,9 +116,7 @@ public class CommandPackageWithUSymbol extends SingleLineCommand2<AbstractEntity
|
||||
), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("TAGS1", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREOTYPE"), //
|
||||
new RegexLeaf("TAGS2", Stereotag.pattern() + "?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
|
@ -97,11 +97,11 @@ public class PSystemEbnf extends TitledDiagram {
|
||||
@Override
|
||||
protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
if (expressions.size() == 0) {
|
||||
final Style style = ETile.getStyleSignature().getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||
final FontConfiguration fc = style.getFontConfiguration(getSkinParam().getIHtmlColorSet());
|
||||
|
@ -89,11 +89,11 @@ public class FilesDiagram extends UmlDiagram {
|
||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return list;
|
||||
}
|
||||
|
||||
|
@ -230,7 +230,7 @@ public class FlowDiagram extends UmlDiagram implements TextBlock {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ public class GitDiagram extends UmlDiagram {
|
||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
private void drawInternal(UGraphic ug) {
|
||||
@ -84,7 +84,7 @@ public class GitDiagram extends UmlDiagram {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return new AbstractTextBlock() {
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
|
@ -96,7 +96,7 @@ public class Help extends UmlDiagram {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ public class JsonDiagram extends TitledDiagram {
|
||||
protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
private void drawInternal(UGraphic ug) {
|
||||
@ -113,7 +113,7 @@ public class JsonDiagram extends TitledDiagram {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(final FileFormatOption fileFormatOption) {
|
||||
return new AbstractTextBlock() {
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
@ -121,7 +121,7 @@ public class JsonDiagram extends TitledDiagram {
|
||||
}
|
||||
|
||||
public XDimension2D calculateDimension(StringBounder stringBounder) {
|
||||
return TextBlockUtils.getMinMax(getTextBlock(), stringBounder, true).getDimension();
|
||||
return TextBlockUtils.getMinMax(getTextMainBlock(fileFormatOption), stringBounder, true).getDimension();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
@ -79,11 +79,11 @@ public class ListSpriteDiagram extends UmlDiagram {
|
||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return new AbstractTextBlock() {
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
|
@ -91,11 +91,11 @@ public class StdlibDiagram extends UmlDiagram {
|
||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return new AbstractTextBlock() {
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
|
@ -83,11 +83,11 @@ public class MindMapDiagram extends UmlDiagram {
|
||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return new AbstractTextBlock() {
|
||||
|
||||
public void drawU(UGraphic ug) {
|
||||
|
@ -331,11 +331,11 @@ public class NwDiagram extends UmlDiagram {
|
||||
protected ImageData exportDiagramInternal(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock()).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
return new AbstractTextBlock() {
|
||||
public void drawU(UGraphic ug) {
|
||||
drawMe(ug);
|
||||
|
@ -52,6 +52,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.url.UrlMode;
|
||||
@ -68,9 +69,7 @@ public class CommandCreateEntityObject extends SingleLineCommand2<AbstractClassO
|
||||
new RegexLeaf("TYPE", "object"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("NAME", "(?:[%g]([^%g]+)[%g][%s]+as[%s]+)?([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), RegexLeaf.end());
|
||||
|
@ -55,6 +55,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.skin.VisibilityModifier;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.utils.BlocLines;
|
||||
@ -70,9 +71,7 @@ public class CommandCreateEntityObjectMultilines extends CommandMultilines2<Abst
|
||||
new RegexLeaf("TYPE", "object"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("NAME", "(?:[%g]([^%g]+)[%g][%s]+as[%s]+)?([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -59,6 +59,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.utils.BlocLines;
|
||||
@ -74,9 +75,7 @@ public class CommandCreateJson extends CommandMultilines2<AbstractEntityDiagram>
|
||||
new RegexLeaf("TYPE", "json"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("NAME", "(?:[%g]([^%g]+)[%g][%s]+as[%s]+)?([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -56,6 +56,7 @@ import net.sourceforge.plantuml.regex.RegexConcat;
|
||||
import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
@ -70,9 +71,7 @@ public class CommandCreateJsonSingleLine extends SingleLineCommand2<AbstractClas
|
||||
new RegexLeaf("TYPE", "json"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("NAME", "(?:[%g]([^%g]+)[%g][%s]+as[%s]+)?([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
ColorParser.exp1(), //
|
||||
|
@ -62,6 +62,7 @@ import net.sourceforge.plantuml.regex.RegexLeaf;
|
||||
import net.sourceforge.plantuml.regex.RegexOptional;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.stereo.StereotypePattern;
|
||||
import net.sourceforge.plantuml.text.StringLocated;
|
||||
import net.sourceforge.plantuml.url.UrlBuilder;
|
||||
import net.sourceforge.plantuml.utils.BlocLines;
|
||||
@ -77,9 +78,7 @@ public class CommandCreateMap extends CommandMultilines2<AbstractEntityDiagram>
|
||||
new RegexLeaf("TYPE", "map"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("NAME", "(?:[%g]([^%g]+)[%g][%s]+as[%s]+)?([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("STEREO", "(\\<\\<.+\\>\\>)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
StereotypePattern.optional("STEREO"), //
|
||||
UrlBuilder.OPTIONAL, //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
color().getRegex(), //
|
||||
|
@ -51,7 +51,6 @@ import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import net.sourceforge.plantuml.FileFormat;
|
||||
import net.sourceforge.plantuml.FileFormatOption;
|
||||
import net.sourceforge.plantuml.TitledDiagram;
|
||||
import net.sourceforge.plantuml.WithSprite;
|
||||
@ -162,7 +161,7 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
|
||||
}
|
||||
|
||||
public DiagramDescription getDescription() {
|
||||
return new DiagramDescription("(Project)");
|
||||
return new DiagramDescription("(Gantt)");
|
||||
}
|
||||
|
||||
public void setWeekNumberStrategy(DayOfWeek firstDayOfWeek, int minimalDaysInFirstWeek) {
|
||||
@ -180,8 +179,7 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
|
||||
@Override
|
||||
protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption)
|
||||
throws IOException {
|
||||
final StringBounder stringBounder = fileFormatOption.getDefaultStringBounder(getSkinParam());
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextBlock(stringBounder)).write(os);
|
||||
return createImageBuilder(fileFormatOption).drawable(getTextMainBlock(fileFormatOption)).write(os);
|
||||
}
|
||||
|
||||
public void setPrintScale(PrintScale printScale) {
|
||||
@ -220,13 +218,8 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
|
||||
}
|
||||
|
||||
@Override
|
||||
protected TextBlock getTextBlock() {
|
||||
final FileFormatOption fileFormatOption = new FileFormatOption(FileFormat.PNG);
|
||||
protected TextBlock getTextMainBlock(FileFormatOption fileFormatOption) {
|
||||
final StringBounder stringBounder = fileFormatOption.getDefaultStringBounder(getSkinParam());
|
||||
return getTextBlock(stringBounder);
|
||||
}
|
||||
|
||||
private TextBlock getTextBlock(StringBounder stringBounder) {
|
||||
if (printStart == null) {
|
||||
initMinMax();
|
||||
} else {
|
||||
@ -450,13 +443,12 @@ public class GanttDiagram extends TitledDiagram implements ToTaskDraw, WithSprit
|
||||
} else if (task instanceof TaskGroup) {
|
||||
final TaskGroup taskGroup = (TaskGroup) task;
|
||||
draw = new TaskDrawGroup(timeScale, y, taskGroup.getCode().getSimpleDisplay(), getStart(taskGroup),
|
||||
getEnd(taskGroup), getSkinParam(), task, this, task.getStyleBuilder());
|
||||
getEnd(taskGroup), task, this, task.getStyleBuilder());
|
||||
} else {
|
||||
final TaskImpl tmp = (TaskImpl) task;
|
||||
final String disp = hideResourceName ? tmp.getCode().getSimpleDisplay() : tmp.getPrettyDisplay();
|
||||
if (tmp.isDiamond()) {
|
||||
draw = new TaskDrawDiamond(timeScale, y, disp, getStart(tmp), getSkinParam(), task, this,
|
||||
task.getStyleBuilder());
|
||||
draw = new TaskDrawDiamond(timeScale, y, disp, getStart(tmp), task, this, task.getStyleBuilder());
|
||||
} else {
|
||||
final boolean oddStart = printStart != null && min.compareTo(getStart(tmp)) == 0;
|
||||
final boolean oddEnd = printStart != null && max.compareTo(getEnd(tmp)) == 0;
|
||||
|
@ -79,8 +79,8 @@ import net.sourceforge.plantuml.style.CommandStyleMultilinesCSS;
|
||||
|
||||
public class GanttDiagramFactory extends PSystemCommandFactory {
|
||||
|
||||
static private final List<Subject> subjects() {
|
||||
return Arrays.<Subject>asList(SubjectTask.ME, SubjectProject.ME, SubjectDayOfWeek.ME, SubjectDayAsDate.ME,
|
||||
static private final List<Subject<GanttDiagram>> subjects() {
|
||||
return Arrays.asList(SubjectTask.ME, SubjectProject.ME, SubjectDayOfWeek.ME, SubjectDayAsDate.ME,
|
||||
SubjectDaysAsDates.ME, SubjectResource.ME, SubjectToday.ME, SubjectSeparator.ME);
|
||||
}
|
||||
|
||||
@ -120,28 +120,28 @@ public class GanttDiagramFactory extends PSystemCommandFactory {
|
||||
}
|
||||
|
||||
private void addLanguageCommands(List<Command> cmd) {
|
||||
for (Subject subject : subjects())
|
||||
for (SentenceSimple sentenceA : subject.getSentences()) {
|
||||
for (Subject<GanttDiagram> subject : subjects())
|
||||
for (SentenceSimple<GanttDiagram> sentenceA : subject.getSentences()) {
|
||||
cmd.add(NaturalCommand.create(sentenceA));
|
||||
for (SentenceSimple sentenceB : subject.getSentences()) {
|
||||
for (SentenceSimple<GanttDiagram> sentenceB : subject.getSentences()) {
|
||||
final String signatureA = sentenceA.getSignature();
|
||||
final String signatureB = sentenceB.getSignature();
|
||||
if (signatureA.equals(signatureB) == false)
|
||||
cmd.add(NaturalCommand.create(new SentenceAnd(sentenceA, sentenceB)));
|
||||
cmd.add(NaturalCommand.create(new SentenceAnd<GanttDiagram>(sentenceA, sentenceB)));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
for (Subject subject : subjects())
|
||||
for (SentenceSimple sentenceA : subject.getSentences())
|
||||
for (SentenceSimple sentenceB : subject.getSentences())
|
||||
for (SentenceSimple sentenceC : subject.getSentences()) {
|
||||
for (Subject<GanttDiagram> subject : subjects())
|
||||
for (SentenceSimple<GanttDiagram> sentenceA : subject.getSentences())
|
||||
for (SentenceSimple<GanttDiagram> sentenceB : subject.getSentences())
|
||||
for (SentenceSimple<GanttDiagram> sentenceC : subject.getSentences()) {
|
||||
final String signatureA = sentenceA.getSignature();
|
||||
final String signatureB = sentenceB.getSignature();
|
||||
final String signatureC = sentenceC.getSignature();
|
||||
if (signatureA.equals(signatureB) == false && signatureA.equals(signatureC) == false
|
||||
&& signatureC.equals(signatureB) == false)
|
||||
cmd.add(NaturalCommand.create(new SentenceAndAnd(sentenceA, sentenceB, sentenceC)));
|
||||
cmd.add(NaturalCommand.create(new SentenceAndAnd<GanttDiagram>(sentenceA, sentenceB, sentenceC)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -37,6 +37,7 @@ package net.sourceforge.plantuml.project;
|
||||
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
|
||||
import net.sourceforge.plantuml.klimt.UStroke;
|
||||
@ -70,7 +71,7 @@ public class TimeHeaderParameters implements GanttStyle {
|
||||
this.scale = scale;
|
||||
this.min = min;
|
||||
this.max = max;
|
||||
this.colorSet = colorSet;
|
||||
this.colorSet = Objects.requireNonNull(colorSet);
|
||||
this.ganttStyle = ganttStyle;
|
||||
this.locale = locale;
|
||||
this.openClose = openClose;
|
||||
|
@ -59,7 +59,8 @@ public class CommandColorTask extends SingleLineCommand2<GanttDiagram> {
|
||||
new RegexLeaf("CODE", "\\[([%pLN_.]+)\\]"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("COLORS", "#(\\w+)(?:/(#?\\w+))?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), RegexLeaf.end());
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -45,7 +45,7 @@ import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public class CommandFootbox extends SingleLineCommand2<GanttDiagram> {
|
||||
// ::remove folder when __HAXE__
|
||||
// ::remove folder when __HAXE__
|
||||
|
||||
public CommandFootbox() {
|
||||
super(getRegexConcat());
|
||||
@ -55,7 +55,8 @@ public class CommandFootbox extends SingleLineCommand2<GanttDiagram> {
|
||||
return RegexConcat.build(CommandFootbox.class.getName(), RegexLeaf.start(), //
|
||||
new RegexLeaf("TYPE", "(hide|show)?"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("footbox"), RegexLeaf.end()); //
|
||||
new RegexLeaf("footbox"), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -63,7 +63,8 @@ public class CommandGanttArrow extends SingleLineCommand2<GanttDiagram> {
|
||||
new RegexLeaf("\\>"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("CODE2", "([%pLN_.]+)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), RegexLeaf.end());
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -57,7 +57,7 @@ public class CommandHideResourceFootbox extends SingleLineCommand2<GanttDiagram>
|
||||
new RegexLeaf("ress?ources?"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("footbox"), //
|
||||
RegexLeaf.end()); //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -57,7 +57,7 @@ public class CommandHideResourceName extends SingleLineCommand2<GanttDiagram> {
|
||||
new RegexLeaf("ress?ources?"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("names?"), //
|
||||
RegexLeaf.end()); //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -70,7 +70,8 @@ public class CommandLabelOnColumn extends SingleLineCommand2<GanttDiagram> {
|
||||
new RegexLeaf("ALIGNED", "(left|right)"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
new RegexLeaf("aligned") //
|
||||
)), RegexLeaf.end()); //
|
||||
)), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -55,7 +55,7 @@ public class CommandLanguage extends SingleLineCommand2<GanttDiagram> {
|
||||
new RegexLeaf("language"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("LANG", "(\\w+)"), //
|
||||
RegexLeaf.end()); //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -66,7 +66,7 @@ public class CommandPrintBetween extends SingleLineCommand2<GanttDiagram> {
|
||||
new RegexLeaf("and"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
pattern.toRegex("END"), //
|
||||
RegexLeaf.end()); //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -77,7 +77,7 @@ public class CommandPrintScale extends SingleLineCommand2<GanttDiagram> {
|
||||
new RegexLeaf("zoom"), //
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("ZOOM", "([.\\d]+)"))), //
|
||||
RegexLeaf.end()); //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -64,7 +64,6 @@ public class CommandTaskCompleteDefault extends SingleLineCommand2<GanttDiagram>
|
||||
RegexLeaf.spaceOneOrMore(), //
|
||||
new RegexLeaf("VALUE", "(\\d+)"), //
|
||||
new RegexLeaf(".*"), //
|
||||
RegexLeaf.spaceZeroOrMore(), //
|
||||
RegexLeaf.end());
|
||||
}
|
||||
|
||||
|
@ -37,27 +37,27 @@ package net.sourceforge.plantuml.project.command;
|
||||
|
||||
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||
import net.sourceforge.plantuml.command.SingleLineCommand2;
|
||||
import net.sourceforge.plantuml.project.GanttDiagram;
|
||||
import net.sourceforge.plantuml.core.Diagram;
|
||||
import net.sourceforge.plantuml.project.lang.Sentence;
|
||||
import net.sourceforge.plantuml.regex.RegexResult;
|
||||
import net.sourceforge.plantuml.utils.LineLocation;
|
||||
|
||||
public class NaturalCommand extends SingleLineCommand2<GanttDiagram> {
|
||||
public class NaturalCommand<D extends Diagram> extends SingleLineCommand2<D> {
|
||||
|
||||
private final Sentence sentence;
|
||||
private final Sentence<D> sentence;
|
||||
|
||||
public NaturalCommand(Sentence sentence) {
|
||||
public NaturalCommand(Sentence<D> sentence) {
|
||||
super(sentence.toRegex());
|
||||
this.sentence = sentence;
|
||||
}
|
||||
|
||||
@Override
|
||||
final protected CommandExecutionResult executeArg(GanttDiagram system, LineLocation location, RegexResult arg) {
|
||||
final protected CommandExecutionResult executeArg(D system, LineLocation location, RegexResult arg) {
|
||||
return sentence.execute(system, arg);
|
||||
}
|
||||
|
||||
public static NaturalCommand create(Sentence sentence) {
|
||||
return new NaturalCommand(sentence);
|
||||
public static <D extends Diagram> NaturalCommand<D> create(Sentence<D> sentence) {
|
||||
return new NaturalCommand<D>(sentence);
|
||||
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,7 @@
|
||||
*/
|
||||
package net.sourceforge.plantuml.project.core;
|
||||
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||
|
||||
public abstract class AbstractTask implements Task {
|
||||
@ -44,6 +45,7 @@ public abstract class AbstractTask implements Task {
|
||||
|
||||
private Task row;
|
||||
private String displayString;
|
||||
private Stereotype stereotype;
|
||||
|
||||
protected AbstractTask(StyleBuilder styleBuilder, TaskCode code) {
|
||||
this.styleBuilder = styleBuilder;
|
||||
@ -80,5 +82,16 @@ public abstract class AbstractTask implements Task {
|
||||
public String getDisplayString() {
|
||||
return this.displayString;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stereotype getStereotype() {
|
||||
return stereotype;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void setStereotype(Stereotype stereotype) {
|
||||
this.stereotype = stereotype;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ import net.sourceforge.plantuml.project.Load;
|
||||
import net.sourceforge.plantuml.project.lang.CenterBorderColor;
|
||||
import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.time.DayOfWeek;
|
||||
import net.sourceforge.plantuml.stereo.Stereotype;
|
||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
|
||||
@ -85,4 +86,8 @@ public interface Task extends Moment {
|
||||
|
||||
public String getDisplayString();
|
||||
|
||||
public Stereotype getStereotype();
|
||||
|
||||
public void setStereotype(Stereotype stereotype);
|
||||
|
||||
}
|
||||
|
@ -49,11 +49,11 @@ import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.timescale.TimeScale;
|
||||
import net.sourceforge.plantuml.real.Real;
|
||||
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
|
||||
import net.sourceforge.plantuml.style.ISkinParam;
|
||||
import net.sourceforge.plantuml.style.PName;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||
import net.sourceforge.plantuml.style.StyleSignature;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
import net.sourceforge.plantuml.url.Url;
|
||||
import net.sourceforge.plantuml.utils.Direction;
|
||||
@ -85,8 +85,8 @@ public abstract class AbstractTaskDraw implements TaskDraw {
|
||||
this.note = note;
|
||||
}
|
||||
|
||||
public AbstractTaskDraw(TimeScale timeScale, Real y, String prettyDisplay, Day start, ISkinParam skinParam,
|
||||
Task task, ToTaskDraw toTaskDraw, StyleBuilder styleBuilder) {
|
||||
public AbstractTaskDraw(TimeScale timeScale, Real y, String prettyDisplay, Day start, Task task,
|
||||
ToTaskDraw toTaskDraw, StyleBuilder styleBuilder) {
|
||||
this.y = y;
|
||||
this.styleBuilder = styleBuilder;
|
||||
this.toTaskDraw = toTaskDraw;
|
||||
@ -96,7 +96,7 @@ public abstract class AbstractTaskDraw implements TaskDraw {
|
||||
this.task = task;
|
||||
}
|
||||
|
||||
abstract StyleSignatureBasic getStyleSignature();
|
||||
abstract StyleSignature getStyleSignature();
|
||||
|
||||
private StyleSignatureBasic getStyleSignatureUnstarted() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.ganttDiagram, SName.task, SName.unstarted);
|
||||
|
@ -54,21 +54,21 @@ import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.timescale.TimeScale;
|
||||
import net.sourceforge.plantuml.real.Real;
|
||||
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
|
||||
import net.sourceforge.plantuml.style.ISkinParam;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||
import net.sourceforge.plantuml.style.StyleSignature;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
|
||||
public class TaskDrawDiamond extends AbstractTaskDraw {
|
||||
|
||||
public TaskDrawDiamond(TimeScale timeScale, Real y, String prettyDisplay, Day start, ISkinParam skinParam,
|
||||
Task task, ToTaskDraw toTaskDraw, StyleBuilder styleBuilder) {
|
||||
super(timeScale, y, prettyDisplay, start, skinParam, task, toTaskDraw, styleBuilder);
|
||||
public TaskDrawDiamond(TimeScale timeScale, Real y, String prettyDisplay, Day start, Task task,
|
||||
ToTaskDraw toTaskDraw, StyleBuilder styleBuilder) {
|
||||
super(timeScale, y, prettyDisplay, start, task, toTaskDraw, styleBuilder);
|
||||
}
|
||||
|
||||
@Override
|
||||
StyleSignatureBasic getStyleSignature() {
|
||||
StyleSignature getStyleSignature() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.ganttDiagram, SName.milestone);
|
||||
}
|
||||
|
||||
|
@ -54,22 +54,19 @@ import net.sourceforge.plantuml.project.time.Day;
|
||||
import net.sourceforge.plantuml.project.timescale.TimeScale;
|
||||
import net.sourceforge.plantuml.real.Real;
|
||||
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
|
||||
import net.sourceforge.plantuml.style.ISkinParam;
|
||||
import net.sourceforge.plantuml.style.SName;
|
||||
import net.sourceforge.plantuml.style.Style;
|
||||
import net.sourceforge.plantuml.style.StyleBuilder;
|
||||
import net.sourceforge.plantuml.style.StyleSignature;
|
||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||
|
||||
public class TaskDrawGroup extends AbstractTaskDraw {
|
||||
|
||||
private final Day end;
|
||||
|
||||
private final ISkinParam skinParam;
|
||||
|
||||
public TaskDrawGroup(TimeScale timeScale, Real y, String prettyDisplay, Day start, Day end, ISkinParam skinParam,
|
||||
Task task, ToTaskDraw toTaskDraw, StyleBuilder styleBuilder) {
|
||||
super(timeScale, y, prettyDisplay, start, skinParam, task, toTaskDraw, styleBuilder);
|
||||
this.skinParam = skinParam;
|
||||
public TaskDrawGroup(TimeScale timeScale, Real y, String prettyDisplay, Day start, Day end, Task task,
|
||||
ToTaskDraw toTaskDraw, StyleBuilder styleBuilder) {
|
||||
super(timeScale, y, prettyDisplay, start, task, toTaskDraw, styleBuilder);
|
||||
this.end = end;
|
||||
}
|
||||
|
||||
@ -122,7 +119,7 @@ public class TaskDrawGroup extends AbstractTaskDraw {
|
||||
}
|
||||
|
||||
@Override
|
||||
StyleSignatureBasic getStyleSignature() {
|
||||
StyleSignature getStyleSignature() {
|
||||
return StyleSignatureBasic.of(SName.root, SName.element, SName.ganttDiagram, SName.task);
|
||||
}
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user