mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 10:59:01 +00:00
Import version 1.2020.14
This commit is contained in:
parent
5cd6df817e
commit
a38685d3ba
2
pom.xml
2
pom.xml
@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
<groupId>net.sourceforge.plantuml</groupId>
|
<groupId>net.sourceforge.plantuml</groupId>
|
||||||
<artifactId>plantuml</artifactId>
|
<artifactId>plantuml</artifactId>
|
||||||
<version>1.2020.14-SNAPSHOT</version>
|
<version>1.2020.15-SNAPSHOT</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>PlantUML</name>
|
<name>PlantUML</name>
|
||||||
|
@ -41,7 +41,7 @@ public enum ComponentStyle {
|
|||||||
|
|
||||||
UML1, UML2, RECTANGLE;
|
UML1, UML2, RECTANGLE;
|
||||||
|
|
||||||
public USymbol toSymbol() {
|
public USymbol toUSymbol() {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case UML1:
|
case UML1:
|
||||||
return USymbol.COMPONENT1;
|
return USymbol.COMPONENT1;
|
||||||
|
@ -140,7 +140,9 @@ public class EmbeddedDiagram implements CharSequence {
|
|||||||
|
|
||||||
private BufferedImage getImage() throws IOException, InterruptedException {
|
private BufferedImage getImage() throws IOException, InterruptedException {
|
||||||
if (image == null) {
|
if (image == null) {
|
||||||
|
final boolean sav = SkinParam.USE_STYLES();
|
||||||
image = getImageSlow();
|
image = getImageSlow();
|
||||||
|
SkinParam.setBetaStyle(sav);
|
||||||
}
|
}
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,8 @@ package net.sourceforge.plantuml;
|
|||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedOutputStream;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@ -56,6 +58,25 @@ public class FileUtils {
|
|||||||
counter = new AtomicInteger(0);
|
counter = new AtomicInteger(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public File createTempFileLegacy(String prefix, String suffix) throws IOException {
|
||||||
|
if (suffix.startsWith(".") == false) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
if (prefix == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
final File f;
|
||||||
|
if (counter == null) {
|
||||||
|
f = File.createTempFile(prefix, suffix);
|
||||||
|
} else {
|
||||||
|
final String name = prefix + counter.addAndGet(1) + suffix;
|
||||||
|
f = new File(name);
|
||||||
|
}
|
||||||
|
Log.info("Creating temporary file: " + f);
|
||||||
|
f.deleteOnExit();
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
static public SFile createTempFile(String prefix, String suffix) throws IOException {
|
static public SFile createTempFile(String prefix, String suffix) throws IOException {
|
||||||
if (suffix.startsWith(".") == false) {
|
if (suffix.startsWith(".") == false) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
@ -106,6 +127,12 @@ public class FileUtils {
|
|||||||
copyInternal(fis, fos);
|
copyInternal(fis, fos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static public void copyToStream(File src, OutputStream os) throws IOException {
|
||||||
|
final InputStream fis = new BufferedInputStream(new FileInputStream(src));
|
||||||
|
final OutputStream fos = new BufferedOutputStream(os);
|
||||||
|
copyInternal(fis, fos);
|
||||||
|
}
|
||||||
|
|
||||||
static public void copyToStream(InputStream is, OutputStream os) throws IOException {
|
static public void copyToStream(InputStream is, OutputStream os) throws IOException {
|
||||||
final InputStream fis = new BufferedInputStream(is);
|
final InputStream fis = new BufferedInputStream(is);
|
||||||
final OutputStream fos = new BufferedOutputStream(os);
|
final OutputStream fos = new BufferedOutputStream(os);
|
||||||
|
@ -181,7 +181,7 @@ public enum FontParam {
|
|||||||
return new FontConfiguration(skinParam, this, null);
|
return new FontConfiguration(skinParam, this, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature getStyleDefinition() {
|
public StyleSignature getStyleDefinition(SName diagramType) {
|
||||||
if (this == FOOTER) {
|
if (this == FOOTER) {
|
||||||
return StyleSignature.of(SName.root, SName.footer);
|
return StyleSignature.of(SName.root, SName.footer);
|
||||||
}
|
}
|
||||||
@ -191,8 +191,15 @@ public enum FontParam {
|
|||||||
if (this == TITLE) {
|
if (this == TITLE) {
|
||||||
return StyleSignature.of(SName.root, SName.title);
|
return StyleSignature.of(SName.root, SName.title);
|
||||||
}
|
}
|
||||||
System.err.println("Warning " + this);
|
if (this == CLASS_ATTRIBUTE) {
|
||||||
return null;
|
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.class_);
|
||||||
|
}
|
||||||
|
if (this == RECTANGLE || this == NODE) {
|
||||||
|
return StyleSignature.of(SName.root, SName.element, SName.componentDiagram, SName.component);
|
||||||
|
}
|
||||||
|
return StyleSignature.of(SName.root, SName.element, diagramType, SName.component);
|
||||||
|
// System.err.println("Warning " + this);
|
||||||
|
// throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@ public interface ISkinParam extends ISkinSimple {
|
|||||||
|
|
||||||
public boolean shadowing2(Stereotype stereotype, SkinParameter skinParameter);
|
public boolean shadowing2(Stereotype stereotype, SkinParameter skinParameter);
|
||||||
|
|
||||||
public PackageStyle getPackageStyle();
|
public PackageStyle packageStyle();
|
||||||
|
|
||||||
public ComponentStyle componentStyle();
|
public ComponentStyle componentStyle();
|
||||||
|
|
||||||
@ -156,7 +156,7 @@ public interface ISkinParam extends ISkinSimple {
|
|||||||
|
|
||||||
public UmlDiagramType getUmlDiagramType();
|
public UmlDiagramType getUmlDiagramType();
|
||||||
|
|
||||||
public HColor getHoverPathColor();
|
public HColor hoverPathColor();
|
||||||
|
|
||||||
public TikzFontDistortion getTikzFontDistortion();
|
public TikzFontDistortion getTikzFontDistortion();
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ public interface ISkinParam extends ISkinSimple {
|
|||||||
|
|
||||||
public boolean isUseVizJs();
|
public boolean isUseVizJs();
|
||||||
|
|
||||||
public Padder getSequenceDiagramPadder();
|
public Padder sequenceDiagramPadder();
|
||||||
|
|
||||||
public StyleBuilder getCurrentStyleBuilder();
|
public StyleBuilder getCurrentStyleBuilder();
|
||||||
|
|
||||||
@ -188,6 +188,6 @@ public interface ISkinParam extends ISkinSimple {
|
|||||||
|
|
||||||
public void setDefaultSkin(String newSkin);
|
public void setDefaultSkin(String newSkin);
|
||||||
|
|
||||||
public ActorStyle getActorStyle();
|
public ActorStyle actorStyle();
|
||||||
|
|
||||||
}
|
}
|
@ -780,15 +780,6 @@ public class SkinParam implements ISkinParam {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PackageStyle getPackageStyle() {
|
|
||||||
final String value = getValue("packageStyle");
|
|
||||||
final PackageStyle p = PackageStyle.fromString(value);
|
|
||||||
if (p == null) {
|
|
||||||
return PackageStyle.FOLDER;
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Map<String, Sprite> sprites = new HashMap<String, Sprite>();
|
private final Map<String, Sprite> sprites = new HashMap<String, Sprite>();
|
||||||
|
|
||||||
public Collection<String> getAllSpriteNames() {
|
public Collection<String> getAllSpriteNames() {
|
||||||
@ -807,16 +798,27 @@ public class SkinParam implements ISkinParam {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PackageStyle packageStyle() {
|
||||||
|
final String value = getValue("packageStyle");
|
||||||
|
final PackageStyle p = PackageStyle.fromString(value);
|
||||||
|
if (p == null) {
|
||||||
|
return PackageStyle.FOLDER;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
public ComponentStyle componentStyle() {
|
public ComponentStyle componentStyle() {
|
||||||
if (strictUmlStyle()) {
|
if (strictUmlStyle()) {
|
||||||
return ComponentStyle.UML2;
|
return ComponentStyle.UML2;
|
||||||
}
|
}
|
||||||
final String value = getValue("componentstyle");
|
final String value = getValue("componentstyle");
|
||||||
|
if ("uml1".equalsIgnoreCase(value))
|
||||||
|
return ComponentStyle.UML1;
|
||||||
if ("uml2".equalsIgnoreCase(value))
|
if ("uml2".equalsIgnoreCase(value))
|
||||||
return ComponentStyle.UML2;
|
return ComponentStyle.UML2;
|
||||||
if ("rectangle".equalsIgnoreCase(value))
|
if ("rectangle".equalsIgnoreCase(value))
|
||||||
return ComponentStyle.RECTANGLE;
|
return ComponentStyle.RECTANGLE;
|
||||||
return ComponentStyle.UML1;
|
return ComponentStyle.UML2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean stereotypePositionTop() {
|
public boolean stereotypePositionTop() {
|
||||||
@ -1144,7 +1146,7 @@ public class SkinParam implements ISkinParam {
|
|||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public HColor getHoverPathColor() {
|
public HColor hoverPathColor() {
|
||||||
final String value = getValue("pathhovercolor");
|
final String value = getValue("pathhovercolor");
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -1219,7 +1221,7 @@ public class SkinParam implements ISkinParam {
|
|||||||
return useVizJs;
|
return useVizJs;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Padder getSequenceDiagramPadder() {
|
public Padder sequenceDiagramPadder() {
|
||||||
final double padding = getAsDouble("SequenceMessagePadding");
|
final double padding = getAsDouble("SequenceMessagePadding");
|
||||||
final double margin = getAsDouble("SequenceMessageMargin");
|
final double margin = getAsDouble("SequenceMessageMargin");
|
||||||
final String borderColor = getValue("SequenceMessageBorderColor");
|
final String borderColor = getValue("SequenceMessageBorderColor");
|
||||||
@ -1234,7 +1236,7 @@ public class SkinParam implements ISkinParam {
|
|||||||
.withBorderColor(border).withRoundCorner(roundCorner);
|
.withBorderColor(border).withRoundCorner(roundCorner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActorStyle getActorStyle() {
|
public ActorStyle actorStyle() {
|
||||||
final String value = getValue("actorstyle");
|
final String value = getValue("actorstyle");
|
||||||
if ("awesome".equalsIgnoreCase(value)) {
|
if ("awesome".equalsIgnoreCase(value)) {
|
||||||
return ActorStyle.AWESOME;
|
return ActorStyle.AWESOME;
|
||||||
|
@ -124,8 +124,8 @@ public class SkinParamDelegator implements ISkinParam {
|
|||||||
return skinParam.shadowing2(stereotype, skinParameter);
|
return skinParam.shadowing2(stereotype, skinParameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public PackageStyle getPackageStyle() {
|
public PackageStyle packageStyle() {
|
||||||
return skinParam.getPackageStyle();
|
return skinParam.packageStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Sprite getSprite(String name) {
|
public Sprite getSprite(String name) {
|
||||||
@ -276,8 +276,8 @@ public class SkinParamDelegator implements ISkinParam {
|
|||||||
return skinParam.getUmlDiagramType();
|
return skinParam.getUmlDiagramType();
|
||||||
}
|
}
|
||||||
|
|
||||||
public HColor getHoverPathColor() {
|
public HColor hoverPathColor() {
|
||||||
return skinParam.getHoverPathColor();
|
return skinParam.hoverPathColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getPadding(PaddingParam param) {
|
public double getPadding(PaddingParam param) {
|
||||||
@ -336,8 +336,8 @@ public class SkinParamDelegator implements ISkinParam {
|
|||||||
return skinParam.getStereotypeAlignment();
|
return skinParam.getStereotypeAlignment();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Padder getSequenceDiagramPadder() {
|
public Padder sequenceDiagramPadder() {
|
||||||
return skinParam.getSequenceDiagramPadder();
|
return skinParam.sequenceDiagramPadder();
|
||||||
}
|
}
|
||||||
|
|
||||||
public StyleBuilder getCurrentStyleBuilder() {
|
public StyleBuilder getCurrentStyleBuilder() {
|
||||||
@ -360,8 +360,8 @@ public class SkinParamDelegator implements ISkinParam {
|
|||||||
skinParam.setDefaultSkin(newFileName);
|
skinParam.setDefaultSkin(newFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ActorStyle getActorStyle() {
|
public ActorStyle actorStyle() {
|
||||||
return skinParam.getActorStyle();
|
return skinParam.actorStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,9 +39,12 @@ import java.awt.Color;
|
|||||||
import java.awt.geom.AffineTransform;
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.BufferedOutputStream;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@ -77,8 +80,8 @@ import net.sourceforge.plantuml.svek.EmptySvgException;
|
|||||||
import net.sourceforge.plantuml.svek.GraphvizCrash;
|
import net.sourceforge.plantuml.svek.GraphvizCrash;
|
||||||
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
|
import net.sourceforge.plantuml.svek.TextBlockBackcolored;
|
||||||
import net.sourceforge.plantuml.ugraphic.AffineTransformType;
|
import net.sourceforge.plantuml.ugraphic.AffineTransformType;
|
||||||
import net.sourceforge.plantuml.ugraphic.PixelImage;
|
|
||||||
import net.sourceforge.plantuml.ugraphic.ImageBuilder;
|
import net.sourceforge.plantuml.ugraphic.ImageBuilder;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.PixelImage;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
import net.sourceforge.plantuml.ugraphic.UImage;
|
import net.sourceforge.plantuml.ugraphic.UImage;
|
||||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||||
@ -183,7 +186,7 @@ public abstract class UmlDiagram extends TitledDiagram implements Diagram, Annot
|
|||||||
final protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption, long seed)
|
final protected ImageData exportDiagramNow(OutputStream os, int index, FileFormatOption fileFormatOption, long seed)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
|
|
||||||
final HColor hover = getSkinParam().getHoverPathColor();
|
final HColor hover = getSkinParam().hoverPathColor();
|
||||||
if (fileFormatOption.getSvgLinkTarget() == null || fileFormatOption.getSvgLinkTarget().equals("_top")) {
|
if (fileFormatOption.getSvgLinkTarget() == null || fileFormatOption.getSvgLinkTarget().equals("_top")) {
|
||||||
fileFormatOption = fileFormatOption.withSvgLinkTarget(getSkinParam().getSvgLinkTarget());
|
fileFormatOption = fileFormatOption.withSvgLinkTarget(getSkinParam().getSvgLinkTarget());
|
||||||
}
|
}
|
||||||
@ -337,9 +340,9 @@ public abstract class UmlDiagram extends TitledDiagram implements Diagram, Annot
|
|||||||
private Dimension2D lastInfo;
|
private Dimension2D lastInfo;
|
||||||
|
|
||||||
private ImageData exportDiagramInternalPdf(OutputStream os, int index) throws IOException {
|
private ImageData exportDiagramInternalPdf(OutputStream os, int index) throws IOException {
|
||||||
final SFile svg = FileUtils.createTempFile("pdf", ".svf");
|
final File svg = FileUtils.createTempFileLegacy("pdf", ".svf");
|
||||||
final SFile pdfFile = FileUtils.createTempFile("pdf", ".pdf");
|
final File pdfFile = FileUtils.createTempFileLegacy("pdf", ".pdf");
|
||||||
final OutputStream fos = svg.createBufferedOutputStream();
|
final OutputStream fos = new BufferedOutputStream(new FileOutputStream(svg));;
|
||||||
final ImageData result = exportDiagram(fos, index, new FileFormatOption(FileFormat.SVG));
|
final ImageData result = exportDiagram(fos, index, new FileFormatOption(FileFormat.SVG));
|
||||||
fos.close();
|
fos.close();
|
||||||
PdfConverter.convert(svg, pdfFile);
|
PdfConverter.convert(svg, pdfFile);
|
||||||
|
@ -74,7 +74,7 @@ public class LaneDivider extends AbstractTextBlock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature getDefaultStyleDefinition() {
|
public StyleSignature getDefaultStyleDefinition() {
|
||||||
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.swimlane);
|
return StyleSignature.of(SName.root, SName.element, SName.activityDiagram, SName.swimlane);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Style getStyle() {
|
private Style getStyle() {
|
||||||
|
@ -118,7 +118,7 @@ public class Swimlanes extends AbstractTextBlock implements TextBlock, Styleable
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StyleSignature getDefaultStyleDefinition() {
|
public StyleSignature getDefaultStyleDefinition() {
|
||||||
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.swimlane);
|
return StyleSignature.of(SName.root, SName.element, SName.activityDiagram, SName.swimlane);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Swimlanes(ISkinParam skinParam, Pragma pragma) {
|
public Swimlanes(ISkinParam skinParam, Pragma pragma) {
|
||||||
|
@ -178,7 +178,7 @@ public class CommandCreateElementFull2 extends SingleLineCommand2<ClassDiagram>
|
|||||||
|
|
||||||
if (symbol == null) {
|
if (symbol == null) {
|
||||||
type = LeafType.DESCRIPTION;
|
type = LeafType.DESCRIPTION;
|
||||||
usymbol = diagram.getSkinParam().getActorStyle().getUSymbol();
|
usymbol = diagram.getSkinParam().actorStyle().toUSymbol();
|
||||||
} else if (symbol.equalsIgnoreCase("port")) {
|
} else if (symbol.equalsIgnoreCase("port")) {
|
||||||
type = LeafType.PORT;
|
type = LeafType.PORT;
|
||||||
usymbol = null;
|
usymbol = null;
|
||||||
@ -190,7 +190,7 @@ public class CommandCreateElementFull2 extends SingleLineCommand2<ClassDiagram>
|
|||||||
usymbol = null;
|
usymbol = null;
|
||||||
} else {
|
} else {
|
||||||
type = LeafType.DESCRIPTION;
|
type = LeafType.DESCRIPTION;
|
||||||
usymbol = USymbol.getFromString(symbol, diagram.getSkinParam());
|
usymbol = USymbol.fromString(symbol, diagram.getSkinParam());
|
||||||
if (usymbol == null) {
|
if (usymbol == null) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ public class CommandFooter extends SingleLineCommand2<TitledDiagram> {
|
|||||||
final String align = arg.get("POSITION", 0);
|
final String align = arg.get("POSITION", 0);
|
||||||
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.CENTER);
|
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.CENTER);
|
||||||
if (SkinParam.USE_STYLES() && align == null) {
|
if (SkinParam.USE_STYLES() && align == null) {
|
||||||
ha = FontParam.FOOTER.getStyleDefinition()
|
ha = FontParam.FOOTER.getStyleDefinition(null)
|
||||||
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
||||||
.getHorizontalAlignment();
|
.getHorizontalAlignment();
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ public class CommandHeader extends SingleLineCommand2<TitledDiagram> {
|
|||||||
final String align = arg.get("POSITION", 0);
|
final String align = arg.get("POSITION", 0);
|
||||||
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.RIGHT);
|
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.RIGHT);
|
||||||
if (SkinParam.USE_STYLES() && align == null) {
|
if (SkinParam.USE_STYLES() && align == null) {
|
||||||
ha = FontParam.HEADER.getStyleDefinition()
|
ha = FontParam.HEADER.getStyleDefinition(null)
|
||||||
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
||||||
.getHorizontalAlignment();
|
.getHorizontalAlignment();
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ public class CommandMultilinesFooter extends CommandMultilines<TitledDiagram> {
|
|||||||
if (strings.size() > 0) {
|
if (strings.size() > 0) {
|
||||||
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.CENTER);
|
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.CENTER);
|
||||||
if (SkinParam.USE_STYLES() && align == null) {
|
if (SkinParam.USE_STYLES() && align == null) {
|
||||||
ha = FontParam.FOOTER.getStyleDefinition()
|
ha = FontParam.FOOTER.getStyleDefinition(null)
|
||||||
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
||||||
.getHorizontalAlignment();
|
.getHorizontalAlignment();
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ public class CommandMultilinesHeader extends CommandMultilines<TitledDiagram> {
|
|||||||
if (strings.size() > 0) {
|
if (strings.size() > 0) {
|
||||||
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.RIGHT);
|
HorizontalAlignment ha = HorizontalAlignment.fromString(align, HorizontalAlignment.RIGHT);
|
||||||
if (SkinParam.USE_STYLES() && align == null) {
|
if (SkinParam.USE_STYLES() && align == null) {
|
||||||
ha = FontParam.HEADER.getStyleDefinition()
|
ha = FontParam.HEADER.getStyleDefinition(null)
|
||||||
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
.getMergedStyle(((UmlDiagram) diagram).getSkinParam().getCurrentStyleBuilder())
|
||||||
.getHorizontalAlignment();
|
.getHorizontalAlignment();
|
||||||
}
|
}
|
||||||
|
@ -136,7 +136,8 @@ public class CommandPackage extends SingleLineCommand2<AbstractEntityDiagram> {
|
|||||||
// p.setThisIsTogether();
|
// p.setThisIsTogether();
|
||||||
// } else
|
// } else
|
||||||
if (stereotype != null) {
|
if (stereotype != null) {
|
||||||
final USymbol usymbol = USymbol.getFromString(stereotype, diagram.getSkinParam().getActorStyle());
|
final USymbol usymbol = USymbol.fromString(stereotype, diagram.getSkinParam().actorStyle(),
|
||||||
|
diagram.getSkinParam().componentStyle(), diagram.getSkinParam().packageStyle());
|
||||||
if (usymbol == null) {
|
if (usymbol == null) {
|
||||||
p.setStereotype(new Stereotype(stereotype));
|
p.setStereotype(new Stereotype(stereotype));
|
||||||
} else {
|
} else {
|
||||||
|
@ -219,12 +219,9 @@ public abstract class UmlDiagramFactory extends PSystemAbstractFactory {
|
|||||||
addTitleCommands(cmds);
|
addTitleCommands(cmds);
|
||||||
addCommonCommands2(cmds);
|
addCommonCommands2(cmds);
|
||||||
addCommonHides(cmds);
|
addCommonHides(cmds);
|
||||||
cmds.add(new CommandStyleMultilinesCSS());
|
|
||||||
cmds.add(new CommandStyleImport());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final protected void addCommonCommands2(List<Command> cmds) {
|
final protected void addCommonCommands2(List<Command> cmds) {
|
||||||
// cmds.add(new CommandListSprite());
|
|
||||||
cmds.add(new CommandNope());
|
cmds.add(new CommandNope());
|
||||||
cmds.add(new CommandPragma());
|
cmds.add(new CommandPragma());
|
||||||
|
|
||||||
@ -245,6 +242,10 @@ public abstract class UmlDiagramFactory extends PSystemAbstractFactory {
|
|||||||
cmds.add(factorySpriteCommand.createMultiLine(false));
|
cmds.add(factorySpriteCommand.createMultiLine(false));
|
||||||
cmds.add(factorySpriteCommand.createSingleLine());
|
cmds.add(factorySpriteCommand.createSingleLine());
|
||||||
cmds.add(new CommandSpriteFile());
|
cmds.add(new CommandSpriteFile());
|
||||||
|
|
||||||
|
cmds.add(new CommandStyleMultilinesCSS());
|
||||||
|
cmds.add(new CommandStyleImport());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final protected void addCommonHides(List<Command> cmds) {
|
final protected void addCommonHides(List<Command> cmds) {
|
||||||
|
@ -50,6 +50,9 @@ public class Sea {
|
|||||||
private final StringBounder stringBounder;
|
private final StringBounder stringBounder;
|
||||||
|
|
||||||
public Sea(StringBounder stringBounder) {
|
public Sea(StringBounder stringBounder) {
|
||||||
|
if (stringBounder == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
this.stringBounder = stringBounder;
|
this.stringBounder = stringBounder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +48,7 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
|||||||
import net.sourceforge.plantuml.graphic.TextBlockLineBefore;
|
import net.sourceforge.plantuml.graphic.TextBlockLineBefore;
|
||||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||||
import net.sourceforge.plantuml.skin.VisibilityModifier;
|
import net.sourceforge.plantuml.skin.VisibilityModifier;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
|
|
||||||
public class BodierImpl implements Bodier {
|
public class BodierImpl implements Bodier {
|
||||||
|
|
||||||
@ -83,19 +84,10 @@ public class BodierImpl implements Bodier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addFieldOrMethod(String s) {
|
public void addFieldOrMethod(String s) {
|
||||||
// if (leaf == null) {
|
|
||||||
// throw new IllegalArgumentException();
|
|
||||||
// }
|
|
||||||
// Empty cache
|
// Empty cache
|
||||||
methodsToDisplay = null;
|
methodsToDisplay = null;
|
||||||
fieldsToDisplay = null;
|
fieldsToDisplay = null;
|
||||||
rawBody.add(s);
|
rawBody.add(s);
|
||||||
// if (leaf instanceof ILeaf) {
|
|
||||||
// if (this.leaf != null && this.leaf != leaf) {
|
|
||||||
// throw new IllegalArgumentException();
|
|
||||||
// }
|
|
||||||
// this.leaf = (ILeaf) leaf;
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isBodyEnhanced() {
|
private boolean isBodyEnhanced() {
|
||||||
@ -203,7 +195,8 @@ public class BodierImpl implements Bodier {
|
|||||||
final boolean showFields, Stereotype stereotype) {
|
final boolean showFields, Stereotype stereotype) {
|
||||||
if (type.isLikeClass() && isBodyEnhanced()) {
|
if (type.isLikeClass() && isBodyEnhanced()) {
|
||||||
if (showMethods || showFields) {
|
if (showMethods || showFields) {
|
||||||
return new BodyEnhanced(rawBodyWithoutHidden(), fontParam, skinParam, manageModifier, stereotype, leaf);
|
return new BodyEnhanced(rawBodyWithoutHidden(), fontParam, skinParam, manageModifier, stereotype, leaf,
|
||||||
|
SName.classDiagram);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -211,7 +204,7 @@ public class BodierImpl implements Bodier {
|
|||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
final MethodsOrFieldsArea fields = new MethodsOrFieldsArea(getFieldsToDisplay(), fontParam, skinParam,
|
final MethodsOrFieldsArea fields = new MethodsOrFieldsArea(getFieldsToDisplay(), fontParam, skinParam,
|
||||||
stereotype, leaf);
|
stereotype, leaf, SName.classDiagram);
|
||||||
if (type == LeafType.OBJECT) {
|
if (type == LeafType.OBJECT) {
|
||||||
if (showFields == false) {
|
if (showFields == false) {
|
||||||
return new TextBlockLineBefore(TextBlockUtils.empty(0, 0));
|
return new TextBlockLineBefore(TextBlockUtils.empty(0, 0));
|
||||||
@ -222,7 +215,7 @@ public class BodierImpl implements Bodier {
|
|||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
final MethodsOrFieldsArea methods = new MethodsOrFieldsArea(getMethodsToDisplay(), fontParam, skinParam,
|
final MethodsOrFieldsArea methods = new MethodsOrFieldsArea(getMethodsToDisplay(), fontParam, skinParam,
|
||||||
stereotype, leaf);
|
stereotype, leaf, SName.classDiagram);
|
||||||
if (showFields && showMethods == false) {
|
if (showFields && showMethods == false) {
|
||||||
return fields.asBlockMemberImpl();
|
return fields.asBlockMemberImpl();
|
||||||
} else if (showMethods && showFields == false) {
|
} else if (showMethods && showFields == false) {
|
||||||
|
@ -59,6 +59,7 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
|||||||
import net.sourceforge.plantuml.graphic.TextBlockLineBefore;
|
import net.sourceforge.plantuml.graphic.TextBlockLineBefore;
|
||||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||||
import net.sourceforge.plantuml.graphic.TextBlockVertical2;
|
import net.sourceforge.plantuml.graphic.TextBlockVertical2;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
import net.sourceforge.plantuml.svek.Ports;
|
import net.sourceforge.plantuml.svek.Ports;
|
||||||
import net.sourceforge.plantuml.svek.WithPorts;
|
import net.sourceforge.plantuml.svek.WithPorts;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
@ -79,9 +80,11 @@ public class BodyEnhanced extends AbstractTextBlock implements TextBlock, WithPo
|
|||||||
private final ILeaf entity;
|
private final ILeaf entity;
|
||||||
private final boolean inEllipse;
|
private final boolean inEllipse;
|
||||||
private final double minClassWidth;
|
private final double minClassWidth;
|
||||||
|
private final SName diagramType;
|
||||||
|
|
||||||
public BodyEnhanced(List<String> rawBody, FontParam fontParam, ISkinParam skinParam, boolean manageModifier,
|
public BodyEnhanced(List<String> rawBody, FontParam fontParam, ISkinParam skinParam, boolean manageModifier,
|
||||||
Stereotype stereotype, ILeaf entity) {
|
Stereotype stereotype, ILeaf entity, SName diagramType) {
|
||||||
|
this.diagramType = diagramType;
|
||||||
this.rawBody = new ArrayList<CharSequence>(rawBody);
|
this.rawBody = new ArrayList<CharSequence>(rawBody);
|
||||||
this.stereotype = stereotype;
|
this.stereotype = stereotype;
|
||||||
this.fontParam = fontParam;
|
this.fontParam = fontParam;
|
||||||
@ -98,13 +101,16 @@ public class BodyEnhanced extends AbstractTextBlock implements TextBlock, WithPo
|
|||||||
}
|
}
|
||||||
|
|
||||||
public BodyEnhanced(Display display, FontParam fontParam, ISkinParam skinParam, HorizontalAlignment align,
|
public BodyEnhanced(Display display, FontParam fontParam, ISkinParam skinParam, HorizontalAlignment align,
|
||||||
Stereotype stereotype, boolean manageHorizontalLine, boolean manageModifier, ILeaf entity) {
|
Stereotype stereotype, boolean manageHorizontalLine, boolean manageModifier, ILeaf entity,
|
||||||
this(display, fontParam, skinParam, align, stereotype, manageHorizontalLine, manageHorizontalLine, entity, 0);
|
SName diagramType) {
|
||||||
|
this(display, fontParam, skinParam, align, stereotype, manageHorizontalLine, manageHorizontalLine, entity, 0,
|
||||||
|
diagramType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public BodyEnhanced(Display display, FontParam fontParam, ISkinParam skinParam, HorizontalAlignment align,
|
public BodyEnhanced(Display display, FontParam fontParam, ISkinParam skinParam, HorizontalAlignment align,
|
||||||
Stereotype stereotype, boolean manageHorizontalLine, boolean manageModifier, ILeaf entity,
|
Stereotype stereotype, boolean manageHorizontalLine, boolean manageModifier, ILeaf entity,
|
||||||
double minClassWidth) {
|
double minClassWidth, SName diagramType) {
|
||||||
|
this.diagramType = diagramType;
|
||||||
this.minClassWidth = minClassWidth;
|
this.minClassWidth = minClassWidth;
|
||||||
this.entity = entity;
|
this.entity = entity;
|
||||||
this.stereotype = stereotype;
|
this.stereotype = stereotype;
|
||||||
@ -163,17 +169,15 @@ public class BodyEnhanced extends AbstractTextBlock implements TextBlock, WithPo
|
|||||||
} else {
|
} else {
|
||||||
final String s = s2.toString();
|
final String s = s2.toString();
|
||||||
if (manageHorizontalLine && isBlockSeparator(s)) {
|
if (manageHorizontalLine && isBlockSeparator(s)) {
|
||||||
blocks.add(decorate(stringBounder,
|
blocks.add(decorate(stringBounder, new MethodsOrFieldsArea(members, fontParam, skinParam, align,
|
||||||
new MethodsOrFieldsArea(members, fontParam, skinParam, align, stereotype, entity),
|
stereotype, entity, diagramType), separator, title));
|
||||||
separator, title));
|
|
||||||
separator = s.charAt(0);
|
separator = s.charAt(0);
|
||||||
title = getTitle(s, skinParam);
|
title = getTitle(s, skinParam);
|
||||||
members = new ArrayList<Member>();
|
members = new ArrayList<Member>();
|
||||||
} else if (Parser.isTreeStart(s)) {
|
} else if (Parser.isTreeStart(s)) {
|
||||||
if (members.size() > 0) {
|
if (members.size() > 0) {
|
||||||
blocks.add(decorate(stringBounder,
|
blocks.add(decorate(stringBounder, new MethodsOrFieldsArea(members, fontParam, skinParam, align,
|
||||||
new MethodsOrFieldsArea(members, fontParam, skinParam, align, stereotype, entity),
|
stereotype, entity, diagramType), separator, title));
|
||||||
separator, title));
|
|
||||||
}
|
}
|
||||||
members = new ArrayList<Member>();
|
members = new ArrayList<Member>();
|
||||||
final List<CharSequence> allTree = buildAllTree(s, it);
|
final List<CharSequence> allTree = buildAllTree(s, it);
|
||||||
@ -193,7 +197,8 @@ public class BodyEnhanced extends AbstractTextBlock implements TextBlock, WithPo
|
|||||||
members.add(new Member("", false, false));
|
members.add(new Member("", false, false));
|
||||||
}
|
}
|
||||||
blocks.add(decorate(stringBounder,
|
blocks.add(decorate(stringBounder,
|
||||||
new MethodsOrFieldsArea(members, fontParam, skinParam, align, stereotype, entity), separator, title));
|
new MethodsOrFieldsArea(members, fontParam, skinParam, align, stereotype, entity, diagramType),
|
||||||
|
separator, title));
|
||||||
|
|
||||||
if (blocks.size() == 1) {
|
if (blocks.size() == 1) {
|
||||||
this.area = blocks.get(0);
|
this.area = blocks.get(0);
|
||||||
|
@ -41,6 +41,8 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.BackSlash;
|
import net.sourceforge.plantuml.BackSlash;
|
||||||
import net.sourceforge.plantuml.EmbeddedDiagram;
|
import net.sourceforge.plantuml.EmbeddedDiagram;
|
||||||
@ -313,6 +315,23 @@ public class Display implements Iterable<CharSequence> {
|
|||||||
return new Display(result, this.naturalHorizontalAlignment, this.isNull, this.defaultCreoleMode);
|
return new Display(result, this.naturalHorizontalAlignment, this.isNull, this.defaultCreoleMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Display underlinedName() {
|
||||||
|
final Pattern p = Pattern.compile("^([^:]+?)(\\s*:.+)$");
|
||||||
|
final List<CharSequence> result = new ArrayList<CharSequence>();
|
||||||
|
for (CharSequence line : displayData) {
|
||||||
|
if (result.size() == 0) {
|
||||||
|
final Matcher m = p.matcher(line);
|
||||||
|
if (m.matches())
|
||||||
|
result.add("<u>" + m.group(1) + "</u>" + m.group(2));
|
||||||
|
else
|
||||||
|
result.add("<u>" + line);
|
||||||
|
} else {
|
||||||
|
result.add("<u>" + line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Display(result, this.naturalHorizontalAlignment, this.isNull, this.defaultCreoleMode);
|
||||||
|
}
|
||||||
|
|
||||||
public Display withCreoleMode(CreoleMode mode) {
|
public Display withCreoleMode(CreoleMode mode) {
|
||||||
if (isNull) {
|
if (isNull) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
|
@ -81,30 +81,26 @@ public class MethodsOrFieldsArea extends AbstractTextBlock implements TextBlockW
|
|||||||
|
|
||||||
private final FontParam fontParam;
|
private final FontParam fontParam;
|
||||||
private final ISkinParam skinParam;
|
private final ISkinParam skinParam;
|
||||||
// private final HColor color;
|
|
||||||
// private final HColor hyperlinkColor;
|
|
||||||
// private final boolean useUnderlineForHyperlink;
|
|
||||||
private final Rose rose = new Rose();
|
private final Rose rose = new Rose();
|
||||||
private final List<Member> members = new ArrayList<Member>();
|
private final List<Member> members = new ArrayList<Member>();
|
||||||
private final HorizontalAlignment align;
|
private final HorizontalAlignment align;
|
||||||
private final Stereotype stereotype;
|
private final Stereotype stereotype;
|
||||||
private final ILeaf leaf;
|
private final ILeaf leaf;
|
||||||
|
private final SName diagramType;
|
||||||
|
|
||||||
public MethodsOrFieldsArea(List<Member> members, FontParam fontParam, ISkinParam skinParam, Stereotype stereotype,
|
public MethodsOrFieldsArea(List<Member> members, FontParam fontParam, ISkinParam skinParam, Stereotype stereotype,
|
||||||
ILeaf leaf) {
|
ILeaf leaf, SName diagramType) {
|
||||||
this(members, fontParam, skinParam, HorizontalAlignment.LEFT, stereotype, leaf);
|
this(members, fontParam, skinParam, HorizontalAlignment.LEFT, stereotype, leaf, diagramType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MethodsOrFieldsArea(List<Member> members, FontParam fontParam, ISkinParam skinParam,
|
public MethodsOrFieldsArea(List<Member> members, FontParam fontParam, ISkinParam skinParam,
|
||||||
HorizontalAlignment align, Stereotype stereotype, ILeaf leaf) {
|
HorizontalAlignment align, Stereotype stereotype, ILeaf leaf, SName diagramType) {
|
||||||
|
this.diagramType = diagramType;
|
||||||
this.leaf = leaf;
|
this.leaf = leaf;
|
||||||
this.stereotype = stereotype;
|
this.stereotype = stereotype;
|
||||||
this.align = align;
|
this.align = align;
|
||||||
this.skinParam = skinParam;
|
this.skinParam = skinParam;
|
||||||
this.fontParam = fontParam;
|
this.fontParam = fontParam;
|
||||||
// this.color = rose.getFontColor(skinParam, fontParam);
|
|
||||||
// this.hyperlinkColor = skinParam.getHyperlinkColor();
|
|
||||||
// this.useUnderlineForHyperlink = skinParam.useUnderlineForHyperlink();
|
|
||||||
this.members.addAll(members);
|
this.members.addAll(members);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -165,7 +161,9 @@ public class MethodsOrFieldsArea extends AbstractTextBlock implements TextBlockW
|
|||||||
}
|
}
|
||||||
FontConfiguration config;
|
FontConfiguration config;
|
||||||
if (SkinParam.USE_STYLES()) {
|
if (SkinParam.USE_STYLES()) {
|
||||||
final Style style = StyleSignature.of(SName.root, SName.element, SName.componentDiagram, SName.component)
|
// final Style style = StyleSignature.of(SName.root, SName.element, SName.componentDiagram, SName.component)
|
||||||
|
// .getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
|
final Style style = fontParam.getStyleDefinition(diagramType)
|
||||||
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
config = new FontConfiguration(style, skinParam, stereotype, fontParam);
|
config = new FontConfiguration(style, skinParam, stereotype, fontParam);
|
||||||
} else {
|
} else {
|
||||||
|
@ -145,7 +145,7 @@ public class CommandCreateDomain extends SingleLineCommand2<DescriptionDiagram>
|
|||||||
type = "biddable";
|
type = "biddable";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
USymbol usymbol = USymbol.getFromString(type, diagram.getSkinParam());
|
USymbol usymbol = USymbol.fromString(type, diagram.getSkinParam());
|
||||||
entity.setUSymbol(usymbol);
|
entity.setUSymbol(usymbol);
|
||||||
return CommandExecutionResult.ok();
|
return CommandExecutionResult.ok();
|
||||||
}
|
}
|
||||||
|
@ -75,14 +75,14 @@ public class DescriptionDiagram extends AbstractEntityDiagram {
|
|||||||
if (type == null) {
|
if (type == null) {
|
||||||
String codeString = code.getName();
|
String codeString = code.getName();
|
||||||
if (codeString.startsWith("[") && codeString.endsWith("]")) {
|
if (codeString.startsWith("[") && codeString.endsWith("]")) {
|
||||||
final USymbol sym = getSkinParam().componentStyle().toSymbol() ;
|
final USymbol sym = getSkinParam().componentStyle().toUSymbol() ;
|
||||||
final Ident idNewLong = ident.eventuallyRemoveStartingAndEndingDoubleQuote("\"([:");
|
final Ident idNewLong = ident.eventuallyRemoveStartingAndEndingDoubleQuote("\"([:");
|
||||||
return getOrCreateLeafDefault(idNewLong, idNewLong.toCode(this), LeafType.DESCRIPTION, sym);
|
return getOrCreateLeafDefault(idNewLong, idNewLong.toCode(this), LeafType.DESCRIPTION, sym);
|
||||||
}
|
}
|
||||||
if (codeString.startsWith(":") && codeString.endsWith(":")) {
|
if (codeString.startsWith(":") && codeString.endsWith(":")) {
|
||||||
final Ident idNewLong = ident.eventuallyRemoveStartingAndEndingDoubleQuote("\"([:");
|
final Ident idNewLong = ident.eventuallyRemoveStartingAndEndingDoubleQuote("\"([:");
|
||||||
return getOrCreateLeafDefault(idNewLong, idNewLong.toCode(this), LeafType.DESCRIPTION,
|
return getOrCreateLeafDefault(idNewLong, idNewLong.toCode(this), LeafType.DESCRIPTION,
|
||||||
getSkinParam().getActorStyle().getUSymbol());
|
getSkinParam().actorStyle().toUSymbol());
|
||||||
}
|
}
|
||||||
if (codeString.startsWith("()")) {
|
if (codeString.startsWith("()")) {
|
||||||
codeString = StringUtils.trin(codeString.substring(2));
|
codeString = StringUtils.trin(codeString.substring(2));
|
||||||
@ -103,7 +103,7 @@ public class DescriptionDiagram extends AbstractEntityDiagram {
|
|||||||
for (ILeaf leaf : getLeafsvalues()) {
|
for (ILeaf leaf : getLeafsvalues()) {
|
||||||
final LeafType type = leaf.getLeafType();
|
final LeafType type = leaf.getLeafType();
|
||||||
final USymbol usymbol = leaf.getUSymbol();
|
final USymbol usymbol = leaf.getUSymbol();
|
||||||
if (type == LeafType.USECASE || usymbol == getSkinParam().getActorStyle().getUSymbol()) {
|
if (type == LeafType.USECASE || usymbol == getSkinParam().actorStyle().toUSymbol()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@ public class DescriptionDiagram extends AbstractEntityDiagram {
|
|||||||
public void makeDiagramReady() {
|
public void makeDiagramReady() {
|
||||||
super.makeDiagramReady();
|
super.makeDiagramReady();
|
||||||
final LeafType defaultType = isUsecase() ? LeafType.DESCRIPTION : LeafType.DESCRIPTION;
|
final LeafType defaultType = isUsecase() ? LeafType.DESCRIPTION : LeafType.DESCRIPTION;
|
||||||
final USymbol defaultSymbol = isUsecase() ? getSkinParam().getActorStyle().getUSymbol() : USymbol.INTERFACE;
|
final USymbol defaultSymbol = isUsecase() ? getSkinParam().actorStyle().toUSymbol() : USymbol.INTERFACE;
|
||||||
for (ILeaf leaf : getLeafsvalues()) {
|
for (ILeaf leaf : getLeafsvalues()) {
|
||||||
if (leaf.getLeafType() == LeafType.STILL_UNKNOWN) {
|
if (leaf.getLeafType() == LeafType.STILL_UNKNOWN) {
|
||||||
leaf.muteToType(defaultType, defaultSymbol);
|
leaf.muteToType(defaultType, defaultSymbol);
|
||||||
|
@ -56,6 +56,7 @@ import net.sourceforge.plantuml.graphic.StringBounder;
|
|||||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||||
import net.sourceforge.plantuml.graphic.color.ColorType;
|
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
||||||
import net.sourceforge.plantuml.svek.ShapeType;
|
import net.sourceforge.plantuml.svek.ShapeType;
|
||||||
import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine;
|
import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine;
|
||||||
@ -78,7 +79,7 @@ public class EntityImageRequirement extends AbstractEntityImage {
|
|||||||
final Stereotype stereotype = entity.getStereotype();
|
final Stereotype stereotype = entity.getStereotype();
|
||||||
|
|
||||||
final TextBlock tmp = new BodyEnhanced(entity.getDisplay(), FontParam.REQUIREMENT, skinParam,
|
final TextBlock tmp = new BodyEnhanced(entity.getDisplay(), FontParam.REQUIREMENT, skinParam,
|
||||||
HorizontalAlignment.CENTER, stereotype, true, false, entity);
|
HorizontalAlignment.CENTER, stereotype, true, false, entity, SName.componentDiagram);
|
||||||
|
|
||||||
if (stereotype == null || stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR) == null) {
|
if (stereotype == null || stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR) == null) {
|
||||||
this.desc = tmp;
|
this.desc = tmp;
|
||||||
|
@ -178,7 +178,7 @@ public class CommandCreateElementFull extends SingleLineCommand2<DescriptionDiag
|
|||||||
|
|
||||||
if (symbol == null) {
|
if (symbol == null) {
|
||||||
type = LeafType.DESCRIPTION;
|
type = LeafType.DESCRIPTION;
|
||||||
usymbol = diagram.getSkinParam().getActorStyle().getUSymbol();
|
usymbol = diagram.getSkinParam().actorStyle().toUSymbol();
|
||||||
} else if (symbol.equalsIgnoreCase("portin")) {
|
} else if (symbol.equalsIgnoreCase("portin")) {
|
||||||
type = LeafType.PORTIN;
|
type = LeafType.PORTIN;
|
||||||
usymbol = null;
|
usymbol = null;
|
||||||
@ -196,7 +196,7 @@ public class CommandCreateElementFull extends SingleLineCommand2<DescriptionDiag
|
|||||||
usymbol = null;
|
usymbol = null;
|
||||||
} else {
|
} else {
|
||||||
type = LeafType.DESCRIPTION;
|
type = LeafType.DESCRIPTION;
|
||||||
usymbol = USymbol.getFromString(symbol, diagram.getSkinParam());
|
usymbol = USymbol.fromString(symbol, diagram.getSkinParam());
|
||||||
if (usymbol == null) {
|
if (usymbol == null) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,8 @@ import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
|||||||
import net.sourceforge.plantuml.graphic.USymbol;
|
import net.sourceforge.plantuml.graphic.USymbol;
|
||||||
import net.sourceforge.plantuml.graphic.color.ColorParser;
|
import net.sourceforge.plantuml.graphic.color.ColorParser;
|
||||||
import net.sourceforge.plantuml.graphic.color.ColorType;
|
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||||
|
import net.sourceforge.plantuml.graphic.color.Colors;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.color.HColor;
|
||||||
|
|
||||||
public class CommandCreateElementMultilines extends CommandMultilines2<AbstractEntityDiagram> {
|
public class CommandCreateElementMultilines extends CommandMultilines2<AbstractEntityDiagram> {
|
||||||
|
|
||||||
@ -133,7 +135,8 @@ public class CommandCreateElementMultilines extends CommandMultilines2<AbstractE
|
|||||||
type = LeafType.USECASE;
|
type = LeafType.USECASE;
|
||||||
usymbol = null;
|
usymbol = null;
|
||||||
} else {
|
} else {
|
||||||
usymbol = USymbol.getFromString(symbol, diagram.getSkinParam().getActorStyle());
|
usymbol = USymbol.fromString(symbol, diagram.getSkinParam().actorStyle(),
|
||||||
|
diagram.getSkinParam().componentStyle(), diagram.getSkinParam().packageStyle());
|
||||||
if (usymbol == null) {
|
if (usymbol == null) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
@ -179,9 +182,18 @@ public class CommandCreateElementMultilines extends CommandMultilines2<AbstractE
|
|||||||
result.addUrl(url);
|
result.addUrl(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
result.setSpecificColorTOBEREMOVED(ColorType.BACK,
|
// final HColor backColor =
|
||||||
diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(line0.get("COLOR", 0)));
|
// diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(line0.get("COLOR",
|
||||||
|
// 0));
|
||||||
|
final Colors colors = color().getColor(line0, diagram.getSkinParam().getIHtmlColorSet());
|
||||||
|
result.setColors(colors);
|
||||||
|
// result.setSpecificColorTOBEREMOVED(ColorType.BACK, backColor);
|
||||||
|
|
||||||
return CommandExecutionResult.ok();
|
return CommandExecutionResult.ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static ColorParser color() {
|
||||||
|
return ColorParser.simpleColor(ColorType.BACK);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ public class CommandCreateElementParenthesis extends SingleLineCommand2<ClassDia
|
|||||||
final USymbol usymbol;
|
final USymbol usymbol;
|
||||||
|
|
||||||
type = LeafType.DESCRIPTION;
|
type = LeafType.DESCRIPTION;
|
||||||
usymbol = USymbol.getFromString(symbol, diagram.getSkinParam());
|
usymbol = USymbol.fromString(symbol, diagram.getSkinParam());
|
||||||
|
|
||||||
final String idShort = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(codeRaw);
|
final String idShort = StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(codeRaw);
|
||||||
final Ident ident = diagram.buildLeafIdent(idShort);
|
final Ident ident = diagram.buildLeafIdent(idShort);
|
||||||
|
@ -289,9 +289,9 @@ public class CommandLinkElement extends SingleLineCommand2<DescriptionDiagram> {
|
|||||||
return getOrCreateLeaf1972(diagram, ident3, code3, LeafType.USECASE, USymbol.USECASE, pure);
|
return getOrCreateLeaf1972(diagram, ident3, code3, LeafType.USECASE, USymbol.USECASE, pure);
|
||||||
} else if (codeChar == ':') {
|
} else if (codeChar == ':') {
|
||||||
return getOrCreateLeaf1972(diagram, ident3, code3, LeafType.DESCRIPTION,
|
return getOrCreateLeaf1972(diagram, ident3, code3, LeafType.DESCRIPTION,
|
||||||
diagram.getSkinParam().getActorStyle().getUSymbol(), pure);
|
diagram.getSkinParam().actorStyle().toUSymbol(), pure);
|
||||||
} else if (codeChar == '[') {
|
} else if (codeChar == '[') {
|
||||||
final USymbol sym = diagram.getSkinParam().componentStyle().toSymbol();
|
final USymbol sym = diagram.getSkinParam().componentStyle().toUSymbol();
|
||||||
return getOrCreateLeaf1972(diagram, ident3, code3, LeafType.DESCRIPTION, sym, pure);
|
return getOrCreateLeaf1972(diagram, ident3, code3, LeafType.DESCRIPTION, sym, pure);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +160,8 @@ public class CommandPackageWithUSymbol extends SingleLineCommand2<AbstractEntity
|
|||||||
if ("together".equalsIgnoreCase(symbol)) {
|
if ("together".equalsIgnoreCase(symbol)) {
|
||||||
p.setThisIsTogether();
|
p.setThisIsTogether();
|
||||||
}
|
}
|
||||||
p.setUSymbol(USymbol.getFromString(symbol, diagram.getSkinParam().getActorStyle()));
|
p.setUSymbol(USymbol.fromString(symbol, diagram.getSkinParam().actorStyle(),
|
||||||
|
diagram.getSkinParam().componentStyle(), diagram.getSkinParam().packageStyle()));
|
||||||
final String stereotype = arg.getLazzy("STEREOTYPE", 0);
|
final String stereotype = arg.getLazzy("STEREOTYPE", 0);
|
||||||
if (stereotype != null) {
|
if (stereotype != null) {
|
||||||
p.setStereotype(new Stereotype(stereotype, false));
|
p.setStereotype(new Stereotype(stereotype, false));
|
||||||
|
@ -74,26 +74,26 @@ public class PSystemDonors extends AbstractPSystem {
|
|||||||
private static final int COLS = 6;
|
private static final int COLS = 6;
|
||||||
private static final int FREE_LINES = 6;
|
private static final int FREE_LINES = 6;
|
||||||
|
|
||||||
public static final String DONORS = "6ySB02mFUBXRGOc9nbfsvvsjZ8zbDKqYM9ud58U1HJpT3OW_mBtJutuZ_KLqfNlVD2FQiZN5USOGiI3e"
|
public static final String DONORS = "6xKB02mFkBap0p4nqLYNlhbPJVbOScQJ29Rd2SLXO15FTmFY3t3lzBZVI7yHNUdUDys8jcnDSPunH2m8"
|
||||||
+ "yJIvPjZctXvupCdFe-IxmsY4GPYio__BbYQxT2r0gWmfmRDSR_uPnVYUEsbeodQv4793qY-yxupDizFu"
|
+ "UZnDhXcskRS7GbifBu8ZbU02Ka1y6oVdVUp8-_H9bI4bYAMIzTjKJ9zqAHiYuxFU2Ds0pdaRtdV6vjbf"
|
||||||
+ "ujMZ2Te8_1ZOL_zlwf1nUQWAmz1iXJ4O5OrGdJ_q56ijjVR_KOqBfs3VeOeUIuxfrCLrE5JHYCwA5uhL"
|
+ "VF7gqGHj17uCxAl_DwULTVUgAin0bzMCcL7H4weOKYCYHVn_LEEoKnlVJNKQI08wTN45DzMfW5SdF0OM"
|
||||||
+ "E0UtZFFHfCMecD0cKefgeuGYEPYXhIRLvyWL6TpyKZz0cwxjcX8v4efzbaXqV-rftt60ziibFtJoGopO"
|
+ "QGQtZFDgqcHKJ68JAQ7QA24a1ZEqvQJsEVAB31A_r1leqbfTGo9tGF6OAH9TZ-NsxJjeVhd4Y-0Flc2p"
|
||||||
+ "8h20Ye_i9oXvRSIuoHT1GyjSzCPM7Ldo90E6KkZ2tloXB8wufsJcChIuAN062ehSne78I6hJ0hC3Ym5L"
|
+ "m1nAEOelKFpSY97myw2XPHUziLL7bZmfWA4CMjYRFnJ9aTv3ChiCBH81DL0GyZOEI4QXDaquExOOK6KF"
|
||||||
+ "Ug95doOfkZ5kmftFOLcArKR3iy2YW2Nd06ioyZ_e4pxTTtraSioRefQKfqdUozQZSTMzbsipec_wqIHH"
|
+ "jkZJ85MN-asuSnsMf_JSQ7WHM0HOS1PGGv3_GI_uZBxobiazDqKj8K-JU5LRZ_gLU2zjCw9l-j4aK3xR"
|
||||||
+ "lhPtoTBZIb4rJ-bizUdpjRf3xfgowl4leqOyUt2tqq8Q5XyfY1-6RXiJbUJFj8M558HhA_qWNUR6AsSl"
|
+ "JyrSVkKfMm_fN7cVyw_E3ddNa9MhFumwCda4TpdCfM5-Qu7w4UYsEL59V4zPM4X0kAxK6-awDrwflGZ7"
|
||||||
+ "mZ4RifIjus-nPJNsyYvViJ6nB7SMUFTytMXAXbhAAkGqTBjMPIxjVAAbD3N-B_BeqVc_m9fAita7wJrB"
|
+ "R4YfMCTVOijh-X-w8fMDYULqiCXFzzUbfcImXQvCgg4tj2hJhFE9bjHGVt_9ewNpNN1DfTczW_GUQNEU"
|
||||||
+ "vpB_lnjMQiOI3Zesn2pNpGB5ucbIzIusBaBJJAU6t0J83QZk9hVYRdKHVzG7vDvICX65pRO4YVPKSfUB"
|
+ "_zzrIpD3SO2EJJ4BkaMW6AocLM-nWGXE2vqVSXCW6r2-J6xvo_9B_54V4BovH20A6v9syET7o4CkN9Y1"
|
||||||
+ "4APZfPjAZ02MJ2dd-XjR4FcgrS7eLaI9HSeYz35CUgRjgx1D-k1ckxanYQCwfNmIVbi8tCEmKYsQsQ5j"
|
+ "LTsKOWGmUqevBn911oBKwX1qAwga8sNk-XacFTkMZPbbqWVNxGPZvCTqGd4HVfaBFCAmKYsQzTtQ9dO9"
|
||||||
+ "6tCnNiR7SLvrh_v-bRJjBRodV4ZDAnZ8AoqOOIaveZoEie-4kmOAihXBNXhYUuHr3XwwSy4PB5h6Z3RR"
|
+ "hl8wpglkDTglujZUmdlAJMh_aW4_mvmHaN8ZYdrFkoKyr56OnLxoL1VVq-tauA4x5vp1ecNCQBCTCWqA"
|
||||||
+ "8Gj3SZmPP-bN31-Q37lxNJPihurDNi3xghCJmiZ8WzTBacjgSOcRV3DOJWxR08gDnIjs-PcB25LRRYgR"
|
+ "Pv9nfZvYzA71y7SKifhT6vjw1U4xOIkucP46pvScrzJa4Wc_xIp7mnQ04dFnYbrHuP92rImxbQjh2PCZ"
|
||||||
+ "wnAcHgmUXGhu7VC9p9LjuSfZlTsru0nO5DN1l3lMM1gtAStR0ghBgOAOTA6CcT8KQNix6NfMfsUf3R3z"
|
+ "Lez2XloEzGaibMdXnjFFvgw5PsIFWZgSTyUgexvDQTuMK5rC4wIbXJ9dI9E7hGKoi5QdPwaDiFkb7GlM"
|
||||||
+ "gUuBpZOVLTWqABsjeks63QPFeUaKwHSD8X4IhGgvrAGmm7Tz_4eywEiGupkzR24EaHQI5A02oZaVE9K6"
|
+ "DZzPiU9GVDj4suqR54o1wIBS1mqYKIvebEWb9ea1lklZL-h9VHriV7TFAyP1qa8I0rN8rLa_E3KDdbje"
|
||||||
+ "ppsrbFKQ_N-jjTFA-VFlTMI3KtlSyvD2w1a8ujz3WHpX539v6lXwymVW7G6hOfPs2h1oZTppG5A3dNXd"
|
+ "6kir-d-ijSEoy-VVwyWcf_Quzrq4qNEG7Fzk2j1HJY22fu6ljtmoUIV1gh58JqhcoZLAJmC92tRIExEe"
|
||||||
+ "5dN_CADp9nRApQX5hzW-LELltww0nNA83IikOccAwLkSidPg19LVzvrlB0voMFYxg38Xawkdh3P6mcVG"
|
+ "HuSPhJjUB3SZ5xry-r2LFvrSWOlvu1jMNAJJvBClSTBQeHvKKTjtlh4uo67WxwBAX4okSlNQ60cTGIzE"
|
||||||
+ "YnCT-vgbk7FD116CZai5xdxrMJFDkumvNx6iRZWuyiqH6L9q3osg9MbjFZsmKPpvlPLjIARxNp8Ydrzg"
|
+ "QkmsKt6NLGgmO7PS9h3tgy-QQRnap7t7KjtmE91lZiYGOlJGmfgQriQ5m4RfpEyjR4Coe_yBHlIBQgsV"
|
||||||
+ "rlVgeRTJ_Xnf0is_jTJx6LbWcCWuCB2-tEV40pVU2AWBKpl-wMB1bOkk67PvmHRs6_iHMPxmmhPMcGXp"
|
+ "U_NGUr9-ZnI1Xczda75691WkaWuCZ9lxd6ZGpJSCyiBKdEXqiVZAHLSCEr-mmdvZFo8B2IziQwQ9iDVH"
|
||||||
+ "dswLeoyByQnsUewr9UzZez7qGQ9IU23R5-lqsOd5iWoFP84KhjbR9ej8w_I6Ixg3S8Z2-VxU1dEilFaH"
|
+ "hURKnrmyfnt8CRQGVMmscbx8gmWDP66nJgzEB9HoF90YAPYpjumNaNRI6rpQEu1EKJ3-VxSXd5veVaHc"
|
||||||
+ "cTNcqnk5NDhSYtiG-N1ycgIcNJOxSfCRwuxSRIC1-ge0";
|
+ "bNdrHZ6NS-x5FOXqk3-DnAPTDZEowLsdAt9Z10y0";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Special thanks to our sponsors and donors:
|
* Special thanks to our sponsors and donors:
|
||||||
|
@ -272,7 +272,10 @@ public class QuoteUtils {
|
|||||||
"V qba'g gnxr erfcbafvovyvgl ng nyy",
|
"V qba'g gnxr erfcbafvovyvgl ng nyy",
|
||||||
"Gurer'f n jbeq sbe crbcyr jub guvax rirelbar vf pbafcvevat ntnvafg gurz: creprcgvir",
|
"Gurer'f n jbeq sbe crbcyr jub guvax rirelbar vf pbafcvevat ntnvafg gurz: creprcgvir",
|
||||||
"V'yy yrg gung cnff orpnhfr guvf vf tbbqolr", "V ybir vg jura n cyna pbzrf gbtrgure",
|
"V'yy yrg gung cnff orpnhfr guvf vf tbbqolr", "V ybir vg jura n cyna pbzrf gbtrgure",
|
||||||
"Znxr hf nyy fnsr. Tb onpx gb lbhe ohaxre");
|
"Znxr hf nyy fnsr. Tb onpx gb lbhe ohaxre", "Gh z'nf qrph, Ongzna", "Gurerfr, p'rfg har pngnfgebcur",
|
||||||
|
"Vs lbh ner abg rzoneenffrq ol gur svefg irefvba bs lbhe cebqhpg, lbh'ir ynhapurq gbb yngr",
|
||||||
|
"Zvfgnxrf znqr zl fhpprff: V znxr ehoore renfre", "Ovt Oebgure vf Jngpuvat Lbh.",
|
||||||
|
"Ab bar'f gnyxvat nobhg yrnivat gur fvatyr znexrg");
|
||||||
|
|
||||||
private QuoteUtils() {
|
private QuoteUtils() {
|
||||||
}
|
}
|
||||||
|
@ -141,6 +141,11 @@ public class SkinParameter {
|
|||||||
private final CornerParam roundParam;
|
private final CornerParam roundParam;
|
||||||
private final SName styleName;
|
private final SName styleName;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
public SName getStyleName() {
|
public SName getStyleName() {
|
||||||
return styleName;
|
return styleName;
|
||||||
}
|
}
|
||||||
|
@ -40,12 +40,14 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ColorParam;
|
import net.sourceforge.plantuml.ColorParam;
|
||||||
|
import net.sourceforge.plantuml.ComponentStyle;
|
||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.StringUtils;
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
import net.sourceforge.plantuml.creole.Stencil;
|
import net.sourceforge.plantuml.creole.Stencil;
|
||||||
import net.sourceforge.plantuml.skin.ActorStyle;
|
import net.sourceforge.plantuml.skin.ActorStyle;
|
||||||
|
import net.sourceforge.plantuml.svek.PackageStyle;
|
||||||
|
|
||||||
public abstract class USymbol {
|
public abstract class USymbol {
|
||||||
|
|
||||||
@ -111,26 +113,6 @@ public abstract class USymbol {
|
|||||||
return getSkinParameter().getColorParamBorder();
|
return getSkinParameter().getColorParamBorder();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static USymbol getFromString(String s, ActorStyle actorStyle) {
|
|
||||||
if (s == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (s.equalsIgnoreCase("actor")) {
|
|
||||||
return actorStyle.getUSymbol();
|
|
||||||
}
|
|
||||||
final USymbol result = all.get(StringUtils.goUpperCase(s.replaceAll("\\W", "")));
|
|
||||||
if (result == null) {
|
|
||||||
if (s.equalsIgnoreCase("component")) {
|
|
||||||
return COMPONENT2;
|
|
||||||
}
|
|
||||||
if (s.equalsIgnoreCase("entity")) {
|
|
||||||
return ENTITY_DOMAIN;
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static USymbol record(String code, SkinParameter skinParameter, USymbol symbol) {
|
private static USymbol record(String code, SkinParameter skinParameter, USymbol symbol) {
|
||||||
all.put(StringUtils.goUpperCase(code), symbol);
|
all.put(StringUtils.goUpperCase(code), symbol);
|
||||||
return symbol;
|
return symbol;
|
||||||
@ -200,7 +182,28 @@ public abstract class USymbol {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static USymbol getFromString(String symbol, ISkinParam skinParam) {
|
public static USymbol fromString(String s, ActorStyle actorStyle, ComponentStyle componentStyle,
|
||||||
|
PackageStyle packageStyle) {
|
||||||
|
if (s == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (s.equalsIgnoreCase("package")) {
|
||||||
|
return packageStyle.toUSymbol();
|
||||||
|
}
|
||||||
|
if (s.equalsIgnoreCase("actor")) {
|
||||||
|
return actorStyle.toUSymbol();
|
||||||
|
}
|
||||||
|
if (s.equalsIgnoreCase("component")) {
|
||||||
|
return componentStyle.toUSymbol();
|
||||||
|
}
|
||||||
|
if (s.equalsIgnoreCase("entity")) {
|
||||||
|
return ENTITY_DOMAIN;
|
||||||
|
}
|
||||||
|
final USymbol result = all.get(StringUtils.goUpperCase(s.replaceAll("\\W", "")));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static USymbol fromString(String symbol, ISkinParam skinParam) {
|
||||||
USymbol usymbol = null;
|
USymbol usymbol = null;
|
||||||
if (symbol.equalsIgnoreCase("artifact")) {
|
if (symbol.equalsIgnoreCase("artifact")) {
|
||||||
usymbol = USymbol.ARTIFACT;
|
usymbol = USymbol.ARTIFACT;
|
||||||
@ -233,9 +236,9 @@ public abstract class USymbol {
|
|||||||
} else if (symbol.equalsIgnoreCase("agent")) {
|
} else if (symbol.equalsIgnoreCase("agent")) {
|
||||||
usymbol = USymbol.AGENT;
|
usymbol = USymbol.AGENT;
|
||||||
} else if (symbol.equalsIgnoreCase("actor")) {
|
} else if (symbol.equalsIgnoreCase("actor")) {
|
||||||
usymbol = skinParam.getActorStyle().getUSymbol();
|
usymbol = skinParam.actorStyle().toUSymbol();
|
||||||
} else if (symbol.equalsIgnoreCase("component")) {
|
} else if (symbol.equalsIgnoreCase("component")) {
|
||||||
usymbol = skinParam.componentStyle().toSymbol();
|
usymbol = skinParam.componentStyle().toUSymbol();
|
||||||
} else if (symbol.equalsIgnoreCase("boundary")) {
|
} else if (symbol.equalsIgnoreCase("boundary")) {
|
||||||
usymbol = USymbol.BOUNDARY;
|
usymbol = USymbol.BOUNDARY;
|
||||||
} else if (symbol.equalsIgnoreCase("control")) {
|
} else if (symbol.equalsIgnoreCase("control")) {
|
||||||
|
@ -65,7 +65,7 @@ class USymbolCloud extends USymbol {
|
|||||||
private void drawCloud(UGraphic ug, double width, double height, boolean shadowing) {
|
private void drawCloud(UGraphic ug, double width, double height, boolean shadowing) {
|
||||||
final UPath shape = getSpecificFrontierForCloud(width, height);
|
final UPath shape = getSpecificFrontierForCloud(width, height);
|
||||||
if (shadowing) {
|
if (shadowing) {
|
||||||
// shape.setDeltaShadow(3.0);
|
shape.setDeltaShadow(3.0);
|
||||||
}
|
}
|
||||||
ug.apply(UTranslate.dy(0)).draw(shape);
|
ug.apply(UTranslate.dy(0)).draw(shape);
|
||||||
}
|
}
|
||||||
|
@ -99,9 +99,10 @@ class USymbolComponent1 extends USymbol {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextBlock asBig(final TextBlock title, HorizontalAlignment labelAlignment, final TextBlock stereotype,
|
public TextBlock asBig(TextBlock title, HorizontalAlignment labelAlignment, TextBlock stereotype, double width,
|
||||||
final double width, final double height, final SymbolContext symbolContext, final HorizontalAlignment stereoAlignment) {
|
double height, SymbolContext symbolContext, HorizontalAlignment stereoAlignment) {
|
||||||
throw new UnsupportedOperationException();
|
return USymbol.COMPONENT2.asBig(title, labelAlignment, stereotype, width, height, symbolContext,
|
||||||
|
stereoAlignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -65,6 +65,11 @@ public class USymbolFolder extends USymbol {
|
|||||||
this.showTitle = showTitle;
|
this.showTitle = showTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return super.toString() + " " + skinParameter + " " + showTitle;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SkinParameter getSkinParameter() {
|
public SkinParameter getSkinParameter() {
|
||||||
return skinParameter;
|
return skinParameter;
|
||||||
@ -167,7 +172,8 @@ public class USymbolFolder extends USymbol {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextBlock asBig(final TextBlock title, HorizontalAlignment labelAlignment, final TextBlock stereotype,
|
public TextBlock asBig(final TextBlock title, HorizontalAlignment labelAlignment, final TextBlock stereotype,
|
||||||
final double width, final double height, final SymbolContext symbolContext, final HorizontalAlignment stereoAlignment) {
|
final double width, final double height, final SymbolContext symbolContext,
|
||||||
|
final HorizontalAlignment stereoAlignment) {
|
||||||
return new AbstractTextBlock() {
|
return new AbstractTextBlock() {
|
||||||
|
|
||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
|
@ -56,11 +56,6 @@ class USymbolStack extends USymbol {
|
|||||||
|
|
||||||
private void drawQueue(UGraphic ug, double width, double height, boolean shadowing, double roundCorner) {
|
private void drawQueue(UGraphic ug, double width, double height, boolean shadowing, double roundCorner) {
|
||||||
final double border = 15;
|
final double border = 15;
|
||||||
final URectangle rect = new URectangle(width - 2 * border, height).rounded(roundCorner);
|
|
||||||
if (shadowing) {
|
|
||||||
rect.setDeltaShadow(3.0);
|
|
||||||
}
|
|
||||||
ug.apply(new HColorNone()).apply(UTranslate.dx(border)).draw(rect);
|
|
||||||
final UPath path = new UPath();
|
final UPath path = new UPath();
|
||||||
if (roundCorner == 0) {
|
if (roundCorner == 0) {
|
||||||
path.moveTo(0, 0);
|
path.moveTo(0, 0);
|
||||||
@ -81,7 +76,12 @@ class USymbolStack extends USymbol {
|
|||||||
path.arcTo(new Point2D.Double(width - border + roundCorner / 2, 0), roundCorner / 2, 0, 1);
|
path.arcTo(new Point2D.Double(width - border + roundCorner / 2, 0), roundCorner / 2, 0, 1);
|
||||||
path.lineTo(width, 0);
|
path.lineTo(width, 0);
|
||||||
}
|
}
|
||||||
|
if (shadowing) {
|
||||||
|
path.setDeltaShadow(3.0);
|
||||||
|
}
|
||||||
ug.apply(new HColorNone().bg()).draw(path);
|
ug.apply(new HColorNone().bg()).draw(path);
|
||||||
|
final URectangle rect = new URectangle(width - 2 * border, height).rounded(roundCorner);
|
||||||
|
ug.apply(new HColorNone()).apply(UTranslate.dx(border)).draw(rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Margin getMargin() {
|
private Margin getMargin() {
|
||||||
|
@ -93,6 +93,7 @@ import net.sourceforge.plantuml.graphic.TextBlockWidth;
|
|||||||
import net.sourceforge.plantuml.graphic.UDrawable;
|
import net.sourceforge.plantuml.graphic.UDrawable;
|
||||||
import net.sourceforge.plantuml.graphic.USymbol;
|
import net.sourceforge.plantuml.graphic.USymbol;
|
||||||
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
|
import net.sourceforge.plantuml.style.ClockwiseTopRightBottomLeft;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
import net.sourceforge.plantuml.svek.Bibliotekon;
|
import net.sourceforge.plantuml.svek.Bibliotekon;
|
||||||
import net.sourceforge.plantuml.svek.Cluster;
|
import net.sourceforge.plantuml.svek.Cluster;
|
||||||
import net.sourceforge.plantuml.svek.CucaDiagramFileMaker;
|
import net.sourceforge.plantuml.svek.CucaDiagramFileMaker;
|
||||||
@ -236,7 +237,7 @@ public class CucaDiagramFileMakerJDot implements CucaDiagramFileMaker {
|
|||||||
attribute = new TextBlockEmpty();
|
attribute = new TextBlockEmpty();
|
||||||
} else {
|
} else {
|
||||||
attribute = new MethodsOrFieldsArea(members, FontParam.STATE_ATTRIBUTE, diagram.getSkinParam(),
|
attribute = new MethodsOrFieldsArea(members, FontParam.STATE_ATTRIBUTE, diagram.getSkinParam(),
|
||||||
g.getStereotype(), null);
|
g.getStereotype(), null, SName.stateDiagram);
|
||||||
}
|
}
|
||||||
final Dimension2D dimAttribute = attribute.calculateDimension(stringBounder);
|
final Dimension2D dimAttribute = attribute.calculateDimension(stringBounder);
|
||||||
final double attributeHeight = dimAttribute.getHeight();
|
final double attributeHeight = dimAttribute.getHeight();
|
||||||
@ -427,8 +428,9 @@ public class CucaDiagramFileMakerJDot implements CucaDiagramFileMaker {
|
|||||||
margin1 = 0;
|
margin1 = 0;
|
||||||
margin2 = 10;
|
margin2 = 10;
|
||||||
}
|
}
|
||||||
final ImageBuilder imageBuilder = ImageBuilder.buildD(diagram.getSkinParam(), ClockwiseTopRightBottomLeft.margin1margin2((double) margin1, (double) margin2), diagram.getAnimation(), fileFormatOption.isWithMetadata() ? diagram.getMetadata() : null,
|
final ImageBuilder imageBuilder = ImageBuilder.buildD(diagram.getSkinParam(),
|
||||||
null, scale);
|
ClockwiseTopRightBottomLeft.margin1margin2(margin1, margin2), diagram.getAnimation(),
|
||||||
|
fileFormatOption.isWithMetadata() ? diagram.getMetadata() : null, null, scale);
|
||||||
|
|
||||||
imageBuilder.setUDrawable(new Drawing(null));
|
imageBuilder.setUDrawable(new Drawing(null));
|
||||||
final Dimension2D dim = imageBuilder.getFinalDimension(stringBounder);
|
final Dimension2D dim = imageBuilder.getFinalDimension(stringBounder);
|
||||||
|
@ -35,6 +35,7 @@
|
|||||||
package net.sourceforge.plantuml.nwdiag;
|
package net.sourceforge.plantuml.nwdiag;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ColorParam;
|
import net.sourceforge.plantuml.ColorParam;
|
||||||
|
import net.sourceforge.plantuml.ComponentStyle;
|
||||||
import net.sourceforge.plantuml.SpriteContainerEmpty;
|
import net.sourceforge.plantuml.SpriteContainerEmpty;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
@ -44,6 +45,7 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
|||||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||||
import net.sourceforge.plantuml.graphic.USymbol;
|
import net.sourceforge.plantuml.graphic.USymbol;
|
||||||
import net.sourceforge.plantuml.skin.ActorStyle;
|
import net.sourceforge.plantuml.skin.ActorStyle;
|
||||||
|
import net.sourceforge.plantuml.svek.PackageStyle;
|
||||||
import net.sourceforge.plantuml.ugraphic.UFont;
|
import net.sourceforge.plantuml.ugraphic.UFont;
|
||||||
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
|
import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
|
||||||
|
|
||||||
@ -88,8 +90,8 @@ public class DiagElement {
|
|||||||
final SymbolContext symbolContext = new SymbolContext(ColorParam.activityBackground.getDefaultValue(),
|
final SymbolContext symbolContext = new SymbolContext(ColorParam.activityBackground.getDefaultValue(),
|
||||||
ColorParam.activityBorder.getDefaultValue()).withShadow(3);
|
ColorParam.activityBorder.getDefaultValue()).withShadow(3);
|
||||||
final TextBlock desc = toTextBlock(description);
|
final TextBlock desc = toTextBlock(description);
|
||||||
final TextBlock box = shape.asSmall(TextBlockUtils.empty(0, 0), desc, TextBlockUtils.empty(0, 0),
|
final TextBlock box = shape.asSmall(TextBlockUtils.empty(0, 0), desc, TextBlockUtils.empty(0, 0), symbolContext,
|
||||||
symbolContext, HorizontalAlignment.CENTER);
|
HorizontalAlignment.CENTER);
|
||||||
return new LinkedElement(ad1, box, ad2, mainNetwork, this);
|
return new LinkedElement(ad1, box, ad2, mainNetwork, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +112,8 @@ public class DiagElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final void setShape(String shapeName) {
|
public final void setShape(String shapeName) {
|
||||||
final USymbol shapeFromString = USymbol.getFromString(shapeName, ActorStyle.STICKMAN);
|
final USymbol shapeFromString = USymbol.fromString(shapeName, ActorStyle.STICKMAN, ComponentStyle.RECTANGLE,
|
||||||
|
PackageStyle.RECTANGLE);
|
||||||
if (shapeFromString != null) {
|
if (shapeFromString != null) {
|
||||||
this.shape = shapeFromString;
|
this.shape = shapeFromString;
|
||||||
}
|
}
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
/* ========================================================================
|
|
||||||
* PlantUML : a free UML diagram generator
|
|
||||||
* ========================================================================
|
|
||||||
*
|
|
||||||
* (C) Copyright 2009-2020, 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.objectdiagram;
|
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
|
||||||
import net.sourceforge.plantuml.UmlDiagramType;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.Code;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.ILeaf;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.Ident;
|
|
||||||
import net.sourceforge.plantuml.cucadiagram.LeafType;
|
|
||||||
import net.sourceforge.plantuml.graphic.USymbol;
|
|
||||||
|
|
||||||
public class ObjectDiagram extends AbstractClassOrObjectDiagram {
|
|
||||||
|
|
||||||
public ObjectDiagram(ISkinSimple skinParam) {
|
|
||||||
super(skinParam);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ILeaf getOrCreateLeaf(Ident ident, Code code, LeafType type, USymbol symbol) {
|
|
||||||
if (type == null) {
|
|
||||||
type = LeafType.OBJECT;
|
|
||||||
}
|
|
||||||
// final Ident idNewLong = buildLeafIdent(id);
|
|
||||||
return getOrCreateLeafDefault(ident, code, type, symbol);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public UmlDiagramType getUmlDiagramType() {
|
|
||||||
return UmlDiagramType.OBJECT;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -35,13 +35,12 @@
|
|||||||
*/
|
*/
|
||||||
package net.sourceforge.plantuml.pdf;
|
package net.sourceforge.plantuml.pdf;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.security.SFile;
|
|
||||||
|
|
||||||
public class PdfConverter {
|
public class PdfConverter {
|
||||||
|
|
||||||
public static void convert(SFile svgFile, SFile pdfFile) {
|
public static void convert(File svgFile, File pdfFile) {
|
||||||
|
|
||||||
if (svgFile.exists() == false) {
|
if (svgFile.exists() == false) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
|
@ -38,6 +38,7 @@ package net.sourceforge.plantuml.security;
|
|||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -46,6 +47,13 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.Future;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
|
|
||||||
@ -120,7 +128,7 @@ public class SURL {
|
|||||||
}
|
}
|
||||||
final int port = internal.getPort();
|
final int port = internal.getPort();
|
||||||
// Using INTERNET profile, port 80 and 443 are ok
|
// Using INTERNET profile, port 80 and 443 are ok
|
||||||
if (port == 80 || port == 443) {
|
if (port == 80 || port == 443 || port == -1) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,11 +136,11 @@ public class SURL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean pureIP(String full) {
|
private boolean pureIP(String full) {
|
||||||
if (full.matches("^https?://\\d+\\.\\d+\\.\\d+\\.\\d+\\/")) {
|
if (full.matches("^https?://\\d+\\.\\d+\\.\\d+\\.\\d+.*")) {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isInAllowList() {
|
private boolean isInAllowList() {
|
||||||
final String full = cleanPath(internal.toString());
|
final String full = cleanPath(internal.toString());
|
||||||
@ -160,10 +168,27 @@ public class SURL {
|
|||||||
return Arrays.asList(StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(env).split(";"));
|
return Arrays.asList(StringUtils.eventuallyRemoveStartingAndEndingDoubleQuote(env).split(";"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final static ExecutorService exe = Executors.newCachedThreadPool();
|
||||||
|
private final static Map<String, Long> badHosts = new ConcurrentHashMap<String, Long>();
|
||||||
|
|
||||||
// Added by Alain Corbiere
|
// Added by Alain Corbiere
|
||||||
public byte[] getBytes() {
|
public byte[] getBytes() {
|
||||||
if (isUrlOk())
|
if (isUrlOk() == false) {
|
||||||
try {
|
return null;
|
||||||
|
}
|
||||||
|
final String host = internal.getHost();
|
||||||
|
final Long bad = badHosts.get(host);
|
||||||
|
if (bad != null) {
|
||||||
|
final long duration = System.currentTimeMillis() - bad;
|
||||||
|
if (duration < 1000L * 60) {
|
||||||
|
// System.err.println("BAD HOST!" + host);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
// System.err.println("cleaning " + host);
|
||||||
|
badHosts.remove(host);
|
||||||
|
}
|
||||||
|
final Future<byte[]> result = exe.submit(new Callable<byte[]>() {
|
||||||
|
public byte[] call() throws IOException {
|
||||||
InputStream input = null;
|
InputStream input = null;
|
||||||
try {
|
try {
|
||||||
final URLConnection connection = internal.openConnection();
|
final URLConnection connection = internal.openConnection();
|
||||||
@ -184,9 +209,18 @@ public class SURL {
|
|||||||
input.close();
|
input.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
byte data[] = result.get(SecurityUtils.getSecurityProfile().getTimeout(), TimeUnit.MILLISECONDS);
|
||||||
|
if (data != null) {
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("issue " + host + " " + e);
|
||||||
|
}
|
||||||
|
badHosts.put(host, System.currentTimeMillis());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,4 +136,24 @@ public enum SecurityProfile {
|
|||||||
}
|
}
|
||||||
return "<i>This is completely safe: no access on local files or on distant URL.";
|
return "<i>This is completely safe: no access on local files or on distant URL.";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve the timeout for URL.
|
||||||
|
*/
|
||||||
|
public long getTimeout() {
|
||||||
|
switch (this) {
|
||||||
|
case SANDBOX:
|
||||||
|
return 1000L;
|
||||||
|
case ALLOWLIST:
|
||||||
|
return 1000L * 60 * 5;
|
||||||
|
case INTERNET:
|
||||||
|
return 1000L * 10;
|
||||||
|
case LEGACY:
|
||||||
|
return 1000L * 60;
|
||||||
|
case UNSECURE:
|
||||||
|
return 1000L * 60 * 5;
|
||||||
|
}
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -327,7 +327,7 @@ public class SequenceDiagramFileMakerPuma2 implements FileMaker {
|
|||||||
final DisplaySection display = diagram.getFooterOrHeaderTeoz(fontParam).withPage(page + 1, pages.size());
|
final DisplaySection display = diagram.getFooterOrHeaderTeoz(fontParam).withPage(page + 1, pages.size());
|
||||||
Style style = null;
|
Style style = null;
|
||||||
if (SkinParam.USE_STYLES()) {
|
if (SkinParam.USE_STYLES()) {
|
||||||
final StyleSignature def = fontParam.getStyleDefinition();
|
final StyleSignature def = fontParam.getStyleDefinition(null);
|
||||||
style = def.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
style = def.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
return new PngTitler(titleColor, display, fontSize, fontFamily, hyperlinkColor,
|
return new PngTitler(titleColor, display, fontSize, fontFamily, hyperlinkColor,
|
||||||
|
@ -270,7 +270,7 @@ public class SequenceDiagramFileMakerTeoz implements FileMaker {
|
|||||||
Style style = null;
|
Style style = null;
|
||||||
final ISkinParam skinParam = diagram.getSkinParam();
|
final ISkinParam skinParam = diagram.getSkinParam();
|
||||||
if (SkinParam.USE_STYLES()) {
|
if (SkinParam.USE_STYLES()) {
|
||||||
final StyleSignature def = param.getStyleDefinition();
|
final StyleSignature def = param.getStyleDefinition(null);
|
||||||
style = def.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
style = def.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
}
|
}
|
||||||
final PngTitler pngTitler = new PngTitler(titleColor, display, fontSize, fontFamily, hyperlinkColor,
|
final PngTitler pngTitler = new PngTitler(titleColor, display, fontSize, fontFamily, hyperlinkColor,
|
||||||
@ -296,7 +296,7 @@ public class SequenceDiagramFileMakerTeoz implements FileMaker {
|
|||||||
|
|
||||||
HorizontalAlignment titleAlignment = HorizontalAlignment.CENTER;
|
HorizontalAlignment titleAlignment = HorizontalAlignment.CENTER;
|
||||||
if (SkinParam.USE_STYLES()) {
|
if (SkinParam.USE_STYLES()) {
|
||||||
final StyleSignature def = FontParam.TITLE.getStyleDefinition();
|
final StyleSignature def = FontParam.TITLE.getStyleDefinition(null);
|
||||||
titleAlignment = def.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder())
|
titleAlignment = def.getMergedStyle(diagram.getSkinParam().getCurrentStyleBuilder())
|
||||||
.getHorizontalAlignment();
|
.getHorizontalAlignment();
|
||||||
}
|
}
|
||||||
|
@ -43,7 +43,7 @@ public enum ActorStyle {
|
|||||||
|
|
||||||
STICKMAN, AWESOME;
|
STICKMAN, AWESOME;
|
||||||
|
|
||||||
public USymbol getUSymbol() {
|
public USymbol toUSymbol() {
|
||||||
if (this == STICKMAN) {
|
if (this == STICKMAN) {
|
||||||
return USymbol.ACTOR_STICKMAN;
|
return USymbol.ACTOR_STICKMAN;
|
||||||
} else if (this == AWESOME) {
|
} else if (this == AWESOME) {
|
||||||
|
@ -78,7 +78,7 @@ public abstract class AbstractComponentRoseArrow extends AbstractTextualComponen
|
|||||||
@Override
|
@Override
|
||||||
final protected TextBlock getTextBlock() {
|
final protected TextBlock getTextBlock() {
|
||||||
final Padder padder = getISkinSimple() instanceof ISkinParam ? ((ISkinParam) getISkinSimple())
|
final Padder padder = getISkinSimple() instanceof ISkinParam ? ((ISkinParam) getISkinSimple())
|
||||||
.getSequenceDiagramPadder() : Padder.NONE;
|
.sequenceDiagramPadder() : Padder.NONE;
|
||||||
|
|
||||||
return padder.apply(super.getTextBlock());
|
return padder.apply(super.getTextBlock());
|
||||||
}
|
}
|
||||||
|
@ -143,13 +143,13 @@ public class Rose {
|
|||||||
getStroke(param, LineParam.sequenceLifeLineBorder, 1.5), param.getIHtmlColorSet());
|
getStroke(param, LineParam.sequenceLifeLineBorder, 1.5), param.getIHtmlColorSet());
|
||||||
}
|
}
|
||||||
if (type == ComponentType.ACTOR_HEAD) {
|
if (type == ComponentType.ACTOR_HEAD) {
|
||||||
return new ComponentRoseActor(param.getActorStyle(), styles == null ? null : styles[0],
|
return new ComponentRoseActor(param.actorStyle(), styles == null ? null : styles[0],
|
||||||
styles == null ? null : styles[1], getSymbolContext(stereotype, param, ColorParam.actorBorder),
|
styles == null ? null : styles[1], getSymbolContext(stereotype, param, ColorParam.actorBorder),
|
||||||
getUFont2(param, FontParam.ACTOR), stringsToDisplay, true, param, newFontForStereotype,
|
getUFont2(param, FontParam.ACTOR), stringsToDisplay, true, param, newFontForStereotype,
|
||||||
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE));
|
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE));
|
||||||
}
|
}
|
||||||
if (type == ComponentType.ACTOR_TAIL) {
|
if (type == ComponentType.ACTOR_TAIL) {
|
||||||
return new ComponentRoseActor(param.getActorStyle(), styles == null ? null : styles[0],
|
return new ComponentRoseActor(param.actorStyle(), styles == null ? null : styles[0],
|
||||||
styles == null ? null : styles[1], getSymbolContext(stereotype, param, ColorParam.actorBorder),
|
styles == null ? null : styles[1], getSymbolContext(stereotype, param, ColorParam.actorBorder),
|
||||||
getUFont2(param, FontParam.ACTOR), stringsToDisplay, false, param, newFontForStereotype,
|
getUFont2(param, FontParam.ACTOR), stringsToDisplay, false, param, newFontForStereotype,
|
||||||
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE));
|
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE));
|
||||||
|
@ -354,7 +354,7 @@ public class Cluster implements Moveable {
|
|||||||
}
|
}
|
||||||
PackageStyle packageStyle = group.getPackageStyle();
|
PackageStyle packageStyle = group.getPackageStyle();
|
||||||
if (packageStyle == null) {
|
if (packageStyle == null) {
|
||||||
packageStyle = skinParam2.getPackageStyle();
|
packageStyle = skinParam2.packageStyle();
|
||||||
}
|
}
|
||||||
if (border != null) {
|
if (border != null) {
|
||||||
final HColor tmp = skinParam2.getHtmlColor(border, group.getStereotype(), false);
|
final HColor tmp = skinParam2.getHtmlColor(border, group.getStereotype(), false);
|
||||||
@ -512,7 +512,7 @@ public class Cluster implements Moveable {
|
|||||||
attribute = new TextBlockEmpty();
|
attribute = new TextBlockEmpty();
|
||||||
} else {
|
} else {
|
||||||
attribute = new MethodsOrFieldsArea(members, FontParam.STATE_ATTRIBUTE, skinParam, group.getStereotype(),
|
attribute = new MethodsOrFieldsArea(members, FontParam.STATE_ATTRIBUTE, skinParam, group.getStereotype(),
|
||||||
null);
|
null, SName.stateDiagram);
|
||||||
}
|
}
|
||||||
return attribute;
|
return attribute;
|
||||||
}
|
}
|
||||||
@ -836,12 +836,12 @@ public class Cluster implements Moveable {
|
|||||||
printCluster1(sb, lines, stringBounder);
|
printCluster1(sb, lines, stringBounder);
|
||||||
|
|
||||||
final Node added = printCluster2(sb, lines, stringBounder, dotMode, graphvizVersion, type);
|
final Node added = printCluster2(sb, lines, stringBounder, dotMode, graphvizVersion, type);
|
||||||
if (entityPositionsExceptNormal.size() > 0 && added == null) {
|
if (entityPositionsExceptNormal.size() > 0) {
|
||||||
if (hasPort()) {
|
if (hasPort()) {
|
||||||
sb.append(empty() + " [shape=rect,width=.01,height=.01,label=");
|
sb.append(empty() + " [shape=rect,width=.01,height=.01,label=");
|
||||||
sb.append(label);
|
sb.append(label);
|
||||||
sb.append("];");
|
sb.append("];");
|
||||||
} else {
|
} else if (added == null) {
|
||||||
sb.append(empty() + " [shape=point,width=.01,label=\"\"];");
|
sb.append(empty() + " [shape=point,width=.01,label=\"\"];");
|
||||||
}
|
}
|
||||||
SvekUtils.println(sb);
|
SvekUtils.println(sb);
|
||||||
@ -874,7 +874,11 @@ public class Cluster implements Moveable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String empty() {
|
private String empty() {
|
||||||
return "empty" + color;
|
// return "empty" + color;
|
||||||
|
// We use the same node with one for thereALinkFromOrToGroup2 as an empty
|
||||||
|
// because we cannot put a new node in the nested inside of the cluster
|
||||||
|
// if thereALinkFromOrToGroup2 is enabled.
|
||||||
|
return getSpecialPointId(group);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isLabel() {
|
public boolean isLabel() {
|
||||||
|
@ -631,7 +631,7 @@ public final class GeneralImageBuilder {
|
|||||||
attribute = new TextBlockEmpty();
|
attribute = new TextBlockEmpty();
|
||||||
} else {
|
} else {
|
||||||
attribute = new MethodsOrFieldsArea(members, FontParam.STATE_ATTRIBUTE, dotData.getSkinParam(),
|
attribute = new MethodsOrFieldsArea(members, FontParam.STATE_ATTRIBUTE, dotData.getSkinParam(),
|
||||||
g.getStereotype(), null);
|
g.getStereotype(), null, SName.stateDiagram);
|
||||||
}
|
}
|
||||||
final Dimension2D dimAttribute = attribute.calculateDimension(stringBounder);
|
final Dimension2D dimAttribute = attribute.calculateDimension(stringBounder);
|
||||||
final double attributeHeight = dimAttribute.getHeight();
|
final double attributeHeight = dimAttribute.getHeight();
|
||||||
|
@ -85,7 +85,7 @@ public enum PackageStyle {
|
|||||||
return USymbol.RECTANGLE;
|
return USymbol.RECTANGLE;
|
||||||
}
|
}
|
||||||
if (this == FOLDER) {
|
if (this == FOLDER) {
|
||||||
return USymbol.FOLDER;
|
return USymbol.PACKAGE;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -45,6 +45,7 @@ import net.sourceforge.plantuml.FontParam;
|
|||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.LineConfigurable;
|
import net.sourceforge.plantuml.LineConfigurable;
|
||||||
import net.sourceforge.plantuml.LineParam;
|
import net.sourceforge.plantuml.LineParam;
|
||||||
|
import net.sourceforge.plantuml.SkinParam;
|
||||||
import net.sourceforge.plantuml.SkinParamUtils;
|
import net.sourceforge.plantuml.SkinParamUtils;
|
||||||
import net.sourceforge.plantuml.Url;
|
import net.sourceforge.plantuml.Url;
|
||||||
import net.sourceforge.plantuml.creole.Stencil;
|
import net.sourceforge.plantuml.creole.Stencil;
|
||||||
@ -57,6 +58,10 @@ 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.graphic.color.ColorType;
|
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||||
|
import net.sourceforge.plantuml.style.PName;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
|
import net.sourceforge.plantuml.style.Style;
|
||||||
|
import net.sourceforge.plantuml.style.StyleSignature;
|
||||||
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
||||||
import net.sourceforge.plantuml.svek.Margins;
|
import net.sourceforge.plantuml.svek.Margins;
|
||||||
import net.sourceforge.plantuml.svek.Ports;
|
import net.sourceforge.plantuml.svek.Ports;
|
||||||
@ -133,6 +138,14 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Style getStyle() {
|
||||||
|
return getDefaultStyleDefinition().getMergedStyle(getSkinParam().getCurrentStyleBuilder());
|
||||||
|
}
|
||||||
|
|
||||||
|
private StyleSignature getDefaultStyleDefinition() {
|
||||||
|
return StyleSignature.of(SName.root, SName.element, SName.classDiagram, SName.class_);
|
||||||
|
}
|
||||||
|
|
||||||
private void drawInternal(UGraphic ug) {
|
private void drawInternal(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
||||||
@ -147,12 +160,19 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
|||||||
}
|
}
|
||||||
|
|
||||||
HColor classBorder = lineConfig.getColors(getSkinParam()).getColor(ColorType.LINE);
|
HColor classBorder = lineConfig.getColors(getSkinParam()).getColor(ColorType.LINE);
|
||||||
|
HColor headerBackcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.HEADER);
|
||||||
|
|
||||||
if (classBorder == null) {
|
if (classBorder == null) {
|
||||||
|
if (SkinParam.USE_STYLES())
|
||||||
|
classBorder = getStyle().value(PName.LineColor).asColor(getSkinParam().getIHtmlColorSet());
|
||||||
|
else
|
||||||
classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder);
|
classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder);
|
||||||
}
|
}
|
||||||
ug = ug.apply(classBorder);
|
|
||||||
HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK);
|
HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK);
|
||||||
if (backcolor == null) {
|
if (backcolor == null) {
|
||||||
|
if (SkinParam.USE_STYLES())
|
||||||
|
backcolor = getStyle().value(PName.BackGroundColor).asColor(getSkinParam().getIHtmlColorSet());
|
||||||
|
else {
|
||||||
if (leafType == LeafType.ENUM) {
|
if (leafType == LeafType.ENUM) {
|
||||||
backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.enumBackground,
|
backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.enumBackground,
|
||||||
ColorParam.classBackground);
|
ColorParam.classBackground);
|
||||||
@ -160,12 +180,17 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
|||||||
backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBackground);
|
backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBackground);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ug = ug.apply(classBorder);
|
||||||
ug = ug.apply(backcolor.bg());
|
ug = ug.apply(backcolor.bg());
|
||||||
|
|
||||||
final UStroke stroke = getStroke();
|
final UStroke stroke = getStroke();
|
||||||
|
|
||||||
HColor headerBackcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.HEADER);
|
|
||||||
if (headerBackcolor == null) {
|
if (headerBackcolor == null) {
|
||||||
|
if (SkinParam.USE_STYLES())
|
||||||
|
headerBackcolor = getStyle().value(PName.BackGroundColor).asColor(getSkinParam().getIHtmlColorSet());
|
||||||
|
else
|
||||||
headerBackcolor = getSkinParam().getHtmlColor(ColorParam.classHeaderBackground, getStereo(), false);
|
headerBackcolor = getSkinParam().getHtmlColor(ColorParam.classHeaderBackground, getStereo(), false);
|
||||||
}
|
}
|
||||||
UGraphic ugHeader = ug;
|
UGraphic ugHeader = ug;
|
||||||
|
@ -41,6 +41,7 @@ import net.sourceforge.plantuml.ColorParam;
|
|||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.Guillemet;
|
import net.sourceforge.plantuml.Guillemet;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.SkinParam;
|
||||||
import net.sourceforge.plantuml.SkinParamUtils;
|
import net.sourceforge.plantuml.SkinParamUtils;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.cucadiagram.EntityPortion;
|
import net.sourceforge.plantuml.cucadiagram.EntityPortion;
|
||||||
@ -58,6 +59,8 @@ import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
|||||||
import net.sourceforge.plantuml.graphic.VerticalAlignment;
|
import net.sourceforge.plantuml.graphic.VerticalAlignment;
|
||||||
import net.sourceforge.plantuml.skin.VisibilityModifier;
|
import net.sourceforge.plantuml.skin.VisibilityModifier;
|
||||||
import net.sourceforge.plantuml.skin.rose.Rose;
|
import net.sourceforge.plantuml.skin.rose.Rose;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
|
import net.sourceforge.plantuml.style.Style;
|
||||||
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
||||||
import net.sourceforge.plantuml.svek.HeaderLayout;
|
import net.sourceforge.plantuml.svek.HeaderLayout;
|
||||||
import net.sourceforge.plantuml.svek.ShapeType;
|
import net.sourceforge.plantuml.svek.ShapeType;
|
||||||
@ -78,7 +81,15 @@ public class EntityImageClassHeader extends AbstractEntityImage {
|
|||||||
final Stereotype stereotype = entity.getStereotype();
|
final Stereotype stereotype = entity.getStereotype();
|
||||||
final boolean displayGenericWithOldFashion = skinParam.displayGenericWithOldFashion();
|
final boolean displayGenericWithOldFashion = skinParam.displayGenericWithOldFashion();
|
||||||
final String generic = displayGenericWithOldFashion ? null : entity.getGeneric();
|
final String generic = displayGenericWithOldFashion ? null : entity.getGeneric();
|
||||||
FontConfiguration fontConfigurationName = new FontConfiguration(getSkinParam(), FontParam.CLASS, stereotype);
|
FontConfiguration fontConfigurationName;
|
||||||
|
|
||||||
|
if (SkinParam.USE_STYLES()) {
|
||||||
|
final Style style = FontParam.CLASS.getStyleDefinition(SName.classDiagram)
|
||||||
|
.getMergedStyle(skinParam.getCurrentStyleBuilder());
|
||||||
|
fontConfigurationName = new FontConfiguration(style, skinParam, stereotype, FontParam.CLASS);
|
||||||
|
} else {
|
||||||
|
fontConfigurationName = new FontConfiguration(getSkinParam(), FontParam.CLASS, stereotype);
|
||||||
|
}
|
||||||
if (italic) {
|
if (italic) {
|
||||||
fontConfigurationName = fontConfigurationName.italic();
|
fontConfigurationName = fontConfigurationName.italic();
|
||||||
}
|
}
|
||||||
@ -105,8 +116,7 @@ public class EntityImageClassHeader extends AbstractEntityImage {
|
|||||||
|| portionShower.showPortion(EntityPortion.STEREOTYPE, entity) == false) {
|
|| portionShower.showPortion(EntityPortion.STEREOTYPE, entity) == false) {
|
||||||
stereo = null;
|
stereo = null;
|
||||||
} else {
|
} else {
|
||||||
stereo = TextBlockUtils.withMargin(
|
stereo = TextBlockUtils.withMargin(Display.create(stereotype.getLabels(skinParam.guillemet())).create(
|
||||||
Display.create(stereotype.getLabels(skinParam.guillemet())).create(
|
|
||||||
new FontConfiguration(getSkinParam(), FontParam.CLASS_STEREOTYPE, stereotype),
|
new FontConfiguration(getSkinParam(), FontParam.CLASS_STEREOTYPE, stereotype),
|
||||||
HorizontalAlignment.CENTER, skinParam), 1, 0);
|
HorizontalAlignment.CENTER, skinParam), 1, 0);
|
||||||
}
|
}
|
||||||
@ -119,8 +129,7 @@ public class EntityImageClassHeader extends AbstractEntityImage {
|
|||||||
new FontConfiguration(getSkinParam(), FontParam.CLASS_STEREOTYPE, stereotype),
|
new FontConfiguration(getSkinParam(), FontParam.CLASS_STEREOTYPE, stereotype),
|
||||||
HorizontalAlignment.CENTER, skinParam);
|
HorizontalAlignment.CENTER, skinParam);
|
||||||
genericBlock = TextBlockUtils.withMargin(genericBlock, 1, 1);
|
genericBlock = TextBlockUtils.withMargin(genericBlock, 1, 1);
|
||||||
final HColor classBackground = SkinParamUtils
|
final HColor classBackground = SkinParamUtils.getColor(getSkinParam(), stereotype, ColorParam.background);
|
||||||
.getColor(getSkinParam(), stereotype, ColorParam.background);
|
|
||||||
|
|
||||||
final HColor classBorder = SkinParamUtils.getFontColor(getSkinParam(), FontParam.CLASS_STEREOTYPE,
|
final HColor classBorder = SkinParamUtils.getFontColor(getSkinParam(), FontParam.CLASS_STEREOTYPE,
|
||||||
stereotype);
|
stereotype);
|
||||||
|
@ -123,7 +123,7 @@ public class EntityImageDescription extends AbstractEntityImage {
|
|||||||
} else {
|
} else {
|
||||||
desc = new BodyEnhanced(entity.getDisplay(), symbol.getFontParam(), getSkinParam(),
|
desc = new BodyEnhanced(entity.getDisplay(), symbol.getFontParam(), getSkinParam(),
|
||||||
HorizontalAlignment.LEFT, stereotype, symbol.manageHorizontalLine(), false, entity,
|
HorizontalAlignment.LEFT, stereotype, symbol.manageHorizontalLine(), false, entity,
|
||||||
skinParam.minClassWidth());
|
skinParam.minClassWidth(), SName.componentDiagram);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.url = entity.getUrl99();
|
this.url = entity.getUrl99();
|
||||||
@ -180,7 +180,7 @@ public class EntityImageDescription extends AbstractEntityImage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
name = new BodyEnhanced(codeDisplay, symbol.getFontParam(), getSkinParam(), HorizontalAlignment.CENTER,
|
name = new BodyEnhanced(codeDisplay, symbol.getFontParam(), getSkinParam(), HorizontalAlignment.CENTER,
|
||||||
stereotype, symbol.manageHorizontalLine(), false, entity);
|
stereotype, symbol.manageHorizontalLine(), false, entity, SName.componentDiagram);
|
||||||
|
|
||||||
if (hideText) {
|
if (hideText) {
|
||||||
asSmall = symbol.asSmall(TextBlockUtils.empty(0, 0), TextBlockUtils.empty(0, 0), TextBlockUtils.empty(0, 0),
|
asSmall = symbol.asSmall(TextBlockUtils.empty(0, 0), TextBlockUtils.empty(0, 0), TextBlockUtils.empty(0, 0),
|
||||||
@ -191,7 +191,7 @@ public class EntityImageDescription extends AbstractEntityImage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private USymbol getUSymbol(ILeaf entity) {
|
private USymbol getUSymbol(ILeaf entity) {
|
||||||
final USymbol result = entity.getUSymbol() == null ? getSkinParam().componentStyle().toSymbol()
|
final USymbol result = entity.getUSymbol() == null ? getSkinParam().componentStyle().toUSymbol()
|
||||||
: entity.getUSymbol();
|
: entity.getUSymbol();
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
|
@ -121,7 +121,7 @@ public class EntityImageEmptyPackage extends AbstractEntityImage {
|
|||||||
final double roundCorner = 0;
|
final double roundCorner = 0;
|
||||||
|
|
||||||
final UStroke stroke = GeneralImageBuilder.getForcedStroke(getEntity().getStereotype(), getSkinParam());
|
final UStroke stroke = GeneralImageBuilder.getForcedStroke(getEntity().getStereotype(), getSkinParam());
|
||||||
final ClusterDecoration decoration = new ClusterDecoration(getSkinParam().getPackageStyle(), null, desc,
|
final ClusterDecoration decoration = new ClusterDecoration(getSkinParam().packageStyle(), null, desc,
|
||||||
stereoBlock, 0, 0, widthTotal, heightTotal, stroke);
|
stereoBlock, 0, 0, widthTotal, heightTotal, stroke);
|
||||||
|
|
||||||
final double shadowing = getSkinParam().shadowing(getEntity().getStereotype()) ? 3 : 0;
|
final double shadowing = getSkinParam().shadowing(getEntity().getStereotype()) ? 3 : 0;
|
||||||
|
@ -56,6 +56,7 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
|||||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||||
import net.sourceforge.plantuml.graphic.USymbol;
|
import net.sourceforge.plantuml.graphic.USymbol;
|
||||||
import net.sourceforge.plantuml.graphic.color.ColorType;
|
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
||||||
import net.sourceforge.plantuml.svek.ShapeType;
|
import net.sourceforge.plantuml.svek.ShapeType;
|
||||||
import net.sourceforge.plantuml.ugraphic.UEllipse;
|
import net.sourceforge.plantuml.ugraphic.UEllipse;
|
||||||
@ -76,14 +77,14 @@ public class EntityImageLollipopInterfaceEye2 extends AbstractEntityImage {
|
|||||||
super(entity, skinParam);
|
super(entity, skinParam);
|
||||||
final Stereotype stereotype = entity.getStereotype();
|
final Stereotype stereotype = entity.getStereotype();
|
||||||
|
|
||||||
final USymbol symbol = entity.getUSymbol() == null ? skinParam.componentStyle().toSymbol()
|
final USymbol symbol = entity.getUSymbol() == null ? skinParam.componentStyle().toUSymbol()
|
||||||
: entity.getUSymbol();
|
: entity.getUSymbol();
|
||||||
if (symbol == null) {
|
if (symbol == null) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
this.desc = new BodyEnhanced(entity.getDisplay(), symbol.getFontParam(), skinParam, HorizontalAlignment.CENTER,
|
this.desc = new BodyEnhanced(entity.getDisplay(), symbol.getFontParam(), skinParam, HorizontalAlignment.CENTER,
|
||||||
stereotype, symbol.manageHorizontalLine(), false, entity);
|
stereotype, symbol.manageHorizontalLine(), false, entity, SName.componentDiagram);
|
||||||
|
|
||||||
this.url = entity.getUrl99();
|
this.url = entity.getUrl99();
|
||||||
|
|
||||||
|
@ -88,9 +88,9 @@ public class EntityImageObject extends AbstractEntityImage implements Stencil {
|
|||||||
this.lineConfig = entity;
|
this.lineConfig = entity;
|
||||||
final Stereotype stereotype = entity.getStereotype();
|
final Stereotype stereotype = entity.getStereotype();
|
||||||
this.roundCorner = skinParam.getRoundCorner(CornerParam.DEFAULT, null);
|
this.roundCorner = skinParam.getRoundCorner(CornerParam.DEFAULT, null);
|
||||||
this.name = TextBlockUtils.withMargin(
|
final FontConfiguration fc = new FontConfiguration(getSkinParam(), FontParam.OBJECT, stereotype);
|
||||||
entity.getDisplay().create(new FontConfiguration(getSkinParam(), FontParam.OBJECT, stereotype),
|
final TextBlock tmp = getUnderlinedName(entity).create(fc, HorizontalAlignment.CENTER, skinParam);
|
||||||
HorizontalAlignment.CENTER, skinParam), 2, 2);
|
this.name = TextBlockUtils.withMargin(tmp, 2, 2);
|
||||||
if (stereotype == null || stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR) == null
|
if (stereotype == null || stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR) == null
|
||||||
|| portionShower.showPortion(EntityPortion.STEREOTYPE, entity) == false) {
|
|| portionShower.showPortion(EntityPortion.STEREOTYPE, entity) == false) {
|
||||||
this.stereo = null;
|
this.stereo = null;
|
||||||
@ -100,7 +100,6 @@ public class EntityImageObject extends AbstractEntityImage implements Stencil {
|
|||||||
HorizontalAlignment.CENTER, skinParam);
|
HorizontalAlignment.CENTER, skinParam);
|
||||||
}
|
}
|
||||||
|
|
||||||
// final boolean showMethods = portionShower.showPortion(EntityPortion.METHOD, entity);
|
|
||||||
final boolean showFields = portionShower.showPortion(EntityPortion.FIELD, entity);
|
final boolean showFields = portionShower.showPortion(EntityPortion.FIELD, entity);
|
||||||
|
|
||||||
if (entity.getBodier().getFieldsToDisplay().size() == 0) {
|
if (entity.getBodier().getFieldsToDisplay().size() == 0) {
|
||||||
@ -113,6 +112,13 @@ public class EntityImageObject extends AbstractEntityImage implements Stencil {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Display getUnderlinedName(ILeaf entity) {
|
||||||
|
if (getSkinParam().strictUmlStyle()) {
|
||||||
|
return entity.getDisplay().underlinedName();
|
||||||
|
}
|
||||||
|
return entity.getDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
private int marginEmptyFieldsOrMethod = 13;
|
private int marginEmptyFieldsOrMethod = 13;
|
||||||
|
|
||||||
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
||||||
@ -194,8 +200,8 @@ public class EntityImageObject extends AbstractEntityImage implements Stencil {
|
|||||||
|
|
||||||
private Dimension2D getNameAndSteretypeDimension(StringBounder stringBounder) {
|
private Dimension2D getNameAndSteretypeDimension(StringBounder stringBounder) {
|
||||||
final Dimension2D nameDim = name.calculateDimension(stringBounder);
|
final Dimension2D nameDim = name.calculateDimension(stringBounder);
|
||||||
final Dimension2D stereoDim = stereo == null ? new Dimension2DDouble(0, 0) : stereo
|
final Dimension2D stereoDim = stereo == null ? new Dimension2DDouble(0, 0)
|
||||||
.calculateDimension(stringBounder);
|
: stereo.calculateDimension(stringBounder);
|
||||||
final Dimension2D nameAndStereo = new Dimension2DDouble(Math.max(nameDim.getWidth(), stereoDim.getWidth()),
|
final Dimension2D nameAndStereo = new Dimension2DDouble(Math.max(nameDim.getWidth(), stereoDim.getWidth()),
|
||||||
nameDim.getHeight() + stereoDim.getHeight());
|
nameDim.getHeight() + stereoDim.getHeight());
|
||||||
return nameAndStereo;
|
return nameAndStereo;
|
||||||
|
@ -53,6 +53,7 @@ import net.sourceforge.plantuml.graphic.TextBlock;
|
|||||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||||
import net.sourceforge.plantuml.graphic.USymbol;
|
import net.sourceforge.plantuml.graphic.USymbol;
|
||||||
import net.sourceforge.plantuml.graphic.color.ColorType;
|
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
||||||
import net.sourceforge.plantuml.svek.ShapeType;
|
import net.sourceforge.plantuml.svek.ShapeType;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
@ -86,14 +87,15 @@ public class EntityImageState2 extends AbstractEntityImage {
|
|||||||
// backcolor = HtmlColorUtils.BLUE;
|
// backcolor = HtmlColorUtils.BLUE;
|
||||||
final HColor forecolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), symbol.getColorParamBorder());
|
final HColor forecolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), symbol.getColorParamBorder());
|
||||||
|
|
||||||
final SymbolContext ctx = new SymbolContext(backcolor, forecolor).withStroke(new UStroke(1.5)).withShadow(
|
final SymbolContext ctx = new SymbolContext(backcolor, forecolor).withStroke(new UStroke(1.5))
|
||||||
getSkinParam().shadowing(getEntity().getStereotype()) ? 3 : 0);
|
.withShadow(getSkinParam().shadowing(getEntity().getStereotype()) ? 3 : 0);
|
||||||
|
|
||||||
this.url = entity.getUrl99();
|
this.url = entity.getUrl99();
|
||||||
TextBlock stereo = TextBlockUtils.empty(0, 0);
|
TextBlock stereo = TextBlockUtils.empty(0, 0);
|
||||||
|
|
||||||
final TextBlock desc = new BodyEnhanced(entity.getDisplay(), symbol.getFontParam(), skinParam,
|
final TextBlock desc = new BodyEnhanced(entity.getDisplay(), symbol.getFontParam(), skinParam,
|
||||||
HorizontalAlignment.CENTER, stereotype, symbol.manageHorizontalLine(), false, entity);
|
HorizontalAlignment.CENTER, stereotype, symbol.manageHorizontalLine(), false, entity,
|
||||||
|
SName.stateDiagram);
|
||||||
|
|
||||||
asSmall = symbol.asSmall(null, desc, stereo, ctx, skinParam.getStereotypeAlignment());
|
asSmall = symbol.asSmall(null, desc, stereo, ctx, skinParam.getStereotypeAlignment());
|
||||||
|
|
||||||
|
@ -58,6 +58,7 @@ import net.sourceforge.plantuml.graphic.StringBounder;
|
|||||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||||
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
import net.sourceforge.plantuml.graphic.TextBlockUtils;
|
||||||
import net.sourceforge.plantuml.graphic.color.ColorType;
|
import net.sourceforge.plantuml.graphic.color.ColorType;
|
||||||
|
import net.sourceforge.plantuml.style.SName;
|
||||||
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
import net.sourceforge.plantuml.svek.AbstractEntityImage;
|
||||||
import net.sourceforge.plantuml.svek.ShapeType;
|
import net.sourceforge.plantuml.svek.ShapeType;
|
||||||
import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine;
|
import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine;
|
||||||
@ -80,7 +81,7 @@ public class EntityImageUseCase extends AbstractEntityImage {
|
|||||||
final Stereotype stereotype = entity.getStereotype();
|
final Stereotype stereotype = entity.getStereotype();
|
||||||
|
|
||||||
final TextBlock tmp = new BodyEnhanced(entity.getDisplay(), FontParam.USECASE, skinParam,
|
final TextBlock tmp = new BodyEnhanced(entity.getDisplay(), FontParam.USECASE, skinParam,
|
||||||
HorizontalAlignment.CENTER, stereotype, true, false, entity);
|
HorizontalAlignment.CENTER, stereotype, true, false, entity, SName.componentDiagram);
|
||||||
|
|
||||||
if (stereotype == null || stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR) == null
|
if (stereotype == null || stereotype.getLabel(Guillemet.DOUBLE_COMPARATOR) == null
|
||||||
|| portionShower.showPortion(EntityPortion.STEREOTYPE, entity) == false) {
|
|| portionShower.showPortion(EntityPortion.STEREOTYPE, entity) == false) {
|
||||||
|
@ -36,6 +36,8 @@ package net.sourceforge.plantuml.timingdiagram;
|
|||||||
|
|
||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
import java.awt.geom.Point2D;
|
import java.awt.geom.Point2D;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.SortedMap;
|
import java.util.SortedMap;
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
@ -59,6 +61,7 @@ import net.sourceforge.plantuml.ugraphic.color.HColorUtils;
|
|||||||
|
|
||||||
public class PlayerBinary extends Player {
|
public class PlayerBinary extends Player {
|
||||||
|
|
||||||
|
private final List<TimeConstraint> constraints = new ArrayList<TimeConstraint>();
|
||||||
private final SortedMap<TimeTick, Boolean> values = new TreeMap<TimeTick, Boolean>();
|
private final SortedMap<TimeTick, Boolean> values = new TreeMap<TimeTick, Boolean>();
|
||||||
private Boolean initialState;
|
private Boolean initialState;
|
||||||
|
|
||||||
@ -67,8 +70,12 @@ public class PlayerBinary extends Player {
|
|||||||
this.suggestedHeight = 30;
|
this.suggestedHeight = 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double getHeightForConstraints(StringBounder stringBounder) {
|
||||||
|
return TimeConstraint.getHeightForConstraints(stringBounder, constraints);
|
||||||
|
}
|
||||||
|
|
||||||
public double getFullHeight(StringBounder stringBounder) {
|
public double getFullHeight(StringBounder stringBounder) {
|
||||||
return suggestedHeight;
|
return getHeightForConstraints(stringBounder) + suggestedHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawFrameTitle(UGraphic ug) {
|
public void drawFrameTitle(UGraphic ug) {
|
||||||
@ -80,7 +87,8 @@ public class PlayerBinary extends Player {
|
|||||||
|
|
||||||
public IntricatedPoint getTimeProjection(StringBounder stringBounder, TimeTick tick) {
|
public IntricatedPoint getTimeProjection(StringBounder stringBounder, TimeTick tick) {
|
||||||
final double x = ruler.getPosInPixel(tick);
|
final double x = ruler.getPosInPixel(tick);
|
||||||
return new IntricatedPoint(new Point2D.Double(x, getYpos(false)), new Point2D.Double(x, getYpos(true)));
|
return new IntricatedPoint(new Point2D.Double(x, getYpos(stringBounder, false)),
|
||||||
|
new Point2D.Double(x, getYpos(stringBounder, true)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addNote(TimeTick now, Display note, Position position) {
|
public void addNote(TimeTick now, Display note, Position position) {
|
||||||
@ -105,13 +113,21 @@ public class PlayerBinary extends Player {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void createConstraint(TimeTick tick1, TimeTick tick2, String message) {
|
public void createConstraint(TimeTick tick1, TimeTick tick2, String message) {
|
||||||
throw new UnsupportedOperationException();
|
this.constraints.add(new TimeConstraint(tick1, tick2, message, skinParam));
|
||||||
}
|
}
|
||||||
|
|
||||||
private final double ymargin = 8;
|
private final double ymargin = 8;
|
||||||
|
|
||||||
private double getYpos(boolean state) {
|
private double getYpos(StringBounder stringBounder, boolean state) {
|
||||||
return state ? ymargin : getFullHeight(null) - ymargin;
|
return state ? getYhigh(stringBounder) : getYlow(stringBounder);
|
||||||
|
}
|
||||||
|
|
||||||
|
private double getYlow(StringBounder stringBounder) {
|
||||||
|
return getFullHeight(stringBounder) - ymargin;
|
||||||
|
}
|
||||||
|
|
||||||
|
private double getYhigh(StringBounder stringBounder) {
|
||||||
|
return ymargin + getHeightForConstraints(stringBounder);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextBlock getPart1(double fullAvailableWidth, double specialVSpace) {
|
public TextBlock getPart1(double fullAvailableWidth, double specialVSpace) {
|
||||||
@ -138,18 +154,30 @@ public class PlayerBinary extends Player {
|
|||||||
ug = getContext().apply(ug);
|
ug = getContext().apply(ug);
|
||||||
double lastx = 0;
|
double lastx = 0;
|
||||||
boolean lastValue = initialState == null ? false : initialState;
|
boolean lastValue = initialState == null ? false : initialState;
|
||||||
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
final ULine vline = ULine.vline(getYlow(stringBounder) - getYhigh(stringBounder));
|
||||||
for (Map.Entry<TimeTick, Boolean> ent : values.entrySet()) {
|
for (Map.Entry<TimeTick, Boolean> ent : values.entrySet()) {
|
||||||
final double x = ruler.getPosInPixel(ent.getKey());
|
final double x = ruler.getPosInPixel(ent.getKey());
|
||||||
ug.apply(new UTranslate(lastx, getYpos(lastValue))).draw(ULine.hline(x - lastx));
|
ug.apply(new UTranslate(lastx, getYpos(stringBounder, lastValue))).draw(ULine.hline(x - lastx));
|
||||||
if (lastValue != ent.getValue()) {
|
if (lastValue != ent.getValue()) {
|
||||||
ug.apply(new UTranslate(x, ymargin)).draw(ULine.vline(getFullHeight(null) - 2 * ymargin));
|
ug.apply(new UTranslate(x, getYhigh(stringBounder))).draw(vline);
|
||||||
}
|
}
|
||||||
lastx = x;
|
lastx = x;
|
||||||
lastValue = ent.getValue();
|
lastValue = ent.getValue();
|
||||||
}
|
}
|
||||||
ug.apply(new UTranslate(lastx, getYpos(lastValue))).draw(ULine.hline(ruler.getWidth() - lastx));
|
ug.apply(new UTranslate(lastx, getYpos(stringBounder, lastValue)))
|
||||||
|
.draw(ULine.hline(ruler.getWidth() - lastx));
|
||||||
|
|
||||||
|
drawConstraints(ug.apply(UTranslate.dy(getHeightForConstraints(ug.getStringBounder()))));
|
||||||
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void drawConstraints(final UGraphic ug) {
|
||||||
|
for (TimeConstraint constraint : constraints) {
|
||||||
|
constraint.drawU(ug, ruler);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -178,9 +178,15 @@ public class DriverShadowedG2d {
|
|||||||
g2d.scale(1 / dpiFactor, 1 / dpiFactor);
|
g2d.scale(1 / dpiFactor, 1 / dpiFactor);
|
||||||
final Shape sav = g2d.getClip();
|
final Shape sav = g2d.getClip();
|
||||||
|
|
||||||
Area full = new Area(new Rectangle2D.Double(0, 0, bounds.getMaxX() + deltaShadow * 2 + 6,
|
final Area full = new Area(
|
||||||
bounds.getMaxY() + deltaShadow * 2 + 6));
|
new Rectangle2D.Double(0, 0, (bounds.getMaxX() + deltaShadow * 2 + 6) * dpiFactor,
|
||||||
|
(bounds.getMaxY() + deltaShadow * 2 + 6) * dpiFactor));
|
||||||
|
if (dpiFactor == 1) {
|
||||||
full.subtract(new Area(shape));
|
full.subtract(new Area(shape));
|
||||||
|
} else {
|
||||||
|
full.subtract(
|
||||||
|
new Area(shape).createTransformedArea(AffineTransform.getScaleInstance(dpiFactor, dpiFactor)));
|
||||||
|
}
|
||||||
g2d.setClip(full);
|
g2d.setClip(full);
|
||||||
|
|
||||||
g2d.drawImage(destination, (int) (bounds.getMinX() * dpiFactor), (int) (bounds.getMinY() * dpiFactor),
|
g2d.drawImage(destination, (int) (bounds.getMinX() * dpiFactor), (int) (bounds.getMinY() * dpiFactor),
|
||||||
|
@ -44,7 +44,7 @@ public class Version {
|
|||||||
private static final int MAJOR_SEPARATOR = 1000000;
|
private static final int MAJOR_SEPARATOR = 1000000;
|
||||||
|
|
||||||
public static int version() {
|
public static int version() {
|
||||||
return 1202013;
|
return 1202014;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int versionPatched() {
|
public static int versionPatched() {
|
||||||
@ -93,7 +93,7 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static long compileTime() {
|
public static long compileTime() {
|
||||||
return 1592051198896L;
|
return 1592662474056L;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String compileTimeString() {
|
public static String compileTimeString() {
|
||||||
|
Loading…
Reference in New Issue
Block a user