points = pointListIterator.next();
+ if (points.size() == 0) {
+ return null;
+ }
final Point2D p0 = points.get(0);
final Point2D p1 = points.get(1);
final Point2D p2 = points.get(2);
diff --git a/src/net/sourceforge/plantuml/svek/Margins.java b/src/net/sourceforge/plantuml/svek/Margins.java
new file mode 100644
index 000000000..a720b4bac
--- /dev/null
+++ b/src/net/sourceforge/plantuml/svek/Margins.java
@@ -0,0 +1,86 @@
+/* ========================================================================
+ * PlantUML : a free UML diagram generator
+ * ========================================================================
+ *
+ * (C) Copyright 2009-2017, Arnaud Roques
+ *
+ * Project Info: http://plantuml.com
+ *
+ * If you like this project or if you find it useful, you can support us at:
+ *
+ * http://plantuml.com/patreon (only 1$ per month!)
+ * http://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.svek;
+
+public class Margins {
+
+ private final double x1;
+ private final double x2;
+ private final double y1;
+ private final double y2;
+
+ static public Margins NONE = new Margins(0, 0, 0, 0);
+
+ public static Margins uniform(double value) {
+ return new Margins(value, value, value, value);
+ }
+
+ public Margins(double x1, double x2, double y1, double y2) {
+ this.x1 = x1;
+ this.x2 = x2;
+ this.y1 = y1;
+ this.y2 = y2;
+ }
+
+ public boolean isZero() {
+ return x1 == 0 && x2 == 0 && y1 == 0 && y2 == 0;
+ }
+
+ public final double getX1() {
+ return x1;
+ }
+
+ public final double getX2() {
+ return x2;
+ }
+
+ public final double getY1() {
+ return y1;
+ }
+
+ public final double getY2() {
+ return y2;
+ }
+
+ public double getTotalWidth() {
+ return x1 + x2;
+ }
+
+ public double getTotalHeight() {
+ return y1 + y2;
+ }
+
+}
\ No newline at end of file
diff --git a/src/net/sourceforge/plantuml/svek/Shape.java b/src/net/sourceforge/plantuml/svek/Shape.java
index 703fb7dfa..8db70c7fe 100644
--- a/src/net/sourceforge/plantuml/svek/Shape.java
+++ b/src/net/sourceforge/plantuml/svek/Shape.java
@@ -62,7 +62,7 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
private double minX;
private double minY;
- private final int shield;
+ private final Margins shield;
private final EntityPosition entityPosition;
private final IEntityImage image;
@@ -89,7 +89,7 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
}
public Shape(IEntityImage image, ShapeType type, double width, double height, ColorSequence colorSequence,
- boolean top, int shield, EntityPosition entityPosition) {
+ boolean top, Margins shield, EntityPosition entityPosition) {
this.entityPosition = entityPosition;
this.image = image;
this.top = top;
@@ -99,7 +99,7 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
this.color = colorSequence.getValue();
this.uid = String.format("sh%04d", color);
this.shield = shield;
- if (shield > 0 && type != ShapeType.RECTANGLE && type != ShapeType.RECTANGLE_HTML_FOR_PORTS) {
+ if (shield.isZero() == false && type != ShapeType.RECTANGLE && type != ShapeType.RECTANGLE_HTML_FOR_PORTS) {
throw new IllegalArgumentException();
}
}
@@ -121,7 +121,7 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
appendLabelHtmlSpecialForLink(sb, stringBounder);
return;
}
- if (type == ShapeType.RECTANGLE && shield > 0) {
+ if (type == ShapeType.RECTANGLE && shield.isZero() == false) {
appendHtml(sb);
return;
}
@@ -157,20 +157,20 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
sb.append("");
sb.append("");
appendTd(sb);
- appendTd(sb, shield, shield);
+ appendTd(sb, 1, shield.getY1());
appendTd(sb);
sb.append("
");
sb.append("");
- appendTd(sb, shield, shield);
+ appendTd(sb, shield.getX1(), 1);
sb.append("");
sb.append(" | ");
- appendTd(sb, shield, shield);
+ appendTd(sb, shield.getX2(), 1);
sb.append("
");
sb.append("");
appendTd(sb);
- appendTd(sb, shield, shield);
+ appendTd(sb, 1, shield.getY2());
appendTd(sb);
sb.append("
");
sb.append("
");
@@ -217,7 +217,7 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
sb.append("");
}
- private void appendTd(StringBuilder sb, int w, int h) {
+ private void appendTd(StringBuilder sb, double w, double h) {
sb.append("");
@@ -230,7 +230,7 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
}
private void appendShapeInternal(StringBuilder sb) {
- if (type == ShapeType.RECTANGLE && shield > 0) {
+ if (type == ShapeType.RECTANGLE && shield.isZero() == false) {
throw new UnsupportedOperationException();
} else if (type == ShapeType.RECTANGLE || type == ShapeType.FOLDER) {
sb.append("shape=rect");
@@ -289,7 +289,7 @@ public class Shape implements Positionable, IShapePseudo, Hideable {
}
public boolean isShielded() {
- return shield > 0;
+ return shield.isZero() == false;
}
public void moveSvek(double deltaX, double deltaY) {
diff --git a/src/net/sourceforge/plantuml/svek/SvekResult.java b/src/net/sourceforge/plantuml/svek/SvekResult.java
index fbc58e60d..524dee79a 100644
--- a/src/net/sourceforge/plantuml/svek/SvekResult.java
+++ b/src/net/sourceforge/plantuml/svek/SvekResult.java
@@ -121,8 +121,8 @@ public final class SvekResult extends AbstractTextBlock implements IEntityImage,
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
+ public Margins getShield(StringBounder stringBounder) {
+ return Margins.NONE;
}
public void moveSvek(double deltaX, double deltaY) {
diff --git a/src/net/sourceforge/plantuml/svek/SvekUtils.java b/src/net/sourceforge/plantuml/svek/SvekUtils.java
index cbefaa86f..051af141a 100644
--- a/src/net/sourceforge/plantuml/svek/SvekUtils.java
+++ b/src/net/sourceforge/plantuml/svek/SvekUtils.java
@@ -41,6 +41,7 @@ import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
@@ -79,9 +80,14 @@ public class SvekUtils {
}
public List next() {
- final List result = extractPointsList(text, pos, yDelta);
- pos = text.indexOf(pointsString, pos) + pointsString.length() + 1;
- return result;
+ try {
+ final List result = extractPointsList(text, pos, yDelta);
+ pos = text.indexOf(pointsString, pos) + pointsString.length() + 1;
+ return result;
+ } catch (StringIndexOutOfBoundsException e) {
+ Log.error("Error " + e);
+ return Collections.emptyList();
+ }
}
public void remove() {
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java b/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java
index fa6721d85..3524430e4 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java
@@ -151,8 +151,4 @@ public class EntityImageActivity extends AbstractEntityImage {
return ShapeType.ROUND_RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java b/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java
index 1e023ce09..0e9dce401 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageArcCircle.java
@@ -111,8 +111,4 @@ public class EntityImageArcCircle extends AbstractEntityImage {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java
index 3a6061f6a..ed629e6e7 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java
@@ -83,8 +83,4 @@ public class EntityImageAssociation extends AbstractEntityImage {
return ShapeType.DIAMOND;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java
index 39510b2f9..2954d2117 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java
@@ -71,8 +71,4 @@ public class EntityImageAssociationPoint extends AbstractEntityImage {
return ShapeType.CIRCLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java b/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java
index a6432d26b..1990685fb 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java
@@ -83,8 +83,4 @@ public class EntityImageBranch extends AbstractEntityImage {
return ShapeType.DIAMOND;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java
index 17c9feb37..8d4876a30 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java
@@ -85,8 +85,4 @@ public class EntityImageCircleEnd extends AbstractEntityImage {
return ShapeType.CIRCLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java
index 945113015..11ceb00b6 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java
@@ -77,8 +77,4 @@ public class EntityImageCircleStart extends AbstractEntityImage {
return ShapeType.CIRCLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java b/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java
index 7841b6234..baf36739a 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java
@@ -52,10 +52,12 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf;
import net.sourceforge.plantuml.cucadiagram.PortionShower;
import net.sourceforge.plantuml.cucadiagram.dot.GraphvizVersion;
import net.sourceforge.plantuml.graphic.HtmlColor;
+import net.sourceforge.plantuml.graphic.InnerStrategy;
import net.sourceforge.plantuml.graphic.StringBounder;
import net.sourceforge.plantuml.graphic.TextBlock;
import net.sourceforge.plantuml.graphic.color.ColorType;
import net.sourceforge.plantuml.svek.AbstractEntityImage;
+import net.sourceforge.plantuml.svek.Margins;
import net.sourceforge.plantuml.svek.Ports;
import net.sourceforge.plantuml.svek.ShapeType;
import net.sourceforge.plantuml.svek.WithPorts;
@@ -72,7 +74,7 @@ import net.sourceforge.plantuml.ugraphic.UTranslate;
public class EntityImageClass extends AbstractEntityImage implements Stencil, WithPorts {
final private TextBlock body;
- final private int shield;
+ final private Margins shield;
final private EntityImageClassHeader2 header;
final private Url url;
final private double roundCorner;
@@ -83,7 +85,8 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
super(entity, entity.getColors(skinParam).mute(skinParam));
this.lineConfig = entity;
this.roundCorner = getSkinParam().getRoundCorner("", null);
- this.shield = version != null && version.useShield() && entity.hasNearDecoration() ? 16 : 0;
+ this.shield = version != null && version.useShield() && entity.hasNearDecoration() ? Margins.uniform(16)
+ : Margins.NONE;
final boolean showMethods = portionShower.showPortion(EntityPortion.METHOD, entity);
final boolean showFields = portionShower.showPortion(EntityPortion.FIELD, entity);
this.body = entity.getBodier().getBody(FontParam.CLASS_ATTRIBUTE, getSkinParam(), showMethods, showFields,
@@ -107,8 +110,8 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
}
@Override
- public Rectangle2D getInnerPosition(String member, StringBounder stringBounder) {
- final Rectangle2D result = body.getInnerPosition(member, stringBounder);
+ public Rectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) {
+ final Rectangle2D result = body.getInnerPosition(member, stringBounder, strategy);
if (result == null) {
return result;
}
@@ -195,7 +198,8 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
return ShapeType.RECTANGLE;
}
- public int getShield() {
+ @Override
+ public Margins getShield(StringBounder stringBounder) {
return shield;
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader2.java b/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader2.java
index 4ad0b164f..034e6a4d6 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader2.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader2.java
@@ -71,8 +71,8 @@ public class EntityImageClassHeader2 extends AbstractEntityImage {
public EntityImageClassHeader2(ILeaf entity, ISkinParam skinParam, PortionShower portionShower) {
super(entity, skinParam);
- final boolean italic = entity.getEntityType() == LeafType.ABSTRACT_CLASS
- || entity.getEntityType() == LeafType.INTERFACE;
+ final boolean italic = entity.getLeafType() == LeafType.ABSTRACT_CLASS
+ || entity.getLeafType() == LeafType.INTERFACE;
// final HtmlColor color = SkinParamUtils.getFontColor(getSkinParam(), FontParam.CLASS, getStereo());
final Stereotype stereotype = entity.getStereotype();
@@ -145,32 +145,32 @@ public class EntityImageClassHeader2 extends AbstractEntityImage {
stereotype.getHtmlColor(), classBorder, SkinParamUtils.getFontColor(getSkinParam(),
FontParam.CIRCLED_CHARACTER, null));
}
- if (entity.getEntityType() == LeafType.ANNOTATION) {
+ if (entity.getLeafType() == LeafType.ANNOTATION) {
return new CircledCharacter('@', getSkinParam().getCircledCharacterRadius(), font, SkinParamUtils.getColor(
getSkinParam(), ColorParam.stereotypeNBackground, stereotype), classBorder,
SkinParamUtils.getFontColor(getSkinParam(), FontParam.CIRCLED_CHARACTER, null));
}
- if (entity.getEntityType() == LeafType.ABSTRACT_CLASS) {
+ if (entity.getLeafType() == LeafType.ABSTRACT_CLASS) {
return new CircledCharacter('A', getSkinParam().getCircledCharacterRadius(), font, SkinParamUtils.getColor(
getSkinParam(), ColorParam.stereotypeABackground, stereotype), classBorder,
SkinParamUtils.getFontColor(getSkinParam(), FontParam.CIRCLED_CHARACTER, null));
}
- if (entity.getEntityType() == LeafType.CLASS) {
+ if (entity.getLeafType() == LeafType.CLASS) {
return new CircledCharacter('C', getSkinParam().getCircledCharacterRadius(), font, SkinParamUtils.getColor(
getSkinParam(), ColorParam.stereotypeCBackground, stereotype), classBorder,
SkinParamUtils.getFontColor(getSkinParam(), FontParam.CIRCLED_CHARACTER, null));
}
- if (entity.getEntityType() == LeafType.INTERFACE) {
+ if (entity.getLeafType() == LeafType.INTERFACE) {
return new CircledCharacter('I', getSkinParam().getCircledCharacterRadius(), font, SkinParamUtils.getColor(
getSkinParam(), ColorParam.stereotypeIBackground, stereotype), classBorder,
SkinParamUtils.getFontColor(getSkinParam(), FontParam.CIRCLED_CHARACTER, null));
}
- if (entity.getEntityType() == LeafType.ENUM) {
+ if (entity.getLeafType() == LeafType.ENUM) {
return new CircledCharacter('E', getSkinParam().getCircledCharacterRadius(), font, SkinParamUtils.getColor(
getSkinParam(), ColorParam.stereotypeEBackground, stereotype), classBorder,
SkinParamUtils.getFontColor(getSkinParam(), FontParam.CIRCLED_CHARACTER, null));
}
- if (entity.getEntityType() == LeafType.ENTITY) {
+ if (entity.getLeafType() == LeafType.ENTITY) {
return new CircledCharacter('E', getSkinParam().getCircledCharacterRadius(), font, SkinParamUtils.getColor(
getSkinParam(), ColorParam.stereotypeCBackground, stereotype), classBorder,
SkinParamUtils.getFontColor(getSkinParam(), FontParam.CIRCLED_CHARACTER, null));
@@ -195,8 +195,4 @@ public class EntityImageClassHeader2 extends AbstractEntityImage {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java
index 52d40333d..73d9b8453 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java
@@ -38,6 +38,7 @@ package net.sourceforge.plantuml.svek.image;
import java.awt.geom.Dimension2D;
+import net.sourceforge.plantuml.Dimension2DDouble;
import net.sourceforge.plantuml.ISkinParam;
import net.sourceforge.plantuml.SkinParamUtils;
import net.sourceforge.plantuml.Url;
@@ -58,10 +59,13 @@ import net.sourceforge.plantuml.graphic.USymbol;
import net.sourceforge.plantuml.graphic.USymbolFolder;
import net.sourceforge.plantuml.graphic.color.ColorType;
import net.sourceforge.plantuml.svek.AbstractEntityImage;
+import net.sourceforge.plantuml.svek.Margins;
import net.sourceforge.plantuml.svek.ShapeType;
import net.sourceforge.plantuml.ugraphic.UComment;
import net.sourceforge.plantuml.ugraphic.UGraphic;
import net.sourceforge.plantuml.ugraphic.UStroke;
+import net.sourceforge.plantuml.ugraphic.UTranslate;
+import net.sourceforge.plantuml.utils.MathUtils;
public class EntityImageDescription extends AbstractEntityImage {
@@ -72,19 +76,21 @@ public class EntityImageDescription extends AbstractEntityImage {
private final TextBlock asSmall;
private final TextBlock name;
+ private final TextBlock desc;
+
+ private TextBlock stereo;
+
+ private final boolean hideText;
public EntityImageDescription(ILeaf entity, ISkinParam skinParam, PortionShower portionShower) {
super(entity, entity.getColors(skinParam).mute(skinParam));
final Stereotype stereotype = entity.getStereotype();
- USymbol symbol = entity.getUSymbol() == null ? (getSkinParam().useUml2ForComponent() ? USymbol.COMPONENT2
- : USymbol.COMPONENT1) : entity.getUSymbol();
- if (symbol == null) {
- throw new IllegalArgumentException();
- }
- shapeType = symbol == USymbol.FOLDER ? ShapeType.FOLDER : ShapeType.RECTANGLE;
+ USymbol symbol = getUSymbol(entity);
+ this.shapeType = symbol == USymbol.FOLDER ? ShapeType.FOLDER : ShapeType.RECTANGLE;
+ this.hideText = symbol == USymbol.INTERFACE;
final Display codeDisplay = Display.getWithNewlines(entity.getCode());
- final TextBlock desc = (entity.getDisplay().equals(codeDisplay) && symbol instanceof USymbolFolder)
+ desc = (entity.getDisplay().equals(codeDisplay) && symbol instanceof USymbolFolder)
|| entity.getDisplay().isWhite() ? TextBlockUtils.empty(0, 0) : new BodyEnhanced(entity.getDisplay(),
symbol.getFontParam(), getSkinParam(), HorizontalAlignment.LEFT, stereotype,
symbol.manageHorizontalLine(), false, entity);
@@ -95,7 +101,7 @@ public class EntityImageDescription extends AbstractEntityImage {
if (backcolor == null) {
backcolor = SkinParamUtils.getColor(getSkinParam(), symbol.getColorParamBack(), getStereo());
}
- // backcolor = HtmlColorUtils.BLUE;
+
assert getStereo() == stereotype;
final HtmlColor forecolor = SkinParamUtils.getColor(getSkinParam(), symbol.getColorParamBorder(), stereotype);
final double roundCorner = symbol.getSkinParameter().getRoundCorner(getSkinParam(), stereotype);
@@ -103,7 +109,7 @@ public class EntityImageDescription extends AbstractEntityImage {
final SymbolContext ctx = new SymbolContext(backcolor, forecolor).withStroke(stroke)
.withShadow(getSkinParam().shadowing2(symbol.getSkinParameter())).withRoundCorner(roundCorner);
- TextBlock stereo = TextBlockUtils.empty(0, 0);
+ stereo = TextBlockUtils.empty(0, 0);
if (stereotype != null && stereotype.getSprite() != null
&& getSkinParam().getSprite(stereotype.getSprite()) != null) {
@@ -119,10 +125,27 @@ public class EntityImageDescription extends AbstractEntityImage {
name = new BodyEnhanced(codeDisplay, symbol.getFontParam(), getSkinParam(), HorizontalAlignment.CENTER,
stereotype, symbol.manageHorizontalLine(), false, entity);
- asSmall = symbol.asSmall(name, desc, stereo, ctx);
+ if (hideText) {
+ asSmall = symbol.asSmall(TextBlockUtils.empty(0, 0), TextBlockUtils.empty(0, 0),
+ TextBlockUtils.empty(0, 0), ctx);
+ } else {
+ asSmall = symbol.asSmall(name, desc, stereo, ctx);
+ }
+ }
+
+ private USymbol getUSymbol(ILeaf entity) {
+ final USymbol result = entity.getUSymbol() == null ? (getSkinParam().useUml2ForComponent() ? USymbol.COMPONENT2
+ : USymbol.COMPONENT1) : entity.getUSymbol();
+ if (result == null) {
+ throw new IllegalArgumentException();
+ }
+ return result;
}
public Dimension2D getNameDimension(StringBounder stringBounder) {
+ if (hideText) {
+ return new Dimension2DDouble(0, 0);
+ }
return name.calculateDimension(stringBounder);
}
@@ -130,12 +153,40 @@ public class EntityImageDescription extends AbstractEntityImage {
return asSmall.calculateDimension(stringBounder);
}
+ @Override
+ public Margins getShield(StringBounder stringBounder) {
+ if (hideText) {
+ final Dimension2D dimStereo = stereo.calculateDimension(stringBounder);
+ final Dimension2D dimDesc = desc.calculateDimension(stringBounder);
+ final Dimension2D dimSmall = asSmall.calculateDimension(stringBounder);
+ final double x = Math.max(dimStereo.getWidth(), dimDesc.getWidth());
+ double suppX = x - dimSmall.getWidth();
+ if (suppX < 1) {
+ suppX = 1;
+ }
+ final double y = MathUtils.max(1, dimDesc.getHeight(), dimStereo.getHeight());
+ return new Margins(suppX / 2, suppX / 2, y, y);
+
+ }
+ return Margins.NONE;
+ }
+
final public void drawU(UGraphic ug) {
ug.draw(new UComment("entity " + getEntity().getCode().getFullName()));
if (url != null) {
ug.startUrl(url);
}
asSmall.drawU(ug);
+ if (hideText) {
+ final double space = 8;
+ final Dimension2D dimSmall = asSmall.calculateDimension(ug.getStringBounder());
+ final Dimension2D dimDesc = desc.calculateDimension(ug.getStringBounder());
+ desc.drawU(ug.apply(new UTranslate((dimSmall.getWidth() - dimDesc.getWidth()) / 2, space
+ + dimSmall.getHeight())));
+ final Dimension2D dimStereo = stereo.calculateDimension(ug.getStringBounder());
+ stereo.drawU(ug.apply(new UTranslate((dimSmall.getWidth() - dimStereo.getWidth()) / 2, -space
+ - dimStereo.getHeight())));
+ }
if (url != null) {
ug.closeAction();
@@ -146,8 +197,4 @@ public class EntityImageDescription extends AbstractEntityImage {
return shapeType;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java b/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java
index 316b2a2d2..88faab7bc 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageEmptyPackage.java
@@ -140,8 +140,4 @@ public class EntityImageEmptyPackage extends AbstractEntityImage {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java b/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java
index 3b36ec452..eb40977ec 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageGroup.java
@@ -67,8 +67,4 @@ public class EntityImageGroup extends AbstractEntityImage {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java
index 835aedeee..bfef7abb6 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java
@@ -106,8 +106,4 @@ public class EntityImageLollipopInterface extends AbstractEntityImage {
return ShapeType.CIRCLE_IN_RECT;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java
index 39866c091..750410155 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java
@@ -130,8 +130,4 @@ public class EntityImageLollipopInterfaceEye1 extends AbstractEntityImage {
return ShapeType.CIRCLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java
index eaddc891e..8274ebd5e 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye2.java
@@ -139,8 +139,4 @@ public class EntityImageLollipopInterfaceEye2 extends AbstractEntityImage {
return ShapeType.CIRCLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java
index a918a3ad1..50eb9cb7c 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java
@@ -283,10 +283,6 @@ public class EntityImageNote extends AbstractEntityImage implements Stencil {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
private Line opaleLine;
private Shape shape;
private Shape other;
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java
index e87c6d040..4c0945970 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNoteLink.java
@@ -50,6 +50,7 @@ import net.sourceforge.plantuml.skin.ComponentType;
import net.sourceforge.plantuml.skin.SimpleContext2D;
import net.sourceforge.plantuml.skin.rose.Rose;
import net.sourceforge.plantuml.svek.IEntityImage;
+import net.sourceforge.plantuml.svek.Margins;
import net.sourceforge.plantuml.svek.ShapeType;
import net.sourceforge.plantuml.ugraphic.UGraphic;
@@ -72,7 +73,6 @@ public class EntityImageNoteLink extends AbstractTextBlock implements IEntityIma
comp.drawU(ug, new Area(calculateDimension(ug.getStringBounder())), new SimpleContext2D(false));
}
-
public ShapeType getShapeType() {
return ShapeType.RECTANGLE;
}
@@ -81,8 +81,8 @@ public class EntityImageNoteLink extends AbstractTextBlock implements IEntityIma
return null;
}
- public int getShield() {
- return 0;
+ public Margins getShield(StringBounder stringBounder) {
+ return Margins.NONE;
}
public boolean isHidden() {
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java b/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java
index 7d788ed29..2c642328a 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java
@@ -202,10 +202,6 @@ public class EntityImageObject extends AbstractEntityImage implements Stencil {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
public double getStartingX(StringBounder stringBounder, double y) {
return 0;
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java b/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java
index fbe0c310b..775fa2313 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java
@@ -100,8 +100,4 @@ public class EntityImagePseudoState extends AbstractEntityImage {
return ShapeType.CIRCLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java
index 3cdb652b5..2a583170d 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java
@@ -189,8 +189,4 @@ public class EntityImageState extends AbstractEntityImage {
return ShapeType.ROUND_RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java b/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java
index 35487f240..147cde9b5 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageState2.java
@@ -103,10 +103,6 @@ public class EntityImageState2 extends AbstractEntityImage {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
public Dimension2D calculateDimension(StringBounder stringBounder) {
return asSmall.calculateDimension(stringBounder);
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java
index 72f3c465a..fca40b1a3 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java
@@ -130,8 +130,4 @@ public class EntityImageStateBorder extends AbstractEntityImage {
return entityPosition.getShapeType();
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java
index c2e0126ad..8963dec74 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java
@@ -129,8 +129,4 @@ public class EntityImageStateEmptyDescription extends AbstractEntityImage {
return ShapeType.ROUND_RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java b/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java
index fbdf69432..d9a51927e 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java
@@ -80,8 +80,4 @@ public class EntityImageSynchroBar extends AbstractEntityImage {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java
index 6178abfed..db11eca07 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageTips.java
@@ -53,6 +53,7 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf;
import net.sourceforge.plantuml.graphic.FontConfiguration;
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
import net.sourceforge.plantuml.graphic.HtmlColor;
+import net.sourceforge.plantuml.graphic.InnerStrategy;
import net.sourceforge.plantuml.graphic.StringBounder;
import net.sourceforge.plantuml.graphic.TextBlock;
import net.sourceforge.plantuml.graphic.color.ColorType;
@@ -100,10 +101,6 @@ public class EntityImageTips extends AbstractEntityImage {
return ShapeType.RECTANGLE;
}
- public int getShield() {
- return 0;
- }
-
public Dimension2D calculateDimension(StringBounder stringBounder) {
double width = 0;
double height = 0;
@@ -132,7 +129,7 @@ public class EntityImageTips extends AbstractEntityImage {
double height = 0;
for (Map.Entry ent : getEntity().getTips().entrySet()) {
final Display display = ent.getValue();
- final Rectangle2D memberPosition = shapeOther.getImage().getInnerPosition(ent.getKey(), stringBounder);
+ final Rectangle2D memberPosition = shapeOther.getImage().getInnerPosition(ent.getKey(), stringBounder, InnerStrategy.STRICT);
if (memberPosition == null) {
return;
}
diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java b/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java
index 9368e5348..2f7e48ad0 100644
--- a/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java
+++ b/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java
@@ -132,10 +132,6 @@ public class EntityImageUseCase extends AbstractEntityImage {
return ShapeType.OVAL;
}
- public int getShield() {
- return 0;
- }
-
static class MyUGraphicEllipse extends AbstractUGraphicHorizontalLine {
private final double startingX;
diff --git a/src/net/sourceforge/plantuml/svg/SvgGraphics.java b/src/net/sourceforge/plantuml/svg/SvgGraphics.java
index 0a53cbc4a..4bc95d684 100644
--- a/src/net/sourceforge/plantuml/svg/SvgGraphics.java
+++ b/src/net/sourceforge/plantuml/svg/SvgGraphics.java
@@ -59,6 +59,7 @@ import javax.xml.transform.stream.StreamResult;
import net.sourceforge.plantuml.Log;
import net.sourceforge.plantuml.StringUtils;
+import net.sourceforge.plantuml.SvgString;
import net.sourceforge.plantuml.code.Base64Coder;
import net.sourceforge.plantuml.eps.EpsGraphics;
import net.sourceforge.plantuml.graphic.HtmlColorGradient;
@@ -115,11 +116,11 @@ public class SvgGraphics {
}
}
- public SvgGraphics(double scale, String hover) {
- this(null, scale, hover);
+ public SvgGraphics(double scale, String hover, Random rnd) {
+ this(null, scale, hover, rnd);
}
- public SvgGraphics(String backcolor, double scale, String hover) {
+ public SvgGraphics(String backcolor, double scale, String hover, Random rnd) {
try {
this.scale = scale;
this.document = getDocument();
@@ -132,7 +133,7 @@ public class SvgGraphics {
defs = simpleElement("defs");
gRoot = simpleElement("g");
strokeWidth = "" + scale;
- final Random rnd = new Random();
+ // final Random rnd = new Random();
this.filterUid = "b" + getRandomString(rnd);
this.shadowId = "f" + getRandomString(rnd);
this.gradientId = "g" + getRandomString(rnd);
@@ -707,22 +708,28 @@ public class SvgGraphics {
private final Map images = new HashMap();
- public void svgImage(String svg, double x, double y) {
- if (svg.startsWith(" |