diff --git a/build.xml b/build.xml index 7103dcb49..8d50232dd 100644 --- a/build.xml +++ b/build.xml @@ -20,7 +20,7 @@ - + net.sourceforge.plantuml plantuml - 1.2020.5-SNAPSHOT + 1.2020.8-SNAPSHOT jar PlantUML @@ -133,8 +133,8 @@ maven-compiler-plugin 2.3.2 - 1.6 - 1.6 + 1.7 + 1.7 false diff --git a/src/net/sourceforge/plantuml/FileUtils.java b/src/net/sourceforge/plantuml/FileUtils.java index 5bf2e72fd..e14e49813 100644 --- a/src/net/sourceforge/plantuml/FileUtils.java +++ b/src/net/sourceforge/plantuml/FileUtils.java @@ -154,26 +154,26 @@ public class FileUtils { // http://forum.plantuml.net/9048/img-tag-for-sequence-diagram-participants-does-always-render - public synchronized static BufferedImage ImageIO_read(File f) { + public synchronized static BufferedImage readRasterImageFromFile(File f) { // https://www.experts-exchange.com/questions/26171948/Why-are-ImageIO-read-images-losing-their-transparency.html // https://stackoverflow.com/questions/18743790/can-java-load-images-with-transparency try { - return readImage(new ImageIcon(f.getAbsolutePath())); + return readRasterImage(new ImageIcon(f.getAbsolutePath())); } catch (Exception e) { return null; } } - public synchronized static BufferedImage ImageIO_read(URL url) { + public synchronized static BufferedImage readRasterImageFromURL(URL url) { try { - return readImage(new ImageIcon(url)); + return readRasterImage(new ImageIcon(url)); } catch (Exception e) { return null; } } - private synchronized static BufferedImage readImage(final ImageIcon imageIcon) { + private synchronized static BufferedImage readRasterImage(final ImageIcon imageIcon) { final Image tmpImage = imageIcon.getImage(); final BufferedImage image = new BufferedImage(imageIcon.getIconWidth(), imageIcon.getIconHeight(), BufferedImage.TYPE_INT_ARGB); diff --git a/src/net/sourceforge/plantuml/Option.java b/src/net/sourceforge/plantuml/Option.java index 3e93a3839..3bf8e70e0 100644 --- a/src/net/sourceforge/plantuml/Option.java +++ b/src/net/sourceforge/plantuml/Option.java @@ -456,7 +456,7 @@ public class Option { } public final static String getPattern() { - return "(?i)^.*\\.(txt|tex|java|htm|html|c|h|cpp|apt|pu|pump|hpp|hh)$"; + return "(?i)^.*\\.(txt|tex|java|htm|html|c|h|cpp|apt|pu|puml|hpp|hh)$"; } public void setOutputDir(File f) { diff --git a/src/net/sourceforge/plantuml/acearth/PSystemXearth.java b/src/net/sourceforge/plantuml/acearth/PSystemXearth.java index 169cd2e36..305e60fa7 100644 --- a/src/net/sourceforge/plantuml/acearth/PSystemXearth.java +++ b/src/net/sourceforge/plantuml/acearth/PSystemXearth.java @@ -47,14 +47,14 @@ import java.util.Locale; import java.util.Map; import java.util.TimeZone; +import ext.plantuml.com.ctreber.acearth.ACearth; +import ext.plantuml.com.ctreber.acearth.ConfigurationACearth; +import ext.plantuml.com.ctreber.acearth.plugins.markers.Marker; import net.sourceforge.plantuml.AbstractPSystem; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.api.ImageDataSimple; import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.core.ImageData; -import ext.plantuml.com.ctreber.acearth.ACearth; -import ext.plantuml.com.ctreber.acearth.ConfigurationACearth; -import ext.plantuml.com.ctreber.acearth.plugins.markers.Marker; public class PSystemXearth extends AbstractPSystem { diff --git a/src/net/sourceforge/plantuml/acearth/PSystemXearthFactory.java b/src/net/sourceforge/plantuml/acearth/PSystemXearthFactory.java index c41096ad8..7166699ca 100644 --- a/src/net/sourceforge/plantuml/acearth/PSystemXearthFactory.java +++ b/src/net/sourceforge/plantuml/acearth/PSystemXearthFactory.java @@ -40,11 +40,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import ext.plantuml.com.ctreber.acearth.plugins.markers.Marker; import net.sourceforge.plantuml.command.PSystemBasicFactory; import net.sourceforge.plantuml.command.regex.Matcher2; import net.sourceforge.plantuml.command.regex.MyPattern; import net.sourceforge.plantuml.command.regex.Pattern2; -import ext.plantuml.com.ctreber.acearth.plugins.markers.Marker; public class PSystemXearthFactory extends PSystemBasicFactory { diff --git a/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagram.java b/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagram.java index fbc3b769c..061199041 100644 --- a/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagram.java +++ b/src/net/sourceforge/plantuml/activitydiagram/ActivityDiagram.java @@ -40,7 +40,6 @@ import java.util.List; import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.ISkinSimple; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.cucadiagram.Code; diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java b/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java index d8924cb9e..6afcc348e 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ActivityDiagram3.java @@ -436,11 +436,12 @@ public class ActivityDiagram3 extends UmlDiagram { manageSwimlaneStrategy(); if (current() instanceof InstructionRepeat) { final InstructionRepeat instructionRepeat = (InstructionRepeat) current(); - // final LinkRendering back = new - // LinkRendering(linkColor).withDisplay(linkLabel); instructionRepeat.setBackward(label, swinlanes.getCurrentSwimlane(), boxStyle); - // setCurrent(instructionRepeat.getParent()); - // this.setNextLinkRendererInternal(LinkRendering.none()); + return CommandExecutionResult.ok(); + } + if (current() instanceof InstructionWhile) { + final InstructionWhile instructionWhile = (InstructionWhile) current(); + instructionWhile.setBackward(label, swinlanes.getCurrentSwimlane(), boxStyle); return CommandExecutionResult.ok(); } return CommandExecutionResult.error("Cannot find repeat"); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/InstructionRepeat.java b/src/net/sourceforge/plantuml/activitydiagram3/InstructionRepeat.java index 63516a3ba..72c745f34 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/InstructionRepeat.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/InstructionRepeat.java @@ -56,7 +56,6 @@ public class InstructionRepeat implements Instruction { private final Swimlane swimlane; private Swimlane swimlaneOut; private BoxStyle boxStyle; -// private final HtmlColor color; private boolean killed = false; private final BoxStyle boxStyleIn; diff --git a/src/net/sourceforge/plantuml/activitydiagram3/InstructionWhile.java b/src/net/sourceforge/plantuml/activitydiagram3/InstructionWhile.java index 9a8b27227..8925dc31b 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/InstructionWhile.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/InstructionWhile.java @@ -38,6 +38,7 @@ package net.sourceforge.plantuml.activitydiagram3; import java.util.Set; import net.sourceforge.plantuml.ISkinParam; +import net.sourceforge.plantuml.activitydiagram3.ftile.BoxStyle; import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile; import net.sourceforge.plantuml.activitydiagram3.ftile.FtileFactory; import net.sourceforge.plantuml.activitydiagram3.ftile.FtileKilled; @@ -97,8 +98,10 @@ public class InstructionWhile extends WithNote implements Instruction, Instructi } public Ftile createFtile(FtileFactory factory) { + final Ftile back = Display.isNull(backward) ? null + : factory.activity(backward, swimlane, boxStyle, Colors.empty()); Ftile tmp = factory.decorateOut(repeatList.createFtile(factory), endInlinkRendering); - tmp = factory.createWhile(swimlane, tmp, test, yes, out, afterEndwhile, color, specialOut); + tmp = factory.createWhile(swimlane, tmp, test, yes, out, afterEndwhile, color, specialOut, back); if (getPositionedNotes().size() > 0) { tmp = FtileWithNoteOpale.create(tmp, getPositionedNotes(), skinParam, false); } @@ -170,4 +173,14 @@ public class InstructionWhile extends WithNote implements Instruction, Instructi return repeatList.containsBreak(); } + private BoxStyle boxStyle; + private Swimlane swimlaneOut; + private Display backward = Display.NULL; + + public void setBackward(Display label, Swimlane swimlaneOut, BoxStyle boxStyle) { + this.backward = label; + this.swimlaneOut = swimlaneOut; + this.boxStyle = boxStyle; + } + } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/CollisionDetector.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/CollisionDetector.java index e0b1923f3..6b57cc62b 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/CollisionDetector.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/CollisionDetector.java @@ -43,8 +43,7 @@ import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; +import net.sourceforge.plantuml.ugraphic.UBackground; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UParam; @@ -65,9 +64,9 @@ public class CollisionDetector implements UGraphic { return new CollisionDetector(stringBounder, translate.compose((UTranslate) change), this.context); } else if (change instanceof UStroke) { return new CollisionDetector(this); - } else if (change instanceof UChangeBackColor) { + } else if (change instanceof UBackground) { return new CollisionDetector(this); - } else if (change instanceof UChangeColor) { + } else if (change instanceof HColor) { return new CollisionDetector(this); } throw new UnsupportedOperationException(); @@ -89,7 +88,7 @@ public class CollisionDetector implements UGraphic { } } final HColor color = HColorUtils.BLACK; - ug = ug.apply(new UChangeColor(color)).apply(new UStroke(5)); + ug = ug.apply(color).apply(new UStroke(5)); for (Snake snake : snakes) { for (Line2D line : snake.getHorizontalLines()) { if (collision(line)) { diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactory.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactory.java index 77c927698..33fb934b6 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactory.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactory.java @@ -82,7 +82,7 @@ public interface FtileFactory { Ftile backward, boolean noOut); public Ftile createWhile(Swimlane swimlane, Ftile whileBlock, Display test, Display yes, Display out, - LinkRendering afterEndwhile, HColor color, Instruction specialOut); + LinkRendering afterEndwhile, HColor color, Instruction specialOut, Ftile backward); public Ftile createIf(Swimlane swimlane, List thens, Branch elseBranch, LinkRendering afterEndwhile, LinkRendering topInlinkRendering, Url url); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactoryDelegator.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactoryDelegator.java index 2f20a3ae6..b034fcd4c 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactoryDelegator.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/FtileFactoryDelegator.java @@ -180,15 +180,15 @@ public class FtileFactoryDelegator implements FtileFactory { } public Ftile repeat(BoxStyle boxStyleIn, Swimlane swimlane, Swimlane swimlaneOut, Display startLabel, Ftile repeat, - Display test, Display yes, Display out, Colors colors, LinkRendering backRepeatLinkRendering, Ftile backward, - boolean noOut) { + Display test, Display yes, Display out, Colors colors, LinkRendering backRepeatLinkRendering, + Ftile backward, boolean noOut) { return factory.repeat(boxStyleIn, swimlane, swimlaneOut, startLabel, repeat, test, yes, out, colors, backRepeatLinkRendering, backward, noOut); } public Ftile createWhile(Swimlane swimlane, Ftile whileBlock, Display test, Display yes, Display out, - LinkRendering afterEndwhile, HColor color, Instruction specialOut) { - return factory.createWhile(swimlane, whileBlock, test, yes, out, afterEndwhile, color, specialOut); + LinkRendering afterEndwhile, HColor color, Instruction specialOut, Ftile back) { + return factory.createWhile(swimlane, whileBlock, test, yes, out, afterEndwhile, color, specialOut, back); } public Ftile createIf(Swimlane swimlane, List thens, Branch elseBranch, LinkRendering afterEndwhile, diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/LaneDivider.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/LaneDivider.java index d8621011e..22c54732f 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/LaneDivider.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/LaneDivider.java @@ -49,7 +49,6 @@ 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.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEmpty; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -91,7 +90,7 @@ public class LaneDivider extends AbstractTextBlock { public void drawU(UGraphic ug) { // final UShape back = new URectangle(x1 + x2, height).ignoreForCompressionOnY(); -// ug.apply(new UChangeColor(HColorUtils.BLUE)).draw(back); +// ug.apply(UChangeColor.nnn(HColorUtils.BLUE)).draw(back); final UShape back = new UEmpty(x1 + x2, 1); ug.draw(back); @@ -104,7 +103,7 @@ public class LaneDivider extends AbstractTextBlock { color = getStyle().value(PName.LineColor).asColor(skinParam.getIHtmlColorSet()); thickness = getStyle().getStroke(); } - ug.apply(UTranslate.dx(x1)).apply(thickness).apply(new UChangeColor(color)).draw(ULine.vline(height)); + ug.apply(UTranslate.dx(x1)).apply(thickness).apply(color).draw(ULine.vline(height)); } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesA.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesA.java index b3d243073..d4a300701 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesA.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesA.java @@ -70,8 +70,6 @@ import net.sourceforge.plantuml.svek.UGraphicForSnake; import net.sourceforge.plantuml.ugraphic.LimitFinder; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UShape; @@ -211,8 +209,7 @@ public class SwimlanesA extends AbstractTextBlock implements ISwimlanesA, TextBl } static private void printDebug(UGraphic ug, SlotSet slot, HColor col, TextBlock full) { - slot.drawDebugX(ug.apply(new UChangeColor(col)).apply(new UChangeBackColor(col)), - full.calculateDimension(ug.getStringBounder()).getHeight()); + slot.drawDebugX(ug.apply(col).apply(col.bg()), full.calculateDimension(ug.getStringBounder()).getHeight()); } @@ -224,12 +221,12 @@ public class SwimlanesA extends AbstractTextBlock implements ISwimlanesA, TextBl for (Swimlane swimlane : swimlanes) { final HColor back = swimlane.getColors(skinParam).getColor(ColorType.BACK); if (back != null) { - UGraphic background = ug.apply(new UChangeBackColor(back)).apply(new UChangeColor(back)); + UGraphic background = ug.apply(back.bg()).apply(back); background = background.apply(UTranslate.dx(x2)); drawBackColor(background, swimlane, dimensionFull); } - full.drawU(new UGraphicInterceptorOneSwimlane(ug, swimlane).apply(swimlane.getTranslate()) + full.drawU(new UGraphicInterceptorOneSwimlane(ug, swimlane, swimlanes).apply(swimlane.getTranslate()) .apply(getTitleHeightTranslate(stringBounder))); x2 += swimlane.getActualWidth(); @@ -242,7 +239,8 @@ public class SwimlanesA extends AbstractTextBlock implements ISwimlanesA, TextBl protected void drawBackColor(UGraphic ug, Swimlane swimlane, Dimension2D dimensionFull) { final StringBounder stringBounder = ug.getStringBounder(); final double height = dimensionFull.getHeight() + getTitleHeightTranslate(stringBounder).getDy(); - final URectangle rectangle = new URectangle(swimlane.getActualWidth(), height).ignoreForCompressionOnX().ignoreForCompressionOnY(); + final URectangle rectangle = new URectangle(swimlane.getActualWidth(), height).ignoreForCompressionOnX() + .ignoreForCompressionOnY(); ug.draw(rectangle); } @@ -255,7 +253,7 @@ public class SwimlanesA extends AbstractTextBlock implements ISwimlanesA, TextBl for (Swimlane swimlane : swimlanes) { final LimitFinder limitFinder = new LimitFinder(stringBounder, false); final UGraphicInterceptorOneSwimlane interceptor = new UGraphicInterceptorOneSwimlane( - new UGraphicForSnake(limitFinder), swimlane); + new UGraphicForSnake(limitFinder), swimlane, swimlanes); full.drawU(interceptor); interceptor.flushUg(); final MinMax minMax = limitFinder.getMinMax(); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesAAA.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesAAA.java index 53e616346..e0c35ef14 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesAAA.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesAAA.java @@ -78,8 +78,6 @@ import net.sourceforge.plantuml.svek.UGraphicForSnake; import net.sourceforge.plantuml.ugraphic.LimitFinder; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UShape; @@ -279,14 +277,14 @@ public class SwimlanesAAA extends AbstractTextBlock implements ISwimlanesA, Text final HColor back = swimlane.getColors(skinParam).getColor(ColorType.BACK); if (back != null) { final LaneDivider divider2 = dividers.get(i + 1); - final UGraphic background = ug.apply(new UChangeBackColor(back)).apply(new UChangeColor(back)) + final UGraphic background = ug.apply(back.bg()).apply(back) .apply(UTranslate.dx(xpos - divider1.getX2())); final double width = swimlane.getActualWidth() + divider1.getX2() + divider2.getX1(); final double height = dimensionFull.getHeight() + titleHeightTranslate.getDy(); background.draw(new URectangle(width, height).ignoreForCompressionOnX().ignoreForCompressionOnY()); } - full.drawU(new UGraphicInterceptorOneSwimlane(ug, swimlane).apply(swimlane.getTranslate()) + full.drawU(new UGraphicInterceptorOneSwimlane(ug, swimlane, swimlanes()).apply(swimlane.getTranslate()) .apply(getTitleHeightTranslate(stringBounder))); final double dividerWith = divider1.calculateDimension(stringBounder).getWidth(); @@ -312,7 +310,7 @@ public class SwimlanesAAA extends AbstractTextBlock implements ISwimlanesA, Text double fullWidth = swimlanesSpecial().get(swimlanesSpecial().size() - 1).getTranslate().getDx() - 2 * 5 - 1; final URectangle back = new URectangle(fullWidth, titleHeight).ignoreForCompressionOnX() .ignoreForCompressionOnY(); - ug.apply(UTranslate.dx(5)).apply(new UChangeBackColor(color)).apply(new UChangeColor(color)).draw(back); + ug.apply(UTranslate.dx(5)).apply(color.bg()).apply(color).draw(back); } } @@ -330,7 +328,7 @@ public class SwimlanesAAA extends AbstractTextBlock implements ISwimlanesA, Text for (Swimlane swimlane : swimlanes()) { final LimitFinder limitFinder = new LimitFinder(stringBounder, false); final UGraphicInterceptorOneSwimlane interceptor = new UGraphicInterceptorOneSwimlane( - new UGraphicForSnake(limitFinder), swimlane); + new UGraphicForSnake(limitFinder), swimlane, swimlanes()); full.drawU(interceptor); interceptor.flushUg(); final MinMax minMax = limitFinder.getMinMax(); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesB.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesB.java index 6802fcb86..99111e642 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesB.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesB.java @@ -46,8 +46,6 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.style.PName; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -74,7 +72,7 @@ public class SwimlanesB extends SwimlanesA { if (color != null) { final double titleHeight = getTitlesHeight(stringBounder); final URectangle back = new URectangle(getTitlesWidth(stringBounder), titleHeight).ignoreForCompressionOnX().ignoreForCompressionOnY(); - ug.apply(new UChangeBackColor(color)).apply(new UChangeColor(color)).draw(back); + ug.apply(color.bg()).apply(color).draw(back); } for (Swimlane swimlane : swimlanes) { final TextBlock swTitle = getTitle(swimlane); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesC.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesC.java index 97c98f2e6..30ce71381 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesC.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/SwimlanesC.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.style.PName; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -89,6 +88,6 @@ public class SwimlanesC extends SwimlanesB { color = getStyle().value(PName.LineColor).asColor(skinParam.getIHtmlColorSet()); thickness = getStyle().getStroke(); } - ug.apply(thickness).apply(new UChangeColor(color)).draw(ULine.vline(height)); + ug.apply(thickness).apply(color).draw(ULine.vline(height)); } } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/UGraphicInterceptorUDrawable2.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/UGraphicInterceptorUDrawable2.java index 14051bb81..d399cdacd 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/UGraphicInterceptorUDrawable2.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/UGraphicInterceptorUDrawable2.java @@ -42,8 +42,6 @@ import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.graphic.UGraphicDelegator; import net.sourceforge.plantuml.svek.UGraphicForSnake; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -89,8 +87,8 @@ public class UGraphicInterceptorUDrawable2 extends UGraphicDelegator { private void drawGoto(FtileGoto ftile) { final FtileGeometry geom = ftile.calculateDimension(getStringBounder()); final Point2D pt = geom.getPointIn(); - UGraphic ugGoto = getUg().apply(new UChangeColor(HColorUtils.GREEN)).apply( - new UChangeBackColor(HColorUtils.GREEN)); + UGraphic ugGoto = getUg().apply(HColorUtils.GREEN).apply( + HColorUtils.GREEN.bg()); ugGoto = ugGoto.apply(new UTranslate(pt)); final UTranslate posNow = getPosition(); final UTranslate dest = positions.get(ftile.getName()); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/Worm.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/Worm.java index 30a39f2d5..c988dbc65 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/Worm.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/Worm.java @@ -47,8 +47,6 @@ import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.cucadiagram.LinkStyle; import net.sourceforge.plantuml.graphic.HtmlColorAndStyle; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UPolygon; @@ -81,8 +79,8 @@ public class Worm implements Iterable { if (style.isInvisible()) { return; } - ug = ug.apply(new UChangeColor(color2)); - ug = ug.apply(new UChangeBackColor(color2)); + ug = ug.apply(color2); + ug = ug.apply(color2.bg()); if (style.isNormal()) { ug = ug.apply(new UStroke(stroke)); } else { diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/Zad.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/Zad.java index c6eb486c1..4228eaf4f 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/Zad.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/Zad.java @@ -39,8 +39,6 @@ import java.util.ArrayList; import java.util.List; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; @@ -55,7 +53,7 @@ public class Zad { } public void drawDebug(UGraphic ug) { - ug = ug.apply(new UChangeBackColor(HColorUtils.BLUE)).apply(new UChangeColor(HColorUtils.RED_LIGHT)); + ug = ug.apply(HColorUtils.BLUE.bg()).apply(HColorUtils.RED_LIGHT); for (MinMax minMax : rectangles) { System.err.println("minmax=" + minMax); minMax.drawGrey(ug); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/ZadBuilder.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/ZadBuilder.java index e744042da..933ac1a51 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/ZadBuilder.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/ZadBuilder.java @@ -39,8 +39,7 @@ import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; +import net.sourceforge.plantuml.ugraphic.UBackground; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UParam; import net.sourceforge.plantuml.ugraphic.UParamNull; @@ -49,6 +48,7 @@ import net.sourceforge.plantuml.ugraphic.UShape; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class ZadBuilder implements UGraphic { @@ -57,9 +57,9 @@ public class ZadBuilder implements UGraphic { return new ZadBuilder(stringBounder, translate.compose((UTranslate) change), this.context); } else if (change instanceof UStroke) { return new ZadBuilder(this); - } else if (change instanceof UChangeBackColor) { + } else if (change instanceof UBackground) { return new ZadBuilder(this); - } else if (change instanceof UChangeColor) { + } else if (change instanceof HColor) { return new ZadBuilder(this); } throw new UnsupportedOperationException(); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileFactoryDelegatorWhile.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileFactoryDelegatorWhile.java index f735197c1..dbce40534 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileFactoryDelegatorWhile.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileFactoryDelegatorWhile.java @@ -72,7 +72,7 @@ public class FtileFactoryDelegatorWhile extends FtileFactoryDelegator { @Override public Ftile createWhile(Swimlane swimlane, Ftile whileBlock, Display test, Display yes, Display out, - LinkRendering afterEndwhile, HColor color, Instruction specialOut) { + LinkRendering afterEndwhile, HColor color, Instruction specialOut, Ftile backward) { final HColor borderColor; final HColor backColor; @@ -83,10 +83,10 @@ public class FtileFactoryDelegatorWhile extends FtileFactoryDelegator { final FontParam testParam = conditionStyle == ConditionStyle.INSIDE ? FontParam.ACTIVITY_DIAMOND : FontParam.ARROW; if (SkinParam.USE_STYLES()) { - final Style styleArrow = getDefaultStyleDefinitionArrow().getMergedStyle( - skinParam().getCurrentStyleBuilder()); - final Style styleDiamond = getDefaultStyleDefinitionDiamond().getMergedStyle( - skinParam().getCurrentStyleBuilder()); + final Style styleArrow = getDefaultStyleDefinitionArrow() + .getMergedStyle(skinParam().getCurrentStyleBuilder()); + final Style styleDiamond = getDefaultStyleDefinitionDiamond() + .getMergedStyle(skinParam().getCurrentStyleBuilder()); borderColor = styleDiamond.value(PName.LineColor).asColor(skinParam().getIHtmlColorSet()); backColor = styleDiamond.value(PName.BackGroundColor).asColor(skinParam().getIHtmlColorSet()); arrowColor = Rainbow.build(styleArrow, skinParam().getIHtmlColorSet()); @@ -102,11 +102,12 @@ public class FtileFactoryDelegatorWhile extends FtileFactoryDelegator { } final LinkRendering endInlinkRendering = whileBlock.getOutLinkRendering(); - final Rainbow endInlinkColor = endInlinkRendering == null || endInlinkRendering.getRainbow().size() == 0 ? arrowColor + final Rainbow endInlinkColor = endInlinkRendering == null || endInlinkRendering.getRainbow().size() == 0 + ? arrowColor : endInlinkRendering.getRainbow(); Ftile result = FtileWhile.create(swimlane, whileBlock, test, borderColor, backColor, arrowColor, yes, out, - endInlinkColor, afterEndwhile, fontArrow, getFactory(), conditionStyle, fcTest, specialOut); + endInlinkColor, afterEndwhile, fontArrow, getFactory(), conditionStyle, fcTest, specialOut, backward); final List weldingPoints = whileBlock.getWeldingPoints(); if (weldingPoints.size() > 0) { @@ -120,8 +121,8 @@ public class FtileFactoryDelegatorWhile extends FtileFactoryDelegator { public void drawU(UGraphic ug) { final UTranslate tr1 = genealogy.getTranslate(ftileBreak, ug.getStringBounder()); - final Snake snake = new Snake(getFtile1().arrowHorizontalAlignment(), arrowColor, Arrows - .asToLeft()); + final Snake snake = new Snake(getFtile1().arrowHorizontalAlignment(), arrowColor, + Arrows.asToLeft()); snake.addPoint(tr1.getDx(), tr1.getDy()); snake.addPoint(Diamond.diamondHalfSize, tr1.getDy()); ug.draw(snake); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java index b2da362f2..bfedada7c 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileIfLongHorizontal.java @@ -37,6 +37,7 @@ package net.sourceforge.plantuml.activitydiagram3.ftile.vcompact; import java.awt.geom.Dimension2D; import java.awt.geom.Point2D; +import java.nio.channels.IllegalSelectorException; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -187,7 +188,8 @@ class FtileIfLongHorizontal extends AbstractFtile { diamonds = alignDiamonds(diamonds, ftileFactory.getStringBounder()); - final FtileIfLongHorizontal result = new FtileIfLongHorizontal(diamonds, inlabelSizes, tiles, tile2, arrowColor); + final FtileIfLongHorizontal result = new FtileIfLongHorizontal(diamonds, inlabelSizes, tiles, tile2, + arrowColor); final List conns = new ArrayList(); int nbOut = 0; @@ -205,8 +207,8 @@ class FtileIfLongHorizontal extends AbstractFtile { final Rainbow rainbowOut = branch.getInlinkRenderingColorAndStyle(); TextBlock out2 = null; if (branch.getSpecial() != null) { - out2 = branch.getSpecial().getDisplay() - .create(fcTest, HorizontalAlignment.LEFT, ftileFactory.skinParam()); + out2 = branch.getSpecial().getDisplay().create(fcTest, HorizontalAlignment.LEFT, + ftileFactory.skinParam()); } conns.add(result.new ConnectionVerticalIn(diam, ftile, rainbowIn.size() == 0 ? arrowColor : rainbowIn)); conns.add(result.new ConnectionVerticalOut(ftile, rainbowOut.size() == 0 ? arrowColor : rainbowOut, out2)); @@ -264,8 +266,8 @@ class FtileIfLongHorizontal extends AbstractFtile { private Point2D getP1(StringBounder stringBounder) { final FtileGeometry dimDiamond1 = getFtile1().calculateDimension(stringBounder); - final Point2D p = new Point2D.Double(dimDiamond1.getLeft() * 2, getYdiamontOutToLeft(dimDiamond1, - stringBounder)); + final Point2D p = new Point2D.Double(dimDiamond1.getLeft() * 2, + getYdiamontOutToLeft(dimDiamond1, stringBounder)); return getTranslateDiamond1(getFtile1(), stringBounder).getTranslated(p); } @@ -327,8 +329,8 @@ class FtileIfLongHorizontal extends AbstractFtile { private Point2D getP1(StringBounder stringBounder) { final FtileGeometry dimDiamond1 = getFtile1().calculateDimension(stringBounder); - final Point2D p = new Point2D.Double(dimDiamond1.getLeft() * 2, getYdiamontOutToLeft(dimDiamond1, - stringBounder)); + final Point2D p = new Point2D.Double(dimDiamond1.getLeft() * 2, + getYdiamontOutToLeft(dimDiamond1, stringBounder)); return getTranslateDiamond1(getFtile1(), stringBounder).getTranslated(p); } @@ -470,45 +472,103 @@ class FtileIfLongHorizontal extends AbstractFtile { final StringBounder stringBounder = ug.getStringBounder(); final Dimension2D totalDim = calculateDimensionInternal(stringBounder); - final Swimlane intoSw; + final List allTiles = new ArrayList(couples); + allTiles.add(tile2); + + final double[] minmax; if (ug instanceof UGraphicInterceptorOneSwimlane) { - intoSw = ((UGraphicInterceptorOneSwimlane) ug).getSwimlane(); + final UGraphicInterceptorOneSwimlane interceptor = (UGraphicInterceptorOneSwimlane) ug; + final List allSwimlanes = interceptor.getOrderedListOfAllSwimlanes(); + minmax = getMinmax(stringBounder, totalDim.getWidth(), allTiles, interceptor.getSwimlane(), + allSwimlanes); } else { - intoSw = null; + minmax = getMinmaxSimple(stringBounder, totalDim.getWidth(), allTiles); } - final List all = new ArrayList(couples); - all.add(tile2); - double minX = totalDim.getWidth() / 2; - double maxX = totalDim.getWidth() / 2; - boolean atLeastOne = false; - for (Ftile tmp : all) { - if (tmp.calculateDimension(stringBounder).hasPointOut() == false) { - continue; - } - if (intoSw != null && tmp.getSwimlanes().contains(intoSw) == false) { - continue; - } - if (intoSw != null && tmp.getSwimlaneOut() != intoSw) { - continue; - } - atLeastOne = true; - final UTranslate ut = getTranslateFor(tmp, stringBounder); - final double out = tmp.calculateDimension(stringBounder).translate(ut).getLeft(); - minX = Math.min(minX, out); - maxX = Math.max(maxX, out); - } - if (atLeastOne == false) { + final double minX = minmax[0]; + final double maxX = minmax[1]; + if (minX == Double.NaN || maxX == Double.NaN) { return; } final Snake s = new Snake(arrowHorizontalAlignment(), arrowColor); s.goUnmergeable(MergeStrategy.NONE); - final double height = totalDim.getHeight(); - s.addPoint(minX, height); - s.addPoint(maxX, height); + s.addPoint(minX, totalDim.getHeight()); + s.addPoint(maxX, totalDim.getHeight()); ug.draw(s); } + + private double[] getMinmax(StringBounder stringBounder, double width, List allTiles, Swimlane intoSw, + List allSwimlanes) { + final int current = allSwimlanes.indexOf(intoSw); + if (current == -1) { + throw new IllegalStateException(); + } + final int first = getFirstSwimlane(stringBounder, allTiles, allSwimlanes); + final int last = getLastSwimlane(stringBounder, allTiles, allSwimlanes); + if (current < first || current > last) + return new double[] { Double.NaN, Double.NaN }; + double minX = current != first ? 0 : width; + double maxX = current != last ? width : 0; + for (Ftile tmp : allTiles) { + if (tmp.calculateDimension(stringBounder).hasPointOut() == false) { + continue; + } + if (ftileDoesOutcomeInThatSwimlane(tmp, intoSw) == false) { + continue; + } + final UTranslate ut = getTranslateFor(tmp, stringBounder); + final double out = tmp.calculateDimension(stringBounder).translate(ut).getLeft(); + minX = Math.min(minX, out); + maxX = Math.max(maxX, out); + } + return new double[] { minX, maxX }; + } + + private double[] getMinmaxSimple(StringBounder stringBounder, double width, List allTiles) { + double minX = width / 2; + double maxX = width / 2; + for (Ftile tmp : allTiles) { + if (tmp.calculateDimension(stringBounder).hasPointOut() == false) { + continue; + } + final UTranslate ut = getTranslateFor(tmp, stringBounder); + final double out = tmp.calculateDimension(stringBounder).translate(ut).getLeft(); + minX = Math.min(minX, out); + maxX = Math.max(maxX, out); + } + return new double[] { minX, maxX }; + } + + private int getFirstSwimlane(StringBounder stringBounder, List allTiles, List allSwimlanes) { + for (int i = 0; i < allSwimlanes.size(); i++) { + if (atLeastOne(stringBounder, allSwimlanes.get(i), allTiles)) { + return i; + } + } + throw new IllegalStateException(); + } + + private int getLastSwimlane(StringBounder stringBounder, List allTiles, List allSwimlanes) { + for (int i = allSwimlanes.size() - 1; i >= 0; i--) { + if (atLeastOne(stringBounder, allSwimlanes.get(i), allTiles)) { + return i; + } + } + throw new IllegalStateException(); + } + + private boolean atLeastOne(StringBounder stringBounder, Swimlane intoSw, List allTiles) { + for (Ftile tmp : allTiles) + if (tmp.calculateDimension(stringBounder).hasPointOut() && ftileDoesOutcomeInThatSwimlane(tmp, intoSw)) + return true; + return false; + } + + private boolean ftileDoesOutcomeInThatSwimlane(Ftile ftile, Swimlane swimlane) { + return ftile.getSwimlaneOut() == swimlane && ftile.getSwimlanes().contains(swimlane); + } + } @Override diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileWhile.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileWhile.java index 38da22c79..bf3c2087c 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileWhile.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/FtileWhile.java @@ -71,8 +71,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.svek.ConditionStyle; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEmpty; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -83,6 +81,7 @@ class FtileWhile extends AbstractFtile { private final Ftile whileBlock; private final Ftile diamond1; private final Ftile specialOut; + private final Ftile backward; @Override public Collection getMyChildren() { @@ -106,21 +105,23 @@ class FtileWhile extends AbstractFtile { return getSwimlaneIn(); } - private FtileWhile(Ftile whileBlock, Ftile diamond1, Ftile specialOut) { + private FtileWhile(Ftile whileBlock, Ftile diamond1, Ftile specialOut, Ftile backward) { super(whileBlock.skinParam()); this.whileBlock = whileBlock; this.diamond1 = diamond1; this.specialOut = specialOut; + this.backward = backward; } - public static Ftile create(Swimlane swimlane, Ftile whileBlock, Display test, HColor borderColor, - HColor backColor, Rainbow arrowColor, Display yes, Display out2, Rainbow endInlinkColor, - LinkRendering afterEndwhile, FontConfiguration fontArrow, FtileFactory ftileFactory, - ConditionStyle conditionStyle, FontConfiguration fcTest, Instruction specialOut) { + public static Ftile create(Swimlane swimlane, Ftile whileBlock, Display test, HColor borderColor, HColor backColor, + Rainbow arrowColor, Display yes, Display out2, Rainbow endInlinkColor, LinkRendering afterEndwhile, + FontConfiguration fontArrow, FtileFactory ftileFactory, ConditionStyle conditionStyle, + FontConfiguration fcTest, Instruction specialOut, Ftile backward) { final TextBlock yesTb = yes.create(fontArrow, HorizontalAlignment.LEFT, ftileFactory.skinParam()); - final TextBlock testTb = test.isWhite() ? TextBlockUtils.empty(0, 0) : test.create(fcTest, whileBlock - .skinParam().getDefaultTextAlignment(HorizontalAlignment.LEFT), ftileFactory.skinParam()); + final TextBlock testTb = test.isWhite() ? TextBlockUtils.empty(0, 0) + : test.create(fcTest, whileBlock.skinParam().getDefaultTextAlignment(HorizontalAlignment.LEFT), + ftileFactory.skinParam()); final TextBlock out = out2.create(fontArrow, HorizontalAlignment.LEFT, ftileFactory.skinParam()); final Ftile diamond1; @@ -139,7 +140,7 @@ class FtileWhile extends AbstractFtile { final Ftile special = specialOut == null ? null : specialOut.createFtile(ftileFactory); - final FtileWhile result = new FtileWhile(whileBlock, diamond1, special); + final FtileWhile result = new FtileWhile(whileBlock, diamond1, special, backward); Rainbow afterEndwhileColor = arrowColor; if (afterEndwhile != null && afterEndwhile.getRainbow() != null && afterEndwhile.getRainbow().size() != 0) { afterEndwhileColor = afterEndwhile.getRainbow(); @@ -154,7 +155,12 @@ class FtileWhile extends AbstractFtile { conns.add(result.new ConnectionBackEmpty(endInlinkColor)); } else { conns.add(result.new ConnectionIn(whileBlock.getInLinkRendering().getRainbow(arrowColor))); - conns.add(result.new ConnectionBack(endInlinkColor, back)); + if (backward == null) { + conns.add(result.new ConnectionBackSimple(endInlinkColor, back)); + } else { + conns.add(result.new ConnectionBackBackward1(endInlinkColor, back)); + conns.add(result.new ConnectionBackBackward2(endInlinkColor)); + } } if (specialOut == null) { conns.add(result.new ConnectionOut(afterEndwhileColor)); @@ -173,13 +179,13 @@ class FtileWhile extends AbstractFtile { } private Point2D getP1(final StringBounder stringBounder) { - return getTranslateDiamond1(stringBounder).getTranslated( - getFtile1().calculateDimension(stringBounder).getPointOut()); + return getTranslateDiamond1(stringBounder) + .getTranslated(getFtile1().calculateDimension(stringBounder).getPointOut()); } private Point2D getP2(final StringBounder stringBounder) { - return getTranslateForWhile(stringBounder).getTranslated( - getFtile2().calculateDimension(stringBounder).getPointIn()); + return getTranslateForWhile(stringBounder) + .getTranslated(getFtile2().calculateDimension(stringBounder).getPointIn()); } public void drawU(UGraphic ug) { @@ -209,11 +215,11 @@ class FtileWhile extends AbstractFtile { } } - class ConnectionBack extends AbstractConnection implements ConnectionTranslatable { + class ConnectionBackSimple extends AbstractConnection implements ConnectionTranslatable { private final Rainbow endInlinkColor; private final TextBlock back; - public ConnectionBack(Rainbow endInlinkColor, TextBlock back) { + public ConnectionBackSimple(Rainbow endInlinkColor, TextBlock back) { super(whileBlock, diamond1); this.endInlinkColor = endInlinkColor; this.back = back; @@ -299,14 +305,105 @@ class FtileWhile extends AbstractFtile { ug.apply(new UTranslate(x1, y1 + Diamond.diamondHalfSize)).draw(new UEmpty(5, Diamond.diamondHalfSize)); - ug = ug.apply(new UChangeColor(endInlinkColor.getColor())).apply( - new UChangeBackColor(endInlinkColor.getColor())); + ug = ug.apply(endInlinkColor.getColor()).apply(endInlinkColor.getColor().bg()); ug.apply(new UTranslate(xx, (y1 + y2) / 2)).draw(Arrows.asToUp()); } } + class ConnectionBackBackward1 extends AbstractConnection { + private final Rainbow endInlinkColor; + private final TextBlock back; + + public ConnectionBackBackward1(Rainbow endInlinkColor, TextBlock back) { + super(whileBlock, backward); + this.endInlinkColor = endInlinkColor; + this.back = back; + } + + private Point2D getP1(final StringBounder stringBounder) { + final FtileGeometry geo = whileBlock.calculateDimension(stringBounder); + if (geo.hasPointOut() == false) { + return null; + } + return getTranslateForWhile(stringBounder).getTranslated(geo.getPointOut()); + } + + private double getBottom(final StringBounder stringBounder) { + final FtileGeometry geo = whileBlock.calculateDimension(stringBounder); + return getTranslateForWhile(stringBounder).getDy() + geo.getHeight(); + } + + private Point2D getP2(final StringBounder stringBounder) { + final FtileGeometry dim = backward.calculateDimension(stringBounder); + return getTranslateBackward(stringBounder).getTranslated(new Point2D.Double(dim.getLeft(), dim.getOutY())); + } + + public void drawU(UGraphic ug) { + final StringBounder stringBounder = ug.getStringBounder(); + + final Snake snake = new Snake(arrowHorizontalAlignment(), endInlinkColor, Arrows.asToUp()); + final Point2D p1 = getP1(stringBounder); + if (p1 == null) { + return; + } + final Point2D p2 = getP2(stringBounder); + final double x1 = p1.getX(); + final double y1 = p1.getY(); + final double x2 = p2.getX(); + final double y2 = p2.getY(); + + snake.setLabel(back); + snake.addPoint(x1, y1); + final double y1bis = Math.max(y1, getBottom(stringBounder)) + Diamond.diamondHalfSize; + snake.addPoint(x1, y1bis); + snake.addPoint(x2, y1bis); + snake.addPoint(x2, y2); + + ug.draw(snake); + } + } + + class ConnectionBackBackward2 extends AbstractConnection { + private final Rainbow endInlinkColor; + + public ConnectionBackBackward2(Rainbow endInlinkColor) { + super(backward, diamond1); + this.endInlinkColor = endInlinkColor; + } + + private Point2D getP1(final StringBounder stringBounder) { + final FtileGeometry dim = backward.calculateDimension(stringBounder); + return getTranslateBackward(stringBounder).getTranslated(new Point2D.Double(dim.getLeft(), dim.getInY())); + } + + private Point2D getP2(final StringBounder stringBounder) { + return getTranslateDiamond1(stringBounder).getTranslated(new Point2D.Double(0, 0)); + } + + public void drawU(UGraphic ug) { + final StringBounder stringBounder = ug.getStringBounder(); + + final Snake snake = new Snake(arrowHorizontalAlignment(), endInlinkColor, Arrows.asToLeft()); + final Point2D p1 = getP1(stringBounder); + final Point2D p2 = getP2(stringBounder); + final FtileGeometry dimDiamond1 = diamond1.calculateDimension(stringBounder); + + final double x1 = p1.getX(); + final double y1 = p1.getY(); + final double x2 = p2.getX() + dimDiamond1.getWidth(); + final double half = (dimDiamond1.getOutY() - dimDiamond1.getInY()) / 2; + final double y2 = p2.getY() + dimDiamond1.getInY() + half; + + snake.addPoint(x1, y1); + snake.addPoint(x1, y2); + snake.addPoint(x2, y2); + + ug.draw(snake); + } + } + class ConnectionBackEmpty extends AbstractConnection { private final Rainbow endInlinkColor; @@ -316,8 +413,8 @@ class FtileWhile extends AbstractFtile { } private Point2D getP1(final StringBounder stringBounder) { - return getTranslateDiamond1(stringBounder).getTranslated( - diamond1.calculateDimension(stringBounder).getPointOut()); + return getTranslateDiamond1(stringBounder) + .getTranslated(diamond1.calculateDimension(stringBounder).getPointOut()); } private double getBottom(final StringBounder stringBounder) { @@ -424,8 +521,8 @@ class FtileWhile extends AbstractFtile { } private Point2D getP2(final StringBounder stringBounder) { - return getTranslateForSpecial(stringBounder).getTranslated( - specialOut.calculateDimension(stringBounder).getPointIn()); + return getTranslateForSpecial(stringBounder) + .getTranslated(specialOut.calculateDimension(stringBounder).getPointIn()); } public void drawU(UGraphic ug) { @@ -459,6 +556,18 @@ class FtileWhile extends AbstractFtile { if (specialOut != null) { ug.apply(getTranslateForSpecial(stringBounder)).draw(specialOut); } + if (backward != null) { + ug.apply(getTranslateBackward(stringBounder)).draw(backward); + } + } + + private UTranslate getTranslateBackward(StringBounder stringBounder) { + final Dimension2D dimTotal = calculateDimensionFtile(stringBounder); + final Dimension2D dimBackward = backward.calculateDimension(stringBounder); + final double x = dimTotal.getWidth() - dimBackward.getWidth(); + final double y = (dimTotal.getHeight() - dimBackward.getHeight()) / 2; + + return new UTranslate(x, y); } @Override @@ -473,7 +582,12 @@ class FtileWhile extends AbstractFtile { final FtileGeometry geo = geoDiamond1.appendBottom(geoWhile); final double height = geo.getHeight() + 4 * Diamond.diamondHalfSize; final double dx = 2 * Diamond.diamondHalfSize; - return new FtileGeometry(xDeltaBecauseSpecial(stringBounder) + geo.getWidth() + dx + Diamond.diamondHalfSize, + double backwardWidth = 0; + if (backward != null) { + backwardWidth += backward.calculateDimension(stringBounder).getWidth(); + } + return new FtileGeometry( + xDeltaBecauseSpecial(stringBounder) + geo.getWidth() + dx + Diamond.diamondHalfSize + backwardWidth, height, xDeltaBecauseSpecial(stringBounder) + geo.getLeft() + dx, geoDiamond1.getInY(), height); } @@ -527,7 +641,8 @@ class FtileWhile extends AbstractFtile { final double xDiamond = getTranslateDiamond1(stringBounder).getDx(); // final double x1 = xWhile - xDeltaBecauseSpecial(stringBounder); final double x1 = Math.min(xWhile, xDiamond) - xDeltaBecauseSpecial(stringBounder); - // final double x1 = getTranslateForWhile(stringBounder).getDx() - dimDiamond1.getWidth() + // final double x1 = getTranslateForWhile(stringBounder).getDx() - + // dimDiamond1.getWidth() // - xDeltaBecauseSpecial(stringBounder); return new UTranslate(x1, y1); } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/UGraphicInterceptorOneSwimlane.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/UGraphicInterceptorOneSwimlane.java index be2c75358..15d0a35c7 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/UGraphicInterceptorOneSwimlane.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/UGraphicInterceptorOneSwimlane.java @@ -35,6 +35,8 @@ */ package net.sourceforge.plantuml.activitydiagram3.ftile.vcompact; +import java.util.Collections; +import java.util.List; import java.util.Set; import net.sourceforge.plantuml.activitydiagram3.ftile.Connection; @@ -42,8 +44,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile; import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.UGraphicDelegator; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UShape; @@ -52,10 +52,12 @@ import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class UGraphicInterceptorOneSwimlane extends UGraphicDelegator { private final Swimlane swimlane; + private final List orderedList; - public UGraphicInterceptorOneSwimlane(UGraphic ug, Swimlane swimlane) { + public UGraphicInterceptorOneSwimlane(UGraphic ug, Swimlane swimlane, List orderedList) { super(ug); this.swimlane = swimlane; + this.orderedList = orderedList; } public void draw(UShape shape) { @@ -88,17 +90,20 @@ public class UGraphicInterceptorOneSwimlane extends UGraphicDelegator { } private void drawGoto() { - final UGraphic ugGoto = getUg().apply(new UChangeColor(HColorUtils.GREEN)).apply( - new UChangeBackColor(HColorUtils.GREEN)); + final UGraphic ugGoto = getUg().apply(HColorUtils.GREEN).apply(HColorUtils.GREEN.bg()); ugGoto.draw(new ULine(100, 100)); } public UGraphic apply(UChange change) { - return new UGraphicInterceptorOneSwimlane(getUg().apply(change), swimlane); + return new UGraphicInterceptorOneSwimlane(getUg().apply(change), swimlane, orderedList); } public final Swimlane getSwimlane() { return swimlane; } + public final List getOrderedListOfAllSwimlanes() { + return Collections.unmodifiableList(orderedList); + } + } \ No newline at end of file diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/VCompactFactory.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/VCompactFactory.java index 212b963fd..7abb12a2f 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/VCompactFactory.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vcompact/VCompactFactory.java @@ -169,7 +169,7 @@ public class VCompactFactory implements FtileFactory { } public Ftile createWhile(Swimlane swimlane, Ftile whileBlock, Display test, Display yes, Display out, - LinkRendering afterEndwhile, HColor color, Instruction specialOut) { + LinkRendering afterEndwhile, HColor color, Instruction specialOut, Ftile back) { return whileBlock; } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBlackBlock.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBlackBlock.java index fcbdbd497..751d8b0e9 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBlackBlock.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBlackBlock.java @@ -46,8 +46,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -95,7 +93,7 @@ public class FtileBlackBlock extends AbstractFtile { if (skinParam().shadowing(null)) { rect.setDeltaShadow(3); } - ug.apply(new UChangeColor(colorBar)).apply(new UChangeBackColor(colorBar)).draw(rect); + ug.apply(colorBar).apply(colorBar.bg()).draw(rect); final Dimension2D dimLabel = label.calculateDimension(ug.getStringBounder()); label.drawU(ug.apply(new UTranslate(width + labelMargin, -dimLabel.getHeight() / 2))); } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBox.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBox.java index 120c557b6..4242a9658 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBox.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileBox.java @@ -73,12 +73,11 @@ import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleBuilder; import net.sourceforge.plantuml.style.StyleSignature; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class FtileBox extends AbstractFtile { @@ -243,7 +242,12 @@ public class FtileBox extends AbstractFtile { thickness = getThickness(); } - ug = ug.apply(new UChangeColor(borderColor)).apply(new UChangeBackColor(backColor)).apply(thickness); + if (borderColor == null) { + ug = ug.apply(new HColorNone()); + } else { + ug = ug.apply(borderColor); + } + ug = ug.apply(backColor.bg()).apply(thickness); rect.drawU(ug); if (horizontalAlignment == HorizontalAlignment.LEFT) { diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleEnd.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleEnd.java index 2ba8f2edb..bbc5efbb2 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleEnd.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleEnd.java @@ -48,8 +48,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -107,9 +105,9 @@ public class FtileCircleEnd extends AbstractFtile { final UEllipse circle = new UEllipse(SIZE, SIZE); circle.setDeltaShadow(shadowing); - ug = ug.apply(new UChangeColor(backColor)); + ug = ug.apply(backColor); final double thickness = 2.5; - ug.apply(new UChangeBackColor(HColorUtils.WHITE)).apply(new UStroke(1.5)) + ug.apply(HColorUtils.WHITE.bg()).apply(new UStroke(1.5)) .apply(new UTranslate(xTheoricalPosition, yTheoricalPosition)).draw(circle); final double size2 = (SIZE - thickness) / Math.sqrt(2); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleSpot.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleSpot.java index e1613eeb6..c5baddb03 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleSpot.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleSpot.java @@ -50,8 +50,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.UCenteredCharacter; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; @@ -105,10 +103,10 @@ public class FtileCircleSpot extends AbstractFtile { if (skinParam().shadowing(null)) { circle.setDeltaShadow(3); } - ug.apply(new UChangeColor(borderColor)).apply(new UChangeBackColor(backColor)).apply(getThickness()) + ug.apply(borderColor).apply(backColor.bg()).apply(getThickness()) .draw(circle); - ug.apply(new UChangeColor(fc.getColor())).apply(new UTranslate(SIZE / 2, SIZE / 2)) + ug.apply(fc.getColor()).apply(new UTranslate(SIZE / 2, SIZE / 2)) .draw(new UCenteredCharacter(spot.charAt(0), fc.getFont())); } diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStart.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStart.java index 87b2f59af..be5541be0 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStart.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStart.java @@ -48,11 +48,10 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class FtileCircleStart extends AbstractFtile { @@ -99,7 +98,7 @@ public class FtileCircleStart extends AbstractFtile { public void drawU(UGraphic ug) { final UEllipse circle = new UEllipse(SIZE, SIZE); circle.setDeltaShadow(shadowing); - ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(backColor)).draw(circle); + ug.apply(new HColorNone()).apply(backColor.bg()).draw(circle); } @Override diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStop.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStop.java index c1110736b..a6dead572 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStop.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileCircleStop.java @@ -48,8 +48,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -101,15 +99,15 @@ public class FtileCircleStop extends AbstractFtile { public void drawU(UGraphic ug) { final UEllipse circle = new UEllipse(SIZE, SIZE); circle.setDeltaShadow(shadowing); - ug.apply(new UChangeColor(backColor)).apply(new UChangeBackColor(HColorUtils.WHITE)).draw(circle); + ug.apply(backColor).apply(HColorUtils.WHITE.bg()).draw(circle); final double delta = 5; final UEllipse circleSmall = new UEllipse(SIZE - delta * 2, SIZE - delta * 2); // if (skinParam().shadowing(null)) { // circleSmall.setDeltaShadow(3); // } - ug.apply(new UChangeColor(new HColorMiddle(backColor, HColorUtils.WHITE))) - .apply(new UChangeBackColor(backColor)).apply(new UTranslate(delta, delta)).draw(circleSmall); + ug.apply(new HColorMiddle(backColor, HColorUtils.WHITE)) + .apply(backColor.bg()).apply(new UTranslate(delta, delta)).draw(circleSmall); } @Override diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamond.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamond.java index e03362158..cf9a4df5f 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamond.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamond.java @@ -55,8 +55,6 @@ 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.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -146,7 +144,7 @@ public class FtileDiamond extends AbstractFtile { final double suppY1 = north.calculateDimension(ug.getStringBounder()).getHeight(); ug = ug.apply(UTranslate.dy(suppY1)); - ug.apply(new UChangeColor(borderColor)).apply(getThickness()).apply(new UChangeBackColor(backColor)) + ug.apply(borderColor).apply(getThickness()).apply(backColor.bg()) .draw(Diamond.asPolygon(shadowing)); // final Dimension2D dimNorth = north.calculateDimension(ug.getStringBounder()); north.drawU(ug.apply(new UTranslate(Diamond.diamondHalfSize * 1.5, -suppY1))); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondFoo1.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondFoo1.java index bae905836..c78d334b6 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondFoo1.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondFoo1.java @@ -48,8 +48,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -113,7 +111,7 @@ public class FtileDiamondFoo1 extends AbstractFtile { final StringBounder stringBounder = ug.getStringBounder(); final Dimension2D dimLabel = label.calculateDimension(stringBounder); final Dimension2D dimTotal = calculateDimensionInternal(stringBounder); - ug = ug.apply(new UChangeColor(borderColor)).apply(getThickness()).apply(new UChangeBackColor(backColor)); + ug = ug.apply(borderColor).apply(getThickness()).apply(backColor.bg()); ug.draw(Diamond.asPolygonFoo1(skinParam().shadowing(null), dimTotal.getWidth(), dimTotal.getHeight())); north.drawU(ug.apply(new UTranslate(4 + dimTotal.getWidth() / 2, dimTotal.getHeight()))); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside.java index de68a93cb..915026f2a 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside.java @@ -56,8 +56,6 @@ import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.style.Styleable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -149,7 +147,7 @@ public class FtileDiamondInside extends AbstractFtile implements Styleable { final StringBounder stringBounder = ug.getStringBounder(); final Dimension2D dimLabel = label.calculateDimension(stringBounder); final Dimension2D dimTotal = calculateDimensionAlone(stringBounder); - ug = ug.apply(new UChangeColor(borderColor)).apply(getThickness()).apply(new UChangeBackColor(backColor)); + ug = ug.apply(borderColor).apply(getThickness()).apply(backColor.bg()); ug.draw(Diamond.asPolygon(shadowing, dimTotal.getWidth(), dimTotal.getHeight())); north.drawU(ug.apply(new UTranslate(4 + dimTotal.getWidth() / 2, dimTotal.getHeight()))); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside2.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside2.java index b55b210a5..51c419137 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside2.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside2.java @@ -53,8 +53,6 @@ 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.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -135,7 +133,7 @@ public class FtileDiamondInside2 extends AbstractFtile { final StringBounder stringBounder = ug.getStringBounder(); final Dimension2D dimLabel = label.calculateDimension(stringBounder); final Dimension2D dimTotal = calculateDimensionAlone(stringBounder); - ug = ug.apply(new UChangeColor(borderColor)).apply(getThickness()).apply(new UChangeBackColor(backColor)); + ug = ug.apply(borderColor).apply(getThickness()).apply(backColor.bg()); ug.draw(Diamond.asPolygon(shadowing, dimTotal.getWidth(), dimTotal.getHeight())); north.drawU(ug.apply(new UTranslate(4 + dimTotal.getWidth() / 2, dimTotal.getHeight()))); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside3.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside3.java index 49caf7230..f2698d7e1 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside3.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileDiamondInside3.java @@ -49,8 +49,6 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -121,7 +119,7 @@ public class FtileDiamondInside3 extends AbstractFtile implements FtileOverpassi final StringBounder stringBounder = ug.getStringBounder(); final Dimension2D dimLabel = label.calculateDimension(stringBounder); final Dimension2D dimTotal = calculateDimensionAlone(stringBounder); - ug = ug.apply(new UChangeColor(borderColor)).apply(getThickness()).apply(new UChangeBackColor(backColor)); + ug = ug.apply(borderColor).apply(getThickness()).apply(backColor.bg()); final double shadowing = skinParam().shadowing(null) ? 3 : 0; ug.draw(Diamond.asPolygon(shadowing, dimTotal.getWidth(), dimTotal.getHeight())); diff --git a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileThinSplit.java b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileThinSplit.java index 3745f7451..c5f4807bc 100644 --- a/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileThinSplit.java +++ b/src/net/sourceforge/plantuml/activitydiagram3/ftile/vertical/FtileThinSplit.java @@ -43,13 +43,13 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile; import net.sourceforge.plantuml.activitydiagram3.ftile.FtileGeometry; import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UShape; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class FtileThinSplit extends AbstractFtile { @@ -80,7 +80,12 @@ public class FtileThinSplit extends AbstractFtile { public void drawU(UGraphic ug) { final UShape rect = ULine.hline(last - first); ug = ug.apply(UTranslate.dx(first)); - ug.apply(new UChangeColor(colorBar)).apply(new UStroke(1.5)).draw(rect); + if (colorBar == null) { + ug = ug.apply(new HColorNone()); + } else { + ug = ug.apply(colorBar); + } + ug.apply(new UStroke(1.5)).draw(rect); } public Set getSwimlanes() { diff --git a/src/net/sourceforge/plantuml/ant/PlantUmlTask.java b/src/net/sourceforge/plantuml/ant/PlantUmlTask.java index 9f0520946..251c0ef38 100644 --- a/src/net/sourceforge/plantuml/ant/PlantUmlTask.java +++ b/src/net/sourceforge/plantuml/ant/PlantUmlTask.java @@ -46,6 +46,12 @@ import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.DirectoryScanner; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.types.FileList; +import org.apache.tools.ant.types.FileSet; + import net.sourceforge.plantuml.FileFormat; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.GeneratedImage; @@ -57,12 +63,6 @@ import net.sourceforge.plantuml.cucadiagram.dot.GraphvizUtils; import net.sourceforge.plantuml.preproc.Defines; import net.sourceforge.plantuml.stats.StatsUtils; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.DirectoryScanner; -import org.apache.tools.ant.Task; -import org.apache.tools.ant.types.FileList; -import org.apache.tools.ant.types.FileSet; - // // // diff --git a/src/net/sourceforge/plantuml/asciiart/ComponentTextArrow.java b/src/net/sourceforge/plantuml/asciiart/ComponentTextArrow.java index ca1d16d9d..e436d584b 100644 --- a/src/net/sourceforge/plantuml/asciiart/ComponentTextArrow.java +++ b/src/net/sourceforge/plantuml/asciiart/ComponentTextArrow.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.asciiart; import java.awt.geom.Dimension2D; import java.awt.geom.Point2D; -import java.awt.geom.Point2D.Double; import net.sourceforge.plantuml.FileFormat; import net.sourceforge.plantuml.StringUtils; diff --git a/src/net/sourceforge/plantuml/bpm/BpmElement.java b/src/net/sourceforge/plantuml/bpm/BpmElement.java index 0d35d9463..57df551de 100644 --- a/src/net/sourceforge/plantuml/bpm/BpmElement.java +++ b/src/net/sourceforge/plantuml/bpm/BpmElement.java @@ -51,7 +51,6 @@ import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -97,7 +96,7 @@ public class BpmElement extends AbstractConnectorPuzzle implements ConnectorPuzz public void drawU(UGraphic ug) { raw.drawU(ug); - ug = ug.apply(new UChangeColor(HColorUtils.RED)); + ug = ug.apply(HColorUtils.RED); for (Where w : Where.values()) { if (have(w)) { drawLine(ug, w, raw.calculateDimension(ug.getStringBounder())); diff --git a/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java b/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java index e360e0989..a79c902a6 100644 --- a/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java +++ b/src/net/sourceforge/plantuml/bpm/ConnectorPuzzleEmpty.java @@ -44,7 +44,6 @@ import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -89,7 +88,7 @@ public class ConnectorPuzzleEmpty extends AbstractConnectorPuzzle implements Pla public void drawU(UGraphic ug) { // System.err.println("DRAWING " + toString()); - ug = ug.apply(new UChangeColor(HColorUtils.BLUE)); + ug = ug.apply(HColorUtils.BLUE); for (Where w : Where.values()) { if (have(w)) { drawLine(ug, w); diff --git a/src/net/sourceforge/plantuml/bpm/GridArray.java b/src/net/sourceforge/plantuml/bpm/GridArray.java index f3fb987e2..c96f25273 100644 --- a/src/net/sourceforge/plantuml/bpm/GridArray.java +++ b/src/net/sourceforge/plantuml/bpm/GridArray.java @@ -41,7 +41,6 @@ import java.awt.geom.Point2D; import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -155,7 +154,7 @@ public class GridArray implements UDrawable { for (int c = 0; c < cols; c++) { widthMax += getWidthOfCol(ug.getStringBounder(), c) + margin; } - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK); double y = 0; for (int l = 0; l < lines; l++) { ug.apply(UTranslate.dy(y)).draw(ULine.hline(widthMax)); @@ -170,7 +169,7 @@ public class GridArray implements UDrawable { } private void drawArrow(UGraphic ug, Point2D pt1, Point2D pt2) { - ug = ug.apply(new UChangeColor(HColorUtils.BLUE)); + ug = ug.apply(HColorUtils.BLUE); final ULine line = new ULine(pt2.getX() - pt1.getX(), pt2.getY() - pt1.getY()); ug.apply(new UTranslate(pt1)).draw(line); } diff --git a/src/net/sourceforge/plantuml/braille/BrailleDrawer.java b/src/net/sourceforge/plantuml/braille/BrailleDrawer.java index c20b619e1..5bbe70fb8 100644 --- a/src/net/sourceforge/plantuml/braille/BrailleDrawer.java +++ b/src/net/sourceforge/plantuml/braille/BrailleDrawer.java @@ -36,8 +36,6 @@ package net.sourceforge.plantuml.braille; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -56,7 +54,7 @@ public class BrailleDrawer implements UDrawable { } public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeColor(HColorSet.instance().getColorIfValid("#F0F0F0"))); + ug = ug.apply(HColorSet.instance().getColorIfValid("#F0F0F0")); for (int x = grid.getMinX(); x <= grid.getMaxX(); x++) { ug.apply(UTranslate.dx(x * step + spotSize + 1)).draw( ULine.vline((grid.getMaxY() - grid.getMinY()) * step)); @@ -65,7 +63,7 @@ public class BrailleDrawer implements UDrawable { ug.apply(UTranslate.dy(y * step + spotSize + 1)).draw( ULine.hline((grid.getMaxX() - grid.getMinX()) * step)); } - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)).apply(new UChangeBackColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK).apply(HColorUtils.BLACK.bg()); for (int x = grid.getMinX(); x <= grid.getMaxX(); x++) { for (int y = grid.getMinY(); y <= grid.getMaxY(); y++) { if (grid.getState(x, y)) { diff --git a/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java b/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java index 16c7b1257..7577250f6 100644 --- a/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java +++ b/src/net/sourceforge/plantuml/classdiagram/ClassDiagram.java @@ -37,11 +37,9 @@ package net.sourceforge.plantuml.classdiagram; import java.io.IOException; import java.io.OutputStream; -import java.util.Set; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.ISkinSimple; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.creole.CreoleMode; @@ -54,7 +52,6 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf; import net.sourceforge.plantuml.cucadiagram.Ident; import net.sourceforge.plantuml.cucadiagram.LeafType; import net.sourceforge.plantuml.cucadiagram.Link; -import net.sourceforge.plantuml.cucadiagram.SuperGroup; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.USymbol; import net.sourceforge.plantuml.objectdiagram.AbstractClassOrObjectDiagram; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandAddMethod.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandAddMethod.java index fe53e6fcf..3e1bcc603 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandAddMethod.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandAddMethod.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.classdiagram.ClassDiagram; import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.SingleLineCommand2; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java index 8bd36ec23..ed36719f1 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClass.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClassMultilines.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClassMultilines.java index 16432539c..7115a90ad 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClassMultilines.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateClassMultilines.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.FontParam; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringLocated; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateElementFull2.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateElementFull2.java index 074675cab..bf0a46f6a 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateElementFull2.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandCreateElementFull2.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandDiamondAssociation.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandDiamondAssociation.java index 92a52e983..b220f32a7 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandDiamondAssociation.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandDiamondAssociation.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.classdiagram.ClassDiagram; import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.SingleLineCommand2; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java index 41ae82134..836c4c3ad 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandHideShowByGender.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.command.CommandExecutionResult; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkClass.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkClass.java index ef09eba4e..6d630779c 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkClass.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkClass.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.Url; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkLollipop.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkLollipop.java index 1ade72b39..93241a61c 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkLollipop.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandLinkLollipop.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.command.CommandExecutionResult; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandStereotype.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandStereotype.java index 1124d3985..a49c05782 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandStereotype.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandStereotype.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.classdiagram.ClassDiagram; import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.SingleLineCommand2; diff --git a/src/net/sourceforge/plantuml/classdiagram/command/CommandUrl.java b/src/net/sourceforge/plantuml/classdiagram/command/CommandUrl.java index c753872fb..01682a59a 100644 --- a/src/net/sourceforge/plantuml/classdiagram/command/CommandUrl.java +++ b/src/net/sourceforge/plantuml/classdiagram/command/CommandUrl.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.classdiagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/command/CommandNamespace.java b/src/net/sourceforge/plantuml/command/CommandNamespace.java index 7054878aa..11bf37837 100644 --- a/src/net/sourceforge/plantuml/command/CommandNamespace.java +++ b/src/net/sourceforge/plantuml/command/CommandNamespace.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/command/CommandNamespace2.java b/src/net/sourceforge/plantuml/command/CommandNamespace2.java index 7536f7e80..8bcb09266 100644 --- a/src/net/sourceforge/plantuml/command/CommandNamespace2.java +++ b/src/net/sourceforge/plantuml/command/CommandNamespace2.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java b/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java index e4c30483e..66854e429 100644 --- a/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java +++ b/src/net/sourceforge/plantuml/command/CommandNamespaceEmpty.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/command/CommandPackage.java b/src/net/sourceforge/plantuml/command/CommandPackage.java index 592dc31fe..78f267e81 100644 --- a/src/net/sourceforge/plantuml/command/CommandPackage.java +++ b/src/net/sourceforge/plantuml/command/CommandPackage.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; @@ -130,10 +129,13 @@ public class CommandPackage extends SingleLineCommand2 { NamespaceStrategy.SINGLE); final IEntity p = diagram.getCurrentGroup(); final String stereotype = arg.get("STEREOTYPE", 0); - final USymbol type = USymbol.getFromString(arg.get("TYPE", 0), diagram.getSkinParam().getActorStyle()); - if (type == USymbol.TOGETHER) { - p.setUSymbol(type); - } else if (stereotype != null) { + // final USymbol type = USymbol.getFromString(arg.get("TYPE", 0), + // diagram.getSkinParam().getActorStyle()); +// if (type == USymbol.TOGETHER) { +// p.setUSymbol(type); +// p.setThisIsTogether(); +// } else + if (stereotype != null) { final USymbol usymbol = USymbol.getFromString(stereotype, diagram.getSkinParam().getActorStyle()); if (usymbol == null) { p.setStereotype(new Stereotype(stereotype)); diff --git a/src/net/sourceforge/plantuml/command/CommandPackageEmpty.java b/src/net/sourceforge/plantuml/command/CommandPackageEmpty.java index cb8dfca99..fb900f613 100644 --- a/src/net/sourceforge/plantuml/command/CommandPackageEmpty.java +++ b/src/net/sourceforge/plantuml/command/CommandPackageEmpty.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; import net.sourceforge.plantuml.command.regex.IRegex; diff --git a/src/net/sourceforge/plantuml/command/CommandSpriteFile.java b/src/net/sourceforge/plantuml/command/CommandSpriteFile.java index 1772bff5f..d67fca5d4 100644 --- a/src/net/sourceforge/plantuml/command/CommandSpriteFile.java +++ b/src/net/sourceforge/plantuml/command/CommandSpriteFile.java @@ -105,7 +105,7 @@ public class CommandSpriteFile extends SingleLineCommand2 { if (isSvg(f.getName())) { sprite = new SpriteSvg(f); } else { - sprite = new SpriteImage(FileUtils.ImageIO_read(f)); + sprite = new SpriteImage(FileUtils.readRasterImageFromFile(f)); } } } catch (IOException e) { diff --git a/src/net/sourceforge/plantuml/command/note/CommandConstraintOnLinks.java b/src/net/sourceforge/plantuml/command/note/CommandConstraintOnLinks.java index 95dab07c9..095f73eb7 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandConstraintOnLinks.java +++ b/src/net/sourceforge/plantuml/command/note/CommandConstraintOnLinks.java @@ -38,30 +38,17 @@ package net.sourceforge.plantuml.command.note; import java.util.List; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.StringUtils; -import net.sourceforge.plantuml.Url; -import net.sourceforge.plantuml.UrlBuilder; -import net.sourceforge.plantuml.UrlBuilder.ModeUrl; -import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; import net.sourceforge.plantuml.command.BlocLines; -import net.sourceforge.plantuml.command.Command; import net.sourceforge.plantuml.command.CommandExecutionResult; -import net.sourceforge.plantuml.command.CommandMultilines2; -import net.sourceforge.plantuml.command.CommandPackage; -import net.sourceforge.plantuml.command.MultilinesStrategy; -import net.sourceforge.plantuml.command.Position; import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; -import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; import net.sourceforge.plantuml.cucadiagram.CucaDiagram; import net.sourceforge.plantuml.cucadiagram.Link; -import net.sourceforge.plantuml.cucadiagram.Stereotag; import net.sourceforge.plantuml.graphic.color.ColorParser; import net.sourceforge.plantuml.graphic.color.ColorType; -import net.sourceforge.plantuml.graphic.color.Colors; public final class CommandConstraintOnLinks extends SingleLineCommand2 { diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java index 791a0fe5e..8dea9a73f 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryNote.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command.note; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; import net.sourceforge.plantuml.classdiagram.command.CommandCreateClassMultilines; import net.sourceforge.plantuml.command.BlocLines; diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteActivity.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteActivity.java index fb6176833..528784983 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteActivity.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteActivity.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command.note; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java index 078b2d202..5e3531c56 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryNoteOnEntity.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.command.note; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; diff --git a/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java b/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java index cea206040..7c8e9ba28 100644 --- a/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java +++ b/src/net/sourceforge/plantuml/command/note/CommandFactoryTipOnEntity.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.command.note; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; diff --git a/src/net/sourceforge/plantuml/compositediagram/command/CommandLinkBlock.java b/src/net/sourceforge/plantuml/compositediagram/command/CommandLinkBlock.java index 8209034ab..9d0d3bc7d 100644 --- a/src/net/sourceforge/plantuml/compositediagram/command/CommandLinkBlock.java +++ b/src/net/sourceforge/plantuml/compositediagram/command/CommandLinkBlock.java @@ -43,7 +43,6 @@ import net.sourceforge.plantuml.command.regex.RegexLeaf; import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; import net.sourceforge.plantuml.compositediagram.CompositeDiagram; -import net.sourceforge.plantuml.cucadiagram.Code; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.cucadiagram.IEntity; import net.sourceforge.plantuml.cucadiagram.Link; diff --git a/src/net/sourceforge/plantuml/creole/CreoleHorizontalLine.java b/src/net/sourceforge/plantuml/creole/CreoleHorizontalLine.java index e929c4b8a..28480379c 100644 --- a/src/net/sourceforge/plantuml/creole/CreoleHorizontalLine.java +++ b/src/net/sourceforge/plantuml/creole/CreoleHorizontalLine.java @@ -90,7 +90,7 @@ public class CreoleHorizontalLine extends AbstractAtom implements Atom { } public void drawU(UGraphic ug) { - // ug = ug.apply(new UChangeColor(fontConfiguration.getColor())); + // ug = ug.apply(UChangeColor.nnn(fontConfiguration.getColor())); final Dimension2D dim = calculateDimension(ug.getStringBounder()); ug = ug.apply(UTranslate.dy(dim.getHeight() / 2)); ug.draw(getHorizontalLine()); diff --git a/src/net/sourceforge/plantuml/creole/Position.java b/src/net/sourceforge/plantuml/creole/Position.java index 0938b8fd5..c2c6e7b8c 100644 --- a/src/net/sourceforge/plantuml/creole/Position.java +++ b/src/net/sourceforge/plantuml/creole/Position.java @@ -38,11 +38,10 @@ package net.sourceforge.plantuml.creole; import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class Position { @@ -98,8 +97,7 @@ public class Position { } public void drawDebug(UGraphic ug) { - // ug = ug.apply(new UChangeColor(HtmlColorUtils.BLACK)).apply(new UChangeBackColor(HtmlColorUtils.LIGHT_GRAY)); - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)).apply(new UChangeBackColor(null)); + ug = ug.apply(HColorUtils.BLACK).apply(new HColorNone().bg()); ug = ug.apply(new UTranslate(x, y)); ug.draw(new URectangle(dim)); } diff --git a/src/net/sourceforge/plantuml/creole/SheetBlock2.java b/src/net/sourceforge/plantuml/creole/SheetBlock2.java index 1a87ba729..779519a69 100644 --- a/src/net/sourceforge/plantuml/creole/SheetBlock2.java +++ b/src/net/sourceforge/plantuml/creole/SheetBlock2.java @@ -53,11 +53,25 @@ public class SheetBlock2 extends AbstractTextBlock implements TextBlock, Atom { public List splitInTwo(StringBounder stringBounder, double width) { throw new UnsupportedOperationException(getClass().toString()); } - + private final SheetBlock1 block; private final UStroke defaultStroke; private final Stencil stencil; + public SheetBlock2 enlargeMe(final double delta) { + final Stencil newStencil = new Stencil() { + + public double getStartingX(StringBounder stringBounder, double y) { + return stencil.getStartingX(stringBounder, y) - delta; + } + + public double getEndingX(StringBounder stringBounder, double y) { + return stencil.getEndingX(stringBounder, y) + delta; + } + }; + return new SheetBlock2(block, newStencil, defaultStroke); + } + public SheetBlock2(SheetBlock1 block, Stencil stencil, UStroke defaultStroke) { this.block = block; this.stencil = stencil; @@ -66,7 +80,7 @@ public class SheetBlock2 extends AbstractTextBlock implements TextBlock, Atom { throw new IllegalArgumentException(); } } - + @Override public String toString() { return block.toString(); @@ -86,10 +100,10 @@ public class SheetBlock2 extends AbstractTextBlock implements TextBlock, Atom { public double getStartingAltitude(StringBounder stringBounder) { return 0; } - + @Override public Rectangle2D getInnerPosition(String member, StringBounder stringBounder, InnerStrategy strategy) { return block.getInnerPosition(member, stringBounder, strategy); } - + } diff --git a/src/net/sourceforge/plantuml/creole/atom/AtomImg.java b/src/net/sourceforge/plantuml/creole/atom/AtomImg.java index a5b25605f..f3912f0b2 100644 --- a/src/net/sourceforge/plantuml/creole/atom/AtomImg.java +++ b/src/net/sourceforge/plantuml/creole/atom/AtomImg.java @@ -95,7 +95,7 @@ public class AtomImg extends AbstractAtom implements Atom { final String data = src.substring(DATA_IMAGE_PNG_BASE64.length(), src.length()); try { final byte bytes[] = Base64Coder.decode(data); - return build(src, fc, bytes, scale, url); + return buildRasterFromData(src, fc, bytes, scale, url); } catch (Exception e) { return AtomText.create("ERROR " + e.toString(), fc); } @@ -104,8 +104,10 @@ public class AtomImg extends AbstractAtom implements Atom { try { // Check if valid URL if (src.startsWith("http:") || src.startsWith("https:")) { - // final byte image[] = getFile(src); - return build(src, fc, new URL(src), scale, url); + if (src.endsWith(".svg")) { + return buildSvgFromUrl(src, fc, new URL(src), scale, url); + } + return buildRasterFromUrl(src, fc, new URL(src), scale, url); } final File f = FileSystem.getInstance().getFile(src); if (f.exists() == false) { @@ -114,18 +116,18 @@ public class AtomImg extends AbstractAtom implements Atom { if (f.getName().endsWith(".svg")) { return new AtomImgSvg(new TileImageSvg(f)); } - final BufferedImage read = FileUtils.ImageIO_read(f); + final BufferedImage read = FileUtils.readRasterImageFromFile(f); if (read == null) { return AtomText.create("(Cannot decode: " + f.getCanonicalPath() + ")", fc); } - return new AtomImg(FileUtils.ImageIO_read(f), scale, url, src); + return new AtomImg(FileUtils.readRasterImageFromFile(f), scale, url, src); } catch (IOException e) { return AtomText.create("ERROR " + e.toString(), fc); } } - private static Atom build(String source, final FontConfiguration fc, final byte[] data, double scale, Url url) - throws IOException { + private static Atom buildRasterFromData(String source, final FontConfiguration fc, final byte[] data, double scale, + Url url) throws IOException { final BufferedImage read = ImageIO.read(new ByteArrayInputStream(data)); if (read == null) { return AtomText.create("(Cannot decode: " + source + ")", fc); @@ -133,34 +135,47 @@ public class AtomImg extends AbstractAtom implements Atom { return new AtomImg(read, scale, url, null); } - private static Atom build(String text, final FontConfiguration fc, URL source, double scale, Url url) + private static Atom buildRasterFromUrl(String text, final FontConfiguration fc, URL source, double scale, Url url) throws IOException { - final BufferedImage read = FileUtils.ImageIO_read(source); + final BufferedImage read = FileUtils.readRasterImageFromURL(source); if (read == null) { return AtomText.create("(Cannot decode: " + text + ")", fc); } return new AtomImg(read, scale, url, source.getPath()); } + private static Atom buildSvgFromUrl(String text, final FontConfiguration fc, URL source, double scale, Url url) + throws IOException { + final byte[] read = getFile(source); + if (read == null) { + return AtomText.create("(Cannot decode SVG: " + text + ")", fc); + } + return new AtomImgSvg(new TileImageSvg(new String(read, "UTF-8"))); + } + // Added by Alain Corbiere - private static byte[] getFile(String host) throws IOException { + private static byte[] getFile(URL url) { final ByteArrayOutputStream image = new ByteArrayOutputStream(); - InputStream input = null; try { - final URL url = new URL(host); - final URLConnection connection = url.openConnection(); - input = connection.getInputStream(); - final byte[] buffer = new byte[1024]; - int read; - while ((read = input.read(buffer)) > 0) { - image.write(buffer, 0, read); - } - image.close(); - return image.toByteArray(); - } finally { - if (input != null) { - input.close(); + InputStream input = null; + try { + final URLConnection connection = url.openConnection(); + input = connection.getInputStream(); + final byte[] buffer = new byte[1024]; + int read; + while ((read = input.read(buffer)) > 0) { + image.write(buffer, 0, read); + } + image.close(); + return image.toByteArray(); + } finally { + if (input != null) { + input.close(); + } } + } catch (IOException e) { + e.printStackTrace(); + return null; } } diff --git a/src/net/sourceforge/plantuml/creole/atom/AtomTable.java b/src/net/sourceforge/plantuml/creole/atom/AtomTable.java index 84f0a4153..7cef7efc2 100644 --- a/src/net/sourceforge/plantuml/creole/atom/AtomTable.java +++ b/src/net/sourceforge/plantuml/creole/atom/AtomTable.java @@ -46,13 +46,12 @@ import net.sourceforge.plantuml.creole.Position; import net.sourceforge.plantuml.creole.SheetBlock1; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class AtomTable extends AbstractAtom implements Atom { @@ -108,7 +107,7 @@ public class AtomTable extends AbstractAtom implements Atom { final double y2 = getStartingY(i + 1); final double x1 = getStartingX(0); final double x2 = getStartingX(getNbCols()); - ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(line.lineBackColor)) + ug.apply(new HColorNone()).apply(line.lineBackColor.bg()) .apply(new UTranslate(x1, y1)).draw(new URectangle(x2 - x1, y2 - y1)); } for (int j = 0; j < getNbCols(); j++) { @@ -127,7 +126,7 @@ public class AtomTable extends AbstractAtom implements Atom { if (cellBackColor != null) { final double y1 = getStartingY(i); final double y2 = getStartingY(i + 1); - ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(cellBackColor)) + ug.apply(new HColorNone()).apply(cellBackColor.bg()) .apply(new UTranslate(x1, y1)).draw(new URectangle(x2 - x1, y2 - y1)); } final Position pos = positions.get(cell); @@ -141,7 +140,7 @@ public class AtomTable extends AbstractAtom implements Atom { cell.drawU(ug.apply(pos.getTranslate().compose(UTranslate.dx(dx)))); } } - ug = ug.apply(new UChangeColor(lineColor)); + ug = ug.apply(lineColor); final ULine hline = ULine.hline(getEndingX(getNbCols() - 1)); for (int i = 0; i <= getNbLines(); i++) { ug.apply(UTranslate.dy(getStartingY(i))).draw(hline); diff --git a/src/net/sourceforge/plantuml/creole/atom/AtomTree.java b/src/net/sourceforge/plantuml/creole/atom/AtomTree.java index c5d32b6d1..3b5504671 100644 --- a/src/net/sourceforge/plantuml/creole/atom/AtomTree.java +++ b/src/net/sourceforge/plantuml/creole/atom/AtomTree.java @@ -44,7 +44,6 @@ import java.util.Map; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.salt.element.Skeleton2; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -89,7 +88,7 @@ public class AtomTree extends AbstractAtom implements Atom { ug = ug.apply(UTranslate.dy(dim.getHeight())); y += dim.getHeight(); } - skeleton.draw(ugInit.apply(new UChangeColor(this.lineColor))); + skeleton.draw(ugInit.apply(this.lineColor)); } private int getLevel(Atom atom) { diff --git a/src/net/sourceforge/plantuml/creole/atom/Bullet.java b/src/net/sourceforge/plantuml/creole/atom/Bullet.java index 0293cfbe1..3df9c0dbd 100644 --- a/src/net/sourceforge/plantuml/creole/atom/Bullet.java +++ b/src/net/sourceforge/plantuml/creole/atom/Bullet.java @@ -40,8 +40,6 @@ import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -81,7 +79,7 @@ public class Bullet extends AbstractAtom implements Atom { private void drawU0(UGraphic ug) { final HColor color = fontConfiguration.getColor(); - ug = ug.apply(new UChangeColor(color)).apply(new UChangeBackColor(color)).apply(new UStroke(0)); + ug = ug.apply(color).apply(color.bg()).apply(new UStroke(0)); // final double width = getWidth(ug.getStringBounder()); ug = ug.apply(UTranslate.dx(3)); ug.draw(new UEllipse(5, 5)); @@ -97,7 +95,7 @@ public class Bullet extends AbstractAtom implements Atom { private void drawU1(UGraphic ug) { final HColor color = fontConfiguration.getColor(); - ug = ug.apply(new UChangeColor(color)).apply(new UChangeBackColor(color)).apply(new UStroke(0)); + ug = ug.apply(color).apply(color.bg()).apply(new UStroke(0)); final double width = getWidth(ug.getStringBounder()); ug = ug.apply(UTranslate.dx(width - 5)); ug.draw(new URectangle(3.5, 3.5)); diff --git a/src/net/sourceforge/plantuml/cucadiagram/EntityPort.java b/src/net/sourceforge/plantuml/cucadiagram/EntityPort.java index 67eaa89b8..66597fd6c 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/EntityPort.java +++ b/src/net/sourceforge/plantuml/cucadiagram/EntityPort.java @@ -35,44 +35,41 @@ */ package net.sourceforge.plantuml.cucadiagram; +import net.sourceforge.plantuml.svek.Ports; + public class EntityPort { - private final String uid; - private final String portName; + private final String entityUid; + private final String portId; - public EntityPort(String uid, String portName) { - this.uid = uid; - this.portName = portName; + public EntityPort(String entityUid, String portName) { + this.entityUid = entityUid; + this.portId = portName == null ? null : Ports.encodePortNameToId(portName); } public String getFullString() { - if (portName != null) { - return uid + ":" + portName; + if (portId != null) { + return entityUid + ":" + portId; } - return uid; + return entityUid; } private boolean isShielded() { - return uid.endsWith(":h"); + return entityUid.endsWith(":h"); } public String getPrefix() { if (isShielded()) { - return uid.substring(0, uid.length() - 2); + return entityUid.substring(0, entityUid.length() - 2); } - return uid; + return entityUid; } public boolean startsWith(String centerId) { - return uid.startsWith(centerId); + return entityUid.startsWith(centerId); } public boolean equalsId(EntityPort other) { - return this.uid.equals(other.uid); + return this.entityUid.equals(other.entityUid); } - - // private String getPortName() { - // return portName; - // } - } diff --git a/src/net/sourceforge/plantuml/cucadiagram/GroupRoot.java b/src/net/sourceforge/plantuml/cucadiagram/GroupRoot.java index 92fee6cd1..4ed8b28c8 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/GroupRoot.java +++ b/src/net/sourceforge/plantuml/cucadiagram/GroupRoot.java @@ -286,4 +286,8 @@ public class GroupRoot implements IGroup { public boolean isAloneAndUnlinked() { throw new UnsupportedOperationException(); } + + public void setThisIsTogether() { + throw new UnsupportedOperationException(); + } } diff --git a/src/net/sourceforge/plantuml/cucadiagram/IEntity.java b/src/net/sourceforge/plantuml/cucadiagram/IEntity.java index 19c9d82c0..85fd0f845 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/IEntity.java +++ b/src/net/sourceforge/plantuml/cucadiagram/IEntity.java @@ -97,5 +97,7 @@ public interface IEntity extends SpecificBackcolorable, Hideable, Removeable, Li public boolean isAloneAndUnlinked(); + public void setThisIsTogether(); + } diff --git a/src/net/sourceforge/plantuml/cucadiagram/LinkConstraint.java b/src/net/sourceforge/plantuml/cucadiagram/LinkConstraint.java index c174a292c..e79f85d8b 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/LinkConstraint.java +++ b/src/net/sourceforge/plantuml/cucadiagram/LinkConstraint.java @@ -43,7 +43,6 @@ import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -86,7 +85,7 @@ public class LinkConstraint { if (x2 == 0 && y2 == 0) { return; } - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK); // ug.apply(new UTranslate(x1, y1)).draw(new URectangle(10, 10)); // ug.apply(new UTranslate(x2, y2)).draw(new URectangle(10, 10)); diff --git a/src/net/sourceforge/plantuml/cucadiagram/TextBlockMap.java b/src/net/sourceforge/plantuml/cucadiagram/TextBlockMap.java index 4e0fea1f0..4bd7cf941 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/TextBlockMap.java +++ b/src/net/sourceforge/plantuml/cucadiagram/TextBlockMap.java @@ -53,8 +53,6 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.svek.Ports; import net.sourceforge.plantuml.svek.WithPorts; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -189,7 +187,7 @@ public class TextBlockMap extends AbstractTextBlock implements WithPorts { public void drawU(UGraphic ug) { final UShape point = new UEllipse(getDiameter(), getDiameter()); - ug = ug.apply(new UChangeColor(color)).apply(new UChangeBackColor(color)); + ug = ug.apply(color).apply(color.bg()); ug.draw(point); } diff --git a/src/net/sourceforge/plantuml/cucadiagram/dot/CucaDiagramTxtMaker.java b/src/net/sourceforge/plantuml/cucadiagram/dot/CucaDiagramTxtMaker.java index 61de74ea4..f3e0fba15 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/dot/CucaDiagramTxtMaker.java +++ b/src/net/sourceforge/plantuml/cucadiagram/dot/CucaDiagramTxtMaker.java @@ -110,19 +110,20 @@ public final class CucaDiagramTxtMaker { for (Link link : diagram.getLinks()) { final Block b1 = blocks.get(link.getEntity1()); final Block b2 = blocks.get(link.getEntity2()); - paths.add(new Path(b1, b2, null, link.getLength())); + paths.add(new Path(b1, b2, null, link.getLength(), link.isInvis())); } solver.solve(root, paths); for (Path p : paths) { + if (p.isInvis()) { + continue; + } p.getDotPath().draw(globalUg.getCharArea(), getXPixelPerChar(), getYPixelPerChar()); } for (IEntity ent : diagram.getLeafsvalues()) { final Block b = blocks.get(ent); final Point2D p = b.getPosition(); - printClass( - ent, - (UGraphicTxt) globalUg.apply(new UTranslate(p.getX() / getXPixelPerChar(), p.getY() - / getYPixelPerChar()))); + printClass(ent, (UGraphicTxt) globalUg + .apply(new UTranslate(p.getX() / getXPixelPerChar(), p.getY() / getYPixelPerChar()))); } } diff --git a/src/net/sourceforge/plantuml/cucadiagram/dot/GraphvizUtils.java b/src/net/sourceforge/plantuml/cucadiagram/dot/GraphvizUtils.java index 863121799..a7bdd1f6f 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/dot/GraphvizUtils.java +++ b/src/net/sourceforge/plantuml/cucadiagram/dot/GraphvizUtils.java @@ -38,8 +38,6 @@ package net.sourceforge.plantuml.cucadiagram.dot; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; diff --git a/src/net/sourceforge/plantuml/cucadiagram/entity/EntityImpl.java b/src/net/sourceforge/plantuml/cucadiagram/entity/EntityImpl.java index 0381f6085..d79d57ffa 100644 --- a/src/net/sourceforge/plantuml/cucadiagram/entity/EntityImpl.java +++ b/src/net/sourceforge/plantuml/cucadiagram/entity/EntityImpl.java @@ -45,15 +45,11 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.swing.text.html.HTMLDocument.HTMLReader.IsindexAction; - import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.Guillemet; import net.sourceforge.plantuml.ISkinParam; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; -import net.sourceforge.plantuml.creole.CreoleMode; import net.sourceforge.plantuml.cucadiagram.Bodier; import net.sourceforge.plantuml.cucadiagram.Code; import net.sourceforge.plantuml.cucadiagram.Display; @@ -797,5 +793,12 @@ final public class EntityImpl implements ILeaf, IGroup { public IGroup getOriginalGroup() { return originalGroup; } + + private boolean together; + + public void setThisIsTogether() { + this.together = true; + // System.err.println("setThisIsTogether"); + } } diff --git a/src/net/sourceforge/plantuml/cute/Cheese.java b/src/net/sourceforge/plantuml/cute/Cheese.java index 07ffd6ce1..480f41817 100644 --- a/src/net/sourceforge/plantuml/cute/Cheese.java +++ b/src/net/sourceforge/plantuml/cute/Cheese.java @@ -71,7 +71,6 @@ public class Cheese implements CuteShape { final Point2D ptA = balloon.getPointOnCircle(angle1); final Point2D ptB = balloon.getPointOnCircle(angle2); - // balloon.drawU(ug.apply(new UChangeBackColor(null)).apply(new UChangeColor(HtmlColorUtils.BLACK))); final UPath path = new UPath(); final Point2D ptA0; if (radius.hasCurvation()) { @@ -116,12 +115,6 @@ public class Cheese implements CuteShape { path.closePath(); ug.draw(path); - // if (startAngle.hasCurvation()) { - // insideA.drawU(ug.apply(new UChangeColor(HtmlColorUtils.BLACK)).apply(new UChangeBackColor(null))); - // } - // if (endAngle.hasCurvation()) { - // insideB.drawU(ug.apply(new UChangeColor(HtmlColorUtils.BLACK)).apply(new UChangeBackColor(null))); - // } } public CuteShape rotateZoom(RotationZoom other) { diff --git a/src/net/sourceforge/plantuml/cute/CutePath.java b/src/net/sourceforge/plantuml/cute/CutePath.java index ffd3f0f94..c2d314364 100644 --- a/src/net/sourceforge/plantuml/cute/CutePath.java +++ b/src/net/sourceforge/plantuml/cute/CutePath.java @@ -40,10 +40,9 @@ import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPath; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class CutePath { @@ -141,7 +140,7 @@ public class CutePath { for (int i = 0; i < arcs.size(); i++) { final BetweenCorners betweenCorners = new BetweenCorners(getCorner(i), getCorner(i + 1), arcs.get(i) .getTension()); - betweenCorners.debugMe(ug.apply(new UChangeColor(HColorUtils.BLACK)).apply(new UChangeBackColor(null))); + betweenCorners.debugMe(ug.apply(HColorUtils.BLACK).apply(new HColorNone().bg())); } } diff --git a/src/net/sourceforge/plantuml/cute/PositionnedImpl.java b/src/net/sourceforge/plantuml/cute/PositionnedImpl.java index 45dda3277..aa7b1febe 100644 --- a/src/net/sourceforge/plantuml/cute/PositionnedImpl.java +++ b/src/net/sourceforge/plantuml/cute/PositionnedImpl.java @@ -36,8 +36,6 @@ package net.sourceforge.plantuml.cute; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -84,7 +82,7 @@ public class PositionnedImpl implements Positionned { } private UGraphic applyColor(UGraphic ug) { - return ug.apply(new UChangeBackColor(color)).apply(new UChangeColor(color)); + return ug.apply(color.bg()).apply(color); } diff --git a/src/net/sourceforge/plantuml/cute/Triangle.java b/src/net/sourceforge/plantuml/cute/Triangle.java index 0623dec86..c25a95dee 100644 --- a/src/net/sourceforge/plantuml/cute/Triangle.java +++ b/src/net/sourceforge/plantuml/cute/Triangle.java @@ -47,9 +47,6 @@ public class Triangle implements CuteShape { private Triangle(CutePath cutePath) { this.cutePath = cutePath; - // if (points.size() != 3) { - // throw new IllegalArgumentException(); - // } } public Triangle rotateZoom(final RotationZoom angle) { @@ -61,9 +58,5 @@ public class Triangle implements CuteShape { public void drawU(UGraphic ug) { cutePath.drawU(ug); - // ug = ug.apply(new UChangeBackColor(null)).apply(new UChangeColor(HtmlColorUtils.BLACK)); - // cutePath.withNoTension().drawU( - // ug.apply(new UChangeBackColor(null)).apply(new UChangeColor(HtmlColorUtils.BLACK))); - } } diff --git a/src/net/sourceforge/plantuml/descdiagram/BoxedCharacter.java b/src/net/sourceforge/plantuml/descdiagram/BoxedCharacter.java index 480e42d74..6ea9a7448 100644 --- a/src/net/sourceforge/plantuml/descdiagram/BoxedCharacter.java +++ b/src/net/sourceforge/plantuml/descdiagram/BoxedCharacter.java @@ -42,13 +42,12 @@ import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.ugraphic.UCenteredCharacter; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class BoxedCharacter extends AbstractTextBlock implements TextBlock { @@ -70,12 +69,15 @@ public class BoxedCharacter extends AbstractTextBlock implements TextBlock { public void drawU(UGraphic ug) { if (circle != null) { - ug = ug.apply(new UChangeColor(circle)); + ug = ug.apply(circle); + } + if (innerCircle == null) { + ug = ug.apply(new HColorNone().bg()); + } else { + ug = ug.apply(innerCircle.bg()); } - // final HtmlColor back = ug.getParam().getBackcolor(); - ug = ug.apply(new UChangeBackColor(innerCircle)); ug.draw(new URectangle(2 * radius, 2 * radius)); - ug = ug.apply(new UChangeColor(fontColor)); + ug = ug.apply(fontColor); ug = ug.apply(new UTranslate(radius, radius)); ug.draw(new UCenteredCharacter(c.charAt(0), font)); } diff --git a/src/net/sourceforge/plantuml/descdiagram/CommandCreateDomain.java b/src/net/sourceforge/plantuml/descdiagram/CommandCreateDomain.java index 440cea2d2..a33e11690 100644 --- a/src/net/sourceforge/plantuml/descdiagram/CommandCreateDomain.java +++ b/src/net/sourceforge/plantuml/descdiagram/CommandCreateDomain.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.descdiagram; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagram.java b/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagram.java index 7bcba43a6..e7ef99f5e 100644 --- a/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagram.java +++ b/src/net/sourceforge/plantuml/descdiagram/DescriptionDiagram.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.descdiagram; import net.sourceforge.plantuml.ISkinSimple; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; diff --git a/src/net/sourceforge/plantuml/descdiagram/EntityImageDesignedDomain.java b/src/net/sourceforge/plantuml/descdiagram/EntityImageDesignedDomain.java index 961f89cbb..1c3bfd65b 100644 --- a/src/net/sourceforge/plantuml/descdiagram/EntityImageDesignedDomain.java +++ b/src/net/sourceforge/plantuml/descdiagram/EntityImageDesignedDomain.java @@ -57,8 +57,6 @@ import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.PlacementStrategyY1Y2; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULayoutGroup; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -128,12 +126,12 @@ public class EntityImageDesignedDomain extends AbstractEntityImage { final URectangle rect = new URectangle(widthTotal, heightTotal); URectangle rect2 = new URectangle(4, heightTotal); - ug = ug.apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.designedBorder))); + ug = ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.designedBorder)); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.designedBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); if (url != null) { ug.startUrl(url); } diff --git a/src/net/sourceforge/plantuml/descdiagram/EntityImageDomain.java b/src/net/sourceforge/plantuml/descdiagram/EntityImageDomain.java index 5c694241f..5882ff700 100644 --- a/src/net/sourceforge/plantuml/descdiagram/EntityImageDomain.java +++ b/src/net/sourceforge/plantuml/descdiagram/EntityImageDomain.java @@ -57,8 +57,6 @@ import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.PlacementStrategyY1Y2; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULayoutGroup; @@ -130,12 +128,12 @@ public class EntityImageDomain extends AbstractEntityImage { final double heightTotal = dimTotal.getHeight(); final URectangle rect = new URectangle(widthTotal, heightTotal); - ug = ug.apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.domainBorder))); + ug = ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.domainBorder)); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.domainBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); if (url != null) { ug.startUrl(url); } diff --git a/src/net/sourceforge/plantuml/descdiagram/EntityImageMachine.java b/src/net/sourceforge/plantuml/descdiagram/EntityImageMachine.java index 67c81b37b..4df97fd46 100644 --- a/src/net/sourceforge/plantuml/descdiagram/EntityImageMachine.java +++ b/src/net/sourceforge/plantuml/descdiagram/EntityImageMachine.java @@ -57,8 +57,6 @@ import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.PlacementStrategyY1Y2; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULayoutGroup; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -127,12 +125,12 @@ public class EntityImageMachine extends AbstractEntityImage { final URectangle rect = new URectangle(widthTotal, heightTotal); URectangle rect2 = new URectangle(4, heightTotal); - ug = ug.apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.machineBorder))); + ug = ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.machineBorder)); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.machineBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); if (url != null) { ug.startUrl(url); } diff --git a/src/net/sourceforge/plantuml/descdiagram/EntityImageRequirement.java b/src/net/sourceforge/plantuml/descdiagram/EntityImageRequirement.java index d7f581160..4f3ba285b 100644 --- a/src/net/sourceforge/plantuml/descdiagram/EntityImageRequirement.java +++ b/src/net/sourceforge/plantuml/descdiagram/EntityImageRequirement.java @@ -60,8 +60,6 @@ import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine; import net.sourceforge.plantuml.ugraphic.TextBlockInEllipse; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UHorizontalLine; @@ -123,12 +121,12 @@ public class EntityImageRequirement extends AbstractEntityImage { if (linecolor == null) { linecolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.requirementBorder); } - ug = ug.apply(new UChangeColor(linecolor)); + ug = ug.apply(linecolor); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.requirementBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); final UGraphic ug2 = new MyUGraphicEllipse(ug, 0, 0, ellipse.getUEllipse()); ellipse.drawU(ug2); diff --git a/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimate.java b/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimate.java index 54d5d6144..87ccc72cb 100644 --- a/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimate.java +++ b/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimate.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.descdiagram.command; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.SingleLineCommand2; diff --git a/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimateMultilines.java b/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimateMultilines.java index d0a1891ec..32c4db2a3 100644 --- a/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimateMultilines.java +++ b/src/net/sourceforge/plantuml/descdiagram/command/CommandArchimateMultilines.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.descdiagram.command; import net.sourceforge.plantuml.FontParam; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; diff --git a/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementFull.java b/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementFull.java index f9a80895a..815dc0885 100644 --- a/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementFull.java +++ b/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementFull.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.descdiagram.command; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; diff --git a/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementMultilines.java b/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementMultilines.java index d306e47b0..6d55cff19 100644 --- a/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementMultilines.java +++ b/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementMultilines.java @@ -38,7 +38,6 @@ package net.sourceforge.plantuml.descdiagram.command; import java.util.List; import net.sourceforge.plantuml.FontParam; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; diff --git a/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementParenthesis.java b/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementParenthesis.java index 135891a45..463a8a8f6 100644 --- a/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementParenthesis.java +++ b/src/net/sourceforge/plantuml/descdiagram/command/CommandCreateElementParenthesis.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.descdiagram.command; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; @@ -59,7 +58,6 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf; import net.sourceforge.plantuml.cucadiagram.Ident; import net.sourceforge.plantuml.cucadiagram.LeafType; import net.sourceforge.plantuml.cucadiagram.Stereotype; -import net.sourceforge.plantuml.descdiagram.DescriptionDiagram; import net.sourceforge.plantuml.graphic.USymbol; import net.sourceforge.plantuml.graphic.color.ColorParser; import net.sourceforge.plantuml.graphic.color.ColorType; diff --git a/src/net/sourceforge/plantuml/descdiagram/command/CommandPackageWithUSymbol.java b/src/net/sourceforge/plantuml/descdiagram/command/CommandPackageWithUSymbol.java index 8473e5dac..9bc7ad00c 100644 --- a/src/net/sourceforge/plantuml/descdiagram/command/CommandPackageWithUSymbol.java +++ b/src/net/sourceforge/plantuml/descdiagram/command/CommandPackageWithUSymbol.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.descdiagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; @@ -73,62 +72,60 @@ public class CommandPackageWithUSymbol extends SingleLineCommand2\\>)") // - )), // - RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("as"), // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("CODE1", "([^#%s{}]+)") // - ), // - new RegexConcat( // - new RegexLeaf("CODE2", "([^#%s{}%g]+)"), // - new RegexOptional( // - new RegexConcat( // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("STEREOTYPE2", "(\\<\\<.+\\>\\>)") // - )), // - RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("as"), // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("DISPLAY2", "([%g].+?[%g])") // - ), // - new RegexConcat( // - new RegexLeaf("DISPLAY3", "([^#%s{}%g]+)"), // - new RegexOptional( // - new RegexConcat( // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("STEREOTYPE3", "(\\<\\<.+\\>\\>)") // - )), // - RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("as"), // - RegexLeaf.spaceOneOrMore(), // - new RegexLeaf("CODE3", "([^#%s{}%g]+)") // - ), // - new RegexLeaf("CODE8", "([%g][^%g]+[%g])"), // - new RegexLeaf("CODE9", "([^#%s{}%g]*)") // + return RegexConcat.build(CommandPackageWithUSymbol.class.getName(), RegexLeaf.start(), // + new RegexLeaf("SYMBOL", + "(package|rectangle|node|artifact|folder|file|frame|cloud|database|storage|component|card|together|queue|stack)"), // + RegexLeaf.spaceOneOrMore(), // + new RegexOr(// + new RegexConcat( // + new RegexLeaf("DISPLAY1", "([%g].+?[%g])"), // + new RegexOptional( // + new RegexConcat( // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("STEREOTYPE1", "(\\<\\<.+\\>\\>)") // + )), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("as"), // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("CODE1", "([^#%s{}]+)") // ), // - RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), // - RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("TAGS", Stereotag.pattern() + "?"), // - RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("URL", "(" + UrlBuilder.getRegexp() + ")?"), // - RegexLeaf.spaceZeroOrMore(), // - color().getRegex(), // - RegexLeaf.spaceZeroOrMore(), // - new RegexLeaf("\\{"), RegexLeaf.end()); + new RegexConcat( // + new RegexLeaf("CODE2", "([^#%s{}%g]+)"), // + new RegexOptional( // + new RegexConcat( // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("STEREOTYPE2", "(\\<\\<.+\\>\\>)") // + )), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("as"), // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("DISPLAY2", "([%g].+?[%g])") // + ), // + new RegexConcat( // + new RegexLeaf("DISPLAY3", "([^#%s{}%g]+)"), // + new RegexOptional( // + new RegexConcat( // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("STEREOTYPE3", "(\\<\\<.+\\>\\>)") // + )), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("as"), // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("CODE3", "([^#%s{}%g]+)") // + ), // + new RegexLeaf("CODE8", "([%g][^%g]+[%g])"), // + new RegexLeaf("CODE9", "([^#%s{}%g]*)") // + ), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("STEREOTYPE", "(\\<\\<.*\\>\\>)?"), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("TAGS", Stereotag.pattern() + "?"), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("URL", "(" + UrlBuilder.getRegexp() + ")?"), // + RegexLeaf.spaceZeroOrMore(), // + color().getRegex(), // + RegexLeaf.spaceZeroOrMore(), // + new RegexLeaf("\\{"), RegexLeaf.end()); } private static ColorParser color() { @@ -159,7 +156,11 @@ public class CommandPackageWithUSymbol extends SingleLineCommand2 { diff --git a/src/net/sourceforge/plantuml/mindmap/CommandMindMapTabulation.java b/src/net/sourceforge/plantuml/mindmap/CommandMindMapTabulation.java index 75562509d..7915d3e21 100644 --- a/src/net/sourceforge/plantuml/mindmap/CommandMindMapTabulation.java +++ b/src/net/sourceforge/plantuml/mindmap/CommandMindMapTabulation.java @@ -41,8 +41,10 @@ import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; +import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; import net.sourceforge.plantuml.cucadiagram.Display; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class CommandMindMapTabulation extends SingleLineCommand2 { @@ -53,6 +55,7 @@ public class CommandMindMapTabulation extends SingleLineCommand2 static IRegex getRegexConcat() { return RegexConcat.build(CommandMindMapTabulation.class.getName(), RegexLeaf.start(), // new RegexLeaf("TYPE", "([ \t]*[*])"), // + new RegexOptional(new RegexLeaf("BACKCOLOR", "\\[(#\\w+)\\]")), // new RegexLeaf("SHAPE", "(_)?"), // RegexLeaf.spaceOneOrMore(), // new RegexLeaf("LABEL", "([^%s].*)"), RegexLeaf.end()); @@ -62,7 +65,12 @@ public class CommandMindMapTabulation extends SingleLineCommand2 protected CommandExecutionResult executeArg(MindMapDiagram diagram, LineLocation location, RegexResult arg) { final String type = arg.get("TYPE", 0); final String label = arg.get("LABEL", 0); - return diagram.addIdea(null, type.length() - 1, Display.getWithNewlines(label), + final String stringColor = arg.get("BACKCOLOR", 0); + HColor backColor = null; + if (stringColor != null) { + backColor = diagram.getSkinParam().getIHtmlColorSet().getColorIfValid(stringColor); + } + return diagram.addIdea(backColor, type.length() - 1, Display.getWithNewlines(label), IdeaShape.fromDesc(arg.get("SHAPE", 0))); } diff --git a/src/net/sourceforge/plantuml/mindmap/FingerImpl.java b/src/net/sourceforge/plantuml/mindmap/FingerImpl.java index cfccf470f..08039f2aa 100644 --- a/src/net/sourceforge/plantuml/mindmap/FingerImpl.java +++ b/src/net/sourceforge/plantuml/mindmap/FingerImpl.java @@ -61,7 +61,6 @@ import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleBuilder; import net.sourceforge.plantuml.style.StyleSignature; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPath; @@ -152,7 +151,7 @@ public class FingerImpl implements Finger, UDrawable { - getX12(); final Point2D p2 = new Point2D.Double(x, stp.getY()); child.drawU(ug.apply(new UTranslate(p2))); - drawLine(ug.apply(new UChangeColor(getLinkColor())).apply(getUStroke()), p1, p2); + drawLine(ug.apply(getLinkColor()).apply(getUStroke()), p1, p2); } } diff --git a/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java b/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java index c6472f20d..0b306498b 100644 --- a/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java +++ b/src/net/sourceforge/plantuml/mindmap/MindMapDiagram.java @@ -49,7 +49,6 @@ import net.sourceforge.plantuml.Scale; import net.sourceforge.plantuml.UmlDiagram; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.command.CommandExecutionResult; -import net.sourceforge.plantuml.command.regex.Matcher2; import net.sourceforge.plantuml.core.DiagramDescription; import net.sourceforge.plantuml.core.ImageData; import net.sourceforge.plantuml.cucadiagram.Display; @@ -63,7 +62,6 @@ import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; -import net.sourceforge.plantuml.wbs.WBSDiagram; public class MindMapDiagram extends UmlDiagram { diff --git a/src/net/sourceforge/plantuml/nwdiag/GridTextBlockDecorated.java b/src/net/sourceforge/plantuml/nwdiag/GridTextBlockDecorated.java index 67b481f4b..b67fffeeb 100644 --- a/src/net/sourceforge/plantuml/nwdiag/GridTextBlockDecorated.java +++ b/src/net/sourceforge/plantuml/nwdiag/GridTextBlockDecorated.java @@ -38,7 +38,6 @@ import java.util.Collection; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -118,7 +117,7 @@ public class GridTextBlockDecorated extends GridTextBlockSimple { rect.setDeltaShadow(1.0); UGraphic ug2 = ug.apply(new UTranslate(xmin, y)); if (network != null && network.getColor() != null) { - ug2 = ug2.apply(new UChangeBackColor(network.getColor())); + ug2 = ug2.apply(network.getColor().bg()); } ug2.draw(rect); y += lineHeight(stringBounder, i); diff --git a/src/net/sourceforge/plantuml/nwdiag/LinkedElement.java b/src/net/sourceforge/plantuml/nwdiag/LinkedElement.java index 1964ea494..83c71f6c0 100644 --- a/src/net/sourceforge/plantuml/nwdiag/LinkedElement.java +++ b/src/net/sourceforge/plantuml/nwdiag/LinkedElement.java @@ -41,7 +41,6 @@ import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -91,7 +90,7 @@ public class LinkedElement { drawCenter(ug, box, xMiddle, yMiddle); final HColor color = ColorParam.activityBorder.getDefaultValue(); - ug = ug.apply(new UChangeColor(color)); + ug = ug.apply(color); drawHLine(ug, xMiddle, GridTextBlockDecorated.NETWORK_THIN, y1); if (ad2 != null) { drawHLine(ug, xMiddle, y2, height); diff --git a/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java b/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java index e23decd1a..b49c6b86c 100644 --- a/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java +++ b/src/net/sourceforge/plantuml/nwdiag/NwDiagram.java @@ -61,8 +61,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEmpty; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; @@ -253,8 +251,8 @@ public class NwDiagram extends UmlDiagram { } deltaX += 5; - grid.drawU(ug.apply(new UChangeColor(ColorParam.activityBorder.getDefaultValue())) - .apply(new UChangeBackColor(ColorParam.activityBackground.getDefaultValue())) + grid.drawU(ug.apply(ColorParam.activityBorder.getDefaultValue()) + .apply(ColorParam.activityBackground.getDefaultValue().bg()) .apply(new UTranslate(deltaX, deltaY))); final Dimension2D dimGrid = grid.calculateDimension(stringBounder); diff --git a/src/net/sourceforge/plantuml/objectdiagram/AbstractClassOrObjectDiagram.java b/src/net/sourceforge/plantuml/objectdiagram/AbstractClassOrObjectDiagram.java index b36bbb290..875fdc996 100644 --- a/src/net/sourceforge/plantuml/objectdiagram/AbstractClassOrObjectDiagram.java +++ b/src/net/sourceforge/plantuml/objectdiagram/AbstractClassOrObjectDiagram.java @@ -39,8 +39,6 @@ import java.util.ArrayList; import java.util.List; import net.sourceforge.plantuml.ISkinSimple; -import net.sourceforge.plantuml.OptionFlags; -import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.cucadiagram.Code; diff --git a/src/net/sourceforge/plantuml/objectdiagram/command/CommandAddData.java b/src/net/sourceforge/plantuml/objectdiagram/command/CommandAddData.java index 05eafc91a..7ae3b7a9e 100644 --- a/src/net/sourceforge/plantuml/objectdiagram/command/CommandAddData.java +++ b/src/net/sourceforge/plantuml/objectdiagram/command/CommandAddData.java @@ -42,7 +42,6 @@ import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; import net.sourceforge.plantuml.command.regex.RegexResult; -import net.sourceforge.plantuml.cucadiagram.Code; import net.sourceforge.plantuml.cucadiagram.IEntity; import net.sourceforge.plantuml.objectdiagram.AbstractClassOrObjectDiagram; import net.sourceforge.plantuml.skin.VisibilityModifier; diff --git a/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObject.java b/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObject.java index 152f43e72..ec6a581da 100644 --- a/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObject.java +++ b/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObject.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.objectdiagram.command; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObjectMultilines.java b/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObjectMultilines.java index 3295b3a82..7941695d4 100644 --- a/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObjectMultilines.java +++ b/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateEntityObjectMultilines.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.objectdiagram.command; import net.sourceforge.plantuml.FontParam; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringLocated; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.command.BlocLines; diff --git a/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateMap.java b/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateMap.java index e298b61b9..150015b64 100644 --- a/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateMap.java +++ b/src/net/sourceforge/plantuml/objectdiagram/command/CommandCreateMap.java @@ -60,7 +60,6 @@ import net.sourceforge.plantuml.cucadiagram.Stereotype; import net.sourceforge.plantuml.graphic.color.ColorParser; import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.objectdiagram.AbstractClassOrObjectDiagram; -import net.sourceforge.plantuml.style.StyleBuilder; public class CommandCreateMap extends CommandMultilines2 { diff --git a/src/net/sourceforge/plantuml/openiconic/OpenIcon.java b/src/net/sourceforge/plantuml/openiconic/OpenIcon.java index 8c65b8a57..a883e109a 100644 --- a/src/net/sourceforge/plantuml/openiconic/OpenIcon.java +++ b/src/net/sourceforge/plantuml/openiconic/OpenIcon.java @@ -50,7 +50,6 @@ import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.openiconic.data.DummyIcon; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -135,7 +134,7 @@ public class OpenIcon { public TextBlock asTextBlock(final HColor color, final double factor) { return new AbstractTextBlock() { public void drawU(UGraphic ug) { - svgPath.drawMe(ug.apply(new UChangeColor(color)), factor); + svgPath.drawMe(ug.apply(color), factor); } public Dimension2D calculateDimension(StringBounder stringBounder) { diff --git a/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java b/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java index a2dadef38..48897de41 100644 --- a/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java +++ b/src/net/sourceforge/plantuml/openiconic/PSystemOpenIconic.java @@ -69,7 +69,7 @@ public class PSystemOpenIconic extends AbstractPSystem { // UGraphic2 ug = fileFormat.createUGraphic(dim); // ug = (UGraphic2) ug.apply(new UTranslate(10, 10)); - // // ug = ug.apply(new UChangeColor(HtmlColorUtils.BLACK)); + // // ug = ug.apply(UChangeColor.nnn(HtmlColorUtils.BLACK)); // // ug.draw(new URectangle(7, 6)); // icon.asTextBlock(HtmlColorUtils.BLACK, factor).drawU(ug); // ug.writeImageTOBEMOVED(os, null, 96); diff --git a/src/net/sourceforge/plantuml/png/PngIOMetadata.java b/src/net/sourceforge/plantuml/png/PngIOMetadata.java index dbfcc5836..efa7afffd 100644 --- a/src/net/sourceforge/plantuml/png/PngIOMetadata.java +++ b/src/net/sourceforge/plantuml/png/PngIOMetadata.java @@ -45,10 +45,10 @@ import javax.imageio.ImageIO; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; -import net.sourceforge.plantuml.Log; - import com.sun.imageio.plugins.png.PNGMetadata; +import net.sourceforge.plantuml.Log; + public class PngIOMetadata { private static final String copyleft = "Generated by http://plantuml.com"; diff --git a/src/net/sourceforge/plantuml/png/PngTitler.java b/src/net/sourceforge/plantuml/png/PngTitler.java index 1f946ea76..4776a2e5a 100644 --- a/src/net/sourceforge/plantuml/png/PngTitler.java +++ b/src/net/sourceforge/plantuml/png/PngTitler.java @@ -39,7 +39,6 @@ import java.awt.Font; import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.ISkinSimple; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.SkinParam; import net.sourceforge.plantuml.SpriteContainerEmpty; import net.sourceforge.plantuml.cucadiagram.Display; diff --git a/src/net/sourceforge/plantuml/posimo/Frame.java b/src/net/sourceforge/plantuml/posimo/Frame.java index 6c9a7f6ca..a334dfd05 100644 --- a/src/net/sourceforge/plantuml/posimo/Frame.java +++ b/src/net/sourceforge/plantuml/posimo/Frame.java @@ -50,8 +50,6 @@ import net.sourceforge.plantuml.skin.Context2D; import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; @@ -59,6 +57,7 @@ import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class Frame implements Component { @@ -83,8 +82,8 @@ public class Frame implements Component { public void drawU(UGraphic ug, Area area, Context2D context) { final Dimension2D dimensionToUse = area.getDimensionToUse(); final HColor lineColor = rose.getHtmlColor(skinParam, ColorParam.packageBorder); - ug = ug.apply(new UChangeColor(lineColor)); - ug = ug.apply(new UChangeBackColor(null)); + ug = ug.apply(lineColor); + ug = ug.apply(new HColorNone().bg()); ug.apply(new UStroke(1.4)).draw(new URectangle(dimensionToUse.getWidth(), dimensionToUse.getHeight())); final TextBlock textBlock = createTextBloc(); diff --git a/src/net/sourceforge/plantuml/posimo/Path.java b/src/net/sourceforge/plantuml/posimo/Path.java index 60621d237..3d59ad346 100644 --- a/src/net/sourceforge/plantuml/posimo/Path.java +++ b/src/net/sourceforge/plantuml/posimo/Path.java @@ -42,18 +42,20 @@ public class Path { private final Block end; private final int length; private DotPath dotPath; + private final boolean invis; public Path(Block start, Block end, Label label) { - this(start, end, label, 2); + this(start, end, label, 2, false); } - public Path(Block start, Block end, Label label, int length) { + public Path(Block start, Block end, Label label, int length, boolean invis) { if (start == null || end == null) { throw new IllegalArgumentException(); } if (length < 1) { throw new IllegalArgumentException("length=" + length); } + this.invis = invis; this.start = start; this.end = end; this.label = label; @@ -95,4 +97,8 @@ public class Path { return length; } + public final boolean isInvis() { + return invis; + } + } diff --git a/src/net/sourceforge/plantuml/posimo/PathDrawerInterface.java b/src/net/sourceforge/plantuml/posimo/PathDrawerInterface.java index 72380a539..7b3a0853d 100644 --- a/src/net/sourceforge/plantuml/posimo/PathDrawerInterface.java +++ b/src/net/sourceforge/plantuml/posimo/PathDrawerInterface.java @@ -45,8 +45,6 @@ import net.sourceforge.plantuml.cucadiagram.LinkDecor; import net.sourceforge.plantuml.cucadiagram.LinkStyle; import net.sourceforge.plantuml.cucadiagram.LinkType; import net.sourceforge.plantuml.skin.rose.Rose; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -133,14 +131,14 @@ public class PathDrawerInterface implements PathDrawer { // final Map all = dotPath.somePoints(); // final Point2D p = getFarest(outPoint, inPoint, all.keySet()); // -// ug = ug.apply(new UChangeBackColor(rose.getHtmlColor(param, ColorParam.background))); -// ug = ug.apply(new UChangeColor(rose.getHtmlColor(param, ColorParam.classBorder))); +// ug = ug.apply(UChangeBackColor.nnn(rose.getHtmlColor(param, ColorParam.background))); +// ug = ug.apply(UChangeColor.nnn(rose.getHtmlColor(param, ColorParam.classBorder))); // // decor.drawDecor(ug, p, all.get(p)); // } throw new UnsupportedOperationException(); -// ug = ug.apply(new UChangeColor(rose.getHtmlColor(param, ColorParam.classBorder))); +// ug = ug.apply(UChangeColor.nnn(rose.getHtmlColor(param, ColorParam.classBorder))); // if (linkType.isDashed()) { // goDash(ug); // } @@ -216,8 +214,8 @@ public class PathDrawerInterface implements PathDrawer { } private Point2D drawSquare(UGraphic ug, double centerX, double centerY) { - ug = ug.apply(new UChangeBackColor(rose.getHtmlColor(param, ColorParam.classBackground))); - ug = ug.apply(new UChangeColor(rose.getHtmlColor(param, ColorParam.classBorder))); + ug = ug.apply(rose.getHtmlColor(param, ColorParam.classBackground).bg()); + ug = ug.apply(rose.getHtmlColor(param, ColorParam.classBorder)); final double width = 10; final double height = 10; ug.apply(new UTranslate(centerX - width / 2, centerY - height / 2)).draw(new URectangle(width, height)); @@ -225,8 +223,8 @@ public class PathDrawerInterface implements PathDrawer { } Point2D drawExtends(UGraphic ug, double x, double y, double theta) { - ug = ug.apply(new UChangeBackColor(rose.getHtmlColor(param, ColorParam.background))); - ug = ug.apply(new UChangeColor(rose.getHtmlColor(param, ColorParam.classBorder))); + ug = ug.apply(rose.getHtmlColor(param, ColorParam.background).bg()); + ug = ug.apply(rose.getHtmlColor(param, ColorParam.classBorder)); // final double theta = Math.atan2(-pathPoint.getX() + x, // pathPoint.getY() - y); diff --git a/src/net/sourceforge/plantuml/preproc/Sub.java b/src/net/sourceforge/plantuml/preproc/Sub.java index 8d0a52e5e..b8095c968 100644 --- a/src/net/sourceforge/plantuml/preproc/Sub.java +++ b/src/net/sourceforge/plantuml/preproc/Sub.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.tim.EaterStartsub; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TLineType; import net.sourceforge.plantuml.tim.TMemory; -import net.sourceforge.plantuml.tim.iterator.CodeIteratorImpl; public class Sub { diff --git a/src/net/sourceforge/plantuml/preproc2/Preprocessor.java b/src/net/sourceforge/plantuml/preproc2/Preprocessor.java index a81ff1c5f..2d7da6e90 100644 --- a/src/net/sourceforge/plantuml/preproc2/Preprocessor.java +++ b/src/net/sourceforge/plantuml/preproc2/Preprocessor.java @@ -36,12 +36,9 @@ package net.sourceforge.plantuml.preproc2; import java.io.IOException; -import java.util.Collections; import java.util.List; -import java.util.Set; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.preproc.FileWithSuffix; import net.sourceforge.plantuml.preproc.ReadLine; import net.sourceforge.plantuml.preproc.ReadLineNumbered; diff --git a/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java b/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java index 578dec65a..0662c0e8f 100644 --- a/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java +++ b/src/net/sourceforge/plantuml/preproc2/PreprocessorUtils.java @@ -128,7 +128,7 @@ public class PreprocessorUtils { return ReadLineReader.create(new InputStreamReader(is, charset), url.toString(), s.getLocation()); } catch (IOException e) { e.printStackTrace(); - throw EaterException.located("Cannot open URL", s); + throw EaterException.located("Cannot open URL " + e.getMessage(), s); } } diff --git a/src/net/sourceforge/plantuml/project/GanttArrow.java b/src/net/sourceforge/plantuml/project/GanttArrow.java index a2654d9b7..5d9aa19b8 100644 --- a/src/net/sourceforge/plantuml/project/GanttArrow.java +++ b/src/net/sourceforge/plantuml/project/GanttArrow.java @@ -41,8 +41,6 @@ import net.sourceforge.plantuml.project.core.Task; import net.sourceforge.plantuml.project.core.TaskAttribute; import net.sourceforge.plantuml.project.core.TaskInstant; import net.sourceforge.plantuml.project.timescale.TimeScale; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -80,7 +78,7 @@ public class GanttArrow implements UDrawable { } public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeBackColor(HColorUtils.RED_DARK)).apply(new UChangeColor(HColorUtils.RED_DARK)) + ug = ug.apply(HColorUtils.RED_DARK.bg()).apply(HColorUtils.RED_DARK) .apply(new UStroke(1.5)); final Task draw1 = (Task) source.getMoment(); diff --git a/src/net/sourceforge/plantuml/project/draw/ResourceDraw.java b/src/net/sourceforge/plantuml/project/draw/ResourceDraw.java index b1464637f..962808961 100644 --- a/src/net/sourceforge/plantuml/project/draw/ResourceDraw.java +++ b/src/net/sourceforge/plantuml/project/draw/ResourceDraw.java @@ -45,7 +45,6 @@ import net.sourceforge.plantuml.project.GanttDiagram; import net.sourceforge.plantuml.project.core.Resource; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScale; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -76,7 +75,7 @@ public class ResourceDraw implements UDrawable { HorizontalAlignment.LEFT, new SpriteContainerEmpty()); title.drawU(ug); final ULine line = ULine.hline(timeScale.getEndingPosition(max) - timeScale.getStartingPosition(min)); - ug.apply(new UChangeColor(HColorUtils.BLACK)) + ug.apply(HColorUtils.BLACK) .apply(UTranslate.dy(title.calculateDimension(ug.getStringBounder()).getHeight())).draw(line); for (Wink i = min; i.compareTo(max) <= 0; i = i.increment()) { final int load = gantt.getLoadForResource(res, i); diff --git a/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java b/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java index db6a2a114..90f4b085c 100644 --- a/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java +++ b/src/net/sourceforge/plantuml/project/draw/TaskDrawDiamond.java @@ -44,8 +44,6 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.lang.ComplementColors; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScale; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; @@ -87,7 +85,7 @@ public class TaskDrawDiamond extends AbstractTaskDraw { if (colors != null && colors.isOk()) { return colors.apply(ug); } - return ug.apply(new UChangeColor(HColorUtils.BLACK)).apply(new UChangeBackColor(HColorUtils.BLACK)); + return ug.apply(HColorUtils.BLACK).apply(HColorUtils.BLACK.bg()); } private void drawShape(UGraphic ug) { diff --git a/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java b/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java index b871c1fea..1368bd1c0 100644 --- a/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java +++ b/src/net/sourceforge/plantuml/project/draw/TaskDrawRegular.java @@ -44,13 +44,12 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.lang.ComplementColors; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScale; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; @@ -102,7 +101,7 @@ public class TaskDrawRegular extends AbstractTaskDraw { if (colors != null && colors.isOk()) { return colors.apply(ug); } - return ug.apply(new UChangeColor(HColorUtils.BLUE)).apply(new UChangeBackColor(defaultColor)); + return ug.apply(HColorUtils.BLUE).apply(defaultColor.bg()); } private void drawShape(UGraphic ug) { @@ -129,17 +128,17 @@ public class TaskDrawRegular extends AbstractTaskDraw { ug.draw(full); } else { final double partialLength = fullLength * completion / 100.; - ug.apply(new UChangeColor(HColorUtils.WHITE)).apply(new UChangeBackColor(HColorUtils.WHITE)) + ug.apply(HColorUtils.WHITE).apply(HColorUtils.WHITE.bg()) .draw(full); if (partialLength > 2) { final URectangle partial = new URectangle(partialLength, getShapeHeight()).rounded(8); - ug.apply(new UChangeColor(null)).draw(partial); + ug.apply(new HColorNone()).draw(partial); } if (partialLength > 10 && partialLength < fullLength - 10) { final URectangle patch = new URectangle(8, getShapeHeight()); - ug.apply(new UChangeColor(null)).apply(UTranslate.dx(partialLength - 8)).draw(patch); + ug.apply(new HColorNone()).apply(UTranslate.dx(partialLength - 8)).draw(patch); } - ug.apply(new UChangeBackColor(null)).draw(full); + ug.apply(new HColorNone().bg()).draw(full); } if (url != null) { ug.closeAction(); diff --git a/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java b/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java index d510383bf..717ff0886 100644 --- a/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java +++ b/src/net/sourceforge/plantuml/project/draw/TaskDrawSeparator.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.project.core.AbstractTask; import net.sourceforge.plantuml.project.lang.ComplementColors; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScale; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -94,7 +93,7 @@ public class TaskDrawSeparator implements TaskDraw { final double start = timeScale.getStartingPosition(min) + widthTitle; final double end = timeScale.getEndingPosition(max); - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK); ug = ug.apply(UTranslate.dy(getHeight() / 2)); if (widthTitle == 0) { diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeader.java b/src/net/sourceforge/plantuml/project/draw/TimeHeader.java index c7584d1f9..808f83722 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeader.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeader.java @@ -42,7 +42,6 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScale; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -73,7 +72,7 @@ public abstract class TimeHeader { final double xmin = getTimeScale().getStartingPosition(min); final double xmax = getTimeScale().getEndingPosition(max); final ULine hline = ULine.hline(xmax - xmin); - ug.apply(new UChangeColor(HColorUtils.LIGHT_GRAY)).apply(UTranslate.dy(y)).draw(hline); + ug.apply(HColorUtils.LIGHT_GRAY).apply(UTranslate.dy(y)).draw(hline); } final protected FontConfiguration getFontConfiguration(int size, boolean bold) { diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java index 177407ceb..5fc4f43a7 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderDaily.java @@ -44,13 +44,12 @@ import net.sourceforge.plantuml.project.time.GCalendar; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScaleDaily; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorSet; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; @@ -103,7 +102,7 @@ public class TimeHeaderDaily extends TimeHeader { if (defaultPlan.getLoadAt(wink) > 0) { final HColor back = colorDays.get(day); if (back != null) { - drawRectangle(ug.apply(new UChangeBackColor(back)), height, x1, x2); + drawRectangle(ug.apply(back.bg()), height, x1, x2); } printCentered(ug.apply(UTranslate.dy(Y_POS_ROW16)), getTextBlock(day.getDayOfWeek().shortName(), 10, false), x1, x2); @@ -139,7 +138,7 @@ public class TimeHeaderDaily extends TimeHeader { final double x1 = getTimeScale().getStartingPosition(wink); final double x2 = getTimeScale().getEndingPosition(wink); if (defaultPlan.getLoadAt(wink) == 0) { - drawRectangle(ug.apply(new UChangeBackColor(veryLightGray)), height, x1, x2); + drawRectangle(ug.apply(veryLightGray.bg()), height, x1, x2); } } } @@ -148,7 +147,7 @@ public class TimeHeaderDaily extends TimeHeader { if (height == 0) { return; } - ug = ug.apply(new UChangeColor(null)); + ug = ug.apply(new HColorNone()); ug = ug.apply(new UTranslate(x1 + 1, getFullHeaderHeight())); ug.draw(new URectangle(x2 - x1 - 1, height)); } @@ -175,7 +174,7 @@ public class TimeHeaderDaily extends TimeHeader { private void drawVbar(UGraphic ug, double x, double y1, double y2) { final ULine vbar = ULine.vline(y2 - y1); - ug.apply(new UChangeColor(HColorUtils.LIGHT_GRAY)).apply(new UTranslate(x, y1)).draw(vbar); + ug.apply(HColorUtils.LIGHT_GRAY).apply(new UTranslate(x, y1)).draw(vbar); } private void printNamedDays(final UGraphic ug) { diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java index 8cbd7b7e6..11ce081a0 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderMonthly.java @@ -45,7 +45,6 @@ import net.sourceforge.plantuml.project.time.GCalendar; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScaleCompressed; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -135,7 +134,7 @@ public class TimeHeaderMonthly extends TimeHeader { private void drawVbar(UGraphic ug, double x, double y1, double y2) { final ULine vbar = ULine.vline(y2 - y1); - ug.apply(new UChangeColor(HColorUtils.LIGHT_GRAY)).apply(new UTranslate(x, y1)).draw(vbar); + ug.apply(HColorUtils.LIGHT_GRAY).apply(new UTranslate(x, y1)).draw(vbar); } private void printLeft(UGraphic ug, TextBlock text, double start) { diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java index d0e49a8f2..07dee9d2a 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderSimple.java @@ -42,7 +42,6 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScale; import net.sourceforge.plantuml.project.timescale.TimeScaleWink; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -72,8 +71,8 @@ public class TimeHeaderSimple extends TimeHeader { final double xmin = getTimeScale().getStartingPosition(min); final double xmax = getTimeScale().getEndingPosition(max); drawSimpleDayCounter(ug, getTimeScale(), totalHeight); - ug.apply(new UChangeColor(HColorUtils.LIGHT_GRAY)).draw(ULine.hline(xmax - xmin)); - ug.apply(new UChangeColor(HColorUtils.LIGHT_GRAY)).apply(UTranslate.dy(getFullHeaderHeight() - 3)) + ug.apply(HColorUtils.LIGHT_GRAY).draw(ULine.hline(xmax - xmin)); + ug.apply(HColorUtils.LIGHT_GRAY).apply(UTranslate.dy(getFullHeaderHeight() - 3)) .draw(ULine.hline(xmax - xmin)); } @@ -90,7 +89,7 @@ public class TimeHeaderSimple extends TimeHeader { if (i.compareTo(max.increment()) < 0) { num.drawU(ug.apply(UTranslate.dx(x1 + delta / 2))); } - ug.apply(new UChangeColor(HColorUtils.LIGHT_GRAY)).apply(UTranslate.dx(x1)).draw(vbar); + ug.apply(HColorUtils.LIGHT_GRAY).apply(UTranslate.dx(x1)).draw(vbar); } } diff --git a/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java b/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java index 5a5837c39..a6c1ce7a1 100644 --- a/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java +++ b/src/net/sourceforge/plantuml/project/draw/TimeHeaderWeekly.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.project.time.GCalendar; import net.sourceforge.plantuml.project.time.MonthYear; import net.sourceforge.plantuml.project.time.Wink; import net.sourceforge.plantuml.project.timescale.TimeScaleCompressed; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -129,7 +128,7 @@ public class TimeHeaderWeekly extends TimeHeader { private void drawVbar(UGraphic ug, double x, double y1, double y2) { final ULine vbar = ULine.vline(y2 - y1); - ug.apply(new UChangeColor(HColorUtils.LIGHT_GRAY)).apply(new UTranslate(x, y1)).draw(vbar); + ug.apply(HColorUtils.LIGHT_GRAY).apply(new UTranslate(x, y1)).draw(vbar); } private void printLeft(UGraphic ug, TextBlock text, double start) { diff --git a/src/net/sourceforge/plantuml/project/lang/ComplementColors.java b/src/net/sourceforge/plantuml/project/lang/ComplementColors.java index d2bc2f068..88b70a9bb 100644 --- a/src/net/sourceforge/plantuml/project/lang/ComplementColors.java +++ b/src/net/sourceforge/plantuml/project/lang/ComplementColors.java @@ -35,8 +35,6 @@ */ package net.sourceforge.plantuml.project.lang; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -54,11 +52,11 @@ public class ComplementColors implements Complement { if (isOk() == false) { throw new IllegalStateException(); } - ug = ug.apply(new UChangeBackColor(center)); + ug = ug.apply(center.bg()); if (border == null) { - ug = ug.apply(new UChangeColor(center)); + ug = ug.apply(center); } else { - ug = ug.apply(new UChangeColor(border)); + ug = ug.apply(border); } return ug; } diff --git a/src/net/sourceforge/plantuml/salt/PSystemSalt.java b/src/net/sourceforge/plantuml/salt/PSystemSalt.java index 9ad07d207..f8fd0cde4 100644 --- a/src/net/sourceforge/plantuml/salt/PSystemSalt.java +++ b/src/net/sourceforge/plantuml/salt/PSystemSalt.java @@ -80,7 +80,6 @@ import net.sourceforge.plantuml.salt.factory.ElementFactoryTextField; import net.sourceforge.plantuml.salt.factory.ElementFactoryTree; import net.sourceforge.plantuml.sprite.Sprite; import net.sourceforge.plantuml.ugraphic.ImageBuilder; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; @@ -120,7 +119,7 @@ public class PSystemSalt extends AbstractPSystem implements WithSprite { builder.setUDrawable(new UDrawable() { public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK); salt.drawU(ug, 0, new Dimension2DDouble(size.getWidth(), size.getHeight())); salt.drawU(ug, 1, new Dimension2DDouble(size.getWidth(), size.getHeight())); } diff --git a/src/net/sourceforge/plantuml/salt/element/ElementButton.java b/src/net/sourceforge/plantuml/salt/element/ElementButton.java index 7f0ecb348..3e62d4b41 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementButton.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementButton.java @@ -40,7 +40,6 @@ import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -70,7 +69,7 @@ public class ElementButton extends AbstractElementText implements Element { } final Dimension2D dim = getPreferredDimension(ug.getStringBounder(), 0, 0); ug = ug.apply(new UStroke(stroke)); - ug = ug.apply(new UChangeBackColor(HColorSet.instance().getColorIfValid("#EEEEEE"))); + ug = ug.apply(HColorSet.instance().getColorIfValid("#EEEEEE").bg()); ug.apply(new UTranslate(stroke, stroke)).draw( new URectangle(dim.getWidth() - 2 * stroke, dim.getHeight() - 2 * stroke).rounded(10)); final Dimension2D dimPureText = getPureTextDimension(ug.getStringBounder()); diff --git a/src/net/sourceforge/plantuml/salt/element/ElementDroplist.java b/src/net/sourceforge/plantuml/salt/element/ElementDroplist.java index 40f96a539..216fa9ba4 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementDroplist.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementDroplist.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -54,6 +53,7 @@ import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColorSet; +import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class ElementDroplist extends AbstractElementText implements Element { @@ -93,8 +93,8 @@ public class ElementDroplist extends AbstractElementText implements Element { public void drawU(UGraphic ug, int zIndex, Dimension2D dimToUse) { final Dimension2D dim = getPreferredDimension(ug.getStringBounder(), 0, 0); if (zIndex == 0) { - ug.apply(new UChangeBackColor(HColorSet.instance().getColorIfValid("#EEEEEE"))).draw( - new URectangle(dim.getWidth() - 1, dim.getHeight() - 1)); + ug.apply(HColorSet.instance().getColorIfValid("#EEEEEE").bg()) + .draw(new URectangle(dim.getWidth() - 1, dim.getHeight() - 1)); drawText(ug, 2, 2); final double xline = dim.getWidth() - box; ug.apply(UTranslate.dx(xline)).draw(ULine.vline(dim.getHeight() - 1)); @@ -105,16 +105,16 @@ public class ElementDroplist extends AbstractElementText implements Element { final Dimension2D dimText = getPureTextDimension(ug.getStringBounder()); poly.addPoint((box - 6) / 2, dimText.getHeight() - 8); - ug.apply(new UChangeBackColor(ug.getParam().getColor())).apply(new UTranslate(xline + 3, 6)).draw(poly); + ug.apply(HColorUtils.changeBack(ug)).apply(new UTranslate(xline + 3, 6)).draw(poly); } if (openDrop != null) { final Dimension2D dimOpen = Dimension2DDouble.atLeast(openDrop.calculateDimension(ug.getStringBounder()), dim.getWidth() - 1, 0); - ug.apply(new UChangeBackColor(HColorSet.instance().getColorIfValid("#EEEEEE"))) - .apply(UTranslate.dy(dim.getHeight() - 1)) + ug = ug.apply(UTranslate.dy(dim.getHeight() - 1)); + ug.apply(HColorSet.instance().getColorIfValid("#EEEEEE").bg()) .draw(new URectangle(dimOpen.getWidth() - 1, dimOpen.getHeight() - 1)); - openDrop.drawU(ug.apply(UTranslate.dy(dim.getHeight() - 1))); + openDrop.drawU(ug); } } } diff --git a/src/net/sourceforge/plantuml/salt/element/ElementLine.java b/src/net/sourceforge/plantuml/salt/element/ElementLine.java index a55d806f4..bc52b4e3f 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementLine.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementLine.java @@ -39,7 +39,6 @@ import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -62,7 +61,7 @@ public class ElementLine extends AbstractElement { if (zIndex != 0) { return; } - ug = ug.apply(new UChangeColor(HColorSet.instance().getColorIfValid("#AAAAAA"))); + ug = ug.apply(HColorSet.instance().getColorIfValid("#AAAAAA")); double y2 = dimToUse.getHeight() / 2; if (separator == '=') { y2 = y2 - 1; diff --git a/src/net/sourceforge/plantuml/salt/element/ElementMenuBar.java b/src/net/sourceforge/plantuml/salt/element/ElementMenuBar.java index 71aa1f486..0e048ebd8 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementMenuBar.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementMenuBar.java @@ -44,7 +44,6 @@ import java.util.Map; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -106,7 +105,7 @@ public class ElementMenuBar extends AbstractElement { double x1 = 0; if (zIndex == 0) { - ug.apply(new UChangeBackColor(HColorSet.instance().getColorIfValid("#DDDDDD"))).draw( + ug.apply(HColorSet.instance().getColorIfValid("#DDDDDD").bg()).draw( new URectangle(dimToUse.getWidth(), dimToUse.getHeight())); for (ElementMenuEntry entry : entries) { entry.drawU(ug.apply(UTranslate.dx(x1)), zIndex, dimToUse); diff --git a/src/net/sourceforge/plantuml/salt/element/ElementMenuEntry.java b/src/net/sourceforge/plantuml/salt/element/ElementMenuEntry.java index 7d8d44f06..a3fcc4572 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementMenuEntry.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementMenuEntry.java @@ -44,7 +44,6 @@ import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -73,7 +72,7 @@ public class ElementMenuEntry extends AbstractElement { public void drawU(UGraphic ug, int zIndex, Dimension2D dimToUse) { if (background != null) { final Dimension2D dim = getPreferredDimension(ug.getStringBounder(), 0, 0); - ug.apply(new UChangeBackColor(background)).draw(new URectangle(dim.getWidth(), dim.getHeight())); + ug.apply(background.bg()).draw(new URectangle(dim.getWidth(), dim.getHeight())); } block.drawU(ug); } diff --git a/src/net/sourceforge/plantuml/salt/element/ElementMenuPopup.java b/src/net/sourceforge/plantuml/salt/element/ElementMenuPopup.java index 57a406742..197340170 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementMenuPopup.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementMenuPopup.java @@ -42,7 +42,6 @@ import java.util.Collection; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -80,7 +79,7 @@ public class ElementMenuPopup extends AbstractElement { if (zIndex != 1) { return; } - ug.apply(new UChangeBackColor(HColorSet.instance().getColorIfValid("#DDDDDD"))).draw( + ug.apply(HColorSet.instance().getColorIfValid("#DDDDDD").bg()).draw( new URectangle(dimToUse.getWidth(), dimToUse.getHeight())); double y1 = 0; diff --git a/src/net/sourceforge/plantuml/salt/element/ElementPyramidScrolled.java b/src/net/sourceforge/plantuml/salt/element/ElementPyramidScrolled.java index 48ebbfb3e..793119899 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementPyramidScrolled.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementPyramidScrolled.java @@ -42,7 +42,6 @@ import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.salt.Positionner2; import net.sourceforge.plantuml.salt.factory.ScrollStrategy; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UPath; @@ -129,16 +128,16 @@ public class ElementPyramidScrolled extends ElementPyramid { ug.draw(new URectangle(width, height)); ug.apply(UTranslate.dy(v2)).draw(ULine.hline(width)); ug.apply(UTranslate.dy(height - v2)).draw(ULine.hline(width)); - ug.apply(new UTranslate(4, 4)).apply(new UChangeBackColor(HColorUtils.BLACK)).draw(getTr0()); - ug.apply(new UTranslate(4, height - v2 + 4)).apply(new UChangeBackColor(HColorUtils.BLACK)).draw(getTr180()); + ug.apply(new UTranslate(4, 4)).apply(HColorUtils.BLACK.bg()).draw(getTr0()); + ug.apply(new UTranslate(4, height - v2 + 4)).apply(HColorUtils.BLACK.bg()).draw(getTr180()); } private void drawH(UGraphic ug, double width, double height) { ug.draw(new URectangle(width, height)); ug.apply(UTranslate.dx(v2)).draw(ULine.vline(height)); ug.apply(UTranslate.dx(width - v2)).draw(ULine.vline(height)); - ug.apply(new UTranslate(4, 4)).apply(new UChangeBackColor(HColorUtils.BLACK)).draw(getTr90()); - ug.apply(new UTranslate(width - v2 + 4, 4)).apply(new UChangeBackColor(HColorUtils.BLACK)).draw(getTr270()); + ug.apply(new UTranslate(4, 4)).apply(HColorUtils.BLACK.bg()).draw(getTr90()); + ug.apply(new UTranslate(width - v2 + 4, 4)).apply(HColorUtils.BLACK.bg()).draw(getTr270()); } } diff --git a/src/net/sourceforge/plantuml/salt/element/ElementRadioCheckbox.java b/src/net/sourceforge/plantuml/salt/element/ElementRadioCheckbox.java index 75d45a727..915b10d38 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementRadioCheckbox.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementRadioCheckbox.java @@ -45,7 +45,6 @@ import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; @@ -53,6 +52,7 @@ import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class ElementRadioCheckbox extends AbstractElement { @@ -89,22 +89,32 @@ public class ElementRadioCheckbox extends AbstractElement { ug = ug.apply(new UStroke(stroke)); if (radio) { - ug.apply(new UTranslate(2, (height - ELLIPSE) / 2)).draw(new UEllipse(ELLIPSE, ELLIPSE)); - if (checked) { - ug.apply(new UChangeBackColor(ug.getParam().getColor())) - .apply(new UTranslate(2 + (ELLIPSE - ELLIPSE2) / 2, (height - ELLIPSE2) / 2)) - .draw(new UEllipse(ELLIPSE2, ELLIPSE2)); - } + drawRadio(ug, height); } else { - ug.apply(new UTranslate(2, (height - RECTANGLE) / 2)).draw(new URectangle(RECTANGLE, RECTANGLE)); - if (checked) { - final UPolygon poly = new UPolygon(); - poly.addPoint(0, 0); - poly.addPoint(3, 3); - poly.addPoint(10, -6); - poly.addPoint(3, 1); - ug.apply(new UChangeBackColor(ug.getParam().getColor())).apply(new UTranslate(3, 6)).draw(poly); - } + drawOther(ug, height); + } + } + + private void drawOther(UGraphic ug, final double height) { + ug.apply(new UTranslate(2, (height - RECTANGLE) / 2)).draw(new URectangle(RECTANGLE, RECTANGLE)); + if (checked) { + final UPolygon poly = new UPolygon(); + poly.addPoint(0, 0); + poly.addPoint(3, 3); + poly.addPoint(10, -6); + poly.addPoint(3, 1); + ug = ug.apply(HColorUtils.changeBack(ug)); + ug = ug.apply(new UTranslate(3, 6)); + ug.draw(poly); + } + } + + private void drawRadio(UGraphic ug, final double height) { + ug.apply(new UTranslate(2, (height - ELLIPSE) / 2)).draw(new UEllipse(ELLIPSE, ELLIPSE)); + if (checked) { + ug = ug.apply(HColorUtils.changeBack(ug)); + ug = ug.apply(new UTranslate(2 + (ELLIPSE - ELLIPSE2) / 2, (height - ELLIPSE2) / 2)); + ug.draw(new UEllipse(ELLIPSE2, ELLIPSE2)); } } } diff --git a/src/net/sourceforge/plantuml/salt/element/ElementTree.java b/src/net/sourceforge/plantuml/salt/element/ElementTree.java index 09030a082..a120b94cb 100644 --- a/src/net/sourceforge/plantuml/salt/element/ElementTree.java +++ b/src/net/sourceforge/plantuml/salt/element/ElementTree.java @@ -45,7 +45,6 @@ import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.ISkinSimple; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColorSet; @@ -145,7 +144,7 @@ public class ElementTree extends AbstractElement { yvar += h; rows.add(yvar); } - ug = ug.apply(new UChangeColor(HColorSet.instance().getColorIfValid("#888888"))); + ug = ug.apply(HColorSet.instance().getColorIfValid("#888888")); skeleton.draw(ug, 0, 0); if (strategy != TableStrategy.DRAW_NONE) { final Grid2 grid = new Grid2(rows, cols, strategy); diff --git a/src/net/sourceforge/plantuml/salt/element/Grid.java b/src/net/sourceforge/plantuml/salt/element/Grid.java index ca458d7c9..306cb19a2 100644 --- a/src/net/sourceforge/plantuml/salt/element/Grid.java +++ b/src/net/sourceforge/plantuml/salt/element/Grid.java @@ -41,8 +41,6 @@ import java.util.Set; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.salt.Cell; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -104,7 +102,7 @@ public class Grid { if (dim.getWidth() > 0 && dim.getHeight() > 0) { final UGraphic ug2 = ug.apply(new UTranslate(x + 6, y - dim.getHeight() * 0)); - ug2.apply(new UChangeBackColor(HColorUtils.WHITE)).apply(new UChangeColor(HColorUtils.WHITE)) + ug2.apply(HColorUtils.WHITE.bg()).apply(HColorUtils.WHITE) .draw(new URectangle(dim)); title.drawU(ug2); } diff --git a/src/net/sourceforge/plantuml/sequencediagram/command/CommandBoxStart.java b/src/net/sourceforge/plantuml/sequencediagram/command/CommandBoxStart.java index 76612495c..55636a5c5 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/command/CommandBoxStart.java +++ b/src/net/sourceforge/plantuml/sequencediagram/command/CommandBoxStart.java @@ -35,7 +35,6 @@ */ package net.sourceforge.plantuml.sequencediagram.command; -import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.LineLocation; import net.sourceforge.plantuml.command.CommandExecutionResult; @@ -52,7 +51,6 @@ import net.sourceforge.plantuml.graphic.color.ColorParser; import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.graphic.color.Colors; import net.sourceforge.plantuml.sequencediagram.SequenceDiagram; -import net.sourceforge.plantuml.ugraphic.UFont; public class CommandBoxStart extends SingleLineCommand2 { diff --git a/src/net/sourceforge/plantuml/sequencediagram/graphic/Arrow.java b/src/net/sourceforge/plantuml/sequencediagram/graphic/Arrow.java index d480f1723..274de3b41 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/graphic/Arrow.java +++ b/src/net/sourceforge/plantuml/sequencediagram/graphic/Arrow.java @@ -40,7 +40,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.sequencediagram.InGroupable; import net.sourceforge.plantuml.sequencediagram.NotePosition; import net.sourceforge.plantuml.skin.ArrowComponent; -import net.sourceforge.plantuml.skin.rose.AbstractComponentRoseArrow; import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.ugraphic.UGraphic; diff --git a/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java b/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java index dced37e32..36b2ed41b 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java +++ b/src/net/sourceforge/plantuml/sequencediagram/graphic/DrawableSet.java @@ -65,7 +65,6 @@ import net.sourceforge.plantuml.skin.ComponentType; import net.sourceforge.plantuml.skin.Context2D; import net.sourceforge.plantuml.skin.SimpleContext2D; import net.sourceforge.plantuml.skin.rose.Rose; -import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.MinMax; import net.sourceforge.plantuml.ugraphic.UClip; import net.sourceforge.plantuml.ugraphic.UGraphic; diff --git a/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java b/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java index e7feb2eb2..952d846ed 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java +++ b/src/net/sourceforge/plantuml/sequencediagram/graphic/SequenceDiagramFileMakerPuma2.java @@ -47,7 +47,6 @@ import net.sourceforge.plantuml.AnnotatedWorker; import net.sourceforge.plantuml.FileFormatOption; import net.sourceforge.plantuml.FontParam; import net.sourceforge.plantuml.ISkinParam; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.SkinParam; import net.sourceforge.plantuml.activitydiagram3.ftile.EntityImageLegend; import net.sourceforge.plantuml.core.ImageData; @@ -66,7 +65,6 @@ import net.sourceforge.plantuml.sequencediagram.Event; import net.sourceforge.plantuml.sequencediagram.Newpage; import net.sourceforge.plantuml.sequencediagram.Participant; import net.sourceforge.plantuml.sequencediagram.SequenceDiagram; -import net.sourceforge.plantuml.skin.ComponentType; import net.sourceforge.plantuml.skin.rose.Rose; import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; diff --git a/src/net/sourceforge/plantuml/sequencediagram/graphic/Step1MessageExo.java b/src/net/sourceforge/plantuml/sequencediagram/graphic/Step1MessageExo.java index 371a62483..cc5435a53 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/graphic/Step1MessageExo.java +++ b/src/net/sourceforge/plantuml/sequencediagram/graphic/Step1MessageExo.java @@ -48,7 +48,6 @@ import net.sourceforge.plantuml.skin.ArrowComponent; import net.sourceforge.plantuml.skin.ArrowConfiguration; import net.sourceforge.plantuml.skin.Component; import net.sourceforge.plantuml.skin.ComponentType; -import net.sourceforge.plantuml.style.Style; class Step1MessageExo extends Step1Abstract { diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottom.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottom.java index 5e5e45979..d323aff3f 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottom.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteBottom.java @@ -49,7 +49,6 @@ import net.sourceforge.plantuml.skin.Component; import net.sourceforge.plantuml.skin.ComponentType; import net.sourceforge.plantuml.skin.Context2D; import net.sourceforge.plantuml.skin.rose.Rose; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -124,7 +123,7 @@ public class CommunicationTileNoteBottom extends AbstractTile implements TileWit final double dx = x2 - x1; final double dy = y2 - y1; - ug.apply(new UTranslate(x1, y1)).apply(new UChangeColor(color)).apply(new UStroke(2, 2, 1)) + ug.apply(new UTranslate(x1, y1)).apply(color).apply(new UStroke(2, 2, 1)) .draw(new ULine(dx, dy)); } diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteTop.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteTop.java index a360979cb..2b2152ac2 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteTop.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/CommunicationTileNoteTop.java @@ -49,7 +49,6 @@ import net.sourceforge.plantuml.skin.Component; import net.sourceforge.plantuml.skin.ComponentType; import net.sourceforge.plantuml.skin.Context2D; import net.sourceforge.plantuml.skin.rose.Rose; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -125,7 +124,7 @@ public class CommunicationTileNoteTop extends AbstractTile implements TileWithUp final double dx = x2 - x1; final double dy = y2 - y1; - ug.apply(new UTranslate(x1, y1)).apply(new UChangeColor(color)).apply(new UStroke(2, 2, 1)) + ug.apply(new UTranslate(x1, y1)).apply(color).apply(new UStroke(2, 2, 1)) .draw(new ULine(dx, dy)); } diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/GroupingTile.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/GroupingTile.java index a1d74c4c8..500f66ab0 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/GroupingTile.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/GroupingTile.java @@ -158,7 +158,7 @@ public class GroupingTile extends AbstractTile implements TileWithCallbackY { comp.drawU(ug.apply(UTranslate.dx(min.getCurrentValue())), area, (Context2D) ug); drawAllElses(ug); } - // ug.apply(new UChangeBackColor(HtmlColorUtils.LIGHT_GRAY)).draw(new + // ug.apply(UChangeBackColor.nnn(HtmlColorUtils.LIGHT_GRAY)).draw(new // URectangle(area.getDimensionToUse())); double h = dim1.getHeight() + MARGINY / 2; diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/LiveBoxFinder.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/LiveBoxFinder.java index 886f8e93b..123efdb88 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/LiveBoxFinder.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/LiveBoxFinder.java @@ -38,8 +38,7 @@ package net.sourceforge.plantuml.sequencediagram.teoz; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; +import net.sourceforge.plantuml.ugraphic.UBackground; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UParam; import net.sourceforge.plantuml.ugraphic.UParamNull; @@ -48,6 +47,7 @@ import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class LiveBoxFinder implements UGraphic { @@ -64,9 +64,9 @@ public class LiveBoxFinder implements UGraphic { return new LiveBoxFinder(stringBounder, translate.compose((UTranslate) change)); } else if (change instanceof UStroke) { return new LiveBoxFinder(this); - } else if (change instanceof UChangeBackColor) { + } else if (change instanceof UBackground) { return new LiveBoxFinder(this); - } else if (change instanceof UChangeColor) { + } else if (change instanceof HColor) { return new LiveBoxFinder(this); } throw new UnsupportedOperationException(); diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/PlayingSpaceWithParticipants.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/PlayingSpaceWithParticipants.java index 61a5c5336..3c8f800b2 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/PlayingSpaceWithParticipants.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/PlayingSpaceWithParticipants.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.graphic.VerticalAlignment; import net.sourceforge.plantuml.real.Real; import net.sourceforge.plantuml.skin.Context2D; import net.sourceforge.plantuml.skin.SimpleContext2D; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UClip; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -132,7 +131,7 @@ public class PlayingSpaceWithParticipants extends AbstractTextBlock implements T } private void drawNewPages(UGraphic ug) { - ug = ug.apply(new UChangeColor(HColorUtils.BLUE)); + ug = ug.apply(HColorUtils.BLUE); for (Double change : yNewPages()) { if (change == 0 || change == Double.MAX_VALUE) { continue; diff --git a/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java b/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java index 0d7cf1227..31c5d0b4a 100644 --- a/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java +++ b/src/net/sourceforge/plantuml/sequencediagram/teoz/SequenceDiagramFileMakerTeoz.java @@ -65,7 +65,6 @@ import net.sourceforge.plantuml.sequencediagram.SequenceDiagram; import net.sourceforge.plantuml.sequencediagram.graphic.FileMaker; import net.sourceforge.plantuml.skin.SimpleContext2D; import net.sourceforge.plantuml.skin.rose.Rose; -import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; diff --git a/src/net/sourceforge/plantuml/skin/ActorStickMan.java b/src/net/sourceforge/plantuml/skin/ActorStickMan.java index 7c92d5e7d..1bee6f260 100644 --- a/src/net/sourceforge/plantuml/skin/ActorStickMan.java +++ b/src/net/sourceforge/plantuml/skin/ActorStickMan.java @@ -42,11 +42,11 @@ import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.SymbolContext; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPath; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class ActorStickMan extends AbstractTextBlock implements TextBlock { @@ -86,7 +86,7 @@ public class ActorStickMan extends AbstractTextBlock implements TextBlock { ug = symbolContext.apply(ug); ug.apply(new UTranslate(startX, thickness())).draw(head); - ug.apply(new UTranslate(centerX, headDiam + thickness())).apply(new UChangeBackColor(null)).draw(path); + ug.apply(new UTranslate(centerX, headDiam + thickness())).apply(new HColorNone().bg()).draw(path); } private double thickness() { diff --git a/src/net/sourceforge/plantuml/skin/CircleInterface.java b/src/net/sourceforge/plantuml/skin/CircleInterface.java index f2286c044..8e787e096 100644 --- a/src/net/sourceforge/plantuml/skin/CircleInterface.java +++ b/src/net/sourceforge/plantuml/skin/CircleInterface.java @@ -37,8 +37,6 @@ package net.sourceforge.plantuml.skin; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -66,8 +64,8 @@ public class CircleInterface implements UDrawable { public void drawU(UGraphic ug) { final UEllipse head = new UEllipse(headDiam, headDiam); - ug.apply(new UStroke(thickness)).apply(new UChangeBackColor(backgroundColor)) - .apply(new UChangeColor(foregroundColor)).apply(new UTranslate((double) thickness, (double) thickness)).draw(head); + ug.apply(new UStroke(thickness)).apply(backgroundColor.bg()) + .apply(foregroundColor).apply(new UTranslate((double) thickness, (double) thickness)).draw(head); } public double getPreferredWidth(StringBounder stringBounder) { diff --git a/src/net/sourceforge/plantuml/skin/Padder.java b/src/net/sourceforge/plantuml/skin/Padder.java index 2e30def7a..0c472c1ef 100644 --- a/src/net/sourceforge/plantuml/skin/Padder.java +++ b/src/net/sourceforge/plantuml/skin/Padder.java @@ -41,12 +41,11 @@ import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class Padder { @@ -63,8 +62,7 @@ public class Padder { return "" + margin + "/" + padding + "/" + borderColor + "/" + backgroundColor; } - private Padder(double margin, double padding, HColor backgroundColor, HColor borderColor, - double roundCorner) { + private Padder(double margin, double padding, HColor backgroundColor, HColor borderColor, double roundCorner) { this.margin = margin; this.padding = padding; this.borderColor = borderColor; @@ -119,8 +117,17 @@ public class Padder { public void drawU(UGraphic ug) { ug = ug.apply(new UTranslate(margin, margin)); - final UGraphic ug2 = ug.apply(new UChangeBackColor(backgroundColor)) - .apply(new UChangeColor(borderColor)); + UGraphic ug2 = ug; + if (borderColor == null) { + ug2 = ug2.apply(new HColorNone()); + } else { + ug2 = ug2.apply(borderColor); + } + if (backgroundColor == null) { + ug2 = ug2.apply(new HColorNone().bg()); + } else { + ug2 = ug2.apply(backgroundColor.bg()); + } final Dimension2D originalDim = orig.calculateDimension(ug.getStringBounder()); final URectangle rect = new URectangle(Dimension2DDouble.delta(originalDim, 2 * padding)) .rounded(roundCorner); diff --git a/src/net/sourceforge/plantuml/skin/VisibilityModifier.java b/src/net/sourceforge/plantuml/skin/VisibilityModifier.java index 00bafdc67..3cfd8569e 100644 --- a/src/net/sourceforge/plantuml/skin/VisibilityModifier.java +++ b/src/net/sourceforge/plantuml/skin/VisibilityModifier.java @@ -45,23 +45,22 @@ import net.sourceforge.plantuml.graphic.InnerStrategy; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public enum VisibilityModifier { - PRIVATE_FIELD(ColorParam.iconPrivate, null), PROTECTED_FIELD(ColorParam.iconProtected, null), PACKAGE_PRIVATE_FIELD( - ColorParam.iconPackage, null), PUBLIC_FIELD(ColorParam.iconPublic, null), + PRIVATE_FIELD(ColorParam.iconPrivate, null), PROTECTED_FIELD(ColorParam.iconProtected, null), + PACKAGE_PRIVATE_FIELD(ColorParam.iconPackage, null), PUBLIC_FIELD(ColorParam.iconPublic, null), - PRIVATE_METHOD(ColorParam.iconPrivate, ColorParam.iconPrivateBackground), PROTECTED_METHOD( - ColorParam.iconProtected, ColorParam.iconProtectedBackground), PACKAGE_PRIVATE_METHOD( - ColorParam.iconPackage, ColorParam.iconPackageBackground), PUBLIC_METHOD(ColorParam.iconPublic, - ColorParam.iconPublicBackground), + PRIVATE_METHOD(ColorParam.iconPrivate, ColorParam.iconPrivateBackground), + PROTECTED_METHOD(ColorParam.iconProtected, ColorParam.iconProtectedBackground), + PACKAGE_PRIVATE_METHOD(ColorParam.iconPackage, ColorParam.iconPackageBackground), + PUBLIC_METHOD(ColorParam.iconPublic, ColorParam.iconPublicBackground), IE_MANDATORY(ColorParam.iconIEMandatory, ColorParam.iconIEMandatory); @@ -101,7 +100,7 @@ public enum VisibilityModifier { public void drawU(UGraphic ug) { if (withInvisibleRectanble) { - ug.apply(new UChangeColor(null)).draw(new URectangle(size * 2, size)); + ug.apply(new HColorNone()).draw(new URectangle(size * 2, size)); } drawInternal(ug, size, foregroundColor, backgoundColor, 0, 0); } @@ -110,7 +109,12 @@ public enum VisibilityModifier { private void drawInternal(UGraphic ug, int size, final HColor foregroundColor, final HColor backgoundColor, double x, double y) { - ug = ug.apply(new UChangeBackColor(backgoundColor)).apply(new UChangeColor(foregroundColor)); + if (backgoundColor == null) { + ug = ug.apply(new HColorNone().bg()); + } else { + ug = ug.apply(backgoundColor.bg()); + } + ug = ug.apply(foregroundColor); size = ensureEven(size); switch (this) { case PACKAGE_PRIVATE_FIELD: diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActiveLine.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActiveLine.java index 98ef41c3e..d5a14c4c0 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActiveLine.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActiveLine.java @@ -43,8 +43,6 @@ import net.sourceforge.plantuml.graphic.SymbolContext; import net.sourceforge.plantuml.skin.AbstractComponent; import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -81,13 +79,13 @@ public class ComponentRoseActiveLine extends AbstractComponent { if (symbolContext.isShadowing()) { rect.setDeltaShadow(1); } - ug = ug.apply(new UChangeColor(symbolContext.getForeColor())); + ug = ug.apply(symbolContext.getForeColor()); if (closeUp && closeDown) { - ug.apply(new UChangeBackColor(symbolContext.getBackColor())).apply(UTranslate.dx(x)).draw(rect); + ug.apply(symbolContext.getBackColor().bg()).apply(UTranslate.dx(x)).draw(rect); return; } - ug.apply(new UChangeBackColor(symbolContext.getBackColor())) - .apply(new UChangeColor(symbolContext.getBackColor())).apply(UTranslate.dx(x)).draw(rect); + ug.apply(symbolContext.getBackColor().bg()) + .apply(symbolContext.getBackColor()).apply(UTranslate.dx(x)).draw(rect); final ULine vline = ULine.vline(dimensionToUse.getHeight()); ug.apply(UTranslate.dx(x)).draw(vline); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActor.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActor.java index 629c10e04..95dbd5228 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActor.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseActor.java @@ -47,7 +47,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.SymbolContext; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.skin.AbstractTextualComponent; -import net.sourceforge.plantuml.skin.ActorStickMan; import net.sourceforge.plantuml.skin.ActorStyle; import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.style.Style; diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseArrow.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseArrow.java index fb9324346..8dcb6ba58 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseArrow.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseArrow.java @@ -52,8 +52,6 @@ import net.sourceforge.plantuml.skin.ArrowDressing; import net.sourceforge.plantuml.skin.ArrowHead; import net.sourceforge.plantuml.skin.ArrowPart; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -94,7 +92,7 @@ public class ComponentRoseArrow extends AbstractComponentRoseArrow { } final Dimension2D dimensionToUse = area.getDimensionToUse(); final StringBounder stringBounder = ug.getStringBounder(); - ug = ug.apply(new UChangeColor(getForegroundColor())); + ug = ug.apply(getForegroundColor()); final ArrowDressing dressing1 = getArrowConfiguration().getDressing1(); final ArrowDressing dressing2 = getArrowConfiguration().getDressing2(); @@ -177,7 +175,7 @@ public class ComponentRoseArrow extends AbstractComponentRoseArrow { if (decoration == ArrowDecoration.CIRCLE) { final UEllipse circle = new UEllipse(diamCircle, diamCircle); - ug.apply(new UStroke(thinCircle)).apply(new UChangeColor(getForegroundColor())) + ug.apply(new UStroke(thinCircle)).apply(getForegroundColor()) .apply(new UTranslate(x - diamCircle / 2 - thinCircle, -diamCircle / 2 - thinCircle / 2)) .draw(circle); x += diamCircle / 2 + thinCircle; @@ -200,7 +198,7 @@ public class ComponentRoseArrow extends AbstractComponentRoseArrow { new ULine(getArrowDeltaX(), -getArrowDeltaX())); } else if (dressing.getHead() == ArrowHead.NORMAL) { final UPolygon polygon = getPolygonReverse(dressing.getPart()); - ug.apply(new UChangeBackColor(getForegroundColor())).apply(UTranslate.dx(x)).draw(polygon); + ug.apply(getForegroundColor().bg()).apply(UTranslate.dx(x)).draw(polygon); } } @@ -208,7 +206,7 @@ public class ComponentRoseArrow extends AbstractComponentRoseArrow { private void drawDressing2(UGraphic ug, double x, ArrowDressing dressing, ArrowDecoration decoration) { if (decoration == ArrowDecoration.CIRCLE) { - ug = ug.apply(new UStroke(thinCircle)).apply(new UChangeColor(getForegroundColor())); + ug = ug.apply(new UStroke(thinCircle)).apply(getForegroundColor()); final UEllipse circle = new UEllipse(diamCircle, diamCircle); ug.apply(new UTranslate(x - diamCircle / 2 + thinCircle, -diamCircle / 2 - thinCircle / 2)).draw(circle); ug = ug.apply(new UStroke()); @@ -233,7 +231,7 @@ public class ComponentRoseArrow extends AbstractComponentRoseArrow { ug = ug.apply(new UStroke()); } else if (dressing.getHead() == ArrowHead.NORMAL) { final UPolygon polygon = getPolygonNormal(dressing.getPart(), x); - ug.apply(new UChangeBackColor(getForegroundColor())).draw(polygon); + ug.apply(getForegroundColor().bg()).draw(polygon); } } diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDelayLine.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDelayLine.java index e052f4a65..68dc81fe4 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDelayLine.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDelayLine.java @@ -43,7 +43,6 @@ import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.skin.ArrowConfiguration; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.UAntiAliasing; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -61,7 +60,7 @@ public class ComponentRoseDelayLine extends AbstractComponent { @Override protected void drawInternalU(UGraphic ug, Area area) { final Dimension2D dimensionToUse = area.getDimensionToUse(); - ug = ArrowConfiguration.stroke(ug, 1, 4, 1).apply(new UChangeColor(color)); + ug = ArrowConfiguration.stroke(ug, 1, 4, 1).apply(color); final int x = (int) (dimensionToUse.getWidth() / 2); ug.apply(UAntiAliasing.ANTI_ALIASING_OFF).apply(UTranslate.dx(x)).draw(ULine.vline(dimensionToUse.getHeight())); } diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDestroy.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDestroy.java index 285503995..16ccf428a 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDestroy.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDestroy.java @@ -39,7 +39,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.skin.AbstractComponent; import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -59,7 +58,7 @@ public class ComponentRoseDestroy extends AbstractComponent { @Override protected void drawInternalU(UGraphic ug, Area area) { - ug = ug.apply(new UStroke(2)).apply(new UChangeColor(foregroundColor)); + ug = ug.apply(new UStroke(2)).apply(foregroundColor); ug.draw(new ULine(2 * crossSize, 2 * crossSize)); ug.apply(UTranslate.dy(2 * crossSize)).draw(new ULine(2 * crossSize, -2 * crossSize)); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java index 96a6cb42f..deb835cb5 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseDivider.java @@ -49,8 +49,6 @@ import net.sourceforge.plantuml.skin.AbstractTextualComponent; import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -91,7 +89,7 @@ public class ComponentRoseDivider extends AbstractTextualComponent { protected void drawInternalU(UGraphic ug, Area area) { final Dimension2D dimensionToUse = area.getDimensionToUse(); - ug = ug.apply(new UChangeBackColor(background)); + ug = ug.apply(background.bg()); if (empty) { drawSep(ug.apply(UTranslate.dy(dimensionToUse.getHeight() / 2)), dimensionToUse.getWidth()); } else { @@ -105,7 +103,7 @@ public class ComponentRoseDivider extends AbstractTextualComponent { drawSep(ug.apply(UTranslate.dy(dimensionToUse.getHeight() / 2)), dimensionToUse.getWidth()); - ug = ug.apply(new UChangeColor(borderColor)); + ug = ug.apply(borderColor); ug = ug.apply(stroke); final URectangle rect = new URectangle(textWidth + deltaX, textHeight).rounded(roundCorner); if (withShadow) { @@ -120,7 +118,7 @@ public class ComponentRoseDivider extends AbstractTextualComponent { } private void drawSep(UGraphic ug, double width) { - ug = ug.apply(new UChangeColor(background)); + ug = ug.apply(background); drawRectLong(ug.apply(UTranslate.dy(-1)), width); drawDoubleLine(ug, width); } @@ -135,7 +133,7 @@ public class ComponentRoseDivider extends AbstractTextualComponent { } private void drawDoubleLine(UGraphic ug, final double width) { - ug = ug.apply(new UStroke(stroke.getThickness() / 2)).apply(new UChangeColor(borderColor)); + ug = ug.apply(new UStroke(stroke.getThickness() / 2)).apply(borderColor); final ULine line = ULine.hline(width); ug.apply(UTranslate.dy(-1)).draw(line); ug.apply(UTranslate.dy(2)).draw(line); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java index 5bc9b0b65..d87fe87df 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingElse.java @@ -49,8 +49,6 @@ import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.skin.ArrowConfiguration; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -58,6 +56,7 @@ import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; import net.sourceforge.plantuml.ugraphic.color.HColorBackground; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class ComponentRoseGroupingElse extends AbstractTextualComponent { @@ -88,13 +87,13 @@ public class ComponentRoseGroupingElse extends AbstractTextualComponent { } final Dimension2D dimensionToUse = area.getDimensionToUse(); final URectangle rect = new URectangle(dimensionToUse.getWidth(), dimensionToUse.getHeight()); - ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(backgroundColor)).draw(rect); + ug.apply(new HColorNone()).apply(backgroundColor.bg()).draw(rect); } @Override protected void drawInternalU(UGraphic ug, Area area) { final Dimension2D dimensionToUse = area.getDimensionToUse(); - ug = ArrowConfiguration.stroke(ug, 2, 2, 1).apply(new UChangeColor(groupBorder)); + ug = ArrowConfiguration.stroke(ug, 2, 2, 1).apply(groupBorder); ug.apply(UTranslate.dy(1)).draw(ULine.hline(dimensionToUse.getWidth())); ug = ug.apply(new UStroke()); getTextBlock().drawU(ug.apply(new UTranslate(getMarginX1(), getMarginY()))); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java index df34389ad..4931f6612 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseGroupingHeader.java @@ -50,8 +50,6 @@ import net.sourceforge.plantuml.skin.AbstractTextualComponent; import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPath; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -143,11 +141,11 @@ public class ComponentRoseGroupingHeader extends AbstractTextualComponent { return; } final Dimension2D dimensionToUse = area.getDimensionToUse(); - ug = symbolContext.applyStroke(ug).apply(new UChangeColor(symbolContext.getForeColor())); + ug = symbolContext.applyStroke(ug).apply(symbolContext.getForeColor()); final URectangle rect = new URectangle(dimensionToUse.getWidth(), dimensionToUse.getHeight()) .rounded(roundCorner); rect.setDeltaShadow(symbolContext.getDeltaShadow()); - ug.apply(new UChangeBackColor(background)).draw(rect); + ug.apply(background.bg()).draw(rect); } @Override @@ -163,7 +161,7 @@ public class ComponentRoseGroupingHeader extends AbstractTextualComponent { symbolContextCorner.applyColors(ug).draw(getCorner(textWidth, textHeight)); } - ug = symbolContext.applyStroke(ug).apply(new UChangeColor(symbolContext.getForeColor())); + ug = symbolContext.applyStroke(ug).apply(symbolContext.getForeColor()); final URectangle rect = new URectangle(dimensionToUse.getWidth(), dimensionToUse.getHeight()) .rounded(roundCorner); ug.draw(rect); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseLine.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseLine.java index 5f9572a3f..cd03bf00d 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseLine.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseLine.java @@ -44,7 +44,6 @@ import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.skin.ArrowConfiguration; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -72,7 +71,7 @@ public class ComponentRoseLine extends AbstractComponent { @Override protected void drawInternalU(UGraphic ug, Area area) { final Dimension2D dimensionToUse = area.getDimensionToUse(); - ug = ug.apply(new UChangeColor(color)); + ug = ug.apply(color); if (continueLine) { ug = ug.apply(new UStroke()); } else { diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNewpage.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNewpage.java index ef8c07807..6bd47b39c 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNewpage.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseNewpage.java @@ -42,7 +42,6 @@ import net.sourceforge.plantuml.skin.AbstractComponent; import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.skin.ArrowConfiguration; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -59,7 +58,7 @@ public class ComponentRoseNewpage extends AbstractComponent { @Override protected void drawInternalU(UGraphic ug, Area area) { final Dimension2D dimensionToUse = area.getDimensionToUse(); - ug = ArrowConfiguration.stroke(ug, 2, 2, 1).apply(new UChangeColor(foregroundColor)); + ug = ArrowConfiguration.stroke(ug, 2, 2, 1).apply(foregroundColor); ug.draw(ULine.hline(dimensionToUse.getWidth())); } diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java index b2b1e64ff..8d708c5db 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseParticipant.java @@ -49,8 +49,6 @@ import net.sourceforge.plantuml.skin.Area; import net.sourceforge.plantuml.style.PName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -98,7 +96,7 @@ public class ComponentRoseParticipant extends AbstractTextualComponent { protected void drawInternalU(UGraphic ug, Area area) { final StringBounder stringBounder = ug.getStringBounder(); ug = ug.apply(UTranslate.dx(padding)); - ug = ug.apply(new UChangeBackColor(back)).apply(new UChangeColor(foregroundColor)); + ug = ug.apply(back.bg()).apply(foregroundColor); ug = ug.apply(stroke); final Shadowable rect = new URectangle(getTextWidth(stringBounder), getTextHeight(stringBounder)) .rounded(roundCorner).diagonalCorner(diagonalCorner); diff --git a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseSelfArrow.java b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseSelfArrow.java index 1e56de8c4..276698081 100644 --- a/src/net/sourceforge/plantuml/skin/rose/ComponentRoseSelfArrow.java +++ b/src/net/sourceforge/plantuml/skin/rose/ComponentRoseSelfArrow.java @@ -50,8 +50,6 @@ import net.sourceforge.plantuml.skin.ArrowDecoration; import net.sourceforge.plantuml.skin.ArrowHead; import net.sourceforge.plantuml.skin.ArrowPart; import net.sourceforge.plantuml.style.Style; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -81,7 +79,7 @@ public class ComponentRoseSelfArrow extends AbstractComponentRoseArrow { final StringBounder stringBounder = ug.getStringBounder(); final double textHeight = getTextHeight(stringBounder); - ug = ug.apply(new UChangeColor(getForegroundColor())); + ug = ug.apply(getForegroundColor()); final double xRight = arrowWidth - 3; final UGraphic ug2 = getArrowConfiguration().applyStroke(ug); @@ -93,7 +91,7 @@ public class ComponentRoseSelfArrow extends AbstractComponentRoseArrow { final UEllipse circle = new UEllipse(ComponentRoseArrow.diamCircle, ComponentRoseArrow.diamCircle); if (getArrowConfiguration().getDecoration1() == ArrowDecoration.CIRCLE) { ug2.apply(new UStroke(ComponentRoseArrow.thinCircle)) - .apply(new UChangeColor(getForegroundColor())) + .apply(getForegroundColor()) .apply(new UTranslate(x1 + 1 - ComponentRoseArrow.diamCircle / 2 - ComponentRoseArrow.thinCircle, textHeight - ComponentRoseArrow.diamCircle / 2 - ComponentRoseArrow.thinCircle / 2)) .draw(circle); @@ -101,7 +99,7 @@ public class ComponentRoseSelfArrow extends AbstractComponentRoseArrow { } if (getArrowConfiguration().getDecoration2() == ArrowDecoration.CIRCLE) { ug2.apply(new UStroke(ComponentRoseArrow.thinCircle)) - .apply(new UChangeColor(getForegroundColor())) + .apply(getForegroundColor()) .apply(new UTranslate(x2 - ComponentRoseArrow.diamCircle / 2 - ComponentRoseArrow.thinCircle, textAndArrowHeight - ComponentRoseArrow.diamCircle / 2 - ComponentRoseArrow.thinCircle / 2)) .draw(circle); @@ -137,7 +135,7 @@ public class ComponentRoseSelfArrow extends AbstractComponentRoseArrow { } else { final UPolygon polygon = getPolygon(textAndArrowHeight); - ug.apply(new UChangeBackColor(getForegroundColor())).apply(UTranslate.dx(x2)).draw(polygon); + ug.apply(getForegroundColor().bg()).apply(UTranslate.dx(x2)).draw(polygon); } diff --git a/src/net/sourceforge/plantuml/statediagram/StateDiagram.java b/src/net/sourceforge/plantuml/statediagram/StateDiagram.java index d8e437ec7..b2a9889af 100644 --- a/src/net/sourceforge/plantuml/statediagram/StateDiagram.java +++ b/src/net/sourceforge/plantuml/statediagram/StateDiagram.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.statediagram; import net.sourceforge.plantuml.ISkinSimple; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.classdiagram.AbstractEntityDiagram; import net.sourceforge.plantuml.cucadiagram.Code; diff --git a/src/net/sourceforge/plantuml/statediagram/command/CommandAddField.java b/src/net/sourceforge/plantuml/statediagram/command/CommandAddField.java index 6e5a50459..bc704d1eb 100644 --- a/src/net/sourceforge/plantuml/statediagram/command/CommandAddField.java +++ b/src/net/sourceforge/plantuml/statediagram/command/CommandAddField.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.statediagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.command.CommandExecutionResult; import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; diff --git a/src/net/sourceforge/plantuml/statediagram/command/CommandCreatePackageState.java b/src/net/sourceforge/plantuml/statediagram/command/CommandCreatePackageState.java index 62e821c00..b8db908bd 100644 --- a/src/net/sourceforge/plantuml/statediagram/command/CommandCreatePackageState.java +++ b/src/net/sourceforge/plantuml/statediagram/command/CommandCreatePackageState.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.statediagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/statediagram/command/CommandCreateState.java b/src/net/sourceforge/plantuml/statediagram/command/CommandCreateState.java index 5e60796d5..437376169 100644 --- a/src/net/sourceforge/plantuml/statediagram/command/CommandCreateState.java +++ b/src/net/sourceforge/plantuml/statediagram/command/CommandCreateState.java @@ -36,7 +36,6 @@ package net.sourceforge.plantuml.statediagram.command; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.UrlBuilder; import net.sourceforge.plantuml.UrlBuilder.ModeUrl; diff --git a/src/net/sourceforge/plantuml/statediagram/command/CommandLinkState.java b/src/net/sourceforge/plantuml/statediagram/command/CommandLinkState.java index 2f512c32a..72274b0c5 100644 --- a/src/net/sourceforge/plantuml/statediagram/command/CommandLinkState.java +++ b/src/net/sourceforge/plantuml/statediagram/command/CommandLinkState.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.statediagram.command; import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.UmlDiagramType; import net.sourceforge.plantuml.command.CommandExecutionResult; diff --git a/src/net/sourceforge/plantuml/stats/XmlConverter.java b/src/net/sourceforge/plantuml/stats/XmlConverter.java index 90770758a..3422ef1d6 100644 --- a/src/net/sourceforge/plantuml/stats/XmlConverter.java +++ b/src/net/sourceforge/plantuml/stats/XmlConverter.java @@ -51,15 +51,15 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + import net.sourceforge.plantuml.BackSlash; import net.sourceforge.plantuml.stats.api.Stats; import net.sourceforge.plantuml.stats.api.StatsColumn; import net.sourceforge.plantuml.stats.api.StatsLine; import net.sourceforge.plantuml.stats.api.StatsTable; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - public class XmlConverter { private final DateFormat formatter = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); diff --git a/src/net/sourceforge/plantuml/style/Style.java b/src/net/sourceforge/plantuml/style/Style.java index fcf3f01dc..2ad5381c5 100644 --- a/src/net/sourceforge/plantuml/style/Style.java +++ b/src/net/sourceforge/plantuml/style/Style.java @@ -50,11 +50,11 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.graphic.color.Colors; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorSet; public class Style { @@ -95,7 +95,8 @@ public class Style { // if (this.name.equals(other.name)) { // return new Style(this.kind.add(other.kind), this.name, both); // } - // return new Style(this.kind.add(other.kind), this.name + "," + other.name, both); + // return new Style(this.kind.add(other.kind), this.name + "," + other.name, + // both); } public Style eventuallyOverride(PName param, HColor color) { @@ -222,7 +223,12 @@ public class Style { } public UGraphic applyStrokeAndLineColor(UGraphic ug, HColorSet colorSet) { - ug = ug.apply(new UChangeColor(value(PName.LineColor).asColor(colorSet))); + final HColor color = value(PName.LineColor).asColor(colorSet); + if (color == null) { + ug = ug.apply(new HColorNone()); + } else { + ug = ug.apply(color); + } ug = ug.apply(getStroke()); return ug; } diff --git a/src/net/sourceforge/plantuml/sudoku/GraphicsSudoku.java b/src/net/sourceforge/plantuml/sudoku/GraphicsSudoku.java index be5626062..812916d6a 100644 --- a/src/net/sourceforge/plantuml/sudoku/GraphicsSudoku.java +++ b/src/net/sourceforge/plantuml/sudoku/GraphicsSudoku.java @@ -56,13 +56,12 @@ import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.png.PngIO; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; import net.sourceforge.plantuml.ugraphic.eps.UGraphicEps; import net.sourceforge.plantuml.ugraphic.g2d.UGraphicG2d; @@ -145,7 +144,7 @@ public class GraphicsSudoku { } } - ug = ug.apply(new UChangeBackColor(HColorUtils.BLACK)).apply(new UChangeColor(null)); + ug = ug.apply(HColorUtils.BLACK.bg()).apply(new HColorNone()); for (int i = 0; i < 10; i++) { final boolean bold = i % boldWidth == 0; final int w = bold ? boldWidth : 1; diff --git a/src/net/sourceforge/plantuml/svek/Bibliotekon.java b/src/net/sourceforge/plantuml/svek/Bibliotekon.java index 7122bf6ca..f0ba99438 100644 --- a/src/net/sourceforge/plantuml/svek/Bibliotekon.java +++ b/src/net/sourceforge/plantuml/svek/Bibliotekon.java @@ -43,7 +43,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -import net.sourceforge.plantuml.cucadiagram.Code; import net.sourceforge.plantuml.cucadiagram.IEntity; import net.sourceforge.plantuml.cucadiagram.IGroup; import net.sourceforge.plantuml.cucadiagram.ILeaf; diff --git a/src/net/sourceforge/plantuml/svek/Boundary.java b/src/net/sourceforge/plantuml/svek/Boundary.java index eff83f160..31536e78d 100644 --- a/src/net/sourceforge/plantuml/svek/Boundary.java +++ b/src/net/sourceforge/plantuml/svek/Boundary.java @@ -41,11 +41,11 @@ import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.SymbolContext; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPath; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class Boundary extends AbstractTextBlock { @@ -80,7 +80,7 @@ public class Boundary extends AbstractTextBlock { path.moveTo(0, radius); path.lineTo(left, radius); path.setDeltaShadow(symbolContext.getDeltaShadow()); - ug.apply(new UTranslate(x, y)).apply(new UChangeBackColor(null)).draw(path); + ug.apply(new UTranslate(x, y)).apply(new HColorNone().bg()).draw(path); // final ULine line1 = ULine.dy(radius * 2); // line1.setDeltaShadow(deltaShadow); diff --git a/src/net/sourceforge/plantuml/svek/CircleInterface2.java b/src/net/sourceforge/plantuml/svek/CircleInterface2.java index 8f0c7bd86..66906fded 100644 --- a/src/net/sourceforge/plantuml/svek/CircleInterface2.java +++ b/src/net/sourceforge/plantuml/svek/CircleInterface2.java @@ -41,8 +41,6 @@ import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -72,8 +70,8 @@ public class CircleInterface2 extends AbstractTextBlock implements TextBlock { double y = 0; x += margin; y += margin; - ug = ug.apply(new UStroke(thickness)).apply(new UChangeBackColor(backgroundColor)) - .apply(new UChangeColor(foregroundColor)); + ug = ug.apply(new UStroke(thickness)).apply(backgroundColor.bg()) + .apply(foregroundColor); final UEllipse circle = new UEllipse(radius * 2, radius * 2); circle.setDeltaShadow(deltaShadow); ug.apply(new UTranslate(x, y)).draw(circle); diff --git a/src/net/sourceforge/plantuml/svek/Cluster.java b/src/net/sourceforge/plantuml/svek/Cluster.java index 8afce16cf..259571322 100644 --- a/src/net/sourceforge/plantuml/svek/Cluster.java +++ b/src/net/sourceforge/plantuml/svek/Cluster.java @@ -82,8 +82,6 @@ import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svek.image.EntityImageState; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UComment; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -398,7 +396,7 @@ public class Cluster implements Moveable { } final URectangle rect = new URectangle(maxX - minX, maxY - minY); rect.setDeltaShadow(shadowing); - ug = ug.apply(new UChangeBackColor(backColor)).apply(new UChangeColor(borderColor)); + ug = ug.apply(backColor.bg()).apply(borderColor); ug.apply(new UStroke(2)).apply(new UTranslate(minX, minY)).draw(rect); } finally { @@ -457,7 +455,7 @@ public class Cluster implements Moveable { ztitle.drawU(ug.apply(UTranslate.dx(xTitle))); } final ULine line = ULine.vline(maxY - minY); - ug = ug.apply(new UChangeColor(borderColor)); + ug = ug.apply(borderColor); ug.apply(UTranslate.dx(minX)).draw(line); ug.apply(UTranslate.dx(maxX)).draw(line); @@ -502,7 +500,7 @@ public class Cluster implements Moveable { final Stereotype stereotype = group.getStereotype(); final boolean withSymbol = stereotype != null && stereotype.isWithOOSymbol(); if (withSymbol) { - EntityImageState.drawSymbol(ug.apply(new UChangeColor(borderColor)), maxX, maxY); + EntityImageState.drawSymbol(ug.apply(borderColor), maxX, maxY); } } diff --git a/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java b/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java index abecb94b0..fc137c412 100644 --- a/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java +++ b/src/net/sourceforge/plantuml/svek/ConcurrentStateImage.java @@ -46,7 +46,6 @@ import net.sourceforge.plantuml.ISkinParam; import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.skin.rose.Rose; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -126,7 +125,7 @@ public final class ConcurrentStateImage extends AbstractTextBlock implements IEn final Dimension2D dim = inner.calculateDimension(stringBounder); ug = ug.apply(separator.move(dim)); if (i < inners.size() - 1) { - separator.drawSeparator(ug.apply(new UChangeColor(dotColor)), dimTotal); + separator.drawSeparator(ug.apply(dotColor), dimTotal); } } diff --git a/src/net/sourceforge/plantuml/svek/Control.java b/src/net/sourceforge/plantuml/svek/Control.java index 6cd032a9e..8bf4b9deb 100644 --- a/src/net/sourceforge/plantuml/svek/Control.java +++ b/src/net/sourceforge/plantuml/svek/Control.java @@ -42,7 +42,6 @@ import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.SymbolContext; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; @@ -71,7 +70,7 @@ public class Control extends AbstractTextBlock implements TextBlock { ug.apply(new UTranslate(x, y)).draw(circle); ug = ug.apply(new UStroke()); - ug = ug.apply(new UChangeBackColor(symbolContext.getForeColor())); + ug = ug.apply(symbolContext.getForeColor().bg()); final UPolygon polygon = new UPolygon(); polygon.addPoint(0, 0); final int xWing = 6; diff --git a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java index 002324356..85ae8d800 100644 --- a/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java +++ b/src/net/sourceforge/plantuml/svek/CucaDiagramFileMakerSvek2InternalImage.java @@ -45,7 +45,6 @@ import net.sourceforge.plantuml.cucadiagram.Stereotype; import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.skin.rose.Rose; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -124,7 +123,7 @@ public final class CucaDiagramFileMakerSvek2InternalImage extends AbstractTextBl final Dimension2D dim = inner.calculateDimension(stringBounder); ug = ug.apply(separator.move(dim)); if (i < inners.size() - 1) { - separator.drawSeparator(ug.apply(new UChangeColor(dotColor)), dimTotal); + separator.drawSeparator(ug.apply(dotColor), dimTotal); } } diff --git a/src/net/sourceforge/plantuml/svek/GroupPngMakerActivity.java b/src/net/sourceforge/plantuml/svek/GroupPngMakerActivity.java index d6337112a..dec8a503b 100644 --- a/src/net/sourceforge/plantuml/svek/GroupPngMakerActivity.java +++ b/src/net/sourceforge/plantuml/svek/GroupPngMakerActivity.java @@ -54,7 +54,6 @@ import net.sourceforge.plantuml.cucadiagram.Link; import net.sourceforge.plantuml.cucadiagram.Stereotype; import net.sourceforge.plantuml.cucadiagram.SuperGroup; import net.sourceforge.plantuml.cucadiagram.dot.DotData; -import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.skin.rose.Rose; diff --git a/src/net/sourceforge/plantuml/svek/InnerActivity.java b/src/net/sourceforge/plantuml/svek/InnerActivity.java index 90e36cc3a..ba82a8377 100644 --- a/src/net/sourceforge/plantuml/svek/InnerActivity.java +++ b/src/net/sourceforge/plantuml/svek/InnerActivity.java @@ -39,8 +39,6 @@ import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -65,7 +63,7 @@ public final class InnerActivity extends AbstractTextBlock implements IEntityIma public void drawU(UGraphic ug) { final Dimension2D total = calculateDimension(ug.getStringBounder()); - ug = ug.apply(new UChangeBackColor(backColor)).apply(new UChangeColor(borderColor)) + ug = ug.apply(backColor.bg()).apply(borderColor) .apply(new UStroke(THICKNESS_BORDER)); final URectangle rect = new URectangle(total.getWidth(), total.getHeight()).rounded(IEntityImage.CORNER); rect.setDeltaShadow(shadowing); diff --git a/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java b/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java index 837ee82bb..77f9b49c3 100644 --- a/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java +++ b/src/net/sourceforge/plantuml/svek/InnerStateAutonom.java @@ -44,7 +44,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.TextBlockWidth; import net.sourceforge.plantuml.svek.image.EntityImageState; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -99,7 +98,7 @@ public final class InnerStateAutonom extends AbstractTextBlock implements IEntit im.drawU(ug.apply(new UTranslate(IEntityImage.MARGIN, spaceYforURL))); if (withSymbol) { - EntityImageState.drawSymbol(ug.apply(new UChangeColor(borderColor)), total.getWidth(), total.getHeight()); + EntityImageState.drawSymbol(ug.apply(borderColor), total.getWidth(), total.getHeight()); } diff --git a/src/net/sourceforge/plantuml/svek/Line.java b/src/net/sourceforge/plantuml/svek/Line.java index 0490d3722..4d0868b62 100644 --- a/src/net/sourceforge/plantuml/svek/Line.java +++ b/src/net/sourceforge/plantuml/svek/Line.java @@ -91,15 +91,13 @@ import net.sourceforge.plantuml.svek.extremity.ExtremityFactory; import net.sourceforge.plantuml.svek.extremity.ExtremityFactoryExtends; import net.sourceforge.plantuml.svek.extremity.ExtremityOther; import net.sourceforge.plantuml.svek.image.EntityImageNoteLink; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UPolygon; -import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class Line implements Moveable, Hideable { @@ -698,7 +696,7 @@ public class Line implements Moveable, Hideable { color = this.link.getSpecificColor(); } - ug = ug.apply(new UChangeBackColor(null)).apply(new UChangeColor(color)); + ug = ug.apply(new HColorNone().bg()).apply(color); final LinkType linkType = link.getType(); UStroke stroke = linkType.getStroke3(defaultThickness); if (link.getColors() != null && link.getColors().getSpecificLineStroke() != null) { @@ -742,7 +740,7 @@ public class Line implements Moveable, Hideable { drawRainbow(ug.apply(new UTranslate(x, y)), color, todraw, link.getSupplementaryColors(), stroke); - ug = ug.apply(new UStroke()).apply(new UChangeColor(color)); + ug = ug.apply(new UStroke()).apply(color); if (this.labelText != null && this.labelXY != null && link.getNoteLinkStrategy() != NoteLinkStrategy.HALF_NOT_PRINTED) { @@ -829,28 +827,28 @@ public class Line implements Moveable, Hideable { final LinkType linkType = link.getType(); if (this.extremity2 != null) { - UGraphic ug2 = ug.apply(new UChangeColor(color)).apply(stroke.onlyThickness()); + UGraphic ug2 = ug.apply(color).apply(stroke.onlyThickness()); if (linkType.getDecor1().isFill()) { - ug2 = ug2.apply(new UChangeBackColor(color)); + ug2 = ug2.apply(color.bg()); } else { - ug2 = ug2.apply(new UChangeBackColor(null)); + ug2 = ug2.apply(new HColorNone().bg()); } // System.err.println("Line::draw EXTREMITY1"); this.extremity2.drawU(ug2); } if (this.extremity1 != null) { - UGraphic ug2 = ug.apply(new UChangeColor(color)).apply(stroke.onlyThickness()); + UGraphic ug2 = ug.apply(color).apply(stroke.onlyThickness()); if (linkType.getDecor2().isFill()) { - ug2 = ug2.apply(new UChangeBackColor(color)); + ug2 = ug2.apply(color.bg()); } else { - ug2 = ug2.apply(new UChangeBackColor(null)); + ug2 = ug2.apply(new HColorNone().bg()); } // System.err.println("Line::draw EXTREMITY2"); this.extremity1.drawU(ug2); } int i = 0; for (Colors colors : supplementaryColors) { - ug.apply(new UTranslate(2 * (i + 1), 2 * (i + 1))).apply(new UChangeColor(colors.getColor(ColorType.LINE))) + ug.apply(new UTranslate(2 * (i + 1), 2 * (i + 1))).apply(colors.getColor(ColorType.LINE)) .draw(todraw); i++; } diff --git a/src/net/sourceforge/plantuml/svek/Node.java b/src/net/sourceforge/plantuml/svek/Node.java index 06fc8ec28..d6601e32d 100644 --- a/src/net/sourceforge/plantuml/svek/Node.java +++ b/src/net/sourceforge/plantuml/svek/Node.java @@ -207,12 +207,12 @@ public class Node implements Positionable, IShapePseudo, Hideable { sb.append(""); double position = 0; - for (Map.Entry ent : ports.getAll().entrySet()) { - final String portName = ent.getKey(); + for (Map.Entry ent : ports.getAllWithEncodedPortId().entrySet()) { + final String portId = ent.getKey(); final PortGeometry geom = ent.getValue(); final double missing = geom.getPosition() - position; appendTr(sb, null, missing); - appendTr(sb, portName, geom.getHeight()); + appendTr(sb, portId, geom.getHeight()); position = geom.getLastY(); } appendTr(sb, null, getHeight() - position); @@ -222,15 +222,15 @@ public class Node implements Positionable, IShapePseudo, Hideable { SvekUtils.println(sb); } - private void appendTr(StringBuilder sb, final String portName, final double height) { + private void appendTr(StringBuilder sb, String portId, double height) { if (height <= 0) { return; } sb.append(""); sb.append(""); diff --git a/src/net/sourceforge/plantuml/svek/Ports.java b/src/net/sourceforge/plantuml/svek/Ports.java index 63f97143f..b90bd086d 100644 --- a/src/net/sourceforge/plantuml/svek/Ports.java +++ b/src/net/sourceforge/plantuml/svek/Ports.java @@ -38,23 +38,29 @@ package net.sourceforge.plantuml.svek; import java.util.LinkedHashMap; import java.util.Map; +import net.sourceforge.plantuml.SignatureUtils; + public class Ports { - private final Map all = new LinkedHashMap(); + private final Map ids = new LinkedHashMap(); public void addThis(Ports other) { - all.putAll(other.all); + ids.putAll(other.ids); + } + + public static String encodePortNameToId(String portName) { + return "p" + SignatureUtils.getMD5Hex(portName); } @Override public String toString() { - return all.toString(); + return ids.toString(); } public Ports translateY(double deltaY) { final Ports result = new Ports(); - for (Map.Entry ent : all.entrySet()) { - result.all.put(ent.getKey(), ent.getValue().translateY(deltaY)); + for (Map.Entry ent : ids.entrySet()) { + result.ids.put(ent.getKey(), ent.getValue().translateY(deltaY)); } return result; } @@ -63,11 +69,12 @@ public class Ports { if (portName == null) { throw new IllegalArgumentException(); } - all.put(portName, new PortGeometry(position, height)); + final String id = encodePortNameToId(portName); + ids.put(id, new PortGeometry(position, height)); } - public Map getAll() { - return all; + public Map getAllWithEncodedPortId() { + return ids; } } \ No newline at end of file diff --git a/src/net/sourceforge/plantuml/svek/RoundedContainer.java b/src/net/sourceforge/plantuml/svek/RoundedContainer.java index ad948703b..8c87e5c29 100644 --- a/src/net/sourceforge/plantuml/svek/RoundedContainer.java +++ b/src/net/sourceforge/plantuml/svek/RoundedContainer.java @@ -37,8 +37,6 @@ package net.sourceforge.plantuml.svek; import java.awt.geom.Dimension2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -72,7 +70,7 @@ public final class RoundedContainer { public void drawU(UGraphic ug, boolean shadowing) { - ug = ug.apply(new UChangeBackColor(backColor)).apply(new UChangeColor(borderColor)); + ug = ug.apply(backColor.bg()).apply(borderColor); final URectangle rect = new URectangle(dim.getWidth(), dim.getHeight()).rounded(IEntityImage.CORNER); if (shadowing) { rect.setDeltaShadow(3.0); @@ -81,13 +79,13 @@ public final class RoundedContainer { final double yLine = titleHeight + attributeHeight; - ug = ug.apply(new UChangeBackColor(imgBackcolor)); + ug = ug.apply(imgBackcolor.bg()); final double thickness = stroke.getThickness(); final URectangle inner = new URectangle(dim.getWidth() - 4 * thickness, dim.getHeight() - titleHeight - 4 * thickness - attributeHeight).rounded(IEntityImage.CORNER); - ug.apply(new UChangeColor(imgBackcolor)).apply(new UTranslate(2 * thickness, yLine + 2 * thickness)) + ug.apply(imgBackcolor).apply(new UTranslate(2 * thickness, yLine + 2 * thickness)) .draw(inner); if (titleHeight > 0) { diff --git a/src/net/sourceforge/plantuml/svek/SvekResult.java b/src/net/sourceforge/plantuml/svek/SvekResult.java index fe9795448..00c45e6e9 100644 --- a/src/net/sourceforge/plantuml/svek/SvekResult.java +++ b/src/net/sourceforge/plantuml/svek/SvekResult.java @@ -51,7 +51,6 @@ 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.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UHidden; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -93,7 +92,7 @@ public final class SvekResult extends AbstractTextBlock implements IEntityImage, final IEntityImage image = node.getImage(); image.drawU(ug2.apply(new UTranslate(minX, minY))); if (image instanceof Untranslated) { - ((Untranslated) image).drawUntranslated(ug.apply(new UChangeColor(color)), minX, minY); + ((Untranslated) image).drawUntranslated(ug.apply(color), minX, minY); } // shape.getImage().drawNeighborhood(ug2, minX, minY); } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrow.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrow.java index 08f6892d7..896d2dc6a 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrow.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrow.java @@ -37,31 +37,31 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; class ExtremityArrow extends Extremity { private UPolygon polygon = new UPolygon(); private final ULine line; private final Point2D contact; - + @Override public Point2D somePoint() { return contact; } - public ExtremityArrow(Point2D p1, double angle, Point2D center) { angle = manageround(angle); final int xContact = buildPolygon(); polygon.rotate(angle + Math.PI / 2); polygon = polygon.translate(p1.getX(), p1.getY()); - contact = new Point2D.Double(p1.getX() - xContact * Math.cos(angle + Math.PI / 2), p1.getY() - xContact - * Math.sin(angle + Math.PI / 2)); + contact = new Point2D.Double(p1.getX() - xContact * Math.cos(angle + Math.PI / 2), + p1.getY() - xContact * Math.sin(angle + Math.PI / 2)); this.line = new ULine(center.getX() - contact.getX(), center.getY() - contact.getY()); } @@ -87,12 +87,16 @@ class ExtremityArrow extends Extremity { } public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeBackColor(ug.getParam().getColor())); + final HColor color = ug.getParam().getColor(); + if (color == null) { + ug = ug.apply(new HColorNone().bg()); + } else { + ug = ug.apply(color.bg()); + } ug.draw(polygon); if (line != null && line.getLength() > 2) { - ug.apply(new UTranslate(contact.getX(), contact.getY())).draw(line); + ug.apply(new UTranslate(contact)).draw(line); } } - } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrowAndCircle.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrowAndCircle.java index d03bcea2a..7875e938b 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrowAndCircle.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityArrowAndCircle.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; @@ -51,13 +50,12 @@ class ExtremityArrowAndCircle extends Extremity { private final Point2D contact; private final Point2D dest; private final double radius = 5; - + @Override public Point2D somePoint() { return contact; } - public ExtremityArrowAndCircle(Point2D p1, double angle, Point2D center) { angle = manageround(angle); polygon.addPoint(0, 0); @@ -71,14 +69,15 @@ class ExtremityArrowAndCircle extends Extremity { polygon.addPoint(0, 0); polygon.rotate(angle + Math.PI / 2); polygon = polygon.translate(p1.getX() + radius * Math.sin(angle), p1.getY() - radius * Math.cos(angle)); - contact = new Point2D.Double(p1.getX() - xContact * Math.cos(angle + Math.PI / 2), p1.getY() - xContact - * Math.sin(angle + Math.PI / 2)); - // this.line = new ULine(center.getX() - contact.getX(), center.getY() - contact.getY()); + contact = new Point2D.Double(p1.getX() - xContact * Math.cos(angle + Math.PI / 2), + p1.getY() - xContact * Math.sin(angle + Math.PI / 2)); } public void drawU(UGraphic ug) { - ug.apply(new UChangeBackColor(ug.getParam().getColor())).draw(polygon); - ug.apply(new UStroke(1.5)).apply(new UChangeBackColor(HColorUtils.WHITE)).apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new UEllipse(radius * 2, radius * 2)); + ug.apply(HColorUtils.changeBack(ug)).draw(polygon); + ug.apply(new UStroke(1.5)).apply(HColorUtils.WHITE.bg()) + .apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)) + .draw(new UEllipse(radius * 2, radius * 2)); } } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircle.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircle.java index 3868c388b..19c141928 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircle.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircle.java @@ -38,7 +38,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -72,9 +71,9 @@ class ExtremityCircle extends Extremity { ug = ug.apply(new UStroke(1.5)); if (fill) { - ug = ug.apply(new UChangeBackColor(ug.getParam().getColor())); + ug = ug.apply(HColorUtils.changeBack(ug)); } else { - ug = ug.apply(new UChangeBackColor(HColorUtils.WHITE)); + ug = ug.apply(HColorUtils.WHITE.bg()); } ug = ug.apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)); diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleConnect.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleConnect.java index 20f94a9e1..a2bd09396 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleConnect.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleConnect.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -66,7 +65,7 @@ class ExtremityCircleConnect extends Extremity { } public void drawU(UGraphic ug) { - ug = ug.apply(new UStroke(1.5)).apply(new UChangeBackColor(HColorUtils.WHITE)); + ug = ug.apply(new UStroke(1.5)).apply(HColorUtils.WHITE.bg()); ug.apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new UEllipse(radius * 2, radius * 2)); final double deg = -ortho * 180 / Math.PI + 90 - 45; diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleCross.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleCross.java index 7266fa220..dbe2c7a26 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleCross.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityCircleCross.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -64,7 +63,7 @@ class ExtremityCircleCross extends Extremity { } public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeBackColor(HColorUtils.WHITE)); + ug = ug.apply(HColorUtils.WHITE.bg()); ug.apply(new UStroke(1.5)).apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new UEllipse(radius * 2, radius * 2)); drawLine(ug, 0, 0, getPointOnCircle(Math.PI / 4), getPointOnCircle(Math.PI + Math.PI / 4)); drawLine(ug, 0, 0, getPointOnCircle(-Math.PI / 4), getPointOnCircle(Math.PI - Math.PI / 4)); diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityDiamond.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityDiamond.java index 4c608a2eb..f6a4a22d2 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityDiamond.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityDiamond.java @@ -37,10 +37,10 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorUtils; class ExtremityDiamond extends Extremity { @@ -72,9 +72,9 @@ class ExtremityDiamond extends Extremity { public void drawU(UGraphic ug) { if (fill) { - ug = ug.apply(new UChangeBackColor(ug.getParam().getColor())); + ug = ug.apply(HColorUtils.changeBack(ug)); } else { - ug = ug.apply(new UChangeBackColor(backgroundColor)); + ug = ug.apply(backgroundColor.bg()); } ug.draw(polygon); } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtends.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtends.java index 6f24decb5..8f60ef281 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtends.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityExtends.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.color.HColor; @@ -68,7 +67,7 @@ class ExtremityExtends extends Extremity { } public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeBackColor(fill)); + ug = ug.apply(fill.bg()); ug.draw(polygon); } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityHalfArrow.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityHalfArrow.java index 3068b181b..dc2360feb 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityHalfArrow.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityHalfArrow.java @@ -38,10 +38,10 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.AffineTransform; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColorUtils; class ExtremityHalfArrow extends Extremity { @@ -71,7 +71,7 @@ class ExtremityHalfArrow extends Extremity { } public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeBackColor(ug.getParam().getColor())); + ug = ug.apply(HColorUtils.changeBack(ug)); if (line != null && line.getLength() > 2) { ug.apply(new UTranslate(contact.getX(), contact.getY())).draw(line); ug.apply(new UTranslate(contact.getX(), contact.getY())).draw(otherLine); diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityParenthesis2.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityParenthesis2.java index f8aef280f..d4945eeda 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityParenthesis2.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityParenthesis2.java @@ -72,9 +72,9 @@ class ExtremityParenthesis2 extends Extremity { // final Point2D other = new Point2D.Double(contact.getX() + 10 * Math.cos(deg), contact.getY() + 10 // * Math.sin(deg)); // final ULine line = new ULine(1, 1); - // ug.apply(new UChangeColor(HtmlColorUtils.GREEN)).apply(new UTranslate(contact.getX(), contact.getY())) + // ug.apply(UChangeColor.nnn(HtmlColorUtils.GREEN)).apply(new UTranslate(contact.getX(), contact.getY())) // .draw(line); - // ug.apply(new UChangeColor(HtmlColorUtils.BLACK)).apply(new UTranslate(center.getX(), + // ug.apply(UChangeColor.nnn(HtmlColorUtils.BLACK)).apply(new UTranslate(center.getX(), // center.getY())).draw(line); // // final UEllipse arc1 = new UEllipse(2 * radius2, 2 * radius2, deg, 2 * ang); // // ug.apply(new UStroke(1.5)).apply(new UTranslate(dest.getX() - radius2, dest.getY() - radius2)).draw(arc1); diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityPlus.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityPlus.java index ce46a5d68..2d77122a7 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityPlus.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityPlus.java @@ -38,7 +38,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -73,7 +72,7 @@ class ExtremityPlus extends Extremity { } public void drawU(UGraphic ug) { - ug.apply(new UChangeBackColor(HColorUtils.WHITE)).apply(new UTranslate(px + 0, py + 0)).draw(circle); + ug.apply(HColorUtils.WHITE.bg()).apply(new UTranslate(px + 0, py + 0)).draw(circle); drawLine(ug, 0, 0, getPointOnCircle(angle - Math.PI / 2), getPointOnCircle(angle + Math.PI / 2)); drawLine(ug, 0, 0, getPointOnCircle(angle), getPointOnCircle(angle + Math.PI)); } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremitySquarre.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremitySquarre.java index b74f5f50c..c583b49d6 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremitySquarre.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremitySquarre.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -59,7 +58,7 @@ class ExtremitySquarre extends Extremity { } public void drawU(UGraphic ug) { - ug.apply(new UStroke(1.5)).apply(new UChangeBackColor(HColorUtils.WHITE)).apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new URectangle(radius * 2, radius * 2)); + ug.apply(new UStroke(1.5)).apply(HColorUtils.WHITE.bg()).apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new URectangle(radius * 2, radius * 2)); } } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine1.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine1.java index 7b05854f1..6e9ce86c8 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine1.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine1.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -75,8 +74,8 @@ class ExtremityStateLine1 extends Extremity { } public void drawU(UGraphic ug) { - ug.apply(new UChangeBackColor(ug.getParam().getColor())).apply(new UTranslate(-radius * Math.cos(angle), -radius * Math.sin(angle))).draw(polygon); - ug = ug.apply(new UChangeBackColor(HColorUtils.WHITE)); + ug.apply(ug.getParam().getColor().bg()).apply(new UTranslate(-radius * Math.cos(angle), -radius * Math.sin(angle))).draw(polygon); + ug = ug.apply(HColorUtils.WHITE.bg()); ug.apply(new UStroke(1.5)).apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new UEllipse(radius * 2, radius * 2)); drawLine(ug, getPointOnCircle(dest.getX(), dest.getY(), Math.PI / 4), getPointOnCircle(dest.getX(), dest.getY(), Math.PI + Math.PI / 4)); diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine2.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine2.java index c56cb4665..82fff67e1 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine2.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityStateLine2.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; @@ -74,8 +73,8 @@ class ExtremityStateLine2 extends Extremity { } public void drawU(UGraphic ug) { - ug.apply(new UChangeBackColor(ug.getParam().getColor())).apply(new UTranslate(-radius * Math.cos(angle), -radius * Math.sin(angle))).draw(polygon); - ug.apply(new UStroke(1.5)).apply(new UChangeBackColor(HColorUtils.WHITE)).apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new UEllipse(radius * 2, radius * 2)); + ug.apply(ug.getParam().getColor().bg()).apply(new UTranslate(-radius * Math.cos(angle), -radius * Math.sin(angle))).draw(polygon); + ug.apply(new UStroke(1.5)).apply(HColorUtils.WHITE.bg()).apply(new UTranslate(dest.getX() - radius, dest.getY() - radius)).draw(new UEllipse(radius * 2, radius * 2)); } } diff --git a/src/net/sourceforge/plantuml/svek/extremity/ExtremityTriangle.java b/src/net/sourceforge/plantuml/svek/extremity/ExtremityTriangle.java index 6cc8ae3ca..e0ae89594 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/ExtremityTriangle.java +++ b/src/net/sourceforge/plantuml/svek/extremity/ExtremityTriangle.java @@ -37,22 +37,21 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; +import net.sourceforge.plantuml.ugraphic.color.HColorUtils; class ExtremityTriangle extends Extremity { private UPolygon polygon = new UPolygon(); private final boolean fill; private final Point2D contact; - + @Override public Point2D somePoint() { return contact; } - public ExtremityTriangle(Point2D p1, double angle, boolean fill) { this.fill = fill; this.contact = new Point2D.Double(p1.getX(), p1.getY()); @@ -69,7 +68,7 @@ class ExtremityTriangle extends Extremity { public void drawU(UGraphic ug) { if (fill) { - ug = ug.apply(new UChangeBackColor(ug.getParam().getColor())); + ug = ug.apply(HColorUtils.changeBack(ug)); } ug.draw(polygon); } diff --git a/src/net/sourceforge/plantuml/svek/extremity/MiddleCircle.java b/src/net/sourceforge/plantuml/svek/extremity/MiddleCircle.java index ac217bd68..1a021aa0a 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/MiddleCircle.java +++ b/src/net/sourceforge/plantuml/svek/extremity/MiddleCircle.java @@ -37,7 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -62,7 +61,7 @@ class MiddleCircle extends Extremity { public void drawU(UGraphic ug) { - ug.apply(new UChangeBackColor(backColor)).apply(new UStroke(1.5)).apply(new UTranslate(-radius, -radius)).draw(circle); + ug.apply(backColor.bg()).apply(new UStroke(1.5)).apply(new UTranslate(-radius, -radius)).draw(circle); } } diff --git a/src/net/sourceforge/plantuml/svek/extremity/MiddleCircleCircled.java b/src/net/sourceforge/plantuml/svek/extremity/MiddleCircleCircled.java index 36be21c70..233b61396 100644 --- a/src/net/sourceforge/plantuml/svek/extremity/MiddleCircleCircled.java +++ b/src/net/sourceforge/plantuml/svek/extremity/MiddleCircleCircled.java @@ -37,8 +37,6 @@ package net.sourceforge.plantuml.svek.extremity; import java.awt.geom.Point2D; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -71,11 +69,11 @@ class MiddleCircleCircled extends Extremity { public void drawU(UGraphic ug) { if (mode == MiddleCircleCircledMode.BOTH) { - ug.apply(new UChangeColor(diagramBackColor)).apply(new UChangeBackColor(diagramBackColor)) + ug.apply(diagramBackColor).apply(diagramBackColor.bg()) .apply(new UTranslate(-radius2, -radius2)).draw(bigcircle); } - ug = ug.apply(new UChangeBackColor(backColor)); + ug = ug.apply(backColor.bg()); ug = ug.apply(new UStroke(1.5)); final double d = 0; diff --git a/src/net/sourceforge/plantuml/svek/image/ConnectedCircle.java b/src/net/sourceforge/plantuml/svek/image/ConnectedCircle.java index e3559c749..a385a2cee 100644 --- a/src/net/sourceforge/plantuml/svek/image/ConnectedCircle.java +++ b/src/net/sourceforge/plantuml/svek/image/ConnectedCircle.java @@ -40,8 +40,6 @@ import java.util.ArrayList; import java.util.List; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -65,7 +63,7 @@ public class ConnectedCircle implements UDrawable { final UEllipse part = new UEllipse(2 * radius, 2 * radius, angle - delta, 2 * delta); ug.draw(part); } - ug = ug.apply(new UChangeColor(HColorUtils.GREEN)).apply(new UChangeBackColor(HColorUtils.GREEN)); + ug = ug.apply(HColorUtils.GREEN).apply(HColorUtils.GREEN.bg()); for (Point2D pt : points) { final UTranslate tr = new UTranslate(pt); // ug.apply(tr).draw(new UEllipse(2, 2)); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java b/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java index 338cad21c..2e49f0727 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageActivity.java @@ -60,8 +60,6 @@ import net.sourceforge.plantuml.svek.Bibliotekon; import net.sourceforge.plantuml.svek.Node; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -172,8 +170,8 @@ public class EntityImageActivity extends AbstractEntityImage { backcolor = style.value(PName.BackGroundColor).asColor(getSkinParam().getIHtmlColorSet()); } } - ug = ug.apply(new UChangeColor(borderColor)); - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(borderColor); + ug = ug.apply(backcolor.bg()); return ug; } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java index 5db199002..ac04101f2 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociation.java @@ -45,8 +45,6 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -74,9 +72,9 @@ public class EntityImageAssociation extends AbstractEntityImage { diams.addPoint(0, SIZE); diams.addPoint(SIZE, 0); - ug.apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder))) - .apply(new UChangeBackColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), - ColorParam.classBackground))).apply(new UStroke(1.5)).draw(diams); + ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder)) + .apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), + ColorParam.classBackground).bg()).apply(new UStroke(1.5)).draw(diams); } public ShapeType getShapeType() { diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java index 3898b5c46..835cf48c9 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageAssociationPoint.java @@ -43,11 +43,10 @@ import net.sourceforge.plantuml.cucadiagram.ILeaf; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UShape; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class EntityImageAssociationPoint extends AbstractEntityImage { @@ -64,7 +63,7 @@ public class EntityImageAssociationPoint extends AbstractEntityImage { final public void drawU(UGraphic ug) { final UShape circle = new UEllipse(SIZE, SIZE); - ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(HColorUtils.BLACK)).draw(circle); + ug.apply(new HColorNone()).apply(HColorUtils.BLACK.bg()).draw(circle); } public ShapeType getShapeType() { diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java b/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java index be9cbde39..2b8e6138b 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageBranch.java @@ -50,8 +50,6 @@ import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPolygon; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -101,7 +99,7 @@ public class EntityImageBranch extends AbstractEntityImage { } diams.setDeltaShadow(shadowing); - ug.apply(new UChangeColor(border)).apply(new UChangeBackColor(back)).apply(stroke).draw(diams); + ug.apply(border).apply(back.bg()).apply(stroke).draw(diams); } public ShapeType getShapeType() { diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java index 010966759..ba3ea854a 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleEnd.java @@ -50,13 +50,12 @@ import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UShape; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class EntityImageCircleEnd extends AbstractEntityImage { @@ -90,11 +89,11 @@ public class EntityImageCircleEnd extends AbstractEntityImage { shadowing = style.value(PName.Shadowing).asDouble(); } circle.setDeltaShadow(shadowing); - ug.apply(new UChangeBackColor(null)).apply(new UChangeColor(color)).draw(circle); + ug.apply(new HColorNone().bg()).apply(color).draw(circle); final double delta = 4; final UShape circleSmall = new UEllipse(SIZE - delta * 2, SIZE - delta * 2); - ug.apply(new UChangeBackColor(color)).apply(new UChangeColor(null)) + ug.apply(color.bg()).apply(new HColorNone()) .apply(new UTranslate(delta + 0.5, delta + 0.5)).draw(circleSmall); } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java index 249f6cc1d..3fd861438 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageCircleStart.java @@ -50,11 +50,10 @@ import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class EntityImageCircleStart extends AbstractEntityImage { @@ -88,7 +87,7 @@ public class EntityImageCircleStart extends AbstractEntityImage { shadowing = style.value(PName.Shadowing).asDouble(); } circle.setDeltaShadow(shadowing); - ug.apply(new UChangeBackColor(color)).apply(new UChangeColor(null)).draw(circle); + ug.apply(color.bg()).apply(new HColorNone()).draw(circle); } public ShapeType getShapeType() { diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java b/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java index 1bedbe3ee..a4132b3db 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageClass.java @@ -63,8 +63,6 @@ import net.sourceforge.plantuml.svek.Ports; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.svek.WithPorts; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UComment; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGraphicStencil; @@ -72,12 +70,14 @@ import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; +import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class EntityImageClass extends AbstractEntityImage implements Stencil, WithPorts { final private TextBlock body; final private Margins shield; - final private EntityImageClassHeader2 header; + final private EntityImageClassHeader header; final private Url url; final private double roundCorner; final private LeafType leafType; @@ -96,12 +96,10 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi this.body = entity.getBodier().getBody(FontParam.CLASS_ATTRIBUTE, getSkinParam(), showMethods, showFields, entity.getStereotype()); - header = new EntityImageClassHeader2(entity, getSkinParam(), portionShower); + header = new EntityImageClassHeader(entity, getSkinParam(), portionShower); this.url = entity.getUrl99(); } - // private int marginEmptyFieldsOrMethod = 13; - public Dimension2D calculateDimension(StringBounder stringBounder) { final Dimension2D dimHeader = header.calculateDimension(stringBounder); final Dimension2D dimBody = body == null ? new Dimension2DDouble(0, 0) : body.calculateDimension(stringBounder); @@ -153,7 +151,7 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi if (classBorder == null) { classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder); } - ug = ug.apply(new UChangeColor(classBorder)); + ug = ug.apply(classBorder); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { if (leafType == LeafType.ENUM) { @@ -163,20 +161,34 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBackground); } } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); final UStroke stroke = getStroke(); - ug.apply(stroke).draw(rect); HColor headerBackcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.HEADER); if (headerBackcolor == null) { headerBackcolor = getSkinParam().getHtmlColor(ColorParam.classHeaderBackground, getStereo(), false); } UGraphic ugHeader = ug; - if (headerBackcolor != null && roundCorner == 0) { - final Shadowable rect2 = new URectangle(widthTotal, dimHeader.getHeight()).rounded(roundCorner); - ugHeader = ugHeader.apply(new UChangeBackColor(headerBackcolor)); + if (roundCorner == 0 && headerBackcolor != null && backcolor.equals(headerBackcolor) == false) { + ug.apply(stroke).draw(rect); + final Shadowable rect2 = new URectangle(widthTotal, dimHeader.getHeight()); + rect2.setDeltaShadow(0); + ugHeader = ugHeader.apply(headerBackcolor.bg()); ugHeader.apply(stroke).draw(rect2); + } else if (roundCorner != 0 && headerBackcolor != null && backcolor.equals(headerBackcolor) == false) { + ug.apply(stroke).draw(rect); + final Shadowable rect2 = new URectangle(widthTotal, dimHeader.getHeight()).rounded(roundCorner); + final URectangle rect3 = new URectangle(widthTotal, roundCorner / 2); + rect2.setDeltaShadow(0); + rect3.setDeltaShadow(0); + ugHeader = ugHeader.apply(headerBackcolor.bg()).apply(headerBackcolor); + ugHeader.apply(stroke).draw(rect2); + ugHeader.apply(stroke).apply(UTranslate.dy(dimHeader.getHeight() - rect3.getHeight())).draw(rect3); + rect.setDeltaShadow(0); + ug.apply(stroke).apply(new HColorNone().bg()).draw(rect); + } else { + ug.apply(stroke).draw(rect); } header.drawU(ugHeader, dimTotal.getWidth(), dimHeader.getHeight()); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader2.java b/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java similarity index 98% rename from src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader2.java rename to src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java index c6ef521ee..137e59285 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader2.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageClassHeader.java @@ -65,11 +65,11 @@ import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; -public class EntityImageClassHeader2 extends AbstractEntityImage { +public class EntityImageClassHeader extends AbstractEntityImage { final private HeaderLayout headerLayout; - public EntityImageClassHeader2(ILeaf entity, ISkinParam skinParam, PortionShower portionShower) { + public EntityImageClassHeader(ILeaf entity, ISkinParam skinParam, PortionShower portionShower) { super(entity, skinParam); final boolean italic = entity.getLeafType() == LeafType.ABSTRACT_CLASS diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java index 18a624519..4eba6033c 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageDescription.java @@ -44,11 +44,9 @@ import java.util.Set; import net.sourceforge.plantuml.Dimension2DDouble; import net.sourceforge.plantuml.Guillemet; import net.sourceforge.plantuml.ISkinParam; -import net.sourceforge.plantuml.LineBreakStrategy; import net.sourceforge.plantuml.SkinParamUtils; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.cucadiagram.BodyEnhanced; -import net.sourceforge.plantuml.cucadiagram.BodyEnhanced2; import net.sourceforge.plantuml.cucadiagram.Display; import net.sourceforge.plantuml.cucadiagram.EntityPortion; import net.sourceforge.plantuml.cucadiagram.IEntity; diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java index e64d78715..abeaea706 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterface.java @@ -52,8 +52,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -90,8 +88,8 @@ public class EntityImageLollipopInterface extends AbstractEntityImage { } } ug = ug.apply( - new UChangeBackColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBackground))) - .apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder))); + SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBackground).bg()) + .apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder)); if (url != null) { ug.startUrl(url); } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java index dfc585561..95c29d589 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageLollipopInterfaceEye1.java @@ -55,12 +55,11 @@ import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.Bibliotekon; import net.sourceforge.plantuml.svek.Line; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class EntityImageLollipopInterfaceEye1 extends AbstractEntityImage { @@ -84,9 +83,9 @@ public class EntityImageLollipopInterfaceEye1 extends AbstractEntityImage { } final public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder))); - ug = ug.apply(new UChangeBackColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), - ColorParam.classBackground))); + ug = ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.classBorder)); + ug = ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), + ColorParam.classBackground).bg()); if (url != null) { ug.startUrl(url); } @@ -97,7 +96,7 @@ public class EntityImageLollipopInterfaceEye1 extends AbstractEntityImage { // circle.setDeltaShadow(4); } ug.apply(new UStroke(1.5)).apply(new UTranslate(diff, diff)).draw(circle1); - ug = ug.apply(new UChangeBackColor(null)); + ug = ug.apply(new HColorNone().bg()); Point2D pos = bibliotekon.getNode(getEntity()).getPosition(); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageMap.java b/src/net/sourceforge/plantuml/svek/image/EntityImageMap.java index 0def72bef..ed6b6cddb 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageMap.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageMap.java @@ -59,8 +59,6 @@ import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.graphic.TextBlockEmpty; -import net.sourceforge.plantuml.graphic.TextBlockLineBefore; import net.sourceforge.plantuml.graphic.TextBlockUtils; import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.svek.AbstractEntityImage; @@ -69,8 +67,6 @@ import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.svek.WithPorts; import net.sourceforge.plantuml.ugraphic.PlacementStrategyY1Y2; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGraphicStencil; import net.sourceforge.plantuml.ugraphic.ULayoutGroup; @@ -144,12 +140,12 @@ public class EntityImageMap extends AbstractEntityImage implements Stencil, With rect.setDeltaShadow(4); } - ug = ug.apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.objectBorder))); + ug = ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.objectBorder)); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.objectBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); if (url != null) { ug.startUrl(url); } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java index e35cf94c8..1044cb6a6 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageNote.java @@ -74,8 +74,6 @@ import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.Line; import net.sourceforge.plantuml.svek.Node; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGraphicStencil; import net.sourceforge.plantuml.ugraphic.UPath; @@ -254,7 +252,7 @@ public class EntityImageNote extends AbstractEntityImage implements Stencil { if (withShadow) { polygon.setDeltaShadow(4); } - ug = ug.apply(new UChangeBackColor(noteBackgroundColor)).apply(new UChangeColor(borderColor)); + ug = ug.apply(noteBackgroundColor.bg()).apply(borderColor); final UGraphic stroked = applyStroke(ug); stroked.draw(polygon); ug.draw(Opale.getCorner(getTextWidth(stringBounder), getRoundCorner())); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java b/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java index 1454088f6..3d371eb16 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageObject.java @@ -65,8 +65,6 @@ import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.PlacementStrategyY1Y2; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UGraphicStencil; import net.sourceforge.plantuml.ugraphic.ULayoutGroup; @@ -141,12 +139,12 @@ public class EntityImageObject extends AbstractEntityImage implements Stencil { rect.setDeltaShadow(4); } - ug = ug.apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.objectBorder))); + ug = ug.apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.objectBorder)); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.objectBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); if (url != null) { ug.startUrl(url); } diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java b/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java index e48c93380..a62e7a8eb 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImagePseudoState.java @@ -51,8 +51,6 @@ import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -82,8 +80,8 @@ public class EntityImagePseudoState extends AbstractEntityImage { } ug = ug.apply(new UStroke(1.5)); ug = ug.apply( - new UChangeBackColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground))) - .apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder))); + SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground).bg()) + .apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder)); ug.draw(circle); ug = ug.apply(new UStroke()); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java index 77390d4f9..148f33479 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageState.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageState.java @@ -57,8 +57,6 @@ import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -136,12 +134,12 @@ public class EntityImageState extends AbstractEntityImage { if (classBorder == null) { classBorder = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder); } - ug = ug.apply(getStroke()).apply(new UChangeColor(classBorder)); + ug = ug.apply(getStroke()).apply(classBorder); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); ug.draw(rect); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java index 07d9a0ced..95fff58ca 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateBorder.java @@ -56,8 +56,6 @@ import net.sourceforge.plantuml.svek.Bibliotekon; import net.sourceforge.plantuml.svek.Cluster; import net.sourceforge.plantuml.svek.Node; import net.sourceforge.plantuml.svek.ShapeType; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -115,12 +113,12 @@ public class EntityImageStateBorder extends AbstractEntityImage { desc.drawU(ug.apply(new UTranslate(x, y))); ug = ug.apply(new UStroke(1.5)).apply( - new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder))); + SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder)); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); entityPosition.drawSymbol(ug, rankdir); diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java index 77e37c0f2..1360a3797 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageStateEmptyDescription.java @@ -56,8 +56,6 @@ import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -110,12 +108,12 @@ public class EntityImageStateEmptyDescription extends AbstractEntityImage { } ug = ug.apply(new UStroke(1.5)) - .apply(new UChangeColor(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder))); + .apply(SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBorder)); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.stateBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); ug.draw(rect); final double xDesc = (widthTotal - dimDesc.getWidth()) / 2; final double yDesc = (heightTotal - dimDesc.getHeight()) / 2; diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java b/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java index ce379acea..c02390273 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageSynchroBar.java @@ -52,11 +52,10 @@ import net.sourceforge.plantuml.style.StyleSignature; import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.Shadowable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public class EntityImageSynchroBar extends AbstractEntityImage { @@ -89,7 +88,7 @@ public class EntityImageSynchroBar extends AbstractEntityImage { shadowing = style.value(PName.Shadowing).asDouble(); } rect.setDeltaShadow(shadowing); - ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(color)).draw(rect); + ug.apply(new HColorNone()).apply(color.bg()).draw(rect); } public ShapeType getShapeType() { diff --git a/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java b/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java index c5f77e579..4ef098c60 100644 --- a/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java +++ b/src/net/sourceforge/plantuml/svek/image/EntityImageUseCase.java @@ -62,8 +62,6 @@ import net.sourceforge.plantuml.svek.AbstractEntityImage; import net.sourceforge.plantuml.svek.ShapeType; import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine; import net.sourceforge.plantuml.ugraphic.TextBlockInEllipse; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UHorizontalLine; @@ -131,12 +129,12 @@ public class EntityImageUseCase extends AbstractEntityImage { if (linecolor == null) { linecolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.usecaseBorder); } - ug = ug.apply(new UChangeColor(linecolor)); + ug = ug.apply(linecolor); HColor backcolor = getEntity().getColors(getSkinParam()).getColor(ColorType.BACK); if (backcolor == null) { backcolor = SkinParamUtils.getColor(getSkinParam(), getStereo(), ColorParam.usecaseBackground); } - ug = ug.apply(new UChangeBackColor(backcolor)); + ug = ug.apply(backcolor.bg()); final UGraphic ug2 = new MyUGraphicEllipse(ug, 0, 0, ellipse.getUEllipse()); ellipse.drawU(ug2); diff --git a/src/net/sourceforge/plantuml/svek/image/Footprint.java b/src/net/sourceforge/plantuml/svek/image/Footprint.java index bdc0762bf..827ddfe46 100644 --- a/src/net/sourceforge/plantuml/svek/image/Footprint.java +++ b/src/net/sourceforge/plantuml/svek/image/Footprint.java @@ -44,7 +44,6 @@ import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UHorizontalLine; import net.sourceforge.plantuml.ugraphic.UImage; @@ -58,6 +57,7 @@ import net.sourceforge.plantuml.ugraphic.UText; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class Footprint { @@ -93,7 +93,7 @@ public class Footprint { public UGraphic apply(UChange change) { if (change instanceof UTranslate) { return new MyUGraphic(all, translate.compose((UTranslate) change)); - } else if (change instanceof UStroke || change instanceof UChangeColor) { + } else if (change instanceof UStroke || change instanceof HColor) { return new MyUGraphic(all, translate); } throw new UnsupportedOperationException(); diff --git a/src/net/sourceforge/plantuml/svek/image/Opale.java b/src/net/sourceforge/plantuml/svek/image/Opale.java index af9d81be1..f6b903d94 100644 --- a/src/net/sourceforge/plantuml/svek/image/Opale.java +++ b/src/net/sourceforge/plantuml/svek/image/Opale.java @@ -43,8 +43,6 @@ import net.sourceforge.plantuml.Direction; import net.sourceforge.plantuml.graphic.AbstractTextBlock; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UPath; import net.sourceforge.plantuml.ugraphic.UTranslate; @@ -104,7 +102,7 @@ public class Opale extends AbstractTextBlock implements TextBlock { final public void drawU(UGraphic ug) { final StringBounder stringBounder = ug.getStringBounder(); - ug = ug.apply(new UChangeBackColor(noteBackgroundColor)).apply(new UChangeColor(borderColor)); + ug = ug.apply(noteBackgroundColor.bg()).apply(borderColor); final UPath polygon; if (withLink == false) { polygon = getPolygonNormal(stringBounder); diff --git a/src/net/sourceforge/plantuml/svg/SvgGraphics.java b/src/net/sourceforge/plantuml/svg/SvgGraphics.java index dcd36a725..2f2137e44 100644 --- a/src/net/sourceforge/plantuml/svg/SvgGraphics.java +++ b/src/net/sourceforge/plantuml/svg/SvgGraphics.java @@ -57,8 +57,12 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.CDATASection; +import org.w3c.dom.Comment; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + import net.sourceforge.plantuml.Log; -import net.sourceforge.plantuml.OptionFlags; import net.sourceforge.plantuml.SignatureUtils; import net.sourceforge.plantuml.StringUtils; import net.sourceforge.plantuml.SvgString; @@ -71,11 +75,6 @@ import net.sourceforge.plantuml.ugraphic.USegmentType; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.HColorGradient; -import org.w3c.dom.CDATASection; -import org.w3c.dom.Comment; -import org.w3c.dom.Document; -import org.w3c.dom.Element; - public class SvgGraphics { // http://tutorials.jenkov.com/svg/index.html diff --git a/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java b/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java index e88840050..d103b9383 100644 --- a/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java +++ b/src/net/sourceforge/plantuml/syntax/LanguageDescriptor.java @@ -173,6 +173,17 @@ public class LanguageDescriptor { preproc.add("!else"); preproc.add("!definelong"); preproc.add("!enddefinelong"); + preproc.add("!function"); + preproc.add("!procedure"); + preproc.add("!endfunction"); + preproc.add("!endprocedure"); + preproc.add("!unquoted"); + preproc.add("!return"); + preproc.add("!startsub"); + preproc.add("!endsub"); + preproc.add("!memorydump"); + preproc.add("!assert"); + preproc.add("!log"); } public Cypher getCypher() { diff --git a/src/net/sourceforge/plantuml/tim/Eater.java b/src/net/sourceforge/plantuml/tim/Eater.java index b1230b67e..a5bc1b809 100644 --- a/src/net/sourceforge/plantuml/tim/Eater.java +++ b/src/net/sourceforge/plantuml/tim/Eater.java @@ -83,7 +83,8 @@ public abstract class Eater { return result; } - final protected TValue eatExpression(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated { + final protected TValue eatExpression(TContext context, TMemory memory) + throws EaterException, EaterExceptionLocated { if (peekChar() == '{') { String data = eatAllToEnd(); // System.err.println("data=" + data); @@ -104,7 +105,8 @@ public abstract class Eater { return tokenStack; } - final protected TValue eatExpressionStopAtColon(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated { + final protected TValue eatExpressionStopAtColon(TContext context, TMemory memory) + throws EaterException, EaterExceptionLocated { final TokenStack tokenStack = new TokenStack(); addIntoTokenStack(tokenStack, true); return tokenStack.getResult(getLineLocation(), context, memory); @@ -303,13 +305,14 @@ public abstract class Eater { // } final protected TFunctionImpl eatDeclareFunction(TContext context, TMemory memory, boolean unquoted, - LineLocation location, boolean allowNoParenthesis) throws EaterException, EaterExceptionLocated { + LineLocation location, boolean allowNoParenthesis, TFunctionType type) + throws EaterException, EaterExceptionLocated { final List args = new ArrayList(); final String functionName = eatAndGetFunctionName(); skipSpaces(); if (safeCheckAndEatChar('(') == false) { if (allowNoParenthesis) { - return new TFunctionImpl(functionName, args, unquoted); + return new TFunctionImpl(functionName, args, unquoted, type); } throw EaterException.located("Missing opening parenthesis", getStringLocated()); } @@ -340,12 +343,12 @@ public abstract class Eater { } } skipSpaces(); - return new TFunctionImpl(functionName, args, unquoted); + return new TFunctionImpl(functionName, args, unquoted, type); } - final protected TFunctionImpl eatDeclareFunctionWithOptionalReturn(TContext context, TMemory memory, + final protected TFunctionImpl eatDeclareReturnFunctionWithOptionalReturn(TContext context, TMemory memory, boolean unquoted, LineLocation location) throws EaterException, EaterExceptionLocated { - final TFunctionImpl result = eatDeclareFunction(context, memory, unquoted, location, false); + final TFunctionImpl result = eatDeclareFunction(context, memory, unquoted, location, false, TFunctionType.RETURN_FUNCTION); if (peekChar() == 'r') { checkAndEatChar("return"); skipSpaces(); @@ -360,4 +363,10 @@ public abstract class Eater { return result; } + final protected TFunctionImpl eatDeclareProcedure(TContext context, TMemory memory, boolean unquoted, + LineLocation location) throws EaterException, EaterExceptionLocated { + final TFunctionImpl result = eatDeclareFunction(context, memory, unquoted, location, false, TFunctionType.PROCEDURE); + return result; + } + } diff --git a/src/net/sourceforge/plantuml/tim/EaterDeclareProcedure.java b/src/net/sourceforge/plantuml/tim/EaterDeclareProcedure.java new file mode 100644 index 000000000..b5cb28b82 --- /dev/null +++ b/src/net/sourceforge/plantuml/tim/EaterDeclareProcedure.java @@ -0,0 +1,88 @@ +/* ======================================================================== + * 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.tim; + +import net.sourceforge.plantuml.LineLocation; +import net.sourceforge.plantuml.StringLocated; + +public class EaterDeclareProcedure extends Eater { + + private TFunctionImpl function; + private final LineLocation location; + private boolean finalFlag; + + public EaterDeclareProcedure(StringLocated s) { + super(s.getTrimmed()); + this.location = s.getLocation(); + } + + @Override + public void analyze(TContext context, TMemory memory) throws EaterException, EaterExceptionLocated { + skipSpaces(); + checkAndEatChar("!"); + boolean unquoted = false; + while (peekUnquoted() || peekFinal()) { + if (peekUnquoted()) { + checkAndEatChar("unquoted"); + skipSpaces(); + unquoted = true; + } else if (peekFinal()) { + checkAndEatChar("final"); + skipSpaces(); + finalFlag = true; + } + } + checkAndEatChar("procedure"); + skipSpaces(); + function = eatDeclareProcedure(context, memory, unquoted, location); + } + + private boolean peekUnquoted() { + return peekChar() == 'u'; + } + + private boolean peekFinal() { + return peekChar() == 'f' && peekCharN2() == 'i'; + } + + public TFunctionImpl getFunction() { + return function; + } + + public final boolean getFinalFlag() { + return finalFlag; + } + +} diff --git a/src/net/sourceforge/plantuml/tim/EaterDeclareFunction.java b/src/net/sourceforge/plantuml/tim/EaterDeclareReturnFunction.java similarity index 91% rename from src/net/sourceforge/plantuml/tim/EaterDeclareFunction.java rename to src/net/sourceforge/plantuml/tim/EaterDeclareReturnFunction.java index deae4f7e8..cd18323af 100644 --- a/src/net/sourceforge/plantuml/tim/EaterDeclareFunction.java +++ b/src/net/sourceforge/plantuml/tim/EaterDeclareReturnFunction.java @@ -37,13 +37,13 @@ package net.sourceforge.plantuml.tim; import net.sourceforge.plantuml.LineLocation; import net.sourceforge.plantuml.StringLocated; -public class EaterDeclareFunction extends Eater { +public class EaterDeclareReturnFunction extends Eater { private TFunctionImpl function; private final LineLocation location; private boolean finalFlag; - public EaterDeclareFunction(StringLocated s) { + public EaterDeclareReturnFunction(StringLocated s) { super(s.getTrimmed()); this.location = s.getLocation(); } @@ -66,7 +66,7 @@ public class EaterDeclareFunction extends Eater { } checkAndEatChar("function"); skipSpaces(); - function = eatDeclareFunctionWithOptionalReturn(context, memory, unquoted, location); + function = eatDeclareReturnFunctionWithOptionalReturn(context, memory, unquoted, location); } private boolean peekUnquoted() { diff --git a/src/net/sourceforge/plantuml/tim/EaterException.java b/src/net/sourceforge/plantuml/tim/EaterException.java index e0095a8fe..c32d6a1de 100644 --- a/src/net/sourceforge/plantuml/tim/EaterException.java +++ b/src/net/sourceforge/plantuml/tim/EaterException.java @@ -49,7 +49,7 @@ public class EaterException extends Exception { } public static EaterException located(String message, StringLocated unused) { - return new EaterException(message); + return unlocated(message); } public final String getMessage() { diff --git a/src/net/sourceforge/plantuml/tim/EaterLegacyDefine.java b/src/net/sourceforge/plantuml/tim/EaterLegacyDefine.java index 715769b3a..49019c566 100644 --- a/src/net/sourceforge/plantuml/tim/EaterLegacyDefine.java +++ b/src/net/sourceforge/plantuml/tim/EaterLegacyDefine.java @@ -49,9 +49,9 @@ public class EaterLegacyDefine extends Eater { skipSpaces(); checkAndEatChar("!define"); skipSpaces(); - function = eatDeclareFunction(context, memory, true, getLineLocation(), false); + function = eatDeclareFunction(context, memory, true, getLineLocation(), false, TFunctionType.LEGACY_DEFINE); final String def = this.eatAllToEnd(); - function.setFunctionType(TFunctionType.LEGACY_DEFINE); +// function.setFunctionType(TFunctionType.LEGACY_DEFINE); function.setLegacyDefinition(def); } diff --git a/src/net/sourceforge/plantuml/tim/EaterLegacyDefineLong.java b/src/net/sourceforge/plantuml/tim/EaterLegacyDefineLong.java index 567370841..58396f1bb 100644 --- a/src/net/sourceforge/plantuml/tim/EaterLegacyDefineLong.java +++ b/src/net/sourceforge/plantuml/tim/EaterLegacyDefineLong.java @@ -49,8 +49,8 @@ public class EaterLegacyDefineLong extends Eater { skipSpaces(); checkAndEatChar("!definelong"); skipSpaces(); - function = eatDeclareFunction(context, memory, true, getLineLocation(), true); - function.setFunctionType(TFunctionType.LEGACY_DEFINELONG); + function = eatDeclareFunction(context, memory, true, getLineLocation(), true, TFunctionType.LEGACY_DEFINELONG); + // function.setFunctionType(TFunctionType.LEGACY_DEFINELONG); } public TFunctionImpl getFunction() { diff --git a/src/net/sourceforge/plantuml/tim/FunctionsSet.java b/src/net/sourceforge/plantuml/tim/FunctionsSet.java index 2e271675a..70bb7835f 100644 --- a/src/net/sourceforge/plantuml/tim/FunctionsSet.java +++ b/src/net/sourceforge/plantuml/tim/FunctionsSet.java @@ -94,7 +94,8 @@ public class FunctionsSet { this.pendingFunction = null; } - public void executeLegacyDefine(TContext context, TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { + public void executeLegacyDefine(TContext context, TMemory memory, StringLocated s) + throws EaterException, EaterExceptionLocated { if (this.pendingFunction != null) { throw EaterException.located("already0048", s); } @@ -105,7 +106,8 @@ public class FunctionsSet { this.functions3.add(function.getSignature().getFunctionName() + "("); } - public void executeLegacyDefineLong(TContext context, TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { + public void executeLegacyDefineLong(TContext context, TMemory memory, StringLocated s) + throws EaterException, EaterExceptionLocated { if (this.pendingFunction != null) { throw EaterException.located("already0068", s); } @@ -114,11 +116,35 @@ public class FunctionsSet { this.pendingFunction = legacyDefineLong.getFunction(); } - public void executeDeclareFunction(TContext context, TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { + public void executeDeclareReturnFunction(TContext context, TMemory memory, StringLocated s) + throws EaterException, EaterExceptionLocated { if (this.pendingFunction != null) { throw EaterException.located("already0068", s); } - final EaterDeclareFunction declareFunction = new EaterDeclareFunction(s); + final EaterDeclareReturnFunction declareFunction = new EaterDeclareReturnFunction(s); + declareFunction.analyze(context, memory); + final boolean finalFlag = declareFunction.getFinalFlag(); + final TFunctionSignature declaredSignature = declareFunction.getFunction().getSignature(); + final TFunction previous = this.functions.get(declaredSignature); + if (previous != null && (finalFlag || this.functionsFinal.contains(declaredSignature))) { + throw EaterException.located("This function is already defined", s); + } + if (finalFlag) { + this.functionsFinal.add(declaredSignature); + } + if (declareFunction.getFunction().hasBody()) { + this.addFunction(declareFunction.getFunction()); + } else { + this.pendingFunction = declareFunction.getFunction(); + } + } + + public void executeDeclareProcedure(TContext context, TMemory memory, StringLocated s) + throws EaterException, EaterExceptionLocated { + if (this.pendingFunction != null) { + throw EaterException.located("already0068", s); + } + final EaterDeclareProcedure declareFunction = new EaterDeclareProcedure(s); declareFunction.analyze(context, memory); final boolean finalFlag = declareFunction.getFinalFlag(); final TFunctionSignature declaredSignature = declareFunction.getFunction().getSignature(); diff --git a/src/net/sourceforge/plantuml/tim/TContext.java b/src/net/sourceforge/plantuml/tim/TContext.java index 29ed3c0af..8f43eb6f4 100644 --- a/src/net/sourceforge/plantuml/tim/TContext.java +++ b/src/net/sourceforge/plantuml/tim/TContext.java @@ -51,6 +51,7 @@ import net.sourceforge.plantuml.FileSystem; import net.sourceforge.plantuml.LineLocation; import net.sourceforge.plantuml.StringLocated; import net.sourceforge.plantuml.command.CommandExecutionResult; +import net.sourceforge.plantuml.json.Json; import net.sourceforge.plantuml.json.JsonObject; import net.sourceforge.plantuml.json.JsonValue; import net.sourceforge.plantuml.preproc.Defines; @@ -69,12 +70,13 @@ import net.sourceforge.plantuml.tim.expression.TValue; import net.sourceforge.plantuml.tim.iterator.CodeIterator; import net.sourceforge.plantuml.tim.iterator.CodeIteratorAffectation; import net.sourceforge.plantuml.tim.iterator.CodeIteratorForeach; -import net.sourceforge.plantuml.tim.iterator.CodeIteratorFunction; import net.sourceforge.plantuml.tim.iterator.CodeIteratorIf; import net.sourceforge.plantuml.tim.iterator.CodeIteratorImpl; import net.sourceforge.plantuml.tim.iterator.CodeIteratorInnerComment; import net.sourceforge.plantuml.tim.iterator.CodeIteratorLegacyDefine; import net.sourceforge.plantuml.tim.iterator.CodeIteratorLongComment; +import net.sourceforge.plantuml.tim.iterator.CodeIteratorProcedure; +import net.sourceforge.plantuml.tim.iterator.CodeIteratorReturnFunction; import net.sourceforge.plantuml.tim.iterator.CodeIteratorShortComment; import net.sourceforge.plantuml.tim.iterator.CodeIteratorSub; import net.sourceforge.plantuml.tim.iterator.CodeIteratorWhile; @@ -90,11 +92,12 @@ import net.sourceforge.plantuml.tim.stdlib.GetVariableValue; import net.sourceforge.plantuml.tim.stdlib.GetVersion; import net.sourceforge.plantuml.tim.stdlib.Getenv; import net.sourceforge.plantuml.tim.stdlib.IntVal; -import net.sourceforge.plantuml.tim.stdlib.InvokeVoidFunction; +import net.sourceforge.plantuml.tim.stdlib.InvokeProcedure; import net.sourceforge.plantuml.tim.stdlib.LogicalNot; import net.sourceforge.plantuml.tim.stdlib.Lower; -import net.sourceforge.plantuml.tim.stdlib.RetrieveVoidFunction; +import net.sourceforge.plantuml.tim.stdlib.RetrieveProcedure; import net.sourceforge.plantuml.tim.stdlib.SetVariableValue; +import net.sourceforge.plantuml.tim.stdlib.StringFunction; import net.sourceforge.plantuml.tim.stdlib.Strlen; import net.sourceforge.plantuml.tim.stdlib.Strpos; import net.sourceforge.plantuml.tim.stdlib.Substr; @@ -130,20 +133,21 @@ public class TContext { functionsSet.addFunction(new Filename(defines)); functionsSet.addFunction(new DateFunction()); functionsSet.addFunction(new Strpos()); - functionsSet.addFunction(new InvokeVoidFunction()); + functionsSet.addFunction(new InvokeProcedure()); functionsSet.addFunction(new AlwaysFalse()); functionsSet.addFunction(new AlwaysTrue()); functionsSet.addFunction(new LogicalNot()); functionsSet.addFunction(new FunctionExists()); functionsSet.addFunction(new VariableExists()); functionsSet.addFunction(new CallUserFunction()); - functionsSet.addFunction(new RetrieveVoidFunction()); + functionsSet.addFunction(new RetrieveProcedure()); functionsSet.addFunction(new SetVariableValue()); functionsSet.addFunction(new GetVariableValue()); functionsSet.addFunction(new IntVal()); functionsSet.addFunction(new GetVersion()); functionsSet.addFunction(new Upper()); functionsSet.addFunction(new Lower()); + functionsSet.addFunction(new StringFunction()); // !exit // !log // %min @@ -163,12 +167,13 @@ public class TContext { this.addStandardFunctions(defines); } - public Knowledge asKnowledge(final TMemory memory) { + public Knowledge asKnowledge(final TMemory memory, final LineLocation location) { return new Knowledge() { - public TValue getVariable(String name) { - if (name.contains(".")) { - return fromJson(memory, name); + public TValue getVariable(String name) throws EaterException, EaterExceptionLocated { + if (name.contains(".") || name.contains("[")) { + final TValue result = fromJson(memory, name, location); + return result; } return memory.getVariable(name); } @@ -179,18 +184,25 @@ public class TContext { }; } - private TValue fromJson(TMemory memory, String name) { + private TValue fromJson(TMemory memory, String name, LineLocation location) + throws EaterException, EaterExceptionLocated { + final String result = applyFunctionsAndVariables(memory, location, name); + try { + final JsonValue json = Json.parse(result); + return TValue.fromJson(json); + } catch (Exception e) { + return TValue.fromString(result); + } + } + + private TValue fromJsonOld(TMemory memory, String name) { final int x = name.indexOf('.'); final TValue data = memory.getVariable(name.substring(0, x)); if (data == null) { return null; } final JsonObject json = (JsonObject) data.toJson(); -// System.err.println("json=" + json); -// System.err.println("json=" + json.getClass()); -// System.err.println("json2=" + name.substring(x + 1)); final JsonValue result = json.get(name.substring(x + 1)); -// System.err.println("result=" + result); return TValue.fromJson(result); } @@ -200,8 +212,9 @@ public class TContext { final CodeIterator it30 = new CodeIteratorShortComment(it20, debug); final CodeIterator it40 = new CodeIteratorInnerComment(it30); final CodeIterator it50 = new CodeIteratorSub(it40, subs, this, memory); - final CodeIterator it60 = new CodeIteratorFunction(it50, this, memory, functionsSet, debug); - final CodeIterator it70 = new CodeIteratorIf(it60, this, memory, debug); + final CodeIterator it60 = new CodeIteratorReturnFunction(it50, this, memory, functionsSet, debug); + final CodeIterator it61 = new CodeIteratorProcedure(it60, this, memory, functionsSet, debug); + final CodeIterator it70 = new CodeIteratorIf(it61, this, memory, debug); final CodeIterator it80 = new CodeIteratorLegacyDefine(it70, this, memory, functionsSet, debug); final CodeIterator it90 = new CodeIteratorWhile(it80, this, memory, debug); final CodeIterator it100 = new CodeIteratorForeach(it90, this, memory, debug); @@ -211,16 +224,20 @@ public class TContext { return it; } - public void executeLines(TMemory memory, List body, TFunctionType ftype) + public TValue executeLines(TMemory memory, List body, TFunctionType ftype, boolean modeSpecial) throws EaterExceptionLocated { final CodeIterator it = buildCodeIterator(memory, body); StringLocated s = null; try { while ((s = it.peek()) != null) { - executeOneLineSafe(memory, s, ftype); + final TValue result = executeOneLineSafe(memory, s, ftype, modeSpecial); + if (result != null) { + return result; + } it.next(); } + return null; } catch (EaterException e) { throw e.withLocation(s); } @@ -233,17 +250,17 @@ public class TContext { StringLocated s = null; while ((s = it.peek()) != null) { - executeOneLineSafe(memory, s, ftype); + executeOneLineSafe(memory, s, ftype, false); it.next(); } } - private void executeOneLineSafe(TMemory memory, StringLocated s, TFunctionType ftype) + private TValue executeOneLineSafe(TMemory memory, StringLocated s, TFunctionType ftype, boolean modeSpecial) throws EaterException, EaterExceptionLocated { try { this.debug.add(s); - executeOneLineNotSafe(memory, s, ftype); + return executeOneLineNotSafe(memory, s, ftype, modeSpecial); } catch (Exception e) { if (e instanceof EaterException) throw (EaterException) e; @@ -254,50 +271,60 @@ public class TContext { } } - private void executeOneLineNotSafe(TMemory memory, StringLocated s, TFunctionType ftype) + private TValue executeOneLineNotSafe(TMemory memory, StringLocated s, TFunctionType ftype, boolean modeSpecial) throws EaterException, EaterExceptionLocated { final TLineType type = s.getType(); if (type == TLineType.INCLUDESUB) { this.executeIncludesub(memory, s); - return; + return null; } else if (type == TLineType.INCLUDE) { this.executeInclude(memory, s); - return; + return null; } else if (type == TLineType.INCLUDE_DEF) { this.executeIncludeDef(memory, s); - return; + return null; } else if (type == TLineType.IMPORT) { this.executeImport(memory, s); - return; + return null; } - if (type == TLineType.DUMP_MEMORY) { this.executeDumpMemory(memory, s.getTrimmed()); - return; + return null; } else if (type == TLineType.ASSERT) { this.executeAssert(memory, s.getTrimmed()); - return; + return null; } else if (type == TLineType.UNDEF) { this.executeUndef(memory, s); - return; - } else if (ftype != TFunctionType.RETURN && type == TLineType.PLAIN) { + return null; + } else if (ftype != TFunctionType.RETURN_FUNCTION && type == TLineType.PLAIN) { this.addPlain(memory, s); - return; - } else if (ftype == TFunctionType.RETURN && type == TLineType.RETURN) { + return null; + } else if (ftype == TFunctionType.RETURN_FUNCTION && type == TLineType.RETURN) { + if (modeSpecial) { + final EaterReturn eaterReturn = new EaterReturn(s); + eaterReturn.analyze(this, memory); + final TValue result = eaterReturn.getValue2(); + return result; + } // Actually, ignore because we are in a if - return; + return null; + } else if (ftype == TFunctionType.RETURN_FUNCTION && type == TLineType.PLAIN) { + this.simulatePlain(memory, s); + return null; } else if (type == TLineType.AFFECTATION_DEFINE) { this.executeAffectationDefine(memory, s); - return; + return null; } else if (ftype == null && type == TLineType.END_FUNCTION) { CommandExecutionResult.error("error endfunc"); - return; + return null; } else if (type == TLineType.LOG) { this.executeLog(memory, s); - return; + return null; + } else if (s.getString().matches("^\\s+$")) { + return null; } else { - throw EaterException.located("Parsing Error", s); + throw EaterException.located("Compile Error " + ftype + " " + type, s); } } @@ -312,6 +339,10 @@ public class TContext { } } + private void simulatePlain(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { + final StringLocated ignored = applyFunctionsAndVariablesInternal(memory, s); + } + private void executeAffectationDefine(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { new EaterAffectationDefine(s).analyze(this, memory); @@ -371,7 +402,7 @@ public class TContext { throw EaterException.located("Function not found " + presentFunction, new StringLocated(str, location)); } - if (function.getFunctionType() == TFunctionType.VOID) { + if (function.getFunctionType() == TFunctionType.PROCEDURE) { this.pendingAdd = result.toString(); executeVoid3(location, memory, sub, function); return null; @@ -381,9 +412,9 @@ public class TContext { executeVoid3(location, memory, sub, function); return null; } - assert function.getFunctionType() == TFunctionType.RETURN + assert function.getFunctionType() == TFunctionType.RETURN_FUNCTION || function.getFunctionType() == TFunctionType.LEGACY_DEFINE; - final TValue functionReturn = function.executeReturn(this, memory, location, call.getValues()); + final TValue functionReturn = function.executeReturnFunction(this, memory, location, call.getValues()); result.append(functionReturn.toString()); i += call.getCurrentPosition() - 1; } else if (new VariableManager(this, memory, location).getVarnameAt(str, i) != null) { @@ -397,7 +428,7 @@ public class TContext { private void executeVoid3(LineLocation location, TMemory memory, String s, TFunction function) throws EaterException, EaterExceptionLocated { - function.executeVoid(this, memory, location, s); + function.executeProcedure(this, memory, location, s); } private void executeImport(TMemory memory, StringLocated s) throws EaterException, EaterExceptionLocated { @@ -540,7 +571,7 @@ public class TContext { do { final StringLocated sl = reader2.readLine(); if (sl == null) { - executeLines(memory, body, null); + executeLines(memory, body, null, false); return; } body.add(sl); diff --git a/src/net/sourceforge/plantuml/tim/TFunction.java b/src/net/sourceforge/plantuml/tim/TFunction.java index a4222efb3..f322629dd 100644 --- a/src/net/sourceforge/plantuml/tim/TFunction.java +++ b/src/net/sourceforge/plantuml/tim/TFunction.java @@ -47,11 +47,11 @@ public interface TFunction { public TFunctionType getFunctionType(); - public void executeVoid(TContext context, TMemory memory, LineLocation location, String s) throws EaterException, EaterExceptionLocated; + public void executeProcedure(TContext context, TMemory memory, LineLocation location, String s) throws EaterException, EaterExceptionLocated; - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException, EaterExceptionLocated; + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException, EaterExceptionLocated; - public void executeVoidInternal(TContext context, TMemory memory, List args) throws EaterException, EaterExceptionLocated; + public void executeProcedureInternal(TContext context, TMemory memory, List args) throws EaterException, EaterExceptionLocated; public boolean isUnquoted(); diff --git a/src/net/sourceforge/plantuml/tim/TFunctionImpl.java b/src/net/sourceforge/plantuml/tim/TFunctionImpl.java index 485e94e8c..9b9f08b02 100644 --- a/src/net/sourceforge/plantuml/tim/TFunctionImpl.java +++ b/src/net/sourceforge/plantuml/tim/TFunctionImpl.java @@ -50,13 +50,16 @@ public class TFunctionImpl implements TFunction { private final List args; private final List body = new ArrayList(); private final boolean unquoted; - private TFunctionType functionType = TFunctionType.VOID; + private /* final */ TFunctionType functionType;// = TFunctionType.VOID; private String legacyDefinition; + private boolean containsReturn; - public TFunctionImpl(String functionName, List args, boolean unquoted) { + public TFunctionImpl(String functionName, List args, boolean unquoted, + TFunctionType functionType) { this.signature = new TFunctionSignature(functionName, args.size()); this.args = args; this.unquoted = unquoted; + this.functionType = functionType; } public boolean canCover(int nbArg) { @@ -76,31 +79,36 @@ public class TFunctionImpl implements TFunction { return "FUNCTION " + signature + " " + args; } - public void addBody(StringLocated s) { + public void addBody(StringLocated s) throws EaterExceptionLocated { body.add(s); if (s.getType() == TLineType.RETURN) { - this.functionType = TFunctionType.RETURN; + this.containsReturn = true; + if (functionType == TFunctionType.PROCEDURE) { + throw EaterExceptionLocated.located( + "A procedure cannot have !return directive. Declare it as a function instead ?", s); + // this.functionType = TFunctionType.RETURN; + } } } - public void executeVoid(TContext context, TMemory memory, LineLocation location, String s) + public void executeProcedure(TContext context, TMemory memory, LineLocation location, String s) throws EaterException, EaterExceptionLocated { final EaterFunctionCall call = new EaterFunctionCall(new StringLocated(s, location), context.isLegacyDefine(signature.getFunctionName()), unquoted); call.analyze(context, memory); final String endOfLine = call.getEndOfLine(); final List args = call.getValues(); - executeVoidInternal(context, memory, args); + executeProcedureInternal(context, memory, args); context.appendEndOfLine(endOfLine); } - public void executeVoidInternal(TContext context, TMemory memory, List args) + public void executeProcedureInternal(TContext context, TMemory memory, List args) throws EaterException, EaterExceptionLocated { - if (functionType != TFunctionType.VOID && functionType != TFunctionType.LEGACY_DEFINELONG) { + if (functionType != TFunctionType.PROCEDURE && functionType != TFunctionType.LEGACY_DEFINELONG) { throw new IllegalStateException(); } final TMemory copy = getNewMemory(memory, args); - context.executeLines(copy, body, TFunctionType.VOID); + context.executeLines(copy, body, TFunctionType.PROCEDURE, false); } private TMemory getNewMemory(TMemory memory, List values) { @@ -113,31 +121,20 @@ public class TFunctionImpl implements TFunction { return copy; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException, EaterExceptionLocated { if (functionType == TFunctionType.LEGACY_DEFINE) { return executeReturnLegacyDefine(location, context, memory, args); } - if (functionType != TFunctionType.RETURN) { - throw EaterException.unlocated("Illegal call here"); + if (functionType != TFunctionType.RETURN_FUNCTION) { + throw EaterException.unlocated("Illegal call here. Is there a return directive in your function?"); } final TMemory copy = getNewMemory(memory, args); - - for (StringLocated sl : body) { - final TLineType lineType = sl.getType(); - final ExecutionContextIf conditionalContext = copy.peekIf(); - if ((conditionalContext == null || ((ExecutionContextIf) conditionalContext).conditionIsOkHere()) - && lineType == TLineType.RETURN) { - // System.err.println("s2=" + sl.getString()); - final EaterReturn eaterReturn = new EaterReturn(sl); - eaterReturn.analyze(context, copy); - // System.err.println("s3=" + eaterReturn.getValue2()); - return eaterReturn.getValue2(); - } - context.executeLines(copy, Arrays.asList(sl), TFunctionType.RETURN); + final TValue result = context.executeLines(copy, body, TFunctionType.RETURN_FUNCTION, true); + if (result == null) { + throw EaterException.unlocated("No return directive found in your function"); } - throw EaterException.unlocated("no return"); - // return TValue.fromString("(NONE)"); + return result; } private TValue executeReturnLegacyDefine(LineLocation location, TContext context, TMemory memory, List args) @@ -164,9 +161,9 @@ public class TFunctionImpl implements TFunction { return signature; } - public void setFunctionType(TFunctionType type) { - this.functionType = type; - } +// public void setFunctionType(TFunctionType type) { +// this.functionType = type; +// } public void setLegacyDefinition(String legacyDefinition) { this.legacyDefinition = legacyDefinition; @@ -190,4 +187,8 @@ public class TFunctionImpl implements TFunction { } } + public final boolean doesContainReturn() { + return containsReturn; + } + } diff --git a/src/net/sourceforge/plantuml/tim/TFunctionType.java b/src/net/sourceforge/plantuml/tim/TFunctionType.java index e94bb77be..f3e21fdeb 100644 --- a/src/net/sourceforge/plantuml/tim/TFunctionType.java +++ b/src/net/sourceforge/plantuml/tim/TFunctionType.java @@ -36,7 +36,7 @@ package net.sourceforge.plantuml.tim; public enum TFunctionType { - VOID, RETURN, LEGACY_DEFINE, LEGACY_DEFINELONG; + PROCEDURE, RETURN_FUNCTION, LEGACY_DEFINE, LEGACY_DEFINELONG; public boolean isLegacy() { return this == LEGACY_DEFINE || this == LEGACY_DEFINELONG; diff --git a/src/net/sourceforge/plantuml/tim/TLineType.java b/src/net/sourceforge/plantuml/tim/TLineType.java index bd0f239e9..42d1fed64 100644 --- a/src/net/sourceforge/plantuml/tim/TLineType.java +++ b/src/net/sourceforge/plantuml/tim/TLineType.java @@ -37,7 +37,7 @@ package net.sourceforge.plantuml.tim; public enum TLineType { PLAIN, AFFECTATION_DEFINE, AFFECTATION, ASSERT, IF, IFDEF, UNDEF, IFNDEF, ELSE, ELSEIF, ENDIF, WHILE, ENDWHILE, - FOREACH, ENDFOREACH, DECLARE_FUNCTION, END_FUNCTION, RETURN, LEGACY_DEFINE, LEGACY_DEFINELONG, INCLUDE, INCLUDE_DEF, + FOREACH, ENDFOREACH, DECLARE_RETURN_FUNCTION, DECLARE_PROCEDURE, END_FUNCTION, RETURN, LEGACY_DEFINE, LEGACY_DEFINELONG, INCLUDE, INCLUDE_DEF, IMPORT, STARTSUB, ENDSUB, INCLUDESUB, LOG, DUMP_MEMORY, COMMENT_SIMPLE, COMMENT_LONG_START; // private boolean elseLike() { @@ -89,8 +89,11 @@ public enum TLineType { if (s.matches("^\\s*!if\\s+.*")) { return IF; } - if (s.matches("^\\s*!(unquoted\\s|final\\s)*function\\s+\\$?[\\p{L}_][\\p{L}_0-9]*.*")) { - return DECLARE_FUNCTION; + if (s.matches("^\\s*!(unquoted\\s|final\\s)*(function)\\s+\\$?[\\p{L}_][\\p{L}_0-9]*.*")) { + return DECLARE_RETURN_FUNCTION; + } + if (s.matches("^\\s*!(unquoted\\s|final\\s)*(procedure)\\s+\\$?[\\p{L}_][\\p{L}_0-9]*.*")) { + return DECLARE_PROCEDURE; } if (s.matches("^\\s*!else\\b.*")) { return ELSE; @@ -113,7 +116,7 @@ public enum TLineType { if (s.matches("^\\s*!endfor\\b.*")) { return ENDFOREACH; } - if (s.matches("^\\s*!(endfunction|enddefinelong)\\b.*")) { + if (s.matches("^\\s*!(end\\s*function|end\\s*definelong|end\\s*procedure)\\b.*")) { return END_FUNCTION; } if (s.matches("^\\s*!return\\b.*")) { diff --git a/src/net/sourceforge/plantuml/tim/TimLoader.java b/src/net/sourceforge/plantuml/tim/TimLoader.java index d0851f6c4..6520382d1 100644 --- a/src/net/sourceforge/plantuml/tim/TimLoader.java +++ b/src/net/sourceforge/plantuml/tim/TimLoader.java @@ -63,7 +63,7 @@ public class TimLoader { public Set load(List list) { // CodeIteratorImpl.indentNow(list); try { - context.executeLines(global, list, null); + context.executeLines(global, list, null, false); } catch (EaterExceptionLocated e) { context.getResultList().add(e.getLocation().withErrorPreprocessor(e.getMessage())); changeLastLine(context.getDebug(), e.getMessage()); diff --git a/src/net/sourceforge/plantuml/tim/VariableManager.java b/src/net/sourceforge/plantuml/tim/VariableManager.java index 33bbd26a2..6ae31670a 100644 --- a/src/net/sourceforge/plantuml/tim/VariableManager.java +++ b/src/net/sourceforge/plantuml/tim/VariableManager.java @@ -62,6 +62,8 @@ public class VariableManager { if (value.isJson()) { if (value.toJson().isString()) { result.append(value.toJson().asString()); + } else if (value.toJson().isNumber()) { + result.append(value.toJson().toString()); } else { JsonValue jsonValue = (JsonObject) value.toJson(); i++; @@ -78,15 +80,12 @@ public class VariableManager { private int replaceJson(JsonValue jsonValue, String str, int i, StringBuilder result) throws EaterException, EaterExceptionLocated { - while (true) { + while (i < str.length()) { final char n = str.charAt(i); if (n == '.') { i++; final StringBuilder fieldName = new StringBuilder(); - while (true) { - if (i >= str.length()) { - throw EaterException.unlocated("Parsing error"); - } + while (i < str.length()) { if (Character.isJavaIdentifierPart(str.charAt(i)) == false) { break; } @@ -97,26 +96,41 @@ public class VariableManager { } else if (n == '[') { i++; final StringBuilder inBracket = new StringBuilder(); + int level = 0; while (true) { + if (str.charAt(i) == '[') { + level++; + } if (str.charAt(i) == ']') { - break; + if (level == 0) + break; + level--; } inBracket.append(str.charAt(i)); i++; } final String nbString = context.applyFunctionsAndVariables(memory, location, inBracket.toString()); - final int nb = Integer.parseInt(nbString); - jsonValue = ((JsonArray) jsonValue).get(nb); + if (jsonValue instanceof JsonArray) { + final int nb = Integer.parseInt(nbString); + jsonValue = ((JsonArray) jsonValue).get(nb); + } else if (jsonValue instanceof JsonObject) { + jsonValue = ((JsonObject) jsonValue).get(nbString); + } else { + throw EaterException.unlocated("Major parsing error"); + } + if (jsonValue == null) { + throw EaterException.unlocated("Data parsing error"); + } i++; } else { - if (jsonValue.isString()) { - result.append(jsonValue.asString()); - } else { - result.append(jsonValue.toString()); - } break; } } + if (jsonValue.isString()) { + result.append(jsonValue.asString()); + } else { + result.append(jsonValue.toString()); + } return i; } diff --git a/src/net/sourceforge/plantuml/tim/expression/Knowledge.java b/src/net/sourceforge/plantuml/tim/expression/Knowledge.java index 8a102f590..83db19f28 100644 --- a/src/net/sourceforge/plantuml/tim/expression/Knowledge.java +++ b/src/net/sourceforge/plantuml/tim/expression/Knowledge.java @@ -34,12 +34,14 @@ */ package net.sourceforge.plantuml.tim.expression; +import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TFunction; import net.sourceforge.plantuml.tim.TFunctionSignature; public interface Knowledge { - public TValue getVariable(String name); + public TValue getVariable(String name) throws EaterException, EaterExceptionLocated; public TFunction getFunction(TFunctionSignature signature); diff --git a/src/net/sourceforge/plantuml/tim/expression/ReversePolishInterpretor.java b/src/net/sourceforge/plantuml/tim/expression/ReversePolishInterpretor.java index b45b2c522..0d729012d 100644 --- a/src/net/sourceforge/plantuml/tim/expression/ReversePolishInterpretor.java +++ b/src/net/sourceforge/plantuml/tim/expression/ReversePolishInterpretor.java @@ -40,8 +40,8 @@ import java.util.Deque; import java.util.List; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TFunction; import net.sourceforge.plantuml.tim.TFunctionSignature; @@ -109,7 +109,7 @@ public class ReversePolishInterpretor { if (location == null) { throw EaterException.unlocated("rpn44"); } - final TValue r = function.executeReturn(context, memory, location, args); + final TValue r = function.executeReturnFunction(context, memory, location, args); if (trace) System.err.println("r=" + r); stack.addFirst(r); diff --git a/src/net/sourceforge/plantuml/tim/expression/ShuntingYard.java b/src/net/sourceforge/plantuml/tim/expression/ShuntingYard.java index 4a0265cd0..ccc3c883c 100644 --- a/src/net/sourceforge/plantuml/tim/expression/ShuntingYard.java +++ b/src/net/sourceforge/plantuml/tim/expression/ShuntingYard.java @@ -37,6 +37,9 @@ package net.sourceforge.plantuml.tim.expression; import java.util.ArrayDeque; import java.util.Deque; +import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; + // https://en.wikipedia.org/wiki/Shunting-yard_algorithm // https://en.cppreference.com/w/c/language/operator_precedence public class ShuntingYard { @@ -55,7 +58,7 @@ public class ShuntingYard { System.err.println(""); } - public ShuntingYard(TokenIterator it, Knowledge knowledge) { + public ShuntingYard(TokenIterator it, Knowledge knowledge) throws EaterException, EaterExceptionLocated { while (it.hasMoreTokens()) { final Token token = it.nextToken(); diff --git a/src/net/sourceforge/plantuml/tim/expression/TValue.java b/src/net/sourceforge/plantuml/tim/expression/TValue.java index 921f8d658..e08d8455a 100644 --- a/src/net/sourceforge/plantuml/tim/expression/TValue.java +++ b/src/net/sourceforge/plantuml/tim/expression/TValue.java @@ -77,6 +77,9 @@ public class TValue { @Override public String toString() { + if (jsonValue != null && jsonValue.isString()) { + return jsonValue.asString(); + } if (jsonValue != null) { return jsonValue.toString(); } diff --git a/src/net/sourceforge/plantuml/tim/expression/TokenStack.java b/src/net/sourceforge/plantuml/tim/expression/TokenStack.java index 6547bf62a..c61991a91 100644 --- a/src/net/sourceforge/plantuml/tim/expression/TokenStack.java +++ b/src/net/sourceforge/plantuml/tim/expression/TokenStack.java @@ -44,8 +44,8 @@ import java.util.Map; import net.sourceforge.plantuml.LineLocation; import net.sourceforge.plantuml.tim.Eater; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TMemory; @@ -209,7 +209,7 @@ public class TokenStack { } public TValue getResult(LineLocation location, TContext context, TMemory memory) throws EaterException, EaterExceptionLocated { - final Knowledge knowledge = context.asKnowledge(memory); + final Knowledge knowledge = context.asKnowledge(memory, location); final TokenStack tmp = withoutSpace(); tmp.guessFunctions(); final TokenIterator it = tmp.tokenIterator(); diff --git a/src/net/sourceforge/plantuml/tim/iterator/AbstractCodeIterator.java b/src/net/sourceforge/plantuml/tim/iterator/AbstractCodeIterator.java index 9e1948772..e0ccb0a63 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/AbstractCodeIterator.java +++ b/src/net/sourceforge/plantuml/tim/iterator/AbstractCodeIterator.java @@ -34,8 +34,8 @@ */ package net.sourceforge.plantuml.tim.iterator; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; public abstract class AbstractCodeIterator implements CodeIterator { diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIterator.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIterator.java index 8a6204351..7fca5d6a2 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIterator.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIterator.java @@ -35,8 +35,8 @@ package net.sourceforge.plantuml.tim.iterator; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; public interface CodeIterator { diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorAffectation.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorAffectation.java index 1d214f0a5..c9b3389f4 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorAffectation.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorAffectation.java @@ -39,8 +39,8 @@ import java.util.List; import net.sourceforge.plantuml.StringLocated; import net.sourceforge.plantuml.json.ParseException; import net.sourceforge.plantuml.tim.EaterAffectation; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TLineType; import net.sourceforge.plantuml.tim.TMemory; diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorForeach.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorForeach.java index 72af36792..aae35792a 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorForeach.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorForeach.java @@ -38,8 +38,8 @@ import java.util.List; import net.sourceforge.plantuml.StringLocated; import net.sourceforge.plantuml.json.JsonValue; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterForeach; import net.sourceforge.plantuml.tim.ExecutionContextForeach; import net.sourceforge.plantuml.tim.TContext; diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorIf.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorIf.java index b652d2b23..51df6d7eb 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorIf.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorIf.java @@ -38,8 +38,8 @@ import java.util.List; import net.sourceforge.plantuml.StringLocated; import net.sourceforge.plantuml.tim.EaterElseIf; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterIf; import net.sourceforge.plantuml.tim.EaterIfdef; import net.sourceforge.plantuml.tim.EaterIfndef; diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorInnerComment.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorInnerComment.java index 42db4e1ff..a06f511b6 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorInnerComment.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorInnerComment.java @@ -35,8 +35,8 @@ package net.sourceforge.plantuml.tim.iterator; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; public class CodeIteratorInnerComment extends AbstractCodeIterator { diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLegacyDefine.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLegacyDefine.java index fc609d79c..6edca58d1 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLegacyDefine.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLegacyDefine.java @@ -37,8 +37,8 @@ package net.sourceforge.plantuml.tim.iterator; import java.util.List; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.FunctionsSet; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TLineType; diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLongComment.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLongComment.java index 20832d23d..f55f6b66e 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLongComment.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorLongComment.java @@ -37,8 +37,8 @@ package net.sourceforge.plantuml.tim.iterator; import java.util.List; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TLineType; public class CodeIteratorLongComment extends AbstractCodeIterator { diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorFunction.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorProcedure.java similarity index 80% rename from src/net/sourceforge/plantuml/tim/iterator/CodeIteratorFunction.java rename to src/net/sourceforge/plantuml/tim/iterator/CodeIteratorProcedure.java index 594479c10..204377f20 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorFunction.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorProcedure.java @@ -37,14 +37,15 @@ package net.sourceforge.plantuml.tim.iterator; import java.util.List; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.FunctionsSet; import net.sourceforge.plantuml.tim.TContext; +import net.sourceforge.plantuml.tim.TFunctionType; import net.sourceforge.plantuml.tim.TLineType; import net.sourceforge.plantuml.tim.TMemory; -public class CodeIteratorFunction extends AbstractCodeIterator { +public class CodeIteratorProcedure extends AbstractCodeIterator { private final FunctionsSet functionsSet; @@ -52,7 +53,7 @@ public class CodeIteratorFunction extends AbstractCodeIterator { private final TMemory memory; private final List logs; - public CodeIteratorFunction(CodeIterator source, TContext context, TMemory memory, FunctionsSet functionsSet, + public CodeIteratorProcedure(CodeIterator source, TContext context, TMemory memory, FunctionsSet functionsSet, List logs) { super(source); this.context = context; @@ -68,7 +69,9 @@ public class CodeIteratorFunction extends AbstractCodeIterator { return null; } - if (functionsSet.pendingFunction() != null) { + if (functionsSet.pendingFunction() != null + && (functionsSet.pendingFunction().getFunctionType() == TFunctionType.PROCEDURE + || functionsSet.pendingFunction().getFunctionType() == TFunctionType.LEGACY_DEFINELONG)) { logs.add(result); if (result.getType() == TLineType.END_FUNCTION) { functionsSet.executeEndfunction(); @@ -79,9 +82,9 @@ public class CodeIteratorFunction extends AbstractCodeIterator { continue; } - if (result.getType() == TLineType.DECLARE_FUNCTION) { + if (result.getType() == TLineType.DECLARE_PROCEDURE) { logs.add(result); - functionsSet.executeDeclareFunction(context, memory, result); + functionsSet.executeDeclareProcedure(context, memory, result); next(); continue; } diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorReturnFunction.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorReturnFunction.java new file mode 100644 index 000000000..cf238b285 --- /dev/null +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorReturnFunction.java @@ -0,0 +1,100 @@ +/* ======================================================================== + * 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.tim.iterator; + +import java.util.List; + +import net.sourceforge.plantuml.StringLocated; +import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; +import net.sourceforge.plantuml.tim.FunctionsSet; +import net.sourceforge.plantuml.tim.TContext; +import net.sourceforge.plantuml.tim.TFunctionType; +import net.sourceforge.plantuml.tim.TLineType; +import net.sourceforge.plantuml.tim.TMemory; + +public class CodeIteratorReturnFunction extends AbstractCodeIterator { + + private final FunctionsSet functionsSet; + + private final TContext context; + private final TMemory memory; + private final List logs; + + public CodeIteratorReturnFunction(CodeIterator source, TContext context, TMemory memory, FunctionsSet functionsSet, + List logs) { + super(source); + this.context = context; + this.functionsSet = functionsSet; + this.logs = logs; + this.memory = memory; + } + + public StringLocated peek() throws EaterException, EaterExceptionLocated { + while (true) { + final StringLocated result = source.peek(); + if (result == null) { + return null; + } + + if (functionsSet.pendingFunction() != null + && functionsSet.pendingFunction().getFunctionType() == TFunctionType.RETURN_FUNCTION) { + logs.add(result); + if (result.getType() == TLineType.END_FUNCTION) { + if (functionsSet.pendingFunction().doesContainReturn() == false) { + throw EaterExceptionLocated.located( + "This function does not have any !return directive. Declare it as a procedure instead ?", + result); + } + functionsSet.executeEndfunction(); + } else { + functionsSet.pendingFunction().addBody(result); + } + next(); + continue; + } + + if (result.getType() == TLineType.DECLARE_RETURN_FUNCTION) { + logs.add(result); + functionsSet.executeDeclareReturnFunction(context, memory, result); + next(); + continue; + } + + return result; + } + } + +} diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorShortComment.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorShortComment.java index cd12ae741..c964da2c9 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorShortComment.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorShortComment.java @@ -37,8 +37,8 @@ package net.sourceforge.plantuml.tim.iterator; import java.util.List; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TLineType; public class CodeIteratorShortComment extends AbstractCodeIterator { diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorSub.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorSub.java index 539cdc72f..7f3656dc0 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorSub.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorSub.java @@ -39,8 +39,8 @@ import java.util.Map; import net.sourceforge.plantuml.StringLocated; import net.sourceforge.plantuml.preproc.Sub; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterStartsub; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TLineType; diff --git a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorWhile.java b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorWhile.java index fca61c3c7..716d36125 100644 --- a/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorWhile.java +++ b/src/net/sourceforge/plantuml/tim/iterator/CodeIteratorWhile.java @@ -37,8 +37,8 @@ package net.sourceforge.plantuml.tim.iterator; import java.util.List; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterWhile; import net.sourceforge.plantuml.tim.ExecutionContextWhile; import net.sourceforge.plantuml.tim.TContext; diff --git a/src/net/sourceforge/plantuml/tim/stdlib/AlwaysFalse.java b/src/net/sourceforge/plantuml/tim/stdlib/AlwaysFalse.java index 1dadf3ff2..2aeb6f656 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/AlwaysFalse.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/AlwaysFalse.java @@ -53,7 +53,7 @@ public class AlwaysFalse extends SimpleReturnFunction { return nbArg == 0; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { return TValue.fromBoolean(false); } } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/AlwaysTrue.java b/src/net/sourceforge/plantuml/tim/stdlib/AlwaysTrue.java index 7a3f2f6ef..519d80bfb 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/AlwaysTrue.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/AlwaysTrue.java @@ -53,7 +53,7 @@ public class AlwaysTrue extends SimpleReturnFunction { return nbArg == 0; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { return TValue.fromBoolean(true); } } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/CallUserFunction.java b/src/net/sourceforge/plantuml/tim/stdlib/CallUserFunction.java index b340577d8..9f80086cc 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/CallUserFunction.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/CallUserFunction.java @@ -37,8 +37,8 @@ package net.sourceforge.plantuml.tim.stdlib; import java.util.List; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TFunction; import net.sourceforge.plantuml.tim.TFunctionSignature; @@ -55,7 +55,7 @@ public class CallUserFunction extends SimpleReturnFunction { return nbArg > 0; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List values) throws EaterException, EaterExceptionLocated { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List values) throws EaterException, EaterExceptionLocated { final String fname = values.get(0).toString(); final List args = values.subList(1, values.size()); final TFunctionSignature signature = new TFunctionSignature(fname, args.size()); @@ -63,7 +63,7 @@ public class CallUserFunction extends SimpleReturnFunction { if (func == null) { throw EaterException.unlocated("Cannot find void function " + fname); } - return func.executeReturn(context, memory, location, args); + return func.executeReturnFunction(context, memory, location, args); } } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/DateFunction.java b/src/net/sourceforge/plantuml/tim/stdlib/DateFunction.java index 21f092120..29357d4f6 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/DateFunction.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/DateFunction.java @@ -55,7 +55,7 @@ public class DateFunction extends SimpleReturnFunction { return nbArg == 0 || nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { if (args.size() == 0) { return TValue.fromString(new Date().toString()); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Dirpath.java b/src/net/sourceforge/plantuml/tim/stdlib/Dirpath.java index 82917aab3..c55c6711e 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Dirpath.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Dirpath.java @@ -60,7 +60,7 @@ public class Dirpath extends SimpleReturnFunction { return nbArg == 0; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { if (value == null) { return TValue.fromString(""); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/FileExists.java b/src/net/sourceforge/plantuml/tim/stdlib/FileExists.java index 99e38e675..e92bff329 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/FileExists.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/FileExists.java @@ -55,7 +55,7 @@ public class FileExists extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { if (OptionFlags.ALLOW_INCLUDE == false) { return TValue.fromBoolean(false); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Filename.java b/src/net/sourceforge/plantuml/tim/stdlib/Filename.java index 8aaf2614c..122640169 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Filename.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Filename.java @@ -60,7 +60,7 @@ public class Filename extends SimpleReturnFunction { return nbArg == 0; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { if (value == null) { return TValue.fromString(""); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/FunctionExists.java b/src/net/sourceforge/plantuml/tim/stdlib/FunctionExists.java index 56bab617e..01e8b77c5 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/FunctionExists.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/FunctionExists.java @@ -53,7 +53,7 @@ public class FunctionExists extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { final String name = args.get(0).toString(); return TValue.fromBoolean(context.doesFunctionExist(name)); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/GetVariableValue.java b/src/net/sourceforge/plantuml/tim/stdlib/GetVariableValue.java index 7a8a00e93..89d14b938 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/GetVariableValue.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/GetVariableValue.java @@ -53,7 +53,7 @@ public class GetVariableValue extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { final String name = args.get(0).toString(); final TValue variable = memory.getVariable(name); if (variable == null) { diff --git a/src/net/sourceforge/plantuml/tim/stdlib/GetVersion.java b/src/net/sourceforge/plantuml/tim/stdlib/GetVersion.java index d3820cd20..39e5dcf1c 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/GetVersion.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/GetVersion.java @@ -54,7 +54,7 @@ public class GetVersion extends SimpleReturnFunction { return nbArg == 0; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { return TValue.fromString(Version.versionString()); } } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Getenv.java b/src/net/sourceforge/plantuml/tim/stdlib/Getenv.java index f8d3a6ef2..2787735aa 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Getenv.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Getenv.java @@ -54,7 +54,7 @@ public class Getenv extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { if (OptionFlags.ALLOW_INCLUDE == false) { return TValue.fromString(""); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/IntVal.java b/src/net/sourceforge/plantuml/tim/stdlib/IntVal.java index 2edf04b73..934c9363b 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/IntVal.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/IntVal.java @@ -54,7 +54,7 @@ public class IntVal extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { final String s = args.get(0).toString(); try { return TValue.fromInt(Integer.parseInt(s)); diff --git a/src/net/sourceforge/plantuml/tim/stdlib/InvokeVoidFunction.java b/src/net/sourceforge/plantuml/tim/stdlib/InvokeProcedure.java similarity index 83% rename from src/net/sourceforge/plantuml/tim/stdlib/InvokeVoidFunction.java rename to src/net/sourceforge/plantuml/tim/stdlib/InvokeProcedure.java index 5283ea653..d4c4841fb 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/InvokeVoidFunction.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/InvokeProcedure.java @@ -38,8 +38,8 @@ import java.util.List; import net.sourceforge.plantuml.LineLocation; import net.sourceforge.plantuml.StringLocated; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterFunctionCall; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TFunction; @@ -48,10 +48,10 @@ import net.sourceforge.plantuml.tim.TFunctionType; import net.sourceforge.plantuml.tim.TMemory; import net.sourceforge.plantuml.tim.expression.TValue; -public class InvokeVoidFunction implements TFunction { +public class InvokeProcedure implements TFunction { public TFunctionSignature getSignature() { - return new TFunctionSignature("%invoke_void_func", 1); + return new TFunctionSignature("%invoke_procedure", 1); } public boolean canCover(int nbArg) { @@ -59,10 +59,10 @@ public class InvokeVoidFunction implements TFunction { } public TFunctionType getFunctionType() { - return TFunctionType.VOID; + return TFunctionType.PROCEDURE; } - public void executeVoid(TContext context, TMemory memory, LineLocation location, String s) throws EaterException, EaterExceptionLocated { + public void executeProcedure(TContext context, TMemory memory, LineLocation location, String s) throws EaterException, EaterExceptionLocated { final EaterFunctionCall call = new EaterFunctionCall(new StringLocated(s, location), false, isUnquoted()); call.analyze((TContext) context, memory); final List values = call.getValues(); @@ -73,14 +73,14 @@ public class InvokeVoidFunction implements TFunction { if (func == null) { throw EaterException.located("Cannot find void function " + fname, new StringLocated(s, location)); } - func.executeVoidInternal(context, memory, args); + func.executeProcedureInternal(context, memory, args); } - public void executeVoidInternal(TContext context, TMemory memory, List args) throws EaterException { + public void executeProcedureInternal(TContext context, TMemory memory, List args) throws EaterException { throw new UnsupportedOperationException(); } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { throw new UnsupportedOperationException(); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/LogicalNot.java b/src/net/sourceforge/plantuml/tim/stdlib/LogicalNot.java index 38a774198..7bed63fa6 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/LogicalNot.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/LogicalNot.java @@ -53,7 +53,7 @@ public class LogicalNot extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { final boolean arg = args.get(0).toBoolean(); return TValue.fromBoolean(!arg); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Lower.java b/src/net/sourceforge/plantuml/tim/stdlib/Lower.java index deb4268ec..160f86755 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Lower.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Lower.java @@ -53,7 +53,7 @@ public class Lower extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { return TValue.fromString(args.get(0).toString().toLowerCase()); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/RetrieveVoidFunction.java b/src/net/sourceforge/plantuml/tim/stdlib/RetrieveProcedure.java similarity index 86% rename from src/net/sourceforge/plantuml/tim/stdlib/RetrieveVoidFunction.java rename to src/net/sourceforge/plantuml/tim/stdlib/RetrieveProcedure.java index 6e90073f2..330192222 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/RetrieveVoidFunction.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/RetrieveProcedure.java @@ -37,31 +37,31 @@ package net.sourceforge.plantuml.tim.stdlib; import java.util.List; import net.sourceforge.plantuml.LineLocation; -import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.EaterExceptionLocated; import net.sourceforge.plantuml.tim.TContext; import net.sourceforge.plantuml.tim.TFunction; import net.sourceforge.plantuml.tim.TFunctionSignature; import net.sourceforge.plantuml.tim.TMemory; import net.sourceforge.plantuml.tim.expression.TValue; -public class RetrieveVoidFunction extends SimpleReturnFunction { +public class RetrieveProcedure extends SimpleReturnFunction { public TFunctionSignature getSignature() { - return new TFunctionSignature("%retrieve_void_func", 1); + return new TFunctionSignature("%retrieve_procedure", 1); } public boolean canCover(int nbArg) { return nbArg > 0; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List values) throws EaterException, EaterExceptionLocated { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List values) throws EaterException, EaterExceptionLocated { final String fname = values.get(0).toString(); final List args = values.subList(1, values.size()); final TFunctionSignature signature = new TFunctionSignature(fname, args.size()); final TFunction func = context.getFunctionSmart(signature); final int n1 = context.getResultList().size(); - func.executeVoidInternal(context, memory, args); + func.executeProcedureInternal(context, memory, args); final String extracted = context.extractFromResultList(n1); return TValue.fromString(extracted); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/SetVariableValue.java b/src/net/sourceforge/plantuml/tim/stdlib/SetVariableValue.java index 58b5eb1d6..31efb7b40 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/SetVariableValue.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/SetVariableValue.java @@ -54,7 +54,7 @@ public class SetVariableValue extends SimpleReturnFunction { return nbArg == 2; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { // if (memory instanceof TMemoryLocal) { // memory = ((TMemoryLocal) memory).getGlobalForInternalUseOnly(); // } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/SimpleReturnFunction.java b/src/net/sourceforge/plantuml/tim/stdlib/SimpleReturnFunction.java index b7e57a9ba..8520e865a 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/SimpleReturnFunction.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/SimpleReturnFunction.java @@ -47,14 +47,14 @@ import net.sourceforge.plantuml.tim.expression.TValue; public abstract class SimpleReturnFunction implements TFunction { final public TFunctionType getFunctionType() { - return TFunctionType.RETURN; + return TFunctionType.RETURN_FUNCTION; } - final public void executeVoid(TContext context, TMemory memory, LineLocation location, String s) throws EaterException { + final public void executeProcedure(TContext context, TMemory memory, LineLocation location, String s) throws EaterException { throw new UnsupportedOperationException(); } - final public void executeVoidInternal(TContext context, TMemory memory, List args) throws EaterException { + final public void executeProcedureInternal(TContext context, TMemory memory, List args) throws EaterException { throw new UnsupportedOperationException(); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/StringFunction.java b/src/net/sourceforge/plantuml/tim/stdlib/StringFunction.java new file mode 100644 index 000000000..1c2a1ce7a --- /dev/null +++ b/src/net/sourceforge/plantuml/tim/stdlib/StringFunction.java @@ -0,0 +1,60 @@ +/* ======================================================================== + * 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.tim.stdlib; + +import java.util.List; + +import net.sourceforge.plantuml.LineLocation; +import net.sourceforge.plantuml.tim.EaterException; +import net.sourceforge.plantuml.tim.TContext; +import net.sourceforge.plantuml.tim.TFunctionSignature; +import net.sourceforge.plantuml.tim.TMemory; +import net.sourceforge.plantuml.tim.expression.TValue; + +public class StringFunction extends SimpleReturnFunction { + + public TFunctionSignature getSignature() { + return new TFunctionSignature("%string", 3); + } + + public boolean canCover(int nbArg) { + return nbArg == 1; + } + + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) + throws EaterException { + return TValue.fromString(args.get(0).toString()); + } +} diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Strlen.java b/src/net/sourceforge/plantuml/tim/stdlib/Strlen.java index 6236489b0..3b0f3bd78 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Strlen.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Strlen.java @@ -53,7 +53,7 @@ public class Strlen extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { return TValue.fromInt(args.get(0).toString().length()); } } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Strpos.java b/src/net/sourceforge/plantuml/tim/stdlib/Strpos.java index 7edaeb59c..e54090bca 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Strpos.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Strpos.java @@ -53,7 +53,7 @@ public class Strpos extends SimpleReturnFunction { return nbArg == 2; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { final String full = args.get(0).toString(); final String searched = args.get(1).toString(); return TValue.fromInt(full.indexOf(searched)); diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Substr.java b/src/net/sourceforge/plantuml/tim/stdlib/Substr.java index d013c430c..a3fa9186f 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Substr.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Substr.java @@ -53,7 +53,7 @@ public class Substr extends SimpleReturnFunction { return nbArg == 2 || nbArg == 3; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { final String full = args.get(0).toString(); final int pos = args.get(1).toInt(); if (pos >= full.length()) { diff --git a/src/net/sourceforge/plantuml/tim/stdlib/Upper.java b/src/net/sourceforge/plantuml/tim/stdlib/Upper.java index b996df979..350d6c15a 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/Upper.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/Upper.java @@ -53,7 +53,7 @@ public class Upper extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { return TValue.fromString(args.get(0).toString().toUpperCase()); } diff --git a/src/net/sourceforge/plantuml/tim/stdlib/VariableExists.java b/src/net/sourceforge/plantuml/tim/stdlib/VariableExists.java index c8ae3f57b..dda324a14 100644 --- a/src/net/sourceforge/plantuml/tim/stdlib/VariableExists.java +++ b/src/net/sourceforge/plantuml/tim/stdlib/VariableExists.java @@ -53,7 +53,7 @@ public class VariableExists extends SimpleReturnFunction { return nbArg == 1; } - public TValue executeReturn(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { + public TValue executeReturnFunction(TContext context, TMemory memory, LineLocation location, List args) throws EaterException { final String name = args.get(0).toString(); return TValue.fromBoolean(memory.getVariable(name) != null); } diff --git a/src/net/sourceforge/plantuml/timingdiagram/Clocks.java b/src/net/sourceforge/plantuml/timingdiagram/Clocks.java index dea055ac7..e0a4d7a3b 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/Clocks.java +++ b/src/net/sourceforge/plantuml/timingdiagram/Clocks.java @@ -39,5 +39,7 @@ public interface Clocks { public TimeTick getNow(); public TimeTick getClockValue(String clockName, int nb); + + public TimeTick getCodeValue(String code); } diff --git a/src/net/sourceforge/plantuml/timingdiagram/Highlight.java b/src/net/sourceforge/plantuml/timingdiagram/Highlight.java index aa7776852..74a3661fa 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/Highlight.java +++ b/src/net/sourceforge/plantuml/timingdiagram/Highlight.java @@ -42,14 +42,13 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.color.ColorType; import net.sourceforge.plantuml.graphic.color.Colors; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; import net.sourceforge.plantuml.ugraphic.color.HColorUtils; public class Highlight { @@ -100,7 +99,7 @@ public class Highlight { } public void drawHighlightsBack(UGraphic ug, TimingRuler ruler, double height) { - ug = ug.apply(new UChangeColor(null)).apply(new UChangeBackColor(getBackColor())); + ug = ug.apply(new HColorNone()).apply(getBackColor().bg()); final double start = ruler.getPosInPixel(this.getTickFrom()); final double end = ruler.getPosInPixel(this.getTickTo()); final URectangle rect = new URectangle(end - start, height); @@ -109,7 +108,7 @@ public class Highlight { public void drawHighlightsLines(UGraphic ug, TimingRuler ruler, double height) { ug = ug.apply(new UStroke(4, 4, 2)); - ug = ug.apply(new UChangeColor(getLineColor())); + ug = ug.apply(getLineColor()); final ULine line = ULine.vline(height); final double start = ruler.getPosInPixel(this.getTickFrom()); final double end = ruler.getPosInPixel(this.getTickTo()); diff --git a/src/net/sourceforge/plantuml/timingdiagram/Player.java b/src/net/sourceforge/plantuml/timingdiagram/Player.java index 6a8e4e164..3d53760e4 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/Player.java +++ b/src/net/sourceforge/plantuml/timingdiagram/Player.java @@ -45,7 +45,6 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; import net.sourceforge.plantuml.graphic.color.Colors; import net.sourceforge.plantuml.timingdiagram.graphic.PlayerFrame; -import net.sourceforge.plantuml.ugraphic.UGraphic; public abstract class Player implements TimeProjected { diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java b/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java index 90a2812c0..8100e86ad 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java +++ b/src/net/sourceforge/plantuml/timingdiagram/TimeConstraint.java @@ -45,8 +45,6 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.timingdiagram.graphic.TimeArrow; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -90,7 +88,7 @@ public class TimeConstraint { } public void drawU(UGraphic ug, TimingRuler ruler) { - ug = ug.apply(new UChangeColor(HColorUtils.RED)).apply(new UChangeBackColor(HColorUtils.RED)); + ug = ug.apply(HColorUtils.RED).apply(HColorUtils.RED.bg()); final double x1 = ruler.getPosInPixel(tick1); final double x2 = ruler.getPosInPixel(tick2); ug = ug.apply(UTranslate.dx(x1)); diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java index ff87f2d8a..2dd84a19c 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java +++ b/src/net/sourceforge/plantuml/timingdiagram/TimingDiagram.java @@ -64,7 +64,6 @@ import net.sourceforge.plantuml.timingdiagram.graphic.IntricatedPoint; import net.sourceforge.plantuml.timingdiagram.graphic.TimeArrow; import net.sourceforge.plantuml.ugraphic.ImageBuilder; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -77,6 +76,7 @@ public class TimingDiagram extends UmlDiagram implements Clocks { public static final double marginX1 = 5; private final double marginX2 = 5; + private final Map codes = new HashMap(); private final Map players = new LinkedHashMap(); private final Map clocks = new HashMap(); private final List messages = new ArrayList(); @@ -169,7 +169,7 @@ public class TimingDiagram extends UmlDiagram implements Clocks { private void drawHorizontalSeparator(UGraphic ug) { final StringBounder stringBounder = ug.getStringBounder(); - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK); ug = ug.apply(getBorderStroke()); ug = ug.apply(UTranslate.dx(-marginX1)); ug.draw(ULine.hline(getWidthTotal(stringBounder))); @@ -178,7 +178,7 @@ public class TimingDiagram extends UmlDiagram implements Clocks { private void drawBorder(UGraphic ug) { final StringBounder stringBounder = ug.getStringBounder(); final ULine border = ULine.vline(getLastTranslate(stringBounder).getDy()); - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)).apply(getBorderStroke()); + ug = ug.apply(HColorUtils.BLACK).apply(getBorderStroke()); ug.draw(border); ug.apply(UTranslate.dx(getWidthTotal(stringBounder))).draw(border); } @@ -317,9 +317,16 @@ public class TimingDiagram extends UmlDiagram implements Clocks { return message; } - public void addTime(TimeTick time) { + public void addTime(TimeTick time, String code) { this.now = time; ruler.addTime(time); + if (code != null) { + this.codes.put(code, time); + } + } + + public TimeTick getCodeValue(String code) { + return codes.get(code); } public void updateNow(TimeTick time) { diff --git a/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java b/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java index a8aecad2e..f74f5eb7a 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java +++ b/src/net/sourceforge/plantuml/timingdiagram/TimingRuler.java @@ -47,7 +47,6 @@ import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -70,7 +69,7 @@ public class TimingRuler { private UGraphic applyForVLines(UGraphic ug) { final UStroke stroke = new UStroke(3, 5, 0.5); final HColor color = HColorSet.instance().getColorIfValid("#AAA"); - return ug.apply(stroke).apply(new UChangeColor(color)); + return ug.apply(stroke).apply(color); } public void ensureNotEmpty() { @@ -154,7 +153,7 @@ public class TimingRuler { } public void drawTimeAxis(UGraphic ug) { - ug = ug.apply(new UStroke(2.0)).apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(new UStroke(2.0)).apply(HColorUtils.BLACK); final double tickHeight = 5; final ULine line = ULine.vline(tickHeight); final int nb = getNbTick(true); diff --git a/src/net/sourceforge/plantuml/timingdiagram/command/CommandAtTime.java b/src/net/sourceforge/plantuml/timingdiagram/command/CommandAtTime.java index 2507feb8c..0cd16b6cf 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/command/CommandAtTime.java +++ b/src/net/sourceforge/plantuml/timingdiagram/command/CommandAtTime.java @@ -41,6 +41,7 @@ import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; +import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; import net.sourceforge.plantuml.timingdiagram.TimeTick; import net.sourceforge.plantuml.timingdiagram.TimingDiagram; @@ -54,6 +55,13 @@ public class CommandAtTime extends SingleLineCommand2 { private static IRegex getRegexConcat() { return RegexConcat.build(CommandAtTime.class.getName(), RegexLeaf.start(), // TimeTickBuilder.expressionAtWithArobase("TIME"), // + new RegexOptional(new RegexConcat( // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf("as"), // + RegexLeaf.spaceOneOrMore(), // + new RegexLeaf(":"), // + new RegexLeaf("CODE", "([\\p{L}0-9_.]+)") // + )), // RegexLeaf.spaceZeroOrMore(), // RegexLeaf.end()); } @@ -64,7 +72,8 @@ public class CommandAtTime extends SingleLineCommand2 { if (timeTick == null) { return CommandExecutionResult.error("What time?"); } - diagram.addTime(timeTick); + final String code = arg.get("CODE", 0); + diagram.addTime(timeTick, code); return CommandExecutionResult.ok(); } diff --git a/src/net/sourceforge/plantuml/timingdiagram/command/CommandChangeStateByTime.java b/src/net/sourceforge/plantuml/timingdiagram/command/CommandChangeStateByTime.java index 8b1f0d0b9..996020532 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/command/CommandChangeStateByTime.java +++ b/src/net/sourceforge/plantuml/timingdiagram/command/CommandChangeStateByTime.java @@ -80,7 +80,7 @@ public class CommandChangeStateByTime extends CommandChangeState { return CommandExecutionResult.error("Missing @ line before this"); } final TimeTick tick = TimeTickBuilder.parseTimeTick("TIME", arg, diagram); - diagram.addTime(tick); + diagram.addTime(tick, null); return addState(diagram, arg, player, tick); } diff --git a/src/net/sourceforge/plantuml/timingdiagram/command/TimeTickBuilder.java b/src/net/sourceforge/plantuml/timingdiagram/command/TimeTickBuilder.java index 42c47d137..47b495079 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/command/TimeTickBuilder.java +++ b/src/net/sourceforge/plantuml/timingdiagram/command/TimeTickBuilder.java @@ -50,6 +50,7 @@ public class TimeTickBuilder { public static IRegex expressionAtWithoutArobase(String name) { return new RegexOr( // + new RegexLeaf(name + "CODE", ":([\\p{L}0-9_.]+)([-+]\\d+)?"), // new RegexLeaf(name + "DATE", "(\\d+)/(\\d+)/(\\d+)"), // new RegexLeaf(name + "HOUR", "(\\d+):(\\d+):(\\d+)"), // new RegexLeaf(name + "DIGIT", "(\\+?)(-?\\d+\\.?\\d*)"), // @@ -67,6 +68,16 @@ public class TimeTickBuilder { } public static TimeTick parseTimeTick(String name, RegexResult arg, Clocks clock) { + final String code = arg.get(name + "CODE", 0); + if (code != null) { + final String delta = arg.get(name + "CODE", 1); + TimeTick result = clock.getCodeValue(code); + if (delta == null) { + return result; + } + final BigDecimal value = result.getTime().add(new BigDecimal(delta)); + return new TimeTick(value, TimingFormat.DECIMAL); + } final String clockName = arg.get(name + "CLOCK", 0); if (clockName != null) { final int number = Integer.parseInt(arg.get(name + "CLOCK", 1)); diff --git a/src/net/sourceforge/plantuml/timingdiagram/graphic/Histogram.java b/src/net/sourceforge/plantuml/timingdiagram/graphic/Histogram.java index 290ea34c0..2d04075c5 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/graphic/Histogram.java +++ b/src/net/sourceforge/plantuml/timingdiagram/graphic/Histogram.java @@ -58,7 +58,6 @@ import net.sourceforge.plantuml.timingdiagram.ChangeState; import net.sourceforge.plantuml.timingdiagram.TimeConstraint; import net.sourceforge.plantuml.timingdiagram.TimeTick; import net.sourceforge.plantuml.timingdiagram.TimingRuler; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -245,7 +244,7 @@ public class Histogram implements PlayerDrawing { final double len = x2 - getPointx(i); final Point2D[] points = getPoints(i); if (points.length == 2) { - drawHBlock(ug.apply(new UChangeBackColor(changes.get(i).getBackColor())), points[0], points[1], len); + drawHBlock(ug.apply(changes.get(i).getBackColor().bg()), points[0], points[1], len); } if (i < changes.size() - 1) { for (Point2D pt : points) { diff --git a/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame2.java b/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame2.java index 78b456489..bf7773b60 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame2.java +++ b/src/net/sourceforge/plantuml/timingdiagram/graphic/PlayerFrame2.java @@ -39,7 +39,6 @@ import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.timingdiagram.TimingDiagram; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.UStroke; @@ -57,7 +56,7 @@ public class PlayerFrame2 implements PlayerFrame { public void drawFrameTitle(UGraphic ug) { title.drawU(ug); final Dimension2D dimTitle = title.calculateDimension(ug.getStringBounder()); - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)).apply(new UStroke(1.0)); + ug = ug.apply(HColorUtils.BLACK).apply(new UStroke(1.0)); final double widthTmp = dimTitle.getWidth() + 1; final double height = getHeight(ug.getStringBounder()); drawLine(ug, -TimingDiagram.marginX1, height, widthTmp, height, widthTmp + 10, 0); diff --git a/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java b/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java index 26edbe0dd..e3d5da0c6 100644 --- a/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java +++ b/src/net/sourceforge/plantuml/timingdiagram/graphic/TimeArrow.java @@ -44,8 +44,6 @@ import net.sourceforge.plantuml.graphic.FontConfiguration; import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UDrawable; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -116,7 +114,7 @@ public class TimeArrow implements UDrawable { public void drawU(UGraphic ug) { final double angle = getAngle(); - ug = ug.apply(new UChangeColor(type.getSpecificColor())).apply(type.getType().getStroke3(new UStroke())); + ug = ug.apply(type.getSpecificColor()).apply(type.getType().getStroke3(new UStroke())); final ULine line = new ULine(end.getX() - start.getX(), end.getY() - start.getY()); ug.apply(new UTranslate(start)).draw(line); @@ -129,7 +127,7 @@ public class TimeArrow implements UDrawable { polygon.addPoint(pt2.getX(), pt2.getY()); polygon.addPoint(end.getX(), end.getY()); - ug = ug.apply(new UChangeBackColor(type.getSpecificColor())); + ug = ug.apply(type.getSpecificColor().bg()); ug.draw(polygon); final TextBlock textLabel = label.create(getFontConfiguration(), HorizontalAlignment.LEFT, spriteContainer); diff --git a/src/net/sourceforge/plantuml/ugraphic/AbstractCommonUGraphic.java b/src/net/sourceforge/plantuml/ugraphic/AbstractCommonUGraphic.java index 65ba83d01..d02a18424 100644 --- a/src/net/sourceforge/plantuml/ugraphic/AbstractCommonUGraphic.java +++ b/src/net/sourceforge/plantuml/ugraphic/AbstractCommonUGraphic.java @@ -38,6 +38,7 @@ package net.sourceforge.plantuml.ugraphic; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.ColorMapperTransparentWrapper; import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.color.HColorNone; public abstract class AbstractCommonUGraphic implements UGraphic { @@ -59,6 +60,9 @@ public abstract class AbstractCommonUGraphic implements UGraphic { } public UGraphic apply(UChange change) { + if (change == null) { + throw new IllegalArgumentException(); + } final AbstractCommonUGraphic copy = copyUGraphic(); if (change instanceof UTranslate) { copy.translate = ((UTranslate) change).scaled(scale).compose(copy.translate); @@ -71,10 +75,12 @@ public abstract class AbstractCommonUGraphic implements UGraphic { copy.pattern = (UPattern) change; } else if (change instanceof UHidden) { copy.hidden = change == UHidden.HIDDEN; - } else if (change instanceof UChangeBackColor) { - copy.backColor = ((UChangeBackColor) change).getBackColor(); - } else if (change instanceof UChangeColor) { - copy.color = ((UChangeColor) change).getColor(); + } else if (change instanceof UBackground) { + copy.backColor = ((UBackground) change).getBackColor(); + } else if (change instanceof HColorNone) { + copy.color = null; + } else if (change instanceof HColor) { + copy.color = (HColor) change; } else if (change instanceof UScale) { final double factor = ((UScale) change).getScale(); copy.scale = scale * factor; diff --git a/src/net/sourceforge/plantuml/ugraphic/FontChecker.java b/src/net/sourceforge/plantuml/ugraphic/FontChecker.java index 435fa0aa1..f69635559 100644 --- a/src/net/sourceforge/plantuml/ugraphic/FontChecker.java +++ b/src/net/sourceforge/plantuml/ugraphic/FontChecker.java @@ -174,7 +174,7 @@ public class FontChecker { final double dim = 20; imageBuilder.setUDrawable(new UDrawable() { public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK); ug.draw(new URectangle(dim - 1, dim - 1)); if (ug instanceof UGraphic2) { ug = (UGraphic2) ug.apply(new UTranslate(dim / 3, 2 * dim / 3)); @@ -192,7 +192,7 @@ public class FontChecker { // public BufferedImage getBufferedImageOld(char c) throws IOException { // final double dim = 20; // UGraphic2 ug = new FileFormatOption(FileFormat.PNG).createUGraphic(new Dimension2DDouble(dim, dim)); - // ug = (UGraphic2) ug.apply(new UChangeColor(HtmlColorUtils.BLACK)); + // ug = (UGraphic2) ug.apply(UChangeColor.nnn(HtmlColorUtils.BLACK)); // ug.draw(new URectangle(dim - 1, dim - 1)); // ug = (UGraphic2) ug.apply(new UTranslate(dim / 3, 2 * dim / 3)); // final UText text = new UText("" + c, new FontConfiguration(font, HtmlColorUtils.BLACK)); diff --git a/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java b/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java index 5df9ac99d..a7e9112fa 100644 --- a/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java +++ b/src/net/sourceforge/plantuml/ugraphic/ImageBuilder.java @@ -246,7 +246,7 @@ public class ImageBuilder { final HColor color = borderColor == null ? HColorUtils.BLACK : borderColor; final URectangle shape = new URectangle(dim.getWidth() - externalMargin() - borderStroke.getThickness(), dim.getHeight() - externalMargin() - borderStroke.getThickness()).rounded(borderCorner); - ug2.apply(new UChangeColor(color)).apply(borderStroke).draw(shape); + ug2.apply(color).apply(borderStroke).draw(shape); } if (randomPixel) { drawRandomPoint(ug2); @@ -284,7 +284,7 @@ public class ImageBuilder { final int blue = rnd.nextInt(40); final Color c = new Color(red, green, blue); final HColor color = new HColorSimple(c, false); - ug2.apply(new UChangeColor(color)).apply(new UChangeBackColor(color)).draw(new URectangle(1, 1)); + ug2.apply(color).apply(color.bg()).draw(new URectangle(1, 1)); } @@ -462,7 +462,7 @@ public class ImageBuilder { ug.setBufferedImage(builder.getBufferedImage()); final BufferedImage im = ((UGraphicG2d) ug).getBufferedImage(); if (mybackcolor instanceof HColorGradient) { - ug.apply(new UChangeBackColor(mybackcolor)) + ug.apply(mybackcolor.bg()) .draw(new URectangle(im.getWidth() / dpiFactor, im.getHeight() / dpiFactor)); } diff --git a/src/net/sourceforge/plantuml/ugraphic/LimitFinder.java b/src/net/sourceforge/plantuml/ugraphic/LimitFinder.java index bd1c55c39..1da462ed3 100644 --- a/src/net/sourceforge/plantuml/ugraphic/LimitFinder.java +++ b/src/net/sourceforge/plantuml/ugraphic/LimitFinder.java @@ -45,6 +45,7 @@ import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.posimo.DotPath; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class LimitFinder implements UGraphic { @@ -61,9 +62,9 @@ public class LimitFinder implements UGraphic { return new LimitFinder(stringBounder, minmax, translate.compose((UTranslate) change), clip); } else if (change instanceof UStroke) { return new LimitFinder(this); - } else if (change instanceof UChangeBackColor) { + } else if (change instanceof UBackground) { return new LimitFinder(this); - } else if (change instanceof UChangeColor) { + } else if (change instanceof HColor) { return new LimitFinder(this); } else if (change instanceof UHidden) { return new LimitFinder(this); diff --git a/src/net/sourceforge/plantuml/ugraphic/MinMax.java b/src/net/sourceforge/plantuml/ugraphic/MinMax.java index 4da00c753..392ac5c46 100644 --- a/src/net/sourceforge/plantuml/ugraphic/MinMax.java +++ b/src/net/sourceforge/plantuml/ugraphic/MinMax.java @@ -146,7 +146,7 @@ public class MinMax { } public void draw(UGraphic ug, HColor color) { - ug = ug.apply(new UChangeColor(color)).apply(new UChangeBackColor(color)); + ug = ug.apply(color).apply(color.bg()); ug = ug.apply(new UTranslate(minX, minY)); ug.draw(new URectangle(getWidth(), getHeight())); } diff --git a/src/net/sourceforge/plantuml/ugraphic/TextLimitFinder.java b/src/net/sourceforge/plantuml/ugraphic/TextLimitFinder.java index 2d8e72ce2..05869e0ce 100644 --- a/src/net/sourceforge/plantuml/ugraphic/TextLimitFinder.java +++ b/src/net/sourceforge/plantuml/ugraphic/TextLimitFinder.java @@ -40,6 +40,7 @@ import java.awt.geom.Dimension2D; import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class TextLimitFinder implements UGraphic { @@ -57,9 +58,9 @@ public class TextLimitFinder implements UGraphic { return new TextLimitFinder(stringBounder, minmax, translate.compose((UTranslate) change)); } else if (change instanceof UStroke) { return new TextLimitFinder(this); - } else if (change instanceof UChangeBackColor) { + } else if (change instanceof UBackground) { return new TextLimitFinder(this); - } else if (change instanceof UChangeColor) { + } else if (change instanceof HColor) { return new TextLimitFinder(this); } throw new UnsupportedOperationException(); diff --git a/src/net/sourceforge/plantuml/ugraphic/UChangeColor.java b/src/net/sourceforge/plantuml/ugraphic/UBackground.java similarity index 87% rename from src/net/sourceforge/plantuml/ugraphic/UChangeColor.java rename to src/net/sourceforge/plantuml/ugraphic/UBackground.java index c71f597f4..c15aa7028 100644 --- a/src/net/sourceforge/plantuml/ugraphic/UChangeColor.java +++ b/src/net/sourceforge/plantuml/ugraphic/UBackground.java @@ -37,15 +37,8 @@ package net.sourceforge.plantuml.ugraphic; import net.sourceforge.plantuml.ugraphic.color.HColor; -public class UChangeColor implements UChange { +public interface UBackground extends UChange { - private final HColor color; + public HColor getBackColor(); - public UChangeColor(HColor color) { - this.color = color; - } - - public HColor getColor() { - return color; - } } diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColor.java b/src/net/sourceforge/plantuml/ugraphic/color/HColor.java index 053071318..7f40e9b72 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColor.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColor.java @@ -35,8 +35,11 @@ */ package net.sourceforge.plantuml.ugraphic.color; +import net.sourceforge.plantuml.ugraphic.UChange; +import net.sourceforge.plantuml.ugraphic.UBackground; -public interface HColor { +public interface HColor extends UChange { + public UBackground bg(); } diff --git a/src/net/sourceforge/plantuml/ugraphic/UChangeBackColor.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorAbstract.java similarity index 73% rename from src/net/sourceforge/plantuml/ugraphic/UChangeBackColor.java rename to src/net/sourceforge/plantuml/ugraphic/color/HColorAbstract.java index cc836ba0c..4d3266e26 100644 --- a/src/net/sourceforge/plantuml/ugraphic/UChangeBackColor.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorAbstract.java @@ -30,28 +30,20 @@ * * * Original Author: Arnaud Roques - * * */ -package net.sourceforge.plantuml.ugraphic; +package net.sourceforge.plantuml.ugraphic.color; -import net.sourceforge.plantuml.ugraphic.color.HColor; +import net.sourceforge.plantuml.ugraphic.UBackground; -public class UChangeBackColor implements UChange { - - private final HColor color; - - public UChangeBackColor(HColor color) { - this.color = color; +abstract class HColorAbstract implements HColor { + + final public UBackground bg() { + return new UBackground() { + public HColor getBackColor() { + return HColorAbstract.this; + } + }; } - public HColor getBackColor() { - return color; - } - - // private HtmlColor color = null; - // private HtmlColor backcolor = null; - // private UStroke stroke = new UStroke(1); - // private boolean hidden = false; - } diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorAutomatic.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorAutomatic.java index 6f00f25a4..37314458f 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColorAutomatic.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorAutomatic.java @@ -34,6 +34,6 @@ */ package net.sourceforge.plantuml.ugraphic.color; -public class HColorAutomatic implements HColor { +public class HColorAutomatic extends HColorAbstract implements HColor { } diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorBackground.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorBackground.java index 821b6cef0..a2d940c35 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColorBackground.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorBackground.java @@ -38,7 +38,7 @@ import java.awt.Color; import net.sourceforge.plantuml.StringUtils; -public class HColorBackground implements HColor { +public class HColorBackground extends HColorAbstract implements HColor { private final HColor back; diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorGradient.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorGradient.java index ec53b7ed7..482d5ef2c 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColorGradient.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorGradient.java @@ -36,7 +36,7 @@ package net.sourceforge.plantuml.ugraphic.color; import java.awt.Color; -public class HColorGradient implements HColor { +public class HColorGradient extends HColorAbstract implements HColor { private final HColor color1; private final HColor color2; diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorMiddle.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorMiddle.java index ef62955ea..87897cdb9 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColorMiddle.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorMiddle.java @@ -37,7 +37,7 @@ package net.sourceforge.plantuml.ugraphic.color; import java.awt.Color; -public class HColorMiddle implements HColor { +public class HColorMiddle extends HColorAbstract implements HColor { private final HColor c1; private final HColor c2; diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorNone.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorNone.java new file mode 100644 index 000000000..79635e90b --- /dev/null +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorNone.java @@ -0,0 +1,49 @@ +/* ======================================================================== + * 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.ugraphic.color; + +import net.sourceforge.plantuml.ugraphic.UBackground; + +public class HColorNone implements HColor { + + public UBackground bg() { + return new UBackground() { + public HColor getBackColor() { + return null; + } + }; + } + +} diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorSimple.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorSimple.java index cac4d78c1..3fbe165eb 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColorSimple.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorSimple.java @@ -37,7 +37,7 @@ package net.sourceforge.plantuml.ugraphic.color; import java.awt.Color; -public class HColorSimple implements HColor { +public class HColorSimple extends HColorAbstract implements HColor { private final Color color; private final boolean monochrome; diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorUserDef.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorUserDef.java index 5881fd2d7..3f1c563ae 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColorUserDef.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorUserDef.java @@ -35,6 +35,6 @@ */ package net.sourceforge.plantuml.ugraphic.color; -public class HColorUserDef implements HColor { +public class HColorUserDef extends HColorAbstract implements HColor { } diff --git a/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java b/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java index fa92a8cf3..f0ec8fe48 100644 --- a/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java +++ b/src/net/sourceforge/plantuml/ugraphic/color/HColorUtils.java @@ -35,6 +35,9 @@ */ package net.sourceforge.plantuml.ugraphic.color; +import net.sourceforge.plantuml.ugraphic.UChange; +import net.sourceforge.plantuml.ugraphic.UGraphic; + public class HColorUtils { public static final HColor BLACK; @@ -120,4 +123,12 @@ public class HColorUtils { return color; } + public static UChange changeBack(UGraphic ug) { + final HColor color = ug.getParam().getColor(); + if (color == null) { + return new HColorNone().bg(); + } + return color.bg(); + } + } diff --git a/src/net/sourceforge/plantuml/ugraphic/comp/SlotFinder.java b/src/net/sourceforge/plantuml/ugraphic/comp/SlotFinder.java index 5d3cf5c79..02539b58c 100644 --- a/src/net/sourceforge/plantuml/ugraphic/comp/SlotFinder.java +++ b/src/net/sourceforge/plantuml/ugraphic/comp/SlotFinder.java @@ -39,8 +39,7 @@ import net.sourceforge.plantuml.Url; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.ugraphic.TextLimitFinder; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; +import net.sourceforge.plantuml.ugraphic.UBackground; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UEmpty; import net.sourceforge.plantuml.ugraphic.UGraphic; @@ -56,6 +55,7 @@ import net.sourceforge.plantuml.ugraphic.UText; import net.sourceforge.plantuml.ugraphic.UTranslate; import net.sourceforge.plantuml.ugraphic.color.ColorMapper; import net.sourceforge.plantuml.ugraphic.color.ColorMapperIdentity; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class SlotFinder implements UGraphic { @@ -72,9 +72,9 @@ public class SlotFinder implements UGraphic { return new SlotFinder(mode, stringBounder, slot, translate.compose((UTranslate) change)); } else if (change instanceof UStroke) { return new SlotFinder(this); - } else if (change instanceof UChangeBackColor) { + } else if (change instanceof UBackground) { return new SlotFinder(this); - } else if (change instanceof UChangeColor) { + } else if (change instanceof HColor) { return new SlotFinder(this); } throw new UnsupportedOperationException(); diff --git a/src/net/sourceforge/plantuml/ugraphic/comp/UGraphicCompressOnXorY.java b/src/net/sourceforge/plantuml/ugraphic/comp/UGraphicCompressOnXorY.java index 94dc6654b..c0bca3cd1 100644 --- a/src/net/sourceforge/plantuml/ugraphic/comp/UGraphicCompressOnXorY.java +++ b/src/net/sourceforge/plantuml/ugraphic/comp/UGraphicCompressOnXorY.java @@ -39,14 +39,14 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.CenteredText; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.graphic.UGraphicDelegator; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; +import net.sourceforge.plantuml.ugraphic.UBackground; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; import net.sourceforge.plantuml.ugraphic.URectangle; import net.sourceforge.plantuml.ugraphic.UShape; import net.sourceforge.plantuml.ugraphic.UStroke; import net.sourceforge.plantuml.ugraphic.UTranslate; +import net.sourceforge.plantuml.ugraphic.color.HColor; public class UGraphicCompressOnXorY extends UGraphicDelegator { @@ -54,7 +54,7 @@ public class UGraphicCompressOnXorY extends UGraphicDelegator { if (change instanceof UTranslate) { return new UGraphicCompressOnXorY(mode, getUg(), compressionTransform, translate.compose((UTranslate) change)); - } else if (change instanceof UStroke || change instanceof UChangeBackColor || change instanceof UChangeColor) { + } else if (change instanceof UStroke || change instanceof UBackground || change instanceof HColor) { return new UGraphicCompressOnXorY(mode, getUg().apply(change), compressionTransform, translate); } throw new UnsupportedOperationException(); diff --git a/src/net/sourceforge/plantuml/ugraphic/crossing/UGraphicCrossing.java b/src/net/sourceforge/plantuml/ugraphic/crossing/UGraphicCrossing.java index ecab1aaf7..6dca67fb7 100644 --- a/src/net/sourceforge/plantuml/ugraphic/crossing/UGraphicCrossing.java +++ b/src/net/sourceforge/plantuml/ugraphic/crossing/UGraphicCrossing.java @@ -45,8 +45,6 @@ import net.sourceforge.plantuml.geom.LineSegmentDouble; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.posimo.DotPath; import net.sourceforge.plantuml.ugraphic.UChange; -import net.sourceforge.plantuml.ugraphic.UChangeBackColor; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.UParam; import net.sourceforge.plantuml.ugraphic.UShape; @@ -76,7 +74,7 @@ public class UGraphicCrossing implements UGraphic { if (color == null) { segment.draw(ug); } else { - segment.draw(ug.apply(new UChangeColor(color))); + segment.draw(ug.apply(color)); } } @@ -172,14 +170,14 @@ public class UGraphicCrossing implements UGraphic { // } } for (Balloon b : balloons) { - b.drawU(ug.apply(new UChangeBackColor(HColorUtils.GREEN)).apply(new UChangeColor(HColorUtils.GREEN))); + b.drawU(ug.apply(HColorUtils.GREEN.bg()).apply(HColorUtils.GREEN)); } for (Pending p : lines) { for (Balloon b : balloons) { List pts = new CrossingSegment(b, p.segment).intersection(); for (Point2D pt : pts) { final Balloon s2 = new Balloon(pt, 2); - s2.drawU(ug.apply(new UChangeBackColor(HColorUtils.BLUE)).apply(new UChangeColor(HColorUtils.BLUE))); + s2.drawU(ug.apply(HColorUtils.BLUE.bg()).apply(HColorUtils.BLUE)); } } } diff --git a/src/net/sourceforge/plantuml/version/Version.java b/src/net/sourceforge/plantuml/version/Version.java index cab610f7f..05aeda58c 100644 --- a/src/net/sourceforge/plantuml/version/Version.java +++ b/src/net/sourceforge/plantuml/version/Version.java @@ -43,7 +43,7 @@ public class Version { private static final int MAJOR_SEPARATOR = 1000000; public static int version() { - return 1202006; + return 1202007; } public static int versionPatched() { @@ -92,7 +92,7 @@ public class Version { } public static long compileTime() { - return 1586090312827L; + return 1587296560972L; } public static String compileTimeString() { diff --git a/src/net/sourceforge/plantuml/wbs/WBSTextBlock.java b/src/net/sourceforge/plantuml/wbs/WBSTextBlock.java index 125dab837..f5e7ead61 100644 --- a/src/net/sourceforge/plantuml/wbs/WBSTextBlock.java +++ b/src/net/sourceforge/plantuml/wbs/WBSTextBlock.java @@ -53,7 +53,6 @@ import net.sourceforge.plantuml.style.SName; import net.sourceforge.plantuml.style.Style; import net.sourceforge.plantuml.style.StyleBuilder; import net.sourceforge.plantuml.style.StyleSignature; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UFont; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.ULine; @@ -79,7 +78,7 @@ abstract class WBSTextBlock extends AbstractTextBlock { line); } else { final HColor color = ColorParam.activityBorder.getDefaultValue(); - ug.apply(new UTranslate(p1)).apply(new UChangeColor(color)).draw(line); + ug.apply(new UTranslate(p1)).apply(color).draw(line); } } diff --git a/src/net/sourceforge/plantuml/wire/Block.java b/src/net/sourceforge/plantuml/wire/Block.java index 12032fb7e..649b831fc 100644 --- a/src/net/sourceforge/plantuml/wire/Block.java +++ b/src/net/sourceforge/plantuml/wire/Block.java @@ -53,7 +53,6 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment; import net.sourceforge.plantuml.graphic.StringBounder; import net.sourceforge.plantuml.graphic.TextBlock; import net.sourceforge.plantuml.ugraphic.MinMax; -import net.sourceforge.plantuml.ugraphic.UChangeColor; import net.sourceforge.plantuml.ugraphic.UEllipse; import net.sourceforge.plantuml.ugraphic.UGraphic; import net.sourceforge.plantuml.ugraphic.URectangle; @@ -125,7 +124,7 @@ public class Block extends AbstractTextBlock { } public void drawU(UGraphic ug) { - ug = ug.apply(new UChangeColor(HColorUtils.BLACK)); + ug = ug.apply(HColorUtils.BLACK); if (children.size() == 0) { final TextBlock label = display.create(new FontConfiguration(skinParam, FontParam.COMPONENT, null), HorizontalAlignment.CENTER, skinParam); diff --git a/src/net/sourceforge/plantuml/wire/CommandContainer.java b/src/net/sourceforge/plantuml/wire/CommandContainer.java index 2c1ce3692..c159010c1 100644 --- a/src/net/sourceforge/plantuml/wire/CommandContainer.java +++ b/src/net/sourceforge/plantuml/wire/CommandContainer.java @@ -41,7 +41,6 @@ import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; -import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandContainer extends SingleLineCommand2 { diff --git a/src/net/sourceforge/plantuml/wire/CommandContainerEnd.java b/src/net/sourceforge/plantuml/wire/CommandContainerEnd.java index 3fc90ce4f..0d28dce6b 100644 --- a/src/net/sourceforge/plantuml/wire/CommandContainerEnd.java +++ b/src/net/sourceforge/plantuml/wire/CommandContainerEnd.java @@ -41,7 +41,6 @@ import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; -import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandContainerEnd extends SingleLineCommand2 { diff --git a/src/net/sourceforge/plantuml/wire/CommandNewColumn.java b/src/net/sourceforge/plantuml/wire/CommandNewColumn.java index 650e5543c..27248958c 100644 --- a/src/net/sourceforge/plantuml/wire/CommandNewColumn.java +++ b/src/net/sourceforge/plantuml/wire/CommandNewColumn.java @@ -41,7 +41,6 @@ import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; -import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandNewColumn extends SingleLineCommand2 { diff --git a/src/net/sourceforge/plantuml/wire/CommandPinSpace.java b/src/net/sourceforge/plantuml/wire/CommandPinSpace.java index ce213ab7c..2599b6e2c 100644 --- a/src/net/sourceforge/plantuml/wire/CommandPinSpace.java +++ b/src/net/sourceforge/plantuml/wire/CommandPinSpace.java @@ -41,7 +41,6 @@ import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; -import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexOr; import net.sourceforge.plantuml.command.regex.RegexResult; diff --git a/src/net/sourceforge/plantuml/wire/CommandVspace.java b/src/net/sourceforge/plantuml/wire/CommandVspace.java index b78fe2e0b..8dff8cff1 100644 --- a/src/net/sourceforge/plantuml/wire/CommandVspace.java +++ b/src/net/sourceforge/plantuml/wire/CommandVspace.java @@ -41,7 +41,6 @@ import net.sourceforge.plantuml.command.SingleLineCommand2; import net.sourceforge.plantuml.command.regex.IRegex; import net.sourceforge.plantuml.command.regex.RegexConcat; import net.sourceforge.plantuml.command.regex.RegexLeaf; -import net.sourceforge.plantuml.command.regex.RegexOptional; import net.sourceforge.plantuml.command.regex.RegexResult; public class CommandVspace extends SingleLineCommand2 { diff --git a/stdlib/awslib-abx.repx b/stdlib/awslib-abx.repx index 74b79ed36..c0dbe07ef 100644 Binary files a/stdlib/awslib-abx.repx and b/stdlib/awslib-abx.repx differ diff --git a/stdlib/awslib-dex.repx b/stdlib/awslib-dex.repx index cab3eb579..4cdc4e5c1 100644 Binary files a/stdlib/awslib-dex.repx and b/stdlib/awslib-dex.repx differ diff --git a/stdlib/elastic-abx.repx b/stdlib/elastic-abx.repx new file mode 100644 index 000000000..fbaad0cbc Binary files /dev/null and b/stdlib/elastic-abx.repx differ diff --git a/stdlib/elastic-dex.repx b/stdlib/elastic-dex.repx new file mode 100644 index 000000000..84fd30254 Binary files /dev/null and b/stdlib/elastic-dex.repx differ diff --git a/stdlib/home.repx b/stdlib/home.repx index edaba9444..190e53e46 100644 --- a/stdlib/home.repx +++ b/stdlib/home.repx @@ -9,4 +9,5 @@ office c4 osa kubernetes -logos \ No newline at end of file +logos +elastic \ No newline at end of file
"); sb.append("