1
0
mirror of https://github.com/octoleo/plantuml.git synced 2024-11-22 04:55:10 +00:00

Improve stdlib versioning

This commit is contained in:
Arnaud Roques 2022-11-16 00:15:21 +01:00
parent db09c72834
commit 97d3281ec3
18 changed files with 261 additions and 79 deletions

View File

@ -44,6 +44,7 @@ import net.sourceforge.plantuml.AlignmentParam;
import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.Direction;
import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.ISkinParam;
import net.sourceforge.plantuml.LineBreakStrategy; import net.sourceforge.plantuml.LineBreakStrategy;
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
import net.sourceforge.plantuml.activitydiagram3.PositionedNote; import net.sourceforge.plantuml.activitydiagram3.PositionedNote;
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile; import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile; import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
@ -246,4 +247,11 @@ public class FtileWithNoteOpale extends AbstractFtile implements Stencil, Stylea
return opale.calculateDimension(stringBounder).getWidth() - opale.getMarginX1(); return opale.calculateDimension(stringBounder).getWidth() - opale.getMarginX1();
} }
@Override
final public LinkRendering getInLinkRendering() {
return tile.getInLinkRendering();
}
} }

View File

@ -40,6 +40,7 @@ import java.util.Set;
import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.ISkinParam;
import net.sourceforge.plantuml.LineBreakStrategy; import net.sourceforge.plantuml.LineBreakStrategy;
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
import net.sourceforge.plantuml.activitydiagram3.PositionedNote; import net.sourceforge.plantuml.activitydiagram3.PositionedNote;
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile; import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile; import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
@ -147,12 +148,11 @@ public class FtileWithNotes extends AbstractFtile {
} }
} }
if (left == null) { if (left == null)
left = TextBlockUtils.empty(0, 0); left = TextBlockUtils.empty(0, 0);
}
if (right == null) { if (right == null)
right = TextBlockUtils.empty(0, 0); right = TextBlockUtils.empty(0, 0);
}
} }
@ -204,10 +204,10 @@ public class FtileWithNotes extends AbstractFtile {
final XDimension2D dimTotal = calculateDimensionInternal(stringBounder); final XDimension2D dimTotal = calculateDimensionInternal(stringBounder);
final FtileGeometry orig = tile.calculateDimension(stringBounder); final FtileGeometry orig = tile.calculateDimension(stringBounder);
final UTranslate translate = getTranslate(stringBounder); final UTranslate translate = getTranslate(stringBounder);
if (orig.hasPointOut()) { if (orig.hasPointOut())
return new FtileGeometry(dimTotal, orig.getLeft() + translate.getDx(), orig.getInY() + translate.getDy(), return new FtileGeometry(dimTotal, orig.getLeft() + translate.getDx(), orig.getInY() + translate.getDy(),
orig.getOutY() + translate.getDy()); orig.getOutY() + translate.getDy());
}
return new FtileGeometry(dimTotal, orig.getLeft() + translate.getDx(), orig.getInY() + translate.getDy()); return new FtileGeometry(dimTotal, orig.getLeft() + translate.getDx(), orig.getInY() + translate.getDy());
} }
@ -219,4 +219,9 @@ public class FtileWithNotes extends AbstractFtile {
return new XDimension2D(dimTile.getWidth() + dimLeft.getWidth() + dimRight.getWidth(), height); return new XDimension2D(dimTile.getWidth() + dimLeft.getWidth() + dimRight.getWidth(), height);
} }
@Override
final public LinkRendering getInLinkRendering() {
return tile.getInLinkRendering();
}
} }

View File

@ -101,14 +101,15 @@ public class FtileBox extends AbstractFtile {
return StyleSignatureBasic.of(SName.root, SName.element, SName.activityDiagram, SName.arrow); return StyleSignatureBasic.of(SName.root, SName.element, SName.activityDiagram, SName.arrow);
} }
@Override
final public LinkRendering getInLinkRendering() { final public LinkRendering getInLinkRendering() {
return inRendering; return inRendering;
} }
public Set<Swimlane> getSwimlanes() { public Set<Swimlane> getSwimlanes() {
if (swimlane == null) { if (swimlane == null)
return Collections.emptySet(); return Collections.emptySet();
}
return Collections.singleton(swimlane); return Collections.singleton(swimlane);
} }

View File

@ -164,13 +164,9 @@ public class FtileBoxOld extends AbstractFtile {
final LineBreakStrategy wrapWidth = style.wrapWidth(); final LineBreakStrategy wrapWidth = style.wrapWidth();
this.minimumWidth = style.value(PName.MinimumWidth).asDouble(); this.minimumWidth = style.value(PName.MinimumWidth).asDouble();
// final HorizontalAlignment alignment =
// skinParam.getDefaultTextAlignment(horizontalAlignment);
final Sheet sheet = skinParam.sheet(fc, horizontalAlignment, CreoleMode.FULL).createSheet(label); final Sheet sheet = skinParam.sheet(fc, horizontalAlignment, CreoleMode.FULL).createSheet(label);
// this.tb = new SheetBlock1(sheet, wrapWidth, 0, this.padding.getLeft(), this.padding.getRight());
// this.tb = new SheetBlock2(new SheetBlock1(sheet, wrapWidth, 0, this.padding.getLeft(), this.padding.getRight()), this.tb = new SheetBlock2(new SheetBlock1(sheet, wrapWidth, style), new MyStencil(),
// new MyStencil(), new UStroke(1));
this.tb = new SheetBlock2(new SheetBlock1(sheet, wrapWidth, style.getPadding()), new MyStencil(),
new UStroke(1)); new UStroke(1));
this.print = label.toString(); this.print = label.toString();

View File

@ -93,6 +93,8 @@ import net.sourceforge.plantuml.xmlsc.StateDiagramScxmlMaker;
public abstract class CucaDiagram extends UmlDiagram implements GroupHierarchy, PortionShower, ICucaDiagram { public abstract class CucaDiagram extends UmlDiagram implements GroupHierarchy, PortionShower, ICucaDiagram {
static public final boolean QUARK = false;
static private final boolean G1972 = false; static private final boolean G1972 = false;
// private String namespaceSeparator = "."; // private String namespaceSeparator = ".";
@ -100,6 +102,14 @@ public abstract class CucaDiagram extends UmlDiagram implements GroupHierarchy,
private String namespaceSeparator = null; private String namespaceSeparator = null;
private boolean namespaceSeparatorHasBeenSet = false; private boolean namespaceSeparatorHasBeenSet = false;
public Quark currentQuark() {
throw new UnsupportedOperationException();
}
public /*protected*/ Plasma getPlasma() {
throw new UnsupportedOperationException();
}
public final boolean V1972() { public final boolean V1972() {
if (getPragma().backToLegacyPackage()) { if (getPragma().backToLegacyPackage()) {
return false; return false;

View File

@ -113,13 +113,20 @@ public class Plasma {
// return false; // return false;
// } // }
public Quark getIfExists(String name) { public Quark getIfExistsFromName(String name) {
for (Quark quark : quarks.values()) for (Quark quark : quarks.values())
if (quark.getName().equals(name)) if (quark.getName().equals(name))
return quark; return quark;
return null; return null;
} }
public Quark getIfExistsFromFullPath(String full) {
for (Quark quark : quarks.values())
if (quark.toString(separator).equals(full))
return quark;
return null;
}
public Quark getIfExists(List<String> signature) { public Quark getIfExists(List<String> signature) {
return quarks.get(signature); return quarks.get(signature);
} }

View File

@ -165,6 +165,12 @@ public class Quark extends Ident implements Code {
return plasma.getIfExists(sig); return plasma.getIfExists(sig);
} }
public Quark parse(Quark path) {
final List<String> sig = new ArrayList<>(getSignature());
sig.addAll(path.getSignature());
return plasma.ensurePresent(sig);
}
public Quark child(String name) { public Quark child(String name) {
return plasma.parse(this, name); return plasma.parse(this, name);
} }
@ -182,13 +188,15 @@ public class Quark extends Ident implements Code {
} }
public void internalMove(Quark src, Quark dest) { public void internalMove(Quark src, Quark dest) {
System.err.print("Intermal move from " + this + " to ");
if (src.getDepth() + 1 != dest.getDepth()) if (src.getDepth() + 1 != dest.getDepth())
throw new UnsupportedOperationException("to be finished"); throw new UnsupportedOperationException("to be finished");
final String name = getName(); final List<String> previous = this.getSignature();
parts.clear(); parts.clear();
parts.addAll(dest.getSignature()); parts.addAll(dest.getSignature());
parts.add(name); parts.addAll(previous.subList(src.getDepth(), previous.size()));
this.parent = dest; this.parent = plasma.ensurePresent(parts.subList(0, parts.size() - 1));
System.err.println(toString());
} }
} }

View File

@ -41,7 +41,10 @@ import net.sourceforge.plantuml.StringUtils;
import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.Url;
import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder;
import net.sourceforge.plantuml.UrlMode; import net.sourceforge.plantuml.UrlMode;
import net.sourceforge.plantuml.baraye.CucaDiagram;
import net.sourceforge.plantuml.baraye.EntityImp;
import net.sourceforge.plantuml.baraye.ILeaf; import net.sourceforge.plantuml.baraye.ILeaf;
import net.sourceforge.plantuml.baraye.Quark;
import net.sourceforge.plantuml.classdiagram.ClassDiagram; import net.sourceforge.plantuml.classdiagram.ClassDiagram;
import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.CommandExecutionResult;
import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.SingleLineCommand2;
@ -113,9 +116,11 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
new RegexOptional(new RegexConcat(new RegexLeaf("##"), new RegexOptional(new RegexConcat(new RegexLeaf("##"),
new RegexLeaf("LINECOLOR", "(?:\\[(dotted|dashed|bold)\\])?(\\w+)?"))), // new RegexLeaf("LINECOLOR", "(?:\\[(dotted|dashed|bold)\\])?(\\w+)?"))), //
new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(), new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(),
new RegexLeaf("EXTENDS", "(extends)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"))), // new RegexLeaf("EXTENDS",
"(extends)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"))), //
new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(), new RegexOptional(new RegexConcat(RegexLeaf.spaceOneOrMore(),
new RegexLeaf("IMPLEMENTS", "(implements)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"))), // new RegexLeaf("IMPLEMENTS",
"(implements)[%s]+(" + CommandCreateClassMultilines.CODES + "|[%g]([^%g]+)[%g])"))), //
new RegexOptional(new RegexConcat(RegexLeaf.spaceZeroOrMore(), new RegexLeaf("\\{"), new RegexOptional(new RegexConcat(RegexLeaf.spaceZeroOrMore(), new RegexLeaf("\\{"),
RegexLeaf.spaceZeroOrMore(), new RegexLeaf("\\}"))), // RegexLeaf.spaceZeroOrMore(), new RegexLeaf("\\}"))), //
RegexLeaf.end()); RegexLeaf.end());
@ -137,7 +142,30 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
final String generic = genericOption != null ? genericOption : arg.get("GENERIC", 0); final String generic = genericOption != null ? genericOption : arg.get("GENERIC", 0);
final String stereo = arg.get("STEREO", 0); final String stereo = arg.get("STEREO", 0);
final ILeaf entity; /* final */ ILeaf entity;
if (CucaDiagram.QUARK) {
final Quark current = diagram.currentQuark();
final Quark idNewLong = (Quark) diagram.buildLeafIdent(idShort);
if (idNewLong.getData() == null)
entity = diagram.createLeaf(idNewLong, idNewLong, Display.getWithNewlines(display), type, null);
else
entity = (ILeaf) idNewLong.getData();
if (entity == null || entity.isGroup()) {
for (Quark tmp : diagram.getPlasma().quarks())
if (tmp.getData() instanceof EntityImp) {
final EntityImp tmp2 = (EntityImp) tmp.getData();
if (tmp2 != null && tmp.getName().equals(idShort) && tmp2.isGroup() == false) {
entity = (ILeaf) tmp.getData();
break;
}
}
}
if (entity == null) {
final Display withNewlines = Display.getWithNewlines(display);
entity = diagram.createLeaf(idNewLong, idNewLong, withNewlines, type, null);
}
} else {
final Ident idNewLong = diagram.buildLeafIdent(idShort); final Ident idNewLong = diagram.buildLeafIdent(idShort);
if (diagram.V1972()) { if (diagram.V1972()) {
if (diagram.leafExistSmart(idNewLong)) { if (diagram.leafExistSmart(idNewLong)) {
@ -159,6 +187,7 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
entity = diagram.createLeaf(idNewLong, code, Display.getWithNewlines(display), type, null); entity = diagram.createLeaf(idNewLong, code, Display.getWithNewlines(display), type, null);
} }
} }
}
if (stereo != null) { if (stereo != null) {
entity.setStereotype(Stereotype.build(stereo, diagram.getSkinParam().getCircledCharacterRadius(), entity.setStereotype(Stereotype.build(stereo, diagram.getSkinParam().getCircledCharacterRadius(),
diagram.getSkinParam().getFont(null, false, FontParam.CIRCLED_CHARACTER), diagram.getSkinParam().getFont(null, false, FontParam.CIRCLED_CHARACTER),
@ -179,8 +208,7 @@ public class CommandCreateClass extends SingleLineCommand2<ClassDiagram> {
Colors colors = color().getColor(arg, diagram.getSkinParam().getIHtmlColorSet()); Colors colors = color().getColor(arg, diagram.getSkinParam().getIHtmlColorSet());
final String s = arg.get("LINECOLOR", 1); final String s = arg.get("LINECOLOR", 1);
final HColor lineColor = s == null ? null final HColor lineColor = s == null ? null : diagram.getSkinParam().getIHtmlColorSet().getColor(s);
: diagram.getSkinParam().getIHtmlColorSet().getColor(s);
if (lineColor != null) if (lineColor != null)
colors = colors.add(ColorType.LINE, lineColor); colors = colors.add(ColorType.LINE, lineColor);

View File

@ -41,8 +41,11 @@ import net.sourceforge.plantuml.StringUtils;
import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.Url;
import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder;
import net.sourceforge.plantuml.UrlMode; import net.sourceforge.plantuml.UrlMode;
import net.sourceforge.plantuml.baraye.CucaDiagram;
import net.sourceforge.plantuml.baraye.EntityImp;
import net.sourceforge.plantuml.baraye.IEntity; import net.sourceforge.plantuml.baraye.IEntity;
import net.sourceforge.plantuml.baraye.ILeaf; import net.sourceforge.plantuml.baraye.ILeaf;
import net.sourceforge.plantuml.baraye.Quark;
import net.sourceforge.plantuml.classdiagram.ClassDiagram; import net.sourceforge.plantuml.classdiagram.ClassDiagram;
import net.sourceforge.plantuml.command.BlocLines; import net.sourceforge.plantuml.command.BlocLines;
import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.CommandExecutionResult;
@ -249,7 +252,27 @@ public class CommandCreateClassMultilines extends CommandMultilines2<ClassDiagra
final String stereotype = line0.get("STEREO", 0); final String stereotype = line0.get("STEREO", 0);
/* final */ILeaf result; /* final */ILeaf result;
if (diagram.V1972()) { if (CucaDiagram.QUARK) {
final Quark current = diagram.currentQuark();
final Quark idNewLong = (Quark) diagram.buildLeafIdent(idShort);
if (idNewLong.getData() == null)
result = diagram.createLeaf(idNewLong, code, Display.getWithNewlines(display), type, null);
else
result = (ILeaf) idNewLong.getData();
if (result == null || result.isGroup()) {
for (Quark tmp : diagram.getPlasma().quarks())
if (tmp.getData() instanceof EntityImp) {
final EntityImp tmp2 = (EntityImp) tmp.getData();
if (tmp2 != null && tmp.getName().equals(idShort) && tmp2.isGroup() == false) {
result = (ILeaf) tmp.getData();
break;
}
}
}
if (result == null)
result = diagram.createLeaf(idNewLong, idNewLong, Display.getWithNewlines(display), type, null);
diagram.setLastEntity(result);
} else if (diagram.V1972()) {
result = diagram.getLeafSmart(ident); result = diagram.getLeafSmart(ident);
if (result != null) { if (result != null) {
// result = diagram.getOrCreateLeaf(ident, code, null, null); // result = diagram.getOrCreateLeaf(ident, code, null, null);
@ -270,6 +293,7 @@ public class CommandCreateClassMultilines extends CommandMultilines2<ClassDiagra
result = diagram.createLeaf(ident, code, Display.getWithNewlines(display), type, null); result = diagram.createLeaf(ident, code, Display.getWithNewlines(display), type, null);
} }
} }
result.setVisibilityModifier(visibilityModifier); result.setVisibilityModifier(visibilityModifier);
if (stereotype != null) { if (stereotype != null) {
result.setStereotype(Stereotype.build(stereotype, diagram.getSkinParam().getCircledCharacterRadius(), result.setStereotype(Stereotype.build(stereotype, diagram.getSkinParam().getCircledCharacterRadius(),

View File

@ -39,8 +39,10 @@ import net.sourceforge.plantuml.LineLocation;
import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.Url;
import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder;
import net.sourceforge.plantuml.UrlMode; import net.sourceforge.plantuml.UrlMode;
import net.sourceforge.plantuml.baraye.CucaDiagram;
import net.sourceforge.plantuml.baraye.IEntity; import net.sourceforge.plantuml.baraye.IEntity;
import net.sourceforge.plantuml.baraye.IGroup; import net.sourceforge.plantuml.baraye.IGroup;
import net.sourceforge.plantuml.baraye.Quark;
import net.sourceforge.plantuml.classdiagram.ClassDiagram; import net.sourceforge.plantuml.classdiagram.ClassDiagram;
import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.IRegex;
import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexConcat;
@ -84,12 +86,20 @@ public class CommandNamespace extends SingleLineCommand2<ClassDiagram> {
final Code code; final Code code;
final IGroup currentPackage; final IGroup currentPackage;
final Display display; final Display display;
final Ident idNewLong = diagram.buildLeafIdent(idShort); final Ident idNewLong;
if (diagram.V1972()) { if (CucaDiagram.QUARK) {
final Quark current = diagram.currentQuark();
code = current;
display = Display.getWithNewlines(idShort);
idNewLong = current.child(idShort);
currentPackage = (IGroup) current.getData();
} else if (diagram.V1972()) {
idNewLong = diagram.buildLeafIdent(idShort);
code = null; code = null;
currentPackage = null; currentPackage = null;
display = Display.getWithNewlines(idNewLong.getName()); display = Display.getWithNewlines(idNewLong.getName());
} else { } else {
idNewLong = diagram.buildLeafIdent(idShort);
code = diagram.buildCode(idShort); code = diagram.buildCode(idShort);
currentPackage = diagram.getCurrentGroup(); currentPackage = diagram.getCurrentGroup();
display = Display.getWithNewlines(code); display = Display.getWithNewlines(code);
@ -110,8 +120,7 @@ public class CommandNamespace extends SingleLineCommand2<ClassDiagram> {
final String color = arg.get("COLOR", 0); final String color = arg.get("COLOR", 0);
if (color != null) { if (color != null) {
p.setSpecificColorTOBEREMOVED(ColorType.BACK, p.setSpecificColorTOBEREMOVED(ColorType.BACK, diagram.getSkinParam().getIHtmlColorSet().getColor(color));
diagram.getSkinParam().getIHtmlColorSet().getColor(color));
} }
return CommandExecutionResult.ok(); return CommandExecutionResult.ok();
} }

View File

@ -40,8 +40,10 @@ import net.sourceforge.plantuml.StringUtils;
import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.Url;
import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder;
import net.sourceforge.plantuml.UrlMode; import net.sourceforge.plantuml.UrlMode;
import net.sourceforge.plantuml.baraye.CucaDiagram;
import net.sourceforge.plantuml.baraye.IEntity; import net.sourceforge.plantuml.baraye.IEntity;
import net.sourceforge.plantuml.baraye.IGroup; import net.sourceforge.plantuml.baraye.IGroup;
import net.sourceforge.plantuml.baraye.Quark;
import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram;
import net.sourceforge.plantuml.classdiagram.command.CommandCreateClassMultilines; import net.sourceforge.plantuml.classdiagram.command.CommandCreateClassMultilines;
import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.IRegex;
@ -123,30 +125,37 @@ public class CommandPackage extends SingleLineCommand2<AbstractEntityDiagram> {
display = name; display = name;
idShort = arg.get("AS", 0); idShort = arg.get("AS", 0);
} }
final IGroup currentPackage = diagram.getCurrentGroup();
// final Ident ident = diagram.buildLeafIdentSpecial(idShort); final Ident ident;
final Ident ident = diagram.buildLeafIdent(idShort); final Code code;
final Code code = diagram.V1972() ? ident : diagram.buildCode(idShort);
if (CucaDiagram.QUARK) {
final Quark current = diagram.currentQuark();
code = current;
ident = current.child(idShort);
} else {
ident = diagram.buildLeafIdent(idShort);
code = diagram.V1972() ? ident : diagram.buildCode(idShort);
if (diagram.V1972() && override1972) if (diagram.V1972() && override1972)
display = ident.getLast(); display = ident.getLast();
}
final IGroup currentPackage = diagram.getCurrentGroup();
diagram.gotoGroup(ident, code, Display.getWithNewlines(display), GroupType.PACKAGE, currentPackage, diagram.gotoGroup(ident, code, Display.getWithNewlines(display), GroupType.PACKAGE, currentPackage,
NamespaceStrategy.SINGLE); NamespaceStrategy.SINGLE);
final IEntity p = diagram.getCurrentGroup(); final IEntity p = diagram.getCurrentGroup();
final String stereotype = arg.get("STEREOTYPE", 0); final String stereotype = arg.get("STEREOTYPE", 0);
// final USymbol type = USymbol.getFromString(arg.get("TYPE", 0),
// diagram.getSkinParam().getActorStyle());
// if (type == USymbol.TOGETHER) {
// p.setUSymbol(type);
// p.setThisIsTogether();
// } else
if (stereotype != null) { if (stereotype != null) {
final USymbol usymbol = USymbols.fromString(stereotype, diagram.getSkinParam().actorStyle(), final USymbol usymbol = USymbols.fromString(stereotype, diagram.getSkinParam().actorStyle(),
diagram.getSkinParam().componentStyle(), diagram.getSkinParam().packageStyle()); diagram.getSkinParam().componentStyle(), diagram.getSkinParam().packageStyle());
if (usymbol == null) { if (usymbol == null)
p.setStereotype(Stereotype.build(stereotype)); p.setStereotype(Stereotype.build(stereotype));
} else { else
p.setUSymbol(usymbol); p.setUSymbol(usymbol);
}
} }
CommandCreateClassMultilines.addTags(p, arg.getLazzy("TAGS", 0)); CommandCreateClassMultilines.addTags(p, arg.getLazzy("TAGS", 0));

View File

@ -53,6 +53,8 @@ import net.sourceforge.plantuml.graphic.InnerStrategy;
import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.StringBounder;
import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlock;
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft; import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
import net.sourceforge.plantuml.style.PName;
import net.sourceforge.plantuml.style.Style;
import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.MinMax;
import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGraphic;
import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.UTranslate;
@ -74,14 +76,16 @@ public class SheetBlock1 extends AbstractTextBlock implements TextBlock, Atom, S
private final double marginX1; private final double marginX1;
private final double marginX2; private final double marginX2;
private Class<? extends StringBounder> lastCaller; private Class<? extends StringBounder> lastCaller;
private double minimumWidth;
@HaxeIgnored @HaxeIgnored
public SheetBlock1(Sheet sheet, LineBreakStrategy maxWidth, double padding) { public SheetBlock1(Sheet sheet, LineBreakStrategy maxWidth, double padding) {
this(sheet, maxWidth, ClockwiseTopRightBottomLeft.same(padding), 0, 0); this(sheet, maxWidth, ClockwiseTopRightBottomLeft.same(padding), 0, 0);
} }
public SheetBlock1(Sheet sheet, LineBreakStrategy maxWidth, ClockwiseTopRightBottomLeft padding) { public SheetBlock1(Sheet sheet, LineBreakStrategy maxWidth, Style style) {
this(sheet, maxWidth, padding, 0, 0); this(sheet, maxWidth, style.getPadding(), 0, 0);
this.minimumWidth = style.value(PName.MinimumWidth).asDouble();
} }
public SheetBlock1(Sheet sheet, LineBreakStrategy maxWidth, double padding, double marginX1, double marginX2) { public SheetBlock1(Sheet sheet, LineBreakStrategy maxWidth, double padding, double marginX1, double marginX2) {
@ -113,6 +117,10 @@ public class SheetBlock1 extends AbstractTextBlock implements TextBlock, Atom, S
return HorizontalAlignment.LEFT; return HorizontalAlignment.LEFT;
} }
public HorizontalAlignment getHorizontalAlignment() {
return sheet.getHorizontalAlignment();
}
private void initMap(StringBounder stringBounder) { private void initMap(StringBounder stringBounder) {
final Class<? extends StringBounder> currentCaller = stringBounder.getClass(); final Class<? extends StringBounder> currentCaller = stringBounder.getClass();
if (lastCaller == currentCaller) if (lastCaller == currentCaller)
@ -210,4 +218,8 @@ public class SheetBlock1 extends AbstractTextBlock implements TextBlock, Atom, S
return calculateDimension(stringBounder).getWidth() + marginX2; return calculateDimension(stringBounder).getWidth() + marginX2;
} }
public final double getMinimumWidth() {
return minimumWidth;
}
} }

View File

@ -42,6 +42,7 @@ import net.sourceforge.plantuml.awt.geom.XDimension2D;
import net.sourceforge.plantuml.awt.geom.XRectangle2D; import net.sourceforge.plantuml.awt.geom.XRectangle2D;
import net.sourceforge.plantuml.creole.atom.Atom; import net.sourceforge.plantuml.creole.atom.Atom;
import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.AbstractTextBlock;
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.InnerStrategy;
import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.StringBounder;
import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlock;
@ -50,6 +51,7 @@ import net.sourceforge.plantuml.svek.WithPorts;
import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGraphic;
import net.sourceforge.plantuml.ugraphic.UGraphicStencil; import net.sourceforge.plantuml.ugraphic.UGraphicStencil;
import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UStroke;
import net.sourceforge.plantuml.ugraphic.UTranslate;
final public class SheetBlock2 extends AbstractTextBlock implements TextBlock, Atom, WithPorts { final public class SheetBlock2 extends AbstractTextBlock implements TextBlock, Atom, WithPorts {
@ -81,6 +83,10 @@ final public class SheetBlock2 extends AbstractTextBlock implements TextBlock, A
this.defaultStroke = defaultStroke; this.defaultStroke = defaultStroke;
} }
private HorizontalAlignment getHorizontalAlignment() {
return block.getHorizontalAlignment();
}
@Override @Override
public String toString() { public String toString() {
return block.toString(); return block.toString();
@ -94,6 +100,11 @@ final public class SheetBlock2 extends AbstractTextBlock implements TextBlock, A
if (stencil != null) if (stencil != null)
ug = UGraphicStencil.create(ug, stencil, defaultStroke); ug = UGraphicStencil.create(ug, stencil, defaultStroke);
if (getHorizontalAlignment() == HorizontalAlignment.CENTER && block.getMinimumWidth() > 0) {
final double width = calculateDimension(ug.getStringBounder()).getWidth();
final double dx = (block.getMinimumWidth() - width) / 2;
ug = ug.apply(UTranslate.dx(dx));
}
block.drawU(ug); block.drawU(ug);
} }

View File

@ -62,23 +62,23 @@ class Idea {
private StyleSignatureBasic getDefaultStyleDefinitionNode(int level) { private StyleSignatureBasic getDefaultStyleDefinitionNode(int level) {
final String depth = SName.depth(level); final String depth = SName.depth(level);
if (level == 0) { if (level == 0)
return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.rootNode) return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.rootNode)
.add(stereotype).add(depth); .add(stereotype).add(depth);
}
if (shape == IdeaShape.NONE && children.size() == 0) { if (shape == IdeaShape.NONE && children.size() == 0)
return StyleSignatureBasic return StyleSignatureBasic
.of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.leafNode, SName.boxless) .of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.leafNode, SName.boxless)
.add(stereotype).add(depth); .add(stereotype).add(depth);
}
if (shape == IdeaShape.NONE) { if (shape == IdeaShape.NONE)
return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.boxless) return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.boxless)
.add(stereotype).add(depth); .add(stereotype).add(depth);
}
if (children.size() == 0) { if (children.size() == 0)
return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.leafNode) return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node, SName.leafNode)
.add(stereotype).add(depth); .add(stereotype).add(depth);
}
return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node).add(stereotype) return StyleSignatureBasic.of(SName.root, SName.element, SName.mindmapDiagram, SName.node).add(stereotype)
.add(depth); .add(depth);
} }

View File

@ -68,12 +68,28 @@ public class Stdlib {
final String info = dataStream.readUTF(); final String info = dataStream.readUTF();
dataStream.close(); dataStream.close();
final String link = getLinkFromInfo(info);
if (link == null)
result = new Stdlib(name, info); result = new Stdlib(name, info);
else
result = retrieve(link);
all.put(name, result); all.put(name, result);
} }
return result; return result;
} }
private static String getLinkFromInfo(String infoString) {
for (String s : infoString.split("\n"))
if (s.contains("=")) {
final String data[] = s.split("=");
if (data[0].equals("LINK"))
return data[1];
}
return null;
}
private String loadResource(String file) throws IOException { private String loadResource(String file) throws IOException {
final SoftReference<String> cached = cache.get(file.toLowerCase()); final SoftReference<String> cached = cache.get(file.toLowerCase());
if (cached != null) { if (cached != null) {
@ -194,7 +210,6 @@ public class Stdlib {
final String data[] = s.split("="); final String data[] = s.split("=");
this.info.put(data[0], data[1]); this.info.put(data[0], data[1]);
} }
} }
private static DataInputStream getDataStream(String name) throws IOException { private static DataInputStream getDataStream(String name) throws IOException {

View File

@ -36,7 +36,9 @@
package net.sourceforge.plantuml.statediagram.command; package net.sourceforge.plantuml.statediagram.command;
import net.sourceforge.plantuml.LineLocation; import net.sourceforge.plantuml.LineLocation;
import net.sourceforge.plantuml.baraye.CucaDiagram;
import net.sourceforge.plantuml.baraye.IEntity; import net.sourceforge.plantuml.baraye.IEntity;
import net.sourceforge.plantuml.baraye.Quark;
import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.CommandExecutionResult;
import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.SingleLineCommand2;
import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.IRegex;
@ -66,9 +68,31 @@ public class CommandAddField extends SingleLineCommand2<StateDiagram> {
new RegexLeaf("FIELD", "(.*)"), RegexLeaf.end()); new RegexLeaf("FIELD", "(.*)"), RegexLeaf.end());
} }
private CommandExecutionResult executeArgQuark(StateDiagram diagram, LineLocation location, RegexResult arg)
throws NoSuchColorException {
final String codeString = arg.getLazzy("CODE", 0);
final Quark quark = diagram.currentQuark();
Quark child = quark.childIfExists(codeString);
if (child == null && quark.getName().equals(codeString))
child = quark;
if (child == null)
child = quark.child(codeString);
final IEntity entity = diagram.getOrCreateLeaf(child, child, null, null);
final String field = arg.get("FIELD", 0);
entity.getBodier().addFieldOrMethod(field);
return CommandExecutionResult.ok();
}
@Override @Override
protected CommandExecutionResult executeArg(StateDiagram diagram, LineLocation location, RegexResult arg) protected CommandExecutionResult executeArg(StateDiagram diagram, LineLocation location, RegexResult arg)
throws NoSuchColorException { throws NoSuchColorException {
if (CucaDiagram.QUARK)
return executeArgQuark(diagram, location, arg);
final String codeString = arg.getLazzy("CODE", 0); final String codeString = arg.getLazzy("CODE", 0);
final String field = arg.get("FIELD", 0); final String field = arg.get("FIELD", 0);

View File

@ -37,6 +37,7 @@ package net.sourceforge.plantuml.timingdiagram;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import net.sourceforge.plantuml.Direction;
import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.ISkinParam;
import net.sourceforge.plantuml.awt.geom.XDimension2D; import net.sourceforge.plantuml.awt.geom.XDimension2D;
import net.sourceforge.plantuml.awt.geom.XPoint2D; import net.sourceforge.plantuml.awt.geom.XPoint2D;
@ -108,14 +109,20 @@ public class TimeConstraint {
final double x1 = ruler.getPosInPixel(tick1); final double x1 = ruler.getPosInPixel(tick1);
final double x2 = ruler.getPosInPixel(tick2); final double x2 = ruler.getPosInPixel(tick2);
ug = ug.apply(UTranslate.dx(x1)); ug = ug.apply(UTranslate.dx(x1));
ug.apply(getUStroke()).draw(ULine.hline(x2 - x1)); final double len = x2 - x1;
ug.apply(getUStroke()).draw(ULine.hline(len));
ug.draw(getPolygon(-Math.PI / 2, new XPoint2D(0, 0))); if (len > 10) {
ug.draw(getPolygon(Math.PI / 2, new XPoint2D(x2 - x1, 0))); ug.draw(getPolygon(Direction.LEFT, new XPoint2D(0, 0)));
ug.draw(getPolygon(Direction.RIGHT, new XPoint2D(len, 0)));
} else {
ug.draw(getPolygon(Direction.RIGHT, new XPoint2D(0, 0)));
ug.draw(getPolygon(Direction.LEFT, new XPoint2D(len, 0)));
}
final TextBlock text = getTextBlock(label); final TextBlock text = getTextBlock(label);
final XDimension2D dimText = text.calculateDimension(ug.getStringBounder()); final XDimension2D dimText = text.calculateDimension(ug.getStringBounder());
final double x = (x2 - x1 - dimText.getWidth()) / 2; final double x = (len - dimText.getWidth()) / 2;
text.drawU(ug.apply(new UTranslate(x, -getConstraintHeight(ug.getStringBounder())))); text.drawU(ug.apply(new UTranslate(x, -getConstraintHeight(ug.getStringBounder()))));
} }
@ -149,15 +156,23 @@ public class TimeConstraint {
return 5; return 5;
} }
private UPolygon getPolygon(final double angle, final XPoint2D end) { private UPolygon getPolygon(Direction dir, XPoint2D end) {
final double delta = 20.0 * Math.PI / 180.0; final double dx = 8;
final XPoint2D pt1 = TimeArrow.onCircle(end, angle + delta); final double dy = 4;
final XPoint2D pt2 = TimeArrow.onCircle(end, angle - delta); final XPoint2D pt1;
final XPoint2D pt2;
if (dir == Direction.RIGHT) {
pt1 = end.move(-dx, dy);
pt2 = end.move(-dx, -dy);
} else {
pt1 = end.move(dx, dy);
pt2 = end.move(dx, -dy);
}
final UPolygon polygon = new UPolygon(); final UPolygon polygon = new UPolygon();
polygon.addPoint(pt1.getX(), pt1.getY()); polygon.addPoint(pt1);
polygon.addPoint(pt2.getX(), pt2.getY()); polygon.addPoint(pt2);
polygon.addPoint(end.getX(), end.getY()); polygon.addPoint(end);
return polygon; return polygon;
} }

View File

@ -81,7 +81,7 @@ public class Version {
} }
public static int beta() { public static int beta() {
final int beta = 7; final int beta = 8;
return beta; return beta;
} }