mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 10:59:01 +00:00
version 8057
This commit is contained in:
parent
c7252cdf63
commit
73307b6df5
16
README.md
16
README.md
@ -6,12 +6,14 @@ Generate UML diagram from textual description
|
|||||||
|
|
||||||
PlantUML is a component that allows to quickly write :
|
PlantUML is a component that allows to quickly write :
|
||||||
|
|
||||||
* [Sequence diagram](http://plantuml.com/sequence.html),
|
* [Sequence diagram](http://plantuml.com/sequence-diagram),
|
||||||
* [Use case diagram](http://plantuml.com/usecase.html),
|
* [Use case diagram](http://plantuml.com/use-case-diagram),
|
||||||
* [Class diagram](http://plantuml.com/classes.html),
|
* [Class diagram](http://plantuml.com/class-diagram),
|
||||||
* [Activity diagram](http://plantuml.com/activity2.html),
|
* [Activity diagram](http://plantuml.com/activity-diagram-beta),
|
||||||
* [Component diagram](http://plantuml.com/component.html),
|
* [Component diagram](http://plantuml.com/component-diagram),
|
||||||
* [State diagram](http://plantuml.com/state.html),
|
* [State diagram](http://plantuml.com/state-diagram),
|
||||||
* [Object diagram](http://plantuml.com/objects.html)
|
* [Object diagram](http://plantuml.com/object-diagram),
|
||||||
|
* [Deployment diagram](http://plantuml.com/deployment-diagram),
|
||||||
|
* [Timing diagram](http://plantuml.com/timing-diagram)
|
||||||
|
|
||||||
To know more about PlantUML, please visit http://plantuml.com/
|
To know more about PlantUML, please visit http://plantuml.com/
|
||||||
|
@ -64,7 +64,6 @@
|
|||||||
<jar jarfile="plantuml.jar" basedir="build">
|
<jar jarfile="plantuml.jar" basedir="build">
|
||||||
<manifest>
|
<manifest>
|
||||||
<attribute name="Main-Class" value="net.sourceforge.plantuml.Run" />
|
<attribute name="Main-Class" value="net.sourceforge.plantuml.Run" />
|
||||||
<attribute name="SplashScreen-Image" value="net/sourceforge/plantuml/version/logo.png" />
|
|
||||||
<attribute name="Class-Path" value="batik-all-1.7.jar jlatexmath-minimal-1.0.3.jar jlm_cyrillic.jar jlm_greek.jar vizjs.jar j2v8_win32_x86_64-3.1.6.jar j2v8_linux_x86_64-3.1.6.jar j2v8_macosx_x86_64-3.1.6.jar" />
|
<attribute name="Class-Path" value="batik-all-1.7.jar jlatexmath-minimal-1.0.3.jar jlm_cyrillic.jar jlm_greek.jar vizjs.jar j2v8_win32_x86_64-3.1.6.jar j2v8_linux_x86_64-3.1.6.jar j2v8_macosx_x86_64-3.1.6.jar" />
|
||||||
</manifest>
|
</manifest>
|
||||||
</jar>
|
</jar>
|
||||||
|
2
pom.xml
2
pom.xml
@ -35,7 +35,7 @@
|
|||||||
|
|
||||||
<groupId>net.sourceforge.plantuml</groupId>
|
<groupId>net.sourceforge.plantuml</groupId>
|
||||||
<artifactId>plantuml</artifactId>
|
<artifactId>plantuml</artifactId>
|
||||||
<version>8057-SNAPSHOT</version>
|
<version>8058-SNAPSHOT</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>PlantUML</name>
|
<name>PlantUML</name>
|
||||||
|
@ -96,7 +96,7 @@ public interface ISkinParam extends ISkinSimple {
|
|||||||
|
|
||||||
public double getRoundCorner(String param, Stereotype stereotype);
|
public double getRoundCorner(String param, Stereotype stereotype);
|
||||||
|
|
||||||
public double maxMessageSize();
|
public LineBreakStrategy maxMessageSize();
|
||||||
|
|
||||||
public boolean strictUmlStyle();
|
public boolean strictUmlStyle();
|
||||||
|
|
||||||
@ -129,10 +129,11 @@ public interface ISkinParam extends ISkinSimple {
|
|||||||
public SplitParam getSplitParam();
|
public SplitParam getSplitParam();
|
||||||
|
|
||||||
public int swimlaneWidth();
|
public int swimlaneWidth();
|
||||||
|
|
||||||
public UmlDiagramType getUmlDiagramType();
|
public UmlDiagramType getUmlDiagramType();
|
||||||
|
|
||||||
public HtmlColor getHoverPathColor();
|
public HtmlColor getHoverPathColor();
|
||||||
|
|
||||||
|
public double getPadding(PaddingParam param);
|
||||||
|
|
||||||
}
|
}
|
50
src/net/sourceforge/plantuml/LineBreakStrategy.java
Normal file
50
src/net/sourceforge/plantuml/LineBreakStrategy.java
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
public class LineBreakStrategy {
|
||||||
|
|
||||||
|
public static final LineBreakStrategy NONE = new LineBreakStrategy(null);
|
||||||
|
|
||||||
|
private final String value;
|
||||||
|
|
||||||
|
public LineBreakStrategy(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMathWidth() {
|
||||||
|
if (value != null && value.matches("-?\\d+")) {
|
||||||
|
return Double.parseDouble(value);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
41
src/net/sourceforge/plantuml/PaddingParam.java
Normal file
41
src/net/sourceforge/plantuml/PaddingParam.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
|
||||||
|
public enum PaddingParam {
|
||||||
|
PARTICIPANT, BOX;
|
||||||
|
|
||||||
|
public String getSkinName() {
|
||||||
|
return StringUtils.goLowerCase(name()) + "Padding";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -130,7 +130,7 @@ public class Run {
|
|||||||
}
|
}
|
||||||
new MainWindow2(option, dir);
|
new MainWindow2(option, dir);
|
||||||
} else if (option.isPipe() || option.isPipeMap() || option.isSyntax()) {
|
} else if (option.isPipe() || option.isPipeMap() || option.isSyntax()) {
|
||||||
managePipe(option);
|
error = managePipe(option);
|
||||||
forceQuit = true;
|
forceQuit = true;
|
||||||
} else if (option.isFailfast2()) {
|
} else if (option.isFailfast2()) {
|
||||||
final long start2 = System.currentTimeMillis();
|
final long start2 = System.currentTimeMillis();
|
||||||
@ -256,7 +256,7 @@ public class Run {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void managePipe(Option option) throws IOException {
|
private static boolean managePipe(Option option) throws IOException {
|
||||||
final String charset = option.getCharset();
|
final String charset = option.getCharset();
|
||||||
final BufferedReader br;
|
final BufferedReader br;
|
||||||
if (charset == null) {
|
if (charset == null) {
|
||||||
@ -264,10 +264,11 @@ public class Run {
|
|||||||
} else {
|
} else {
|
||||||
br = new BufferedReader(new InputStreamReader(System.in, charset));
|
br = new BufferedReader(new InputStreamReader(System.in, charset));
|
||||||
}
|
}
|
||||||
managePipe(option, br, System.out);
|
return managePipe(option, br, System.out);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void managePipe(Option option, final BufferedReader br, final PrintStream ps) throws IOException {
|
static public boolean managePipe(Option option, final BufferedReader br, final PrintStream ps) throws IOException {
|
||||||
|
boolean error = false;
|
||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
String s = null;
|
String s = null;
|
||||||
while ((s = br.readLine()) != null) {
|
while ((s = br.readLine()) != null) {
|
||||||
@ -286,6 +287,7 @@ public class Run {
|
|||||||
ps.println(((UmlDiagram) system).getUmlDiagramType().name());
|
ps.println(((UmlDiagram) system).getUmlDiagramType().name());
|
||||||
ps.println(system.getDescription());
|
ps.println(system.getDescription());
|
||||||
} else if (system instanceof PSystemError) {
|
} else if (system instanceof PSystemError) {
|
||||||
|
error = true;
|
||||||
ps.println("ERROR");
|
ps.println("ERROR");
|
||||||
final PSystemError sys = (PSystemError) system;
|
final PSystemError sys = (PSystemError) system;
|
||||||
ps.println(sys.getHigherErrorPosition());
|
ps.println(sys.getHigherErrorPosition());
|
||||||
@ -302,6 +304,7 @@ public class Run {
|
|||||||
} else if (option.isPipe()) {
|
} else if (option.isPipe()) {
|
||||||
final String result = sourceStringReader.generateImage(ps, 0, option.getFileFormatOption());
|
final String result = sourceStringReader.generateImage(ps, 0, option.getFileFormatOption());
|
||||||
if ("(error)".equalsIgnoreCase(result)) {
|
if ("(error)".equalsIgnoreCase(result)) {
|
||||||
|
error = true;
|
||||||
System.err.println("ERROR");
|
System.err.println("ERROR");
|
||||||
final Diagram system = sourceStringReader.getBlocks().get(0).getDiagram();
|
final Diagram system = sourceStringReader.getBlocks().get(0).getDiagram();
|
||||||
final PSystemError sys = (PSystemError) system;
|
final PSystemError sys = (PSystemError) system;
|
||||||
@ -311,6 +314,7 @@ public class Run {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean manageAllFiles(Option option) throws IOException, InterruptedException {
|
private static boolean manageAllFiles(Option option) throws IOException, InterruptedException {
|
||||||
|
@ -641,12 +641,8 @@ public class SkinParam implements ISkinParam {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double maxMessageSize() {
|
public LineBreakStrategy maxMessageSize() {
|
||||||
final String value = getValue("maxmessagesize");
|
return new LineBreakStrategy(getValue("maxmessagesize"));
|
||||||
if (value != null && value.matches("-?\\d+")) {
|
|
||||||
return Double.parseDouble(value);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean strictUmlStyle() {
|
public boolean strictUmlStyle() {
|
||||||
@ -726,14 +722,6 @@ public class SkinParam implements ISkinParam {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getPadding() {
|
|
||||||
final String value = getValue("padding");
|
|
||||||
if (value != null && value.matches("\\d+(\\.\\d+)?")) {
|
|
||||||
return Double.parseDouble(value);
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int groupInheritance() {
|
public int groupInheritance() {
|
||||||
final String value = getValue("groupinheritance");
|
final String value = getValue("groupinheritance");
|
||||||
int result = Integer.MAX_VALUE;
|
int result = Integer.MAX_VALUE;
|
||||||
@ -839,4 +827,20 @@ public class SkinParam implements ISkinParam {
|
|||||||
return getIHtmlColorSet().getColorIfValid(value, false);
|
return getIHtmlColorSet().getColorIfValid(value, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getPadding() {
|
||||||
|
final String value = getValue("padding");
|
||||||
|
if (value != null && value.matches("\\d+(\\.\\d+)?")) {
|
||||||
|
return Double.parseDouble(value);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getPadding(PaddingParam param) {
|
||||||
|
final String value = getValue(param.getSkinName());
|
||||||
|
if (value != null && value.matches("\\d+(\\.\\d+)?")) {
|
||||||
|
return Double.parseDouble(value);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -150,7 +150,7 @@ public class SkinParamDelegator implements ISkinParam {
|
|||||||
return skinParam.getThickness(param, stereotype);
|
return skinParam.getThickness(param, stereotype);
|
||||||
}
|
}
|
||||||
|
|
||||||
public double maxMessageSize() {
|
public LineBreakStrategy maxMessageSize() {
|
||||||
return skinParam.maxMessageSize();
|
return skinParam.maxMessageSize();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,4 +254,8 @@ public class SkinParamDelegator implements ISkinParam {
|
|||||||
return skinParam.getHoverPathColor();
|
return skinParam.getHoverPathColor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getPadding(PaddingParam param) {
|
||||||
|
return skinParam.getPadding(param);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ import java.awt.geom.Dimension2D;
|
|||||||
import net.sourceforge.plantuml.ColorParam;
|
import net.sourceforge.plantuml.ColorParam;
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.creole.CreoleMode;
|
import net.sourceforge.plantuml.creole.CreoleMode;
|
||||||
import net.sourceforge.plantuml.creole.CreoleParser;
|
import net.sourceforge.plantuml.creole.CreoleParser;
|
||||||
import net.sourceforge.plantuml.creole.Sheet;
|
import net.sourceforge.plantuml.creole.Sheet;
|
||||||
@ -68,7 +69,7 @@ public class FloatingNote extends AbstractTextBlock implements Stencil, TextBloc
|
|||||||
|
|
||||||
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||||
skinParam, CreoleMode.FULL).createSheet(note);
|
skinParam, CreoleMode.FULL).createSheet(note);
|
||||||
final SheetBlock2 sheetBlock2 = new SheetBlock2(new SheetBlock1(sheet, 0, skinParam.getPadding()), this,
|
final SheetBlock2 sheetBlock2 = new SheetBlock2(new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding()), this,
|
||||||
new UStroke(1));
|
new UStroke(1));
|
||||||
this.opale = new Opale(borderColor, noteBackgroundColor, sheetBlock2, skinParam.shadowing(), false);
|
this.opale = new Opale(borderColor, noteBackgroundColor, sheetBlock2, skinParam.shadowing(), false);
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ import java.util.Set;
|
|||||||
|
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.Branch;
|
import net.sourceforge.plantuml.activitydiagram3.Branch;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractConnection;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractConnection;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
||||||
@ -125,7 +126,7 @@ class FtileIfAndStop extends AbstractFtile {
|
|||||||
|
|
||||||
final Sheet sheet = new CreoleParser(fcTest, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
final Sheet sheet = new CreoleParser(fcTest, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||||
skinParam, CreoleMode.FULL).createSheet(labelTest);
|
skinParam, CreoleMode.FULL).createSheet(labelTest);
|
||||||
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet, 0, skinParam.getPadding());
|
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding());
|
||||||
final TextBlock tbTest = new SheetBlock2(sheetBlock1, Diamond.asStencil(sheetBlock1),
|
final TextBlock tbTest = new SheetBlock2(sheetBlock1, Diamond.asStencil(sheetBlock1),
|
||||||
tileNonStop.getThickness());
|
tileNonStop.getThickness());
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ import java.util.Set;
|
|||||||
import net.sourceforge.plantuml.ColorParam;
|
import net.sourceforge.plantuml.ColorParam;
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.FtileGeometry;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.FtileGeometry;
|
||||||
@ -98,7 +99,7 @@ public class FtileNoteAlone extends AbstractFtile implements Stencil {
|
|||||||
|
|
||||||
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||||
skinParam, CreoleMode.FULL).createSheet(note);
|
skinParam, CreoleMode.FULL).createSheet(note);
|
||||||
final TextBlock text = new SheetBlock2(new SheetBlock1(sheet, 0, skinParam.getPadding()), this, new UStroke(1));
|
final TextBlock text = new SheetBlock2(new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding()), this, new UStroke(1));
|
||||||
opale = new Opale(borderColor, noteBackgroundColor, text, skinParam.shadowing(), false);
|
opale = new Opale(borderColor, noteBackgroundColor, text, skinParam.shadowing(), false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,7 @@ import net.sourceforge.plantuml.Dimension2DDouble;
|
|||||||
import net.sourceforge.plantuml.Direction;
|
import net.sourceforge.plantuml.Direction;
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.PositionedNote;
|
import net.sourceforge.plantuml.activitydiagram3.PositionedNote;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
||||||
@ -121,7 +122,7 @@ public class FtileWithNoteOpale extends AbstractFtile implements Stencil {
|
|||||||
|
|
||||||
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||||
skinParam, CreoleMode.FULL).createSheet(note.getDisplay());
|
skinParam, CreoleMode.FULL).createSheet(note.getDisplay());
|
||||||
final TextBlock text = new SheetBlock2(new SheetBlock1(sheet, 0, skinParam.getPadding()), this, new UStroke(1));
|
final TextBlock text = new SheetBlock2(new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding()), this, new UStroke(1));
|
||||||
opale = new Opale(borderColor, noteBackgroundColor, text, skinParam.shadowing(), withLink);
|
opale = new Opale(borderColor, noteBackgroundColor, text, skinParam.shadowing(), withLink);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -38,6 +38,7 @@ import net.sourceforge.plantuml.ColorParam;
|
|||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.PositionedNote;
|
import net.sourceforge.plantuml.activitydiagram3.PositionedNote;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
||||||
@ -98,7 +99,7 @@ public class FtileWithNotes extends AbstractFtile {
|
|||||||
for (PositionedNote note : notes) {
|
for (PositionedNote note : notes) {
|
||||||
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||||
skinParam, CreoleMode.FULL).createSheet(note.getDisplay());
|
skinParam, CreoleMode.FULL).createSheet(note.getDisplay());
|
||||||
final SheetBlock1 sheet1 = new SheetBlock1(sheet, 0, skinParam.getPadding());
|
final SheetBlock1 sheet1 = new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding());
|
||||||
final SheetBlock2 sheet2 = new SheetBlock2(sheet1, new Stencil() {
|
final SheetBlock2 sheet2 = new SheetBlock2(sheet1, new Stencil() {
|
||||||
// -6 and 15 value comes from Opale: this is very ugly!
|
// -6 and 15 value comes from Opale: this is very ugly!
|
||||||
public double getStartingX(StringBounder stringBounder, double y) {
|
public double getStartingX(StringBounder stringBounder, double y) {
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.activitydiagram3.ftile.vcompact.cond;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.Branch;
|
import net.sourceforge.plantuml.activitydiagram3.Branch;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Diamond;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.Diamond;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.Ftile;
|
||||||
@ -193,7 +194,7 @@ public class ConditionalBuilder {
|
|||||||
|
|
||||||
final Sheet sheet = new CreoleParser(fontTest, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
final Sheet sheet = new CreoleParser(fontTest, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||||
skinParam, CreoleMode.FULL).createSheet(labelTest);
|
skinParam, CreoleMode.FULL).createSheet(labelTest);
|
||||||
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet, 0, skinParam.getPadding());
|
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding());
|
||||||
final TextBlock tbTest = new SheetBlock2(sheetBlock1, Diamond.asStencil(sheetBlock1), tile1.getThickness());
|
final TextBlock tbTest = new SheetBlock2(sheetBlock1, Diamond.asStencil(sheetBlock1), tile1.getThickness());
|
||||||
|
|
||||||
final Ftile diamond1;
|
final Ftile diamond1;
|
||||||
|
@ -39,6 +39,7 @@ import net.sourceforge.plantuml.ColorParam;
|
|||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.SkinParamUtils;
|
import net.sourceforge.plantuml.SkinParamUtils;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.AbstractFtile;
|
||||||
@ -119,7 +120,7 @@ public class FtileBox extends AbstractFtile {
|
|||||||
final FontConfiguration fc = new FontConfiguration(skinParam, FontParam.ACTIVITY, null);
|
final FontConfiguration fc = new FontConfiguration(skinParam, FontParam.ACTIVITY, null);
|
||||||
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
final Sheet sheet = new CreoleParser(fc, skinParam.getDefaultTextAlignment(HorizontalAlignment.LEFT),
|
||||||
skinParam, CreoleMode.FULL).createSheet(label);
|
skinParam, CreoleMode.FULL).createSheet(label);
|
||||||
this.tb = new SheetBlock2(new SheetBlock1(sheet, 0, skinParam.getPadding()), new MyStencil(), new UStroke(1));
|
this.tb = new SheetBlock2(new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding()), new MyStencil(), new UStroke(1));
|
||||||
this.print = label.toString();
|
this.print = label.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ import java.util.List;
|
|||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.Log;
|
import net.sourceforge.plantuml.Log;
|
||||||
import net.sourceforge.plantuml.StringUtils;
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
import net.sourceforge.plantuml.Url;
|
import net.sourceforge.plantuml.Url;
|
||||||
@ -227,7 +228,8 @@ public class AtomText implements Atom {
|
|||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<AtomText> getSplitted(StringBounder stringBounder, double maxWidth) {
|
public List<AtomText> getSplitted(StringBounder stringBounder, LineBreakStrategy maxWidthAsString) {
|
||||||
|
final double maxWidth = maxWidthAsString.getMathWidth();
|
||||||
final List<AtomText> result = new ArrayList<AtomText>();
|
final List<AtomText> result = new ArrayList<AtomText>();
|
||||||
final StringTokenizer st = new StringTokenizer(text, " ", true);
|
final StringTokenizer st = new StringTokenizer(text, " ", true);
|
||||||
final StringBuilder currentLine = new StringBuilder();
|
final StringBuilder currentLine = new StringBuilder();
|
||||||
|
@ -34,6 +34,7 @@ import java.awt.geom.Dimension2D;
|
|||||||
|
|
||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -77,7 +78,7 @@ public class CreoleHorizontalLine implements Atom {
|
|||||||
}
|
}
|
||||||
final CreoleParser parser = new CreoleParser(fontConfiguration, HorizontalAlignment.LEFT, skinParam, CreoleMode.FULL);
|
final CreoleParser parser = new CreoleParser(fontConfiguration, HorizontalAlignment.LEFT, skinParam, CreoleMode.FULL);
|
||||||
final Sheet sheet = parser.createSheet(Display.getWithNewlines(line));
|
final Sheet sheet = parser.createSheet(Display.getWithNewlines(line));
|
||||||
final TextBlock tb = new SheetBlock1(sheet, 0, skinParam.getPadding());
|
final TextBlock tb = new SheetBlock1(sheet, LineBreakStrategy.NONE, skinParam.getPadding());
|
||||||
return tb;
|
return tb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,32 +36,37 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
|
|
||||||
public class Fission {
|
public class Fission {
|
||||||
|
|
||||||
private final Stripe stripe;
|
private final Stripe stripe;
|
||||||
private final double maxWidth;
|
private final LineBreakStrategy maxWidth;
|
||||||
|
|
||||||
public Fission(Stripe stripe, double maxWidth) {
|
public Fission(Stripe stripe, LineBreakStrategy maxWidth) {
|
||||||
this.stripe = stripe;
|
this.stripe = stripe;
|
||||||
this.maxWidth = maxWidth;
|
this.maxWidth = maxWidth;
|
||||||
|
if (maxWidth == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Stripe> getSplitted(StringBounder stringBounder) {
|
public List<Stripe> getSplitted(StringBounder stringBounder) {
|
||||||
if (maxWidth == 0) {
|
final double valueMaxWidth = maxWidth.getMathWidth();
|
||||||
|
if (valueMaxWidth == 0) {
|
||||||
return Arrays.asList(stripe);
|
return Arrays.asList(stripe);
|
||||||
}
|
}
|
||||||
final List<Stripe> result = new ArrayList<Stripe>();
|
final List<Stripe> result = new ArrayList<Stripe>();
|
||||||
StripeSimple current = new StripeSimple();
|
StripeSimple current = new StripeSimple();
|
||||||
for (Atom a1 : stripe.getAtoms()) {
|
for (Atom atom : stripe.getAtoms()) {
|
||||||
for (Atom atom : getSplitted(stringBounder, a1)) {
|
for (Atom atomSplitted : getSplitted(stringBounder, atom)) {
|
||||||
final double width = atom.calculateDimension(stringBounder).getWidth();
|
final double width = atomSplitted.calculateDimension(stringBounder).getWidth();
|
||||||
if (current.totalWidth + width > maxWidth) {
|
if (current.totalWidth + width > valueMaxWidth) {
|
||||||
result.add(current);
|
result.add(current);
|
||||||
current = new StripeSimple();
|
current = new StripeSimple();
|
||||||
}
|
}
|
||||||
current.addAtom(atom, width);
|
current.addAtom(atomSplitted, width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (current.totalWidth > 0) {
|
if (current.totalWidth > 0) {
|
||||||
|
@ -38,6 +38,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import net.sourceforge.plantuml.AbstractPSystem;
|
import net.sourceforge.plantuml.AbstractPSystem;
|
||||||
import net.sourceforge.plantuml.FileFormatOption;
|
import net.sourceforge.plantuml.FileFormatOption;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.core.DiagramDescription;
|
import net.sourceforge.plantuml.core.DiagramDescription;
|
||||||
import net.sourceforge.plantuml.core.DiagramDescriptionImpl;
|
import net.sourceforge.plantuml.core.DiagramDescriptionImpl;
|
||||||
import net.sourceforge.plantuml.core.ImageData;
|
import net.sourceforge.plantuml.core.ImageData;
|
||||||
@ -71,7 +72,7 @@ public class PSystemCreole extends AbstractPSystem {
|
|||||||
final FontConfiguration fontConfiguration = FontConfiguration.blackBlueTrue(font);
|
final FontConfiguration fontConfiguration = FontConfiguration.blackBlueTrue(font);
|
||||||
final Sheet sheet = new CreoleParser(fontConfiguration, HorizontalAlignment.LEFT, null, CreoleMode.FULL)
|
final Sheet sheet = new CreoleParser(fontConfiguration, HorizontalAlignment.LEFT, null, CreoleMode.FULL)
|
||||||
.createSheet(display);
|
.createSheet(display);
|
||||||
final SheetBlock1 sheetBlock = new SheetBlock1(sheet, 0, 0);
|
final SheetBlock1 sheetBlock = new SheetBlock1(sheet, LineBreakStrategy.NONE, 0);
|
||||||
|
|
||||||
final ImageBuilder builder = new ImageBuilder(new ColorMapperIdentity(), 1.0, null, null, null, 0, 0, null,
|
final ImageBuilder builder = new ImageBuilder(new ColorMapperIdentity(), 1.0, null, null, null, 0, 0, null,
|
||||||
false);
|
false);
|
||||||
|
@ -38,6 +38,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
@ -54,13 +55,16 @@ public class SheetBlock1 extends AbstractTextBlock implements TextBlock, Atom, S
|
|||||||
private Map<Stripe, Double> widths;
|
private Map<Stripe, Double> widths;
|
||||||
private Map<Atom, Position> positions;
|
private Map<Atom, Position> positions;
|
||||||
private MinMax minMax;
|
private MinMax minMax;
|
||||||
private final double maxWidth;
|
private final LineBreakStrategy maxWidth;
|
||||||
private final double padding;
|
private final double padding;
|
||||||
|
|
||||||
public SheetBlock1(Sheet sheet, double maxWidth, double padding) {
|
public SheetBlock1(Sheet sheet, LineBreakStrategy maxWidth, double padding) {
|
||||||
this.sheet = sheet;
|
this.sheet = sheet;
|
||||||
this.maxWidth = maxWidth;
|
this.maxWidth = maxWidth;
|
||||||
this.padding = padding;
|
this.padding = padding;
|
||||||
|
if (maxWidth == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -36,6 +36,7 @@ import java.util.List;
|
|||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColor;
|
import net.sourceforge.plantuml.graphic.HtmlColor;
|
||||||
@ -69,7 +70,7 @@ public class StripeTable implements Stripe {
|
|||||||
for (StripeSimple cell : cells) {
|
for (StripeSimple cell : cells) {
|
||||||
sheet.add(cell);
|
sheet.add(cell);
|
||||||
}
|
}
|
||||||
return new SheetBlock1(sheet, 0, padding);
|
return new SheetBlock1(sheet, LineBreakStrategy.NONE, padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
private HtmlColor getBackColor(String line) {
|
private HtmlColor getBackColor(String line) {
|
||||||
|
@ -41,6 +41,7 @@ import net.sourceforge.plantuml.CharSequence2;
|
|||||||
import net.sourceforge.plantuml.CharSequence2Impl;
|
import net.sourceforge.plantuml.CharSequence2Impl;
|
||||||
import net.sourceforge.plantuml.EmbededDiagram;
|
import net.sourceforge.plantuml.EmbededDiagram;
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.LineLocationImpl;
|
import net.sourceforge.plantuml.LineLocationImpl;
|
||||||
import net.sourceforge.plantuml.SpriteContainer;
|
import net.sourceforge.plantuml.SpriteContainer;
|
||||||
import net.sourceforge.plantuml.StringUtils;
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
@ -371,12 +372,21 @@ public class Display implements Iterable<CharSequence> {
|
|||||||
|
|
||||||
public TextBlock create(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
public TextBlock create(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
||||||
ISkinSimple spriteContainer, CreoleMode modeSimpleLine) {
|
ISkinSimple spriteContainer, CreoleMode modeSimpleLine) {
|
||||||
return create(fontConfiguration, horizontalAlignment, spriteContainer, 0, modeSimpleLine, null, null);
|
return create(fontConfiguration, horizontalAlignment, spriteContainer, LineBreakStrategy.NONE, modeSimpleLine, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextBlock create(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
public TextBlock create(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
||||||
ISkinSimple spriteContainer, double maxMessageSize, CreoleMode modeSimpleLine, UFont fontForStereotype,
|
ISkinSimple spriteContainer, LineBreakStrategy maxMessageSize) {
|
||||||
HtmlColor htmlColorForStereotype) {
|
return create(fontConfiguration, horizontalAlignment, spriteContainer, maxMessageSize, defaultCreoleMode, null,
|
||||||
|
null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextBlock create(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
||||||
|
ISkinSimple spriteContainer, LineBreakStrategy maxMessageSize, CreoleMode modeSimpleLine,
|
||||||
|
UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
||||||
|
if (maxMessageSize == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
if (getNaturalHorizontalAlignment() != null) {
|
if (getNaturalHorizontalAlignment() != null) {
|
||||||
horizontalAlignment = getNaturalHorizontalAlignment();
|
horizontalAlignment = getNaturalHorizontalAlignment();
|
||||||
}
|
}
|
||||||
@ -398,7 +408,7 @@ public class Display implements Iterable<CharSequence> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TextBlock getCreole(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
private TextBlock getCreole(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
||||||
ISkinSimple spriteContainer, double maxMessageSize, CreoleMode modeSimpleLine) {
|
ISkinSimple spriteContainer, LineBreakStrategy maxMessageSize, CreoleMode modeSimpleLine) {
|
||||||
final Sheet sheet = new CreoleParser(fontConfiguration, horizontalAlignment, spriteContainer, modeSimpleLine)
|
final Sheet sheet = new CreoleParser(fontConfiguration, horizontalAlignment, spriteContainer, modeSimpleLine)
|
||||||
.createSheet(this);
|
.createSheet(this);
|
||||||
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet, maxMessageSize, spriteContainer == null ? 0
|
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet, maxMessageSize, spriteContainer == null ? 0
|
||||||
@ -407,7 +417,7 @@ public class Display implements Iterable<CharSequence> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private TextBlock createMessageNumber(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
private TextBlock createMessageNumber(FontConfiguration fontConfiguration, HorizontalAlignment horizontalAlignment,
|
||||||
ISkinSimple spriteContainer, double maxMessageSize) {
|
ISkinSimple spriteContainer, LineBreakStrategy maxMessageSize) {
|
||||||
TextBlock tb1 = subList(0, 1).getCreole(fontConfiguration, horizontalAlignment, spriteContainer,
|
TextBlock tb1 = subList(0, 1).getCreole(fontConfiguration, horizontalAlignment, spriteContainer,
|
||||||
maxMessageSize, CreoleMode.FULL);
|
maxMessageSize, CreoleMode.FULL);
|
||||||
tb1 = TextBlockUtils.withMargin(tb1, 0, 4, 0, 0);
|
tb1 = TextBlockUtils.withMargin(tb1, 0, 4, 0, 0);
|
||||||
|
@ -60,7 +60,7 @@ import net.sourceforge.plantuml.version.PSystemVersion;
|
|||||||
|
|
||||||
public class PSystemDonors extends AbstractPSystem {
|
public class PSystemDonors extends AbstractPSystem {
|
||||||
|
|
||||||
public static final String DONORS = "UDfbL4josp0CtUCKN6lIGoXsx5J-96EdwKnsi0HRZ2d29IMdyZbwbImwqrqlu2CLSYkJIhaIXW3utiE3KfFyE-JWaMfoAhKrMuqvF54I3bSmvn0w3sbVYXkOkd15BQnfWxxMQDMIImkfBTYfALDzekvpkvMCFXqjp35woDOmrdsW3QIXDHzXtGG8BKnrCZoM8UjHDXxMDHrAich4V11-u_uTyZ2hFfIoWn4RRTMA6q-GDH_karSM8drmqB28K6CLX_9KQkWxsaBa79LQkkxGjS9qTQLjTx2CqTSdU33wA0LZdUy5-VL6MxZprzOs0f7G4SQdIjUkLNCikK38Ej5VIfJsKLv29enBphuLcIpMaYVu15Vs5ppj1wni8Q7BHPC9RboxvpU_rzB8IDc3g_K9xaDsmR3GUKb6tQ8sRSp0d68mtaD6Q3zbc7zhoAjnit4eipI1xpE_rfINQkRGOu2q8x5eDB6tpbcIecPyrB5HBbRv4WXhX5Latkw9c6VoAjM7o5QyxvIvPOSMpU56lL2DVF2m4eBe2ZNJtMXXOjXrUYz-_pBcClHW21EPK-mqlzh9OQzsD_LooCZ38_RsMEa1uDHejKOiP7NSZjHNiZjoDsgHFdrUfy7Q2LkOqc1bOkOs5ujKwbbGZyMqiv3fg9kiBCkS2EwEiVEF2ClGXAeUP1BHc3PQVD5Kf2RSK1tqpJrCuibSk0Gts5Cicy1TwfruQAshi882I3PvsocDijKHwCGOEFyulqVjp-_ddp0g1wlTok8rcykFm5dPXNiUm9aIRxUEMhNKbGmkm___Ady0ufjPnG00";
|
public static final String DONORS = "UDfbL4josp0CtUCKN6lIGoXsx5J-96EdwKnsi0HRZ2d29IMdyZbwbImwqrqlu2CLSYkJIhaoJ01y3tXFgKd-7NBmI3KvbTgQhSOSdYW9XokOSmYTXxGlnGrCNRYY5jQqGLzhj6h9fONK5kpKbAa-KVTpkvMCFXqjp35woDOmrdsW3QIXDHzXtGG8BKnrCZoM8UjHDXxMDHrAich4V11-u_uTyZ2hFfIoWn4RRTMA6q-GDH_karSM8drmqB28K6CLX_9KQkWxsaB6EIgrTDsXQuNfwahRxc0PewzFy63qKGh6EjyBykkDjd3dhwrj12AX8unFbQvTg-POSe6GTKD_AL7QHta9cR0kEVjMncInbZp19xYol-1fFs1b2mbTBZEPuCQrUtxpUosDZ9Gzk5gVu3va5mmBdPTar2rgqyOCp2a6upraXFPJXlctXhmQDnk7iaiJ-3xpQqrvgMOEFGP8EnA9HXjxwvGbAMh6HnqBvIALBu6mHbX5uksUY7achr9zY6J5-suoj-pGeZdSg1UgaGyULa8GNQ5ckbijJ0oxRjwBtx-CkImz2C94uXGvpQzoSjXFkzjwEMJauH5xUQpq071gj5eZ5c8TjoFrbUoEt8rQf4-VrscGTi8MfZImJCpSvYAHIZqBwh68TXOo7NMR5RFCYU3k62l_YB0CJQZgGIOHZMcZHHTDHMh23TLXlhc7IRoP2vUW1dkAnoPmbted6bhhAbXG08cJjzsaKLmTWKwCWVEFytlK_ln-_WcZSc3jLepNR2uV0cV52_SyW3CbtcuTjMgfArbSXlz_LLRN_yGZVm26X5oY";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat)
|
final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat)
|
||||||
|
@ -30,7 +30,6 @@
|
|||||||
*/
|
*/
|
||||||
package net.sourceforge.plantuml.graphic;
|
package net.sourceforge.plantuml.graphic;
|
||||||
|
|
||||||
|
|
||||||
public class HtmlColorUtils {
|
public class HtmlColorUtils {
|
||||||
|
|
||||||
public static final HtmlColor BLACK;
|
public static final HtmlColor BLACK;
|
||||||
@ -66,7 +65,6 @@ public class HtmlColorUtils {
|
|||||||
public static final HtmlColor COL_D7E0F2;
|
public static final HtmlColor COL_D7E0F2;
|
||||||
public static final HtmlColor COL_989898;
|
public static final HtmlColor COL_989898;
|
||||||
public static final HtmlColor COL_BBBBBB;
|
public static final HtmlColor COL_BBBBBB;
|
||||||
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
|
|
||||||
@ -108,4 +106,11 @@ public class HtmlColorUtils {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static HtmlColor noGradient(HtmlColor color) {
|
||||||
|
if (color instanceof HtmlColorGradient) {
|
||||||
|
return ((HtmlColorGradient) color).getColor1();
|
||||||
|
}
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -203,7 +203,8 @@ public class QuoteUtils {
|
|||||||
"Ab WninFpevcg senzrjbexf jrer perngrq qhevat gur jevgvat bs guvf zrffntr.",
|
"Ab WninFpevcg senzrjbexf jrer perngrq qhevat gur jevgvat bs guvf zrffntr.",
|
||||||
"P'rfg cerffr-cherr dhv g'nf vagreebtr ?",
|
"P'rfg cerffr-cherr dhv g'nf vagreebtr ?",
|
||||||
"Ybbx, nygreangvir snpgf ner abg snpgf. Gurl'er snyfrubbqf",
|
"Ybbx, nygreangvir snpgf ner abg snpgf. Gurl'er snyfrubbqf",
|
||||||
"Guvf vf abg n penfu, guvf vf zber bs na nygreangvir erfhyg.");
|
"Guvf vf abg n penfu, guvf vf zber bs na nygreangvir erfhyg.",
|
||||||
|
"Lbh yrnearq gb cebtenz va SBEGENA qvqa'g lbh?");
|
||||||
|
|
||||||
private QuoteUtils() {
|
private QuoteUtils() {
|
||||||
}
|
}
|
||||||
|
@ -35,6 +35,7 @@ import java.awt.geom.Rectangle2D;
|
|||||||
|
|
||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.creole.CreoleMode;
|
import net.sourceforge.plantuml.creole.CreoleMode;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
@ -50,8 +51,8 @@ public class TextBlockTitle implements TextBlock {
|
|||||||
if (stringsToDisplay.size() == 1 && stringsToDisplay.get(0).length() == 0) {
|
if (stringsToDisplay.size() == 1 && stringsToDisplay.get(0).length() == 0) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
textBlock = stringsToDisplay.create(font, HorizontalAlignment.CENTER, spriteContainer, 0, CreoleMode.FULL,
|
textBlock = stringsToDisplay.create(font, HorizontalAlignment.CENTER, spriteContainer, LineBreakStrategy.NONE,
|
||||||
null, null);
|
CreoleMode.FULL, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final void drawU(UGraphic ug) {
|
public final void drawU(UGraphic ug) {
|
||||||
|
@ -34,6 +34,7 @@ import java.awt.geom.Dimension2D;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.SkinParam;
|
import net.sourceforge.plantuml.SkinParam;
|
||||||
import net.sourceforge.plantuml.creole.CreoleMode;
|
import net.sourceforge.plantuml.creole.CreoleMode;
|
||||||
import net.sourceforge.plantuml.creole.CreoleParser;
|
import net.sourceforge.plantuml.creole.CreoleParser;
|
||||||
@ -76,7 +77,7 @@ public class GTileNode extends AbstractTextBlock implements GTile {
|
|||||||
|
|
||||||
final Sheet sheet9 = new CreoleParser(fc, HorizontalAlignment.LEFT, skinParam, CreoleMode.FULL)
|
final Sheet sheet9 = new CreoleParser(fc, HorizontalAlignment.LEFT, skinParam, CreoleMode.FULL)
|
||||||
.createSheet(display);
|
.createSheet(display);
|
||||||
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet9, 0, 0);
|
final SheetBlock1 sheetBlock1 = new SheetBlock1(sheet9, LineBreakStrategy.NONE, 0);
|
||||||
return sheetBlock1;
|
return sheetBlock1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,10 @@ public class ComplementBeforeOrAfterOrAtTaskStartOrEnd implements ComplementPatt
|
|||||||
public Complement getComplement(GanttDiagram system, RegexResult arg, String suffix) {
|
public Complement getComplement(GanttDiagram system, RegexResult arg, String suffix) {
|
||||||
final String code = arg.get("COMPLEMENT" + suffix, 2);
|
final String code = arg.get("COMPLEMENT" + suffix, 2);
|
||||||
final String position = arg.get("COMPLEMENT" + suffix, 3);
|
final String position = arg.get("COMPLEMENT" + suffix, 3);
|
||||||
final Task task = system.getTask(new TaskCode(code));
|
final Task task = system.getExistingTask(code);
|
||||||
|
if (task == null) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
final String days = arg.get("COMPLEMENT" + suffix, 0);
|
final String days = arg.get("COMPLEMENT" + suffix, 0);
|
||||||
TaskInstant result = new TaskInstant(task, TaskAttribute.fromString(position));
|
TaskInstant result = new TaskInstant(task, TaskAttribute.fromString(position));
|
||||||
if (days != null) {
|
if (days != null) {
|
||||||
|
86
src/net/sourceforge/plantuml/project3/ComplementDate.java
Normal file
86
src/net/sourceforge/plantuml/project3/ComplementDate.java
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
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.RegexOr;
|
||||||
|
import net.sourceforge.plantuml.command.regex.RegexResult;
|
||||||
|
|
||||||
|
public class ComplementDate implements ComplementPattern {
|
||||||
|
|
||||||
|
public IRegex toRegex(String suffix) {
|
||||||
|
return new RegexOr(toRegexA(suffix), toRegexB(suffix));
|
||||||
|
}
|
||||||
|
|
||||||
|
private IRegex toRegexA(String suffix) {
|
||||||
|
return new RegexConcat( //
|
||||||
|
new RegexLeaf("ADAY" + suffix, "([\\d]+)"), //
|
||||||
|
new RegexLeaf("[\\w ]*?"), //
|
||||||
|
new RegexLeaf("AMONTH" + suffix, "(" + Month.getRegexString() + ")"), //
|
||||||
|
new RegexLeaf("[\\w ]*?"), //
|
||||||
|
new RegexLeaf("AYEAR" + suffix, "([\\d]+)"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private IRegex toRegexB(String suffix) {
|
||||||
|
return new RegexConcat( //
|
||||||
|
new RegexLeaf("BYEAR" + suffix, "([\\d]{4})"), //
|
||||||
|
new RegexLeaf("\\D"), //
|
||||||
|
new RegexLeaf("BMONTH" + suffix, "([\\d]{1,2})"), //
|
||||||
|
new RegexLeaf("\\D"), //
|
||||||
|
new RegexLeaf("BDAY" + suffix, "([\\d]{1,2})"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Complement getComplement(GanttDiagram system, RegexResult arg, String suffix) {
|
||||||
|
if (arg.get("ADAY" + suffix, 0) != null) {
|
||||||
|
return resultA(arg, suffix);
|
||||||
|
}
|
||||||
|
if (arg.get("BDAY" + suffix, 0) != null) {
|
||||||
|
return resultB(arg, suffix);
|
||||||
|
}
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Complement resultA(RegexResult arg, String suffix) {
|
||||||
|
final int day = Integer.parseInt(arg.get("ADAY" + suffix, 0));
|
||||||
|
final String month = arg.get("AMONTH" + suffix, 0);
|
||||||
|
final int year = Integer.parseInt(arg.get("AYEAR" + suffix, 0));
|
||||||
|
return DayAsDate.create(year, month, day);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Complement resultB(RegexResult arg, String suffix) {
|
||||||
|
final int day = Integer.parseInt(arg.get("BDAY" + suffix, 0));
|
||||||
|
final int month = Integer.parseInt(arg.get("BMONTH" + suffix, 0));
|
||||||
|
final int year = Integer.parseInt(arg.get("BYEAR" + suffix, 0));
|
||||||
|
return DayAsDate.create(year, month, day);
|
||||||
|
}
|
||||||
|
}
|
92
src/net/sourceforge/plantuml/project3/DayAsDate.java
Normal file
92
src/net/sourceforge/plantuml/project3/DayAsDate.java
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
public class DayAsDate implements Complement {
|
||||||
|
|
||||||
|
private final int year;
|
||||||
|
private final int dayOfMonth;
|
||||||
|
private final Month month;
|
||||||
|
|
||||||
|
public static DayAsDate create(int year, String month, int dayOfMonth) {
|
||||||
|
return new DayAsDate(year, Month.fromString(month), dayOfMonth);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DayAsDate create(int year, int month, int dayOfMonth) {
|
||||||
|
return new DayAsDate(year, Month.values()[month - 1], dayOfMonth);
|
||||||
|
}
|
||||||
|
|
||||||
|
private DayAsDate(int year, Month month, int dayOfMonth) {
|
||||||
|
this.year = year;
|
||||||
|
this.dayOfMonth = dayOfMonth;
|
||||||
|
this.month = month;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "" + year + "/" + month + "/" + dayOfMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int getDayOfMonth() {
|
||||||
|
return dayOfMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int daysPerMonth() {
|
||||||
|
return month.getDaysPerMonth(year);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DayAsDate next() {
|
||||||
|
int newDayOfMonth = dayOfMonth + 1;
|
||||||
|
if (newDayOfMonth <= daysPerMonth()) {
|
||||||
|
return new DayAsDate(year, month, newDayOfMonth);
|
||||||
|
}
|
||||||
|
assert newDayOfMonth > daysPerMonth();
|
||||||
|
newDayOfMonth = 1;
|
||||||
|
final Month newMonth = month.next();
|
||||||
|
final int newYear = newMonth == Month.JANUARY ? year + 1 : year;
|
||||||
|
return new DayAsDate(newYear, newMonth, newDayOfMonth);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Month getMonth() {
|
||||||
|
return month;
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://en.wikipedia.org/wiki/Zeller%27s_congruence
|
||||||
|
public DayOfWeek getDayOfWeek() {
|
||||||
|
final int q = dayOfMonth;
|
||||||
|
final int m = month.m();
|
||||||
|
final int y = m >= 13 ? year - 1 : year;
|
||||||
|
final int k = y % 100;
|
||||||
|
final int j = y / 100;
|
||||||
|
final int h = ((q + 13 * (m + 1) / 5) + k + k / 4 + j / 4 + 5 * j) % 7;
|
||||||
|
return DayOfWeek.fromH(h);
|
||||||
|
}
|
||||||
|
}
|
50
src/net/sourceforge/plantuml/project3/DayOfWeek.java
Normal file
50
src/net/sourceforge/plantuml/project3/DayOfWeek.java
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
|
|
||||||
|
public enum DayOfWeek {
|
||||||
|
|
||||||
|
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
|
||||||
|
|
||||||
|
public DayOfWeek next() {
|
||||||
|
return DayOfWeek.values()[(ordinal() + 1) % 7];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DayOfWeek fromH(int h) {
|
||||||
|
return DayOfWeek.values()[(h + 5) % 7];
|
||||||
|
}
|
||||||
|
|
||||||
|
public String shortName() {
|
||||||
|
return StringUtils.capitalize(name().substring(0, 2));
|
||||||
|
}
|
||||||
|
}
|
39
src/net/sourceforge/plantuml/project3/GCalendar.java
Normal file
39
src/net/sourceforge/plantuml/project3/GCalendar.java
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
public interface GCalendar {
|
||||||
|
|
||||||
|
// public DayAsDate next(DayAsDate day);
|
||||||
|
|
||||||
|
public DayAsDate toDayAsDate(InstantDay day);
|
||||||
|
|
||||||
|
}
|
49
src/net/sourceforge/plantuml/project3/GCalendarSimple.java
Normal file
49
src/net/sourceforge/plantuml/project3/GCalendarSimple.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
public class GCalendarSimple implements GCalendar {
|
||||||
|
|
||||||
|
private final DayAsDate start;
|
||||||
|
|
||||||
|
public GCalendarSimple(DayAsDate start) {
|
||||||
|
this.start = start;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DayAsDate toDayAsDate(InstantDay day) {
|
||||||
|
DayAsDate result = start;
|
||||||
|
for (int i = 0; i < day.getNumDay(); i++) {
|
||||||
|
result = result.next();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -36,6 +36,7 @@ import java.io.OutputStream;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -49,7 +50,6 @@ import net.sourceforge.plantuml.core.ImageData;
|
|||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColor;
|
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColorSetSimple;
|
import net.sourceforge.plantuml.graphic.HtmlColorSetSimple;
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColorUtils;
|
import net.sourceforge.plantuml.graphic.HtmlColorUtils;
|
||||||
import net.sourceforge.plantuml.graphic.IHtmlColorSet;
|
import net.sourceforge.plantuml.graphic.IHtmlColorSet;
|
||||||
@ -63,10 +63,16 @@ import net.sourceforge.plantuml.ugraphic.UGraphic;
|
|||||||
import net.sourceforge.plantuml.ugraphic.ULine;
|
import net.sourceforge.plantuml.ugraphic.ULine;
|
||||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||||
|
|
||||||
public class GanttDiagram extends AbstractPSystem {
|
public class GanttDiagram extends AbstractPSystem implements Subject {
|
||||||
|
|
||||||
private final Map<TaskCode, Task> tasks = new LinkedHashMap<TaskCode, Task>();
|
private final Map<TaskCode, Task> tasks = new LinkedHashMap<TaskCode, Task>();
|
||||||
|
private final Map<String, Task> byShortName = new HashMap<String, Task>();
|
||||||
private final List<GanttConstraint> constraints = new ArrayList<GanttConstraint>();
|
private final List<GanttConstraint> constraints = new ArrayList<GanttConstraint>();
|
||||||
|
private final IHtmlColorSet colorSet = new HtmlColorSetSimple();
|
||||||
|
private GCalendar calendar;
|
||||||
|
|
||||||
|
private Instant min;
|
||||||
|
private Instant max;
|
||||||
|
|
||||||
public DiagramDescription getDescription() {
|
public DiagramDescription getDescription() {
|
||||||
return new DiagramDescriptionImpl("(Project)", getClass());
|
return new DiagramDescriptionImpl("(Project)", getClass());
|
||||||
@ -91,7 +97,6 @@ public class GanttDiagram extends AbstractPSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sortTasks() {
|
private void sortTasks() {
|
||||||
System.err.println("SORTING TASKS!");
|
|
||||||
final TaskCodeSimpleOrder order = getCanonicalOrder(1);
|
final TaskCodeSimpleOrder order = getCanonicalOrder(1);
|
||||||
final List<Task> list = new ArrayList<Task>(tasks.values());
|
final List<Task> list = new ArrayList<Task>(tasks.values());
|
||||||
Collections.sort(list, new Comparator<Task>() {
|
Collections.sort(list, new Comparator<Task>() {
|
||||||
@ -108,8 +113,10 @@ public class GanttDiagram extends AbstractPSystem {
|
|||||||
private UDrawable getUDrawable() {
|
private UDrawable getUDrawable() {
|
||||||
return new UDrawable() {
|
return new UDrawable() {
|
||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
|
initMinMax();
|
||||||
final TimeScale timeScale = new TimeScale();
|
final TimeScale timeScale = new TimeScale();
|
||||||
drawInternal(ug, timeScale);
|
drawTimeHeader(ug, timeScale);
|
||||||
|
drawTasks(ug, timeScale);
|
||||||
drawConstraints(ug, timeScale);
|
drawConstraints(ug, timeScale);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -122,42 +129,66 @@ public class GanttDiagram extends AbstractPSystem {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawInternal(final UGraphic ug, TimeScale timeScale) {
|
private void drawTimeHeader(final UGraphic ug, TimeScale timeScale) {
|
||||||
|
|
||||||
// System.err.println("==============");
|
final double yTotal = initTaskDraws(timeScale);
|
||||||
// for (Task task : tasks.values()) {
|
|
||||||
// System.err.println("task=" + task + " " + ((TaskImpl) task).debug());
|
|
||||||
// }
|
|
||||||
// System.err.println("==============");
|
|
||||||
|
|
||||||
Instant min = tasks.values().iterator().next().getStart();
|
|
||||||
Instant max = tasks.values().iterator().next().getEnd();
|
|
||||||
for (Task task : tasks.values()) {
|
|
||||||
final Instant start = task.getStart();
|
|
||||||
final Instant end = task.getEnd();
|
|
||||||
if (min.compareTo(start) > 0) {
|
|
||||||
min = start;
|
|
||||||
}
|
|
||||||
if (max.compareTo(end) < 0) {
|
|
||||||
max = end;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final double header = 16;
|
|
||||||
double y = header;
|
|
||||||
for (Task task : tasks.values()) {
|
|
||||||
final TaskDraw draw = new TaskDraw(task, timeScale, y);
|
|
||||||
task.setTaskDraw(draw);
|
|
||||||
y += draw.getHeight();
|
|
||||||
}
|
|
||||||
|
|
||||||
ULine vbar = new ULine(0, y);
|
|
||||||
final double xmin = timeScale.getPixel(min);
|
final double xmin = timeScale.getPixel(min);
|
||||||
final double xmax = timeScale.getPixel(max.increment());
|
final double xmax = timeScale.getPixel(max.increment());
|
||||||
ug.apply(new UChangeColor(HtmlColorUtils.LIGHT_GRAY)).draw(new ULine(xmax - xmin, 0));
|
ug.apply(new UChangeColor(HtmlColorUtils.LIGHT_GRAY)).draw(new ULine(xmax - xmin, 0));
|
||||||
ug.apply(new UChangeColor(HtmlColorUtils.LIGHT_GRAY)).apply(new UTranslate(0, header - 3))
|
ug.apply(new UChangeColor(HtmlColorUtils.LIGHT_GRAY)).apply(new UTranslate(0, getHeaderHeight() - 3))
|
||||||
.draw(new ULine(xmax - xmin, 0));
|
.draw(new ULine(xmax - xmin, 0));
|
||||||
|
if (calendar == null) {
|
||||||
|
drawSimpleDayCounter(ug, timeScale, yTotal);
|
||||||
|
} else {
|
||||||
|
drawCalendar(ug, timeScale, yTotal);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawCalendar(final UGraphic ug, TimeScale timeScale, final double yTotal) {
|
||||||
|
final int magic = 12;
|
||||||
|
final ULine vbar = new ULine(0, yTotal - magic);
|
||||||
|
Month lastMonth = null;
|
||||||
|
for (Instant i = min; i.compareTo(max.increment()) <= 0; i = i.increment()) {
|
||||||
|
final DayAsDate day = calendar.toDayAsDate((InstantDay) i);
|
||||||
|
final String d1 = "" + day.getDayOfMonth();
|
||||||
|
final TextBlock num = Display.getWithNewlines(d1).create(getFontConfiguration(), HorizontalAlignment.LEFT,
|
||||||
|
new SpriteContainerEmpty());
|
||||||
|
final double x1 = timeScale.getPixel(i);
|
||||||
|
final double x2 = timeScale.getPixel(i.increment());
|
||||||
|
if (i.compareTo(max.increment()) < 0) {
|
||||||
|
final TextBlock weekDay = Display.getWithNewlines(day.getDayOfWeek().shortName()).create(
|
||||||
|
getFontConfiguration(), HorizontalAlignment.LEFT, new SpriteContainerEmpty());
|
||||||
|
|
||||||
|
drawCenter(ug.apply(new UTranslate(0, magic * 2)), num, x1, x2);
|
||||||
|
drawCenter(ug.apply(new UTranslate(0, magic)), weekDay, x1, x2);
|
||||||
|
if (lastMonth != day.getMonth()) {
|
||||||
|
final TextBlock month = Display.getWithNewlines(day.getMonth().name()).create(
|
||||||
|
getFontConfiguration(), HorizontalAlignment.LEFT, new SpriteContainerEmpty());
|
||||||
|
month.drawU(ug.apply(new UTranslate(x1, 0)));
|
||||||
|
}
|
||||||
|
lastMonth = day.getMonth();
|
||||||
|
}
|
||||||
|
ug.apply(new UChangeColor(HtmlColorUtils.LIGHT_GRAY)).apply(new UTranslate(x1, magic)).draw(vbar);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double getHeaderHeight() {
|
||||||
|
if (calendar != null) {
|
||||||
|
return 40;
|
||||||
|
}
|
||||||
|
return 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawCenter(final UGraphic ug, final TextBlock text, final double x1, final double x2) {
|
||||||
|
final double width = text.calculateDimension(ug.getStringBounder()).getWidth();
|
||||||
|
final double delta = (x2 - x1) - width;
|
||||||
|
text.drawU(ug.apply(new UTranslate(x1 + delta / 2, 0)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawSimpleDayCounter(final UGraphic ug, TimeScale timeScale, final double yTotal) {
|
||||||
|
final ULine vbar = new ULine(0, yTotal);
|
||||||
for (Instant i = min; i.compareTo(max.increment()) <= 0; i = i.increment()) {
|
for (Instant i = min; i.compareTo(max.increment()) <= 0; i = i.increment()) {
|
||||||
final TextBlock num = Display.getWithNewlines(i.toShortString()).create(getFontConfiguration(),
|
final TextBlock num = Display.getWithNewlines(i.toShortString()).create(getFontConfiguration(),
|
||||||
HorizontalAlignment.LEFT, new SpriteContainerEmpty());
|
HorizontalAlignment.LEFT, new SpriteContainerEmpty());
|
||||||
@ -170,14 +201,40 @@ public class GanttDiagram extends AbstractPSystem {
|
|||||||
}
|
}
|
||||||
ug.apply(new UChangeColor(HtmlColorUtils.LIGHT_GRAY)).apply(new UTranslate(x1, 0)).draw(vbar);
|
ug.apply(new UChangeColor(HtmlColorUtils.LIGHT_GRAY)).apply(new UTranslate(x1, 0)).draw(vbar);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private double initTaskDraws(TimeScale timeScale) {
|
||||||
|
double y = getHeaderHeight();
|
||||||
|
for (Task task : tasks.values()) {
|
||||||
|
final TaskDraw draw = new TaskDraw(task, timeScale, y);
|
||||||
|
task.setTaskDraw(draw);
|
||||||
|
y += draw.getHeight();
|
||||||
|
}
|
||||||
|
return y;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initMinMax() {
|
||||||
|
min = tasks.values().iterator().next().getStart();
|
||||||
|
max = tasks.values().iterator().next().getEnd();
|
||||||
|
for (Task task : tasks.values()) {
|
||||||
|
final Instant start = task.getStart();
|
||||||
|
final Instant end = task.getEnd();
|
||||||
|
if (min.compareTo(start) > 0) {
|
||||||
|
min = start;
|
||||||
|
}
|
||||||
|
if (max.compareTo(end) < 0) {
|
||||||
|
max = end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void drawTasks(final UGraphic ug, TimeScale timeScale) {
|
||||||
for (Task task : tasks.values()) {
|
for (Task task : tasks.values()) {
|
||||||
final TaskDraw draw = task.getTaskDraw();
|
final TaskDraw draw = task.getTaskDraw();
|
||||||
draw.drawU(ug.apply(new UTranslate(0, draw.getY())));
|
draw.drawU(ug.apply(new UTranslate(0, draw.getY())));
|
||||||
draw.getTitle().drawU(
|
draw.getTitle().drawU(
|
||||||
ug.apply(new UTranslate(timeScale.getPixel(task.getStart().increment()), draw.getY())));
|
ug.apply(new UTranslate(timeScale.getPixel(task.getStart().increment()), draw.getY())));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private FontConfiguration getFontConfiguration() {
|
private FontConfiguration getFontConfiguration() {
|
||||||
@ -185,11 +242,38 @@ public class GanttDiagram extends AbstractPSystem {
|
|||||||
return new FontConfiguration(font, HtmlColorUtils.LIGHT_GRAY, HtmlColorUtils.LIGHT_GRAY, false);
|
return new FontConfiguration(font, HtmlColorUtils.LIGHT_GRAY, HtmlColorUtils.LIGHT_GRAY, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task getTask(TaskCode code) {
|
public Task getExistingTask(String id) {
|
||||||
Task result = tasks.get(code);
|
if (id == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
Task result = byShortName.get(id);
|
||||||
|
if (result != null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
final TaskCode code = new TaskCode(id);
|
||||||
|
return tasks.get(code);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Task getOrCreateTask(String codeOrShortName, String shortName) {
|
||||||
|
if (codeOrShortName == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
Task result = shortName == null ? null : byShortName.get(shortName);
|
||||||
|
if (result != null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
result = byShortName.get(codeOrShortName);
|
||||||
|
if (result != null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
final TaskCode code = new TaskCode(codeOrShortName);
|
||||||
|
result = tasks.get(code);
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
result = new TaskImpl(code);
|
result = new TaskImpl(code);
|
||||||
tasks.put(code, result);
|
tasks.put(code, result);
|
||||||
|
if (byShortName != null) {
|
||||||
|
byShortName.put(shortName, result);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -216,10 +300,12 @@ public class GanttDiagram extends AbstractPSystem {
|
|||||||
constraints.add(constraint);
|
constraints.add(constraint);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final IHtmlColorSet colorSet = new HtmlColorSetSimple();
|
|
||||||
|
|
||||||
public IHtmlColorSet getIHtmlColorSet() {
|
public IHtmlColorSet getIHtmlColorSet() {
|
||||||
return colorSet;
|
return colorSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setStartingDate(DayAsDate start) {
|
||||||
|
this.calendar = new GCalendarSimple(start);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ import net.sourceforge.plantuml.core.DiagramType;
|
|||||||
public class GanttDiagramFactory extends UmlDiagramFactory {
|
public class GanttDiagramFactory extends UmlDiagramFactory {
|
||||||
|
|
||||||
private List<SubjectPattern> subjects() {
|
private List<SubjectPattern> subjects() {
|
||||||
return Arrays.<SubjectPattern> asList(new SubjectTask());
|
return Arrays.<SubjectPattern> asList(new SubjectTask(), new SubjectProject());
|
||||||
}
|
}
|
||||||
|
|
||||||
public GanttDiagramFactory() {
|
public GanttDiagramFactory() {
|
||||||
|
81
src/net/sourceforge/plantuml/project3/Month.java
Normal file
81
src/net/sourceforge/plantuml/project3/Month.java
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
|
|
||||||
|
public enum Month {
|
||||||
|
|
||||||
|
JANUARY(31), FEBRUARY(28), MARCH(31), APRIL(30), MAY(31), JUNE(30), //
|
||||||
|
JULY(31), AUGUST(31), SEPTEMBER(30), OCTOBER(31), NOVEMBER(30), DECEMBER(31);
|
||||||
|
|
||||||
|
private final int daysPerMonth;
|
||||||
|
|
||||||
|
private Month(int daysPerMonth) {
|
||||||
|
this.daysPerMonth = daysPerMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
static public String getRegexString() {
|
||||||
|
final StringBuilder sb = new StringBuilder();
|
||||||
|
for (Month month : Month.values()) {
|
||||||
|
if (sb.length() > 0) {
|
||||||
|
sb.append("|");
|
||||||
|
}
|
||||||
|
sb.append(month.name().substring(0, 3) + "[a-z]*");
|
||||||
|
}
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Month fromString(String value) {
|
||||||
|
value = StringUtils.goUpperCase(value).substring(0, 3);
|
||||||
|
for (Month m : Month.values()) {
|
||||||
|
if (m.name().startsWith(value)) {
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public final int getDaysPerMonth(int year) {
|
||||||
|
if (this == FEBRUARY && year % 4 == 0) {
|
||||||
|
return 29;
|
||||||
|
}
|
||||||
|
return daysPerMonth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Month next() {
|
||||||
|
return Month.values()[(this.ordinal() + 1) % 12];
|
||||||
|
}
|
||||||
|
|
||||||
|
public int m() {
|
||||||
|
return 3 + (ordinal() + 10) % 12;
|
||||||
|
}
|
||||||
|
}
|
@ -60,6 +60,9 @@ public class NaturalCommand extends SingleLineCommand2<GanttDiagram> {
|
|||||||
final Subject subject = subjectPattern.getSubject(system, arg);
|
final Subject subject = subjectPattern.getSubject(system, arg);
|
||||||
final Verb verb = verbPattern.getVerb(system, arg);
|
final Verb verb = verbPattern.getVerb(system, arg);
|
||||||
final Complement complement = complementPattern.getComplement(system, arg, "0");
|
final Complement complement = complementPattern.getComplement(system, arg, "0");
|
||||||
|
if (complement == null) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
return verb.execute(subject, complement);
|
return verb.execute(subject, complement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
54
src/net/sourceforge/plantuml/project3/SubjectProject.java
Normal file
54
src/net/sourceforge/plantuml/project3/SubjectProject.java
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.command.regex.IRegex;
|
||||||
|
import net.sourceforge.plantuml.command.regex.RegexLeaf;
|
||||||
|
import net.sourceforge.plantuml.command.regex.RegexResult;
|
||||||
|
|
||||||
|
public class SubjectProject implements SubjectPattern {
|
||||||
|
|
||||||
|
public Collection<VerbPattern> getVerbs() {
|
||||||
|
return Arrays.<VerbPattern> asList(new VerbProjectStarts());
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegex toRegex() {
|
||||||
|
return new RegexLeaf("SUBJECT", "project");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Subject getSubject(GanttDiagram project, RegexResult arg) {
|
||||||
|
return project;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -45,12 +45,17 @@ public class SubjectTask implements SubjectPattern {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public IRegex toRegex() {
|
public IRegex toRegex() {
|
||||||
return new RegexLeaf("SUBJECT", "\\[([^\\[\\]]+?)\\]");
|
return new RegexLeaf("SUBJECT", "\\[([^\\[\\]]+?)\\](?:[%s]+as[%s]+\\[([^\\[\\]]+?)\\])?");
|
||||||
}
|
}
|
||||||
|
|
||||||
public Subject getSubject(GanttDiagram project, RegexResult arg) {
|
public Subject getSubject(GanttDiagram project, RegexResult arg) {
|
||||||
final String s = arg.get("SUBJECT", 0);
|
final String s = arg.get("SUBJECT", 0);
|
||||||
return project.getTask(new TaskCode(s));
|
final String shortName = arg.get("SUBJECT", 1);
|
||||||
|
final Task result = project.getOrCreateTask(s, shortName);
|
||||||
|
if (result == null) {
|
||||||
|
throw new IllegalStateException();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,6 @@ import net.sourceforge.plantuml.Direction;
|
|||||||
import net.sourceforge.plantuml.SpriteContainerEmpty;
|
import net.sourceforge.plantuml.SpriteContainerEmpty;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColor;
|
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColorUtils;
|
import net.sourceforge.plantuml.graphic.HtmlColorUtils;
|
||||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||||
import net.sourceforge.plantuml.graphic.UDrawable;
|
import net.sourceforge.plantuml.graphic.UDrawable;
|
||||||
|
62
src/net/sourceforge/plantuml/project3/VerbProjectStarts.java
Normal file
62
src/net/sourceforge/plantuml/project3/VerbProjectStarts.java
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* 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.project3;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collection;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.command.CommandExecutionResult;
|
||||||
|
import net.sourceforge.plantuml.command.regex.IRegex;
|
||||||
|
import net.sourceforge.plantuml.command.regex.RegexLeaf;
|
||||||
|
import net.sourceforge.plantuml.command.regex.RegexResult;
|
||||||
|
|
||||||
|
public class VerbProjectStarts implements VerbPattern {
|
||||||
|
|
||||||
|
public Collection<ComplementPattern> getComplements() {
|
||||||
|
return Arrays.<ComplementPattern> asList(new ComplementDate());
|
||||||
|
}
|
||||||
|
|
||||||
|
public IRegex toRegex() {
|
||||||
|
return new RegexLeaf("starts[%s]*(the[%s]*|on[%s]*)*");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Verb getVerb(final GanttDiagram project, RegexResult arg) {
|
||||||
|
return new Verb() {
|
||||||
|
public CommandExecutionResult execute(Subject subject, Complement complement) {
|
||||||
|
final DayAsDate start = (DayAsDate) complement;
|
||||||
|
assert project == subject;
|
||||||
|
project.setStartingDate(start);
|
||||||
|
return CommandExecutionResult.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -36,6 +36,7 @@ import java.util.List;
|
|||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.OptionFlags;
|
import net.sourceforge.plantuml.OptionFlags;
|
||||||
|
import net.sourceforge.plantuml.PaddingParam;
|
||||||
import net.sourceforge.plantuml.SkinParamBackcolored;
|
import net.sourceforge.plantuml.SkinParamBackcolored;
|
||||||
import net.sourceforge.plantuml.SkinParamBackcoloredReference;
|
import net.sourceforge.plantuml.SkinParamBackcoloredReference;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
@ -191,8 +192,9 @@ class DrawableSetInitializer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
takeParticipantEngloberPadding(stringBounder);
|
||||||
constraintSet.takeConstraintIntoAccount(stringBounder);
|
constraintSet.takeConstraintIntoAccount(stringBounder);
|
||||||
takeParticipantEngloberTitleWidth3(stringBounder);
|
takeParticipantEngloberTitleWidth(stringBounder);
|
||||||
|
|
||||||
prepareMissingSpace(stringBounder);
|
prepareMissingSpace(stringBounder);
|
||||||
|
|
||||||
@ -201,7 +203,22 @@ class DrawableSetInitializer {
|
|||||||
return drawableSet;
|
return drawableSet;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void takeParticipantEngloberTitleWidth3(StringBounder stringBounder) {
|
private void takeParticipantEngloberPadding(StringBounder stringBounder) {
|
||||||
|
final double padding = drawableSet.getSkinParam().getPadding(PaddingParam.BOX);
|
||||||
|
if (padding == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (Englober pe : drawableSet.getExistingParticipantEnglober(stringBounder)) {
|
||||||
|
final ParticipantBox first = drawableSet.getLivingParticipantBox(pe.getFirst2TOBEPRIVATE())
|
||||||
|
.getParticipantBox();
|
||||||
|
final ParticipantBox last = drawableSet.getLivingParticipantBox(pe.getLast2TOBEPRIVATE())
|
||||||
|
.getParticipantBox();
|
||||||
|
constraintSet.pushToLeftParticipantBox(padding, first, true);
|
||||||
|
constraintSet.pushToLeftParticipantBox(padding, last, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void takeParticipantEngloberTitleWidth(StringBounder stringBounder) {
|
||||||
for (Englober pe : drawableSet.getExistingParticipantEnglober(stringBounder)) {
|
for (Englober pe : drawableSet.getExistingParticipantEnglober(stringBounder)) {
|
||||||
final double preferredWidth = drawableSet.getEngloberPreferedWidth(stringBounder,
|
final double preferredWidth = drawableSet.getEngloberPreferedWidth(stringBounder,
|
||||||
pe.getParticipantEnglober());
|
pe.getParticipantEnglober());
|
||||||
|
@ -34,6 +34,7 @@ import java.awt.geom.Dimension2D;
|
|||||||
|
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.creole.CreoleMode;
|
import net.sourceforge.plantuml.creole.CreoleMode;
|
||||||
import net.sourceforge.plantuml.cucadiagram.BodyEnhanced2;
|
import net.sourceforge.plantuml.cucadiagram.BodyEnhanced2;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
@ -58,16 +59,16 @@ public abstract class AbstractTextualComponent extends AbstractComponent {
|
|||||||
private final UFont font;
|
private final UFont font;
|
||||||
private final HtmlColor fontColor;
|
private final HtmlColor fontColor;
|
||||||
|
|
||||||
public AbstractTextualComponent(CharSequence label, FontConfiguration font,
|
public AbstractTextualComponent(LineBreakStrategy maxMessageSize, CharSequence label,
|
||||||
HorizontalAlignment horizontalAlignment, int marginX1, int marginX2, int marginY,
|
FontConfiguration font, HorizontalAlignment horizontalAlignment, int marginX1, int marginX2,
|
||||||
ISkinSimple spriteContainer, double maxMessageSize, UFont fontForStereotype,
|
int marginY, ISkinSimple spriteContainer, UFont fontForStereotype,
|
||||||
HtmlColor htmlColorForStereotype) {
|
HtmlColor htmlColorForStereotype) {
|
||||||
this(Display.getWithNewlines(label == null ? "" : label.toString()), font, horizontalAlignment, marginX1,
|
this(maxMessageSize, Display.getWithNewlines(label == null ? "" : label.toString()), font, horizontalAlignment,
|
||||||
marginX2, marginY, spriteContainer, maxMessageSize, false, fontForStereotype, htmlColorForStereotype);
|
marginX1, marginX2, marginY, spriteContainer, false, fontForStereotype, htmlColorForStereotype);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractTextualComponent(Display strings, FontConfiguration font, HorizontalAlignment horizontalAlignment,
|
public AbstractTextualComponent(LineBreakStrategy maxMessageSize, Display strings, FontConfiguration font,
|
||||||
int marginX1, int marginX2, int marginY, ISkinSimple spriteContainer, double maxMessageSize,
|
HorizontalAlignment horizontalAlignment, int marginX1, int marginX2, int marginY, ISkinSimple spriteContainer,
|
||||||
boolean enhanced, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
boolean enhanced, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
||||||
this.font = font.getFont();
|
this.font = font.getFont();
|
||||||
this.fontColor = font.getColor();
|
this.fontColor = font.getColor();
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.bluemodern;
|
package net.sourceforge.plantuml.skin.bluemodern;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -50,8 +51,8 @@ public abstract class AbstractComponentBlueModernArrow extends AbstractTextualCo
|
|||||||
private final HtmlColor foregroundColor;
|
private final HtmlColor foregroundColor;
|
||||||
|
|
||||||
public AbstractComponentBlueModernArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay, ArrowConfiguration arrowConfiguration, ISkinSimple spriteContainer) {
|
public AbstractComponentBlueModernArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay, ArrowConfiguration arrowConfiguration, ISkinSimple spriteContainer) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.LEFT, 17, 17, 2,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.LEFT, 17, 17,
|
||||||
spriteContainer, 0, false, null, null);
|
2, spriteContainer, false, null, null);
|
||||||
this.arrowConfiguration = arrowConfiguration;
|
this.arrowConfiguration = arrowConfiguration;
|
||||||
this.foregroundColor = foregroundColor;
|
this.foregroundColor = foregroundColor;
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.bluemodern;
|
package net.sourceforge.plantuml.skin.bluemodern;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -51,8 +52,8 @@ public class ComponentBlueModernActor extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentBlueModernActor(HtmlColor backgroundColor, HtmlColor foregroundColor, FontConfiguration font,
|
public ComponentBlueModernActor(HtmlColor backgroundColor, HtmlColor foregroundColor, FontConfiguration font,
|
||||||
Display stringsToDisplay, boolean head, ISkinSimple spriteContainer) {
|
Display stringsToDisplay, boolean head, ISkinSimple spriteContainer) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3,
|
||||||
spriteContainer, 0, false, null, null);
|
0, spriteContainer, false, null, null);
|
||||||
this.head = head;
|
this.head = head;
|
||||||
stickman = new StickMan(backgroundColor, foregroundColor);
|
stickman = new StickMan(backgroundColor, foregroundColor);
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.bluemodern;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -47,8 +48,8 @@ public class ComponentBlueModernDelayText extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentBlueModernDelayText(FontConfiguration font, Display stringsToDisplay,
|
public ComponentBlueModernDelayText(FontConfiguration font, Display stringsToDisplay,
|
||||||
ISkinSimple spriteContainer) {
|
ISkinSimple spriteContainer) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 4, 4, 4,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 4, 4,
|
||||||
spriteContainer, 0, false, null, null);
|
4, spriteContainer, false, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.bluemodern;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -58,8 +59,8 @@ public class ComponentBlueModernDivider extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentBlueModernDivider(FontConfiguration font, HtmlColor background1, HtmlColor background2,
|
public ComponentBlueModernDivider(FontConfiguration font, HtmlColor background1, HtmlColor background2,
|
||||||
HtmlColor borderColor, Display stringsToDisplay, ISkinSimple spriteContainer) {
|
HtmlColor borderColor, Display stringsToDisplay, ISkinSimple spriteContainer) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 4, 4, 4,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 4, 4,
|
||||||
spriteContainer, 0, false, null, null);
|
4, spriteContainer, false, null, null);
|
||||||
this.background1 = background1;
|
this.background1 = background1;
|
||||||
this.background2 = background2;
|
this.background2 = background2;
|
||||||
this.borderColor = borderColor;
|
this.borderColor = borderColor;
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.bluemodern;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -54,7 +55,7 @@ public class ComponentBlueModernEnglober extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentBlueModernEnglober(HtmlColor borderColor, HtmlColor backColor, Display strings,
|
public ComponentBlueModernEnglober(HtmlColor borderColor, HtmlColor backColor, Display strings,
|
||||||
FontConfiguration font, ISkinSimple spriteContainer) {
|
FontConfiguration font, ISkinSimple spriteContainer) {
|
||||||
super(strings, font, HorizontalAlignment.CENTER, 4, 4, 1, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, strings, font, HorizontalAlignment.CENTER, 4, 4, 1, spriteContainer, false,
|
||||||
null, null);
|
null, null);
|
||||||
this.borderColor = borderColor;
|
this.borderColor = borderColor;
|
||||||
this.backColor = backColor;
|
this.backColor = backColor;
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.bluemodern;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -65,7 +66,7 @@ public class ComponentBlueModernGroupingHeader extends AbstractTextualComponent
|
|||||||
public ComponentBlueModernGroupingHeader(HtmlColor headerBackgroundColor, HtmlColor generalBackgroundColor,
|
public ComponentBlueModernGroupingHeader(HtmlColor headerBackgroundColor, HtmlColor generalBackgroundColor,
|
||||||
HtmlColor borderColor, HtmlColor fontColor2, FontConfiguration bigFont, UFont smallFont, Display strings,
|
HtmlColor borderColor, HtmlColor fontColor2, FontConfiguration bigFont, UFont smallFont, Display strings,
|
||||||
ISkinSimple spriteContainer) {
|
ISkinSimple spriteContainer) {
|
||||||
super(strings.get(0), bigFont, HorizontalAlignment.LEFT, 15, 30, 1, spriteContainer, 0, null, null);
|
super(LineBreakStrategy.NONE, strings.get(0), bigFont, HorizontalAlignment.LEFT, 15, 30, 1, spriteContainer, null, null);
|
||||||
this.headerBackgroundColor = headerBackgroundColor;
|
this.headerBackgroundColor = headerBackgroundColor;
|
||||||
this.generalBackgroundColor = generalBackgroundColor;
|
this.generalBackgroundColor = generalBackgroundColor;
|
||||||
this.borderColor = borderColor;
|
this.borderColor = borderColor;
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.bluemodern;
|
package net.sourceforge.plantuml.skin.bluemodern;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -54,7 +55,7 @@ final public class ComponentBlueModernNote extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentBlueModernNote(HtmlColor back, HtmlColor foregroundColor, FontConfiguration font,
|
public ComponentBlueModernNote(HtmlColor back, HtmlColor foregroundColor, FontConfiguration font,
|
||||||
Display strings, ISkinSimple spriteContainer) {
|
Display strings, ISkinSimple spriteContainer) {
|
||||||
super(strings, font, HorizontalAlignment.LEFT, 6, 15, 5, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, strings, font, HorizontalAlignment.LEFT, 6, 15, 5, spriteContainer, false,
|
||||||
null, null);
|
null, null);
|
||||||
this.back = back;
|
this.back = back;
|
||||||
this.foregroundColor = foregroundColor;
|
this.foregroundColor = foregroundColor;
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.bluemodern;
|
package net.sourceforge.plantuml.skin.bluemodern;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -50,8 +51,8 @@ public class ComponentBlueModernParticipant extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentBlueModernParticipant(HtmlColor blue1, HtmlColor blue2, FontConfiguration font,
|
public ComponentBlueModernParticipant(HtmlColor blue1, HtmlColor blue2, FontConfiguration font,
|
||||||
Display stringsToDisplay, ISkinSimple spriteContainer) {
|
Display stringsToDisplay, ISkinSimple spriteContainer) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 7, 7, 7,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 7, 7,
|
||||||
spriteContainer, 0, false, null, null);
|
7, spriteContainer, false, null, null);
|
||||||
this.blue1 = blue1;
|
this.blue1 = blue1;
|
||||||
this.blue2 = blue2;
|
this.blue2 = blue2;
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.rose;
|
package net.sourceforge.plantuml.skin.rose;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -48,9 +49,9 @@ public abstract class AbstractComponentRoseArrow extends AbstractTextualComponen
|
|||||||
|
|
||||||
public AbstractComponentRoseArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay,
|
public AbstractComponentRoseArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay,
|
||||||
ArrowConfiguration arrowConfiguration, ISkinSimple spriteContainer, HorizontalAlignment textHorizontalAlignment,
|
ArrowConfiguration arrowConfiguration, ISkinSimple spriteContainer, HorizontalAlignment textHorizontalAlignment,
|
||||||
double maxMessageSize) {
|
LineBreakStrategy maxMessageSize) {
|
||||||
super(stringsToDisplay, font, textHorizontalAlignment, 7, 7, 1, spriteContainer,
|
super(maxMessageSize, stringsToDisplay, font, textHorizontalAlignment, 7, 7, 1,
|
||||||
maxMessageSize, false, null, null);
|
spriteContainer, false, null, null);
|
||||||
this.arrowConfiguration = arrowConfiguration;
|
this.arrowConfiguration = arrowConfiguration;
|
||||||
this.foregroundColor = foregroundColor;
|
this.foregroundColor = foregroundColor;
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -54,7 +55,7 @@ public class ComponentRoseActor extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseActor(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
public ComponentRoseActor(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
||||||
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, false,
|
||||||
fontForStereotype, htmlColorForStereotype);
|
fontForStereotype, htmlColorForStereotype);
|
||||||
this.head = head;
|
this.head = head;
|
||||||
this.stickman = new StickMan(biColor);
|
this.stickman = new StickMan(biColor);
|
||||||
|
@ -34,6 +34,7 @@ import java.awt.geom.Dimension2D;
|
|||||||
import java.awt.geom.Point2D;
|
import java.awt.geom.Point2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -62,7 +63,7 @@ public class ComponentRoseArrow extends AbstractComponentRoseArrow {
|
|||||||
|
|
||||||
public ComponentRoseArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay,
|
public ComponentRoseArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay,
|
||||||
ArrowConfiguration arrowConfiguration, HorizontalAlignment messagePosition, ISkinSimple spriteContainer,
|
ArrowConfiguration arrowConfiguration, HorizontalAlignment messagePosition, ISkinSimple spriteContainer,
|
||||||
HorizontalAlignment textHorizontalAlignment, double maxMessageSize, boolean niceArrow) {
|
HorizontalAlignment textHorizontalAlignment, LineBreakStrategy maxMessageSize, boolean niceArrow) {
|
||||||
super(foregroundColor, font, stringsToDisplay, arrowConfiguration, spriteContainer, textHorizontalAlignment,
|
super(foregroundColor, font, stringsToDisplay, arrowConfiguration, spriteContainer, textHorizontalAlignment,
|
||||||
maxMessageSize);
|
maxMessageSize);
|
||||||
this.messagePosition = messagePosition;
|
this.messagePosition = messagePosition;
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -54,7 +55,7 @@ public class ComponentRoseBoundary extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseBoundary(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
public ComponentRoseBoundary(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
||||||
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, false,
|
||||||
fontForStereotype, htmlColorForStereotype);
|
fontForStereotype, htmlColorForStereotype);
|
||||||
this.head = head;
|
this.head = head;
|
||||||
this.stickman = new Boundary(biColor);
|
this.stickman = new Boundary(biColor);
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -54,7 +55,7 @@ public class ComponentRoseControl extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseControl(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
public ComponentRoseControl(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
||||||
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, false,
|
||||||
fontForStereotype, htmlColorForStereotype);
|
fontForStereotype, htmlColorForStereotype);
|
||||||
this.head = head;
|
this.head = head;
|
||||||
this.stickman = new Control(biColor);
|
this.stickman = new Control(biColor);
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -56,7 +57,7 @@ public class ComponentRoseDatabase extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseDatabase(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
public ComponentRoseDatabase(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
||||||
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, false,
|
||||||
fontForStereotype, htmlColorForStereotype);
|
fontForStereotype, htmlColorForStereotype);
|
||||||
this.head = head;
|
this.head = head;
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -46,8 +47,8 @@ import net.sourceforge.plantuml.ugraphic.UTranslate;
|
|||||||
public class ComponentRoseDelayText extends AbstractTextualComponent {
|
public class ComponentRoseDelayText extends AbstractTextualComponent {
|
||||||
|
|
||||||
public ComponentRoseDelayText(FontConfiguration font, Display stringsToDisplay, ISkinSimple spriteContainer) {
|
public ComponentRoseDelayText(FontConfiguration font, Display stringsToDisplay, ISkinSimple spriteContainer) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 0, 0, 4,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 0, 0,
|
||||||
spriteContainer, 0, false, null, null);
|
4, spriteContainer, false, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -60,7 +61,7 @@ public class ComponentRoseDivider extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseDivider(FontConfiguration font, HtmlColor background, Display stringsToDisplay,
|
public ComponentRoseDivider(FontConfiguration font, HtmlColor background, Display stringsToDisplay,
|
||||||
ISkinSimple spriteContainer, boolean withShadow, UStroke stroke, HtmlColor borderColor) {
|
ISkinSimple spriteContainer, boolean withShadow, UStroke stroke, HtmlColor borderColor) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 4, 4, 4, spriteContainer, 0, false, null, null);
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 4, 4, 4, spriteContainer, false, null, null);
|
||||||
this.background = background;
|
this.background = background;
|
||||||
this.borderColor = borderColor;
|
this.borderColor = borderColor;
|
||||||
this.empty = stringsToDisplay.get(0).length() == 0;
|
this.empty = stringsToDisplay.get(0).length() == 0;
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -49,7 +50,7 @@ public class ComponentRoseEnglober extends AbstractTextualComponent {
|
|||||||
private final SymbolContext symbolContext;
|
private final SymbolContext symbolContext;
|
||||||
|
|
||||||
public ComponentRoseEnglober(SymbolContext symbolContext, Display strings, FontConfiguration font, ISkinSimple spriteContainer) {
|
public ComponentRoseEnglober(SymbolContext symbolContext, Display strings, FontConfiguration font, ISkinSimple spriteContainer) {
|
||||||
super(strings, font, HorizontalAlignment.CENTER, 3, 3, 1, spriteContainer, 0, false, null, null);
|
super(LineBreakStrategy.NONE, strings, font, HorizontalAlignment.CENTER, 3, 3, 1, spriteContainer, false, null, null);
|
||||||
this.symbolContext = symbolContext;
|
this.symbolContext = symbolContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -54,7 +55,7 @@ public class ComponentRoseEntity extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseEntity(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
public ComponentRoseEntity(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay, boolean head,
|
||||||
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
ISkinSimple spriteContainer, UFont fontForStereotype, HtmlColor htmlColorForStereotype) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 3, 3, 0, spriteContainer, false,
|
||||||
fontForStereotype, htmlColorForStereotype);
|
fontForStereotype, htmlColorForStereotype);
|
||||||
this.head = head;
|
this.head = head;
|
||||||
this.stickman = new EntityDomain(biColor);
|
this.stickman = new EntityDomain(biColor);
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColor;
|
import net.sourceforge.plantuml.graphic.HtmlColor;
|
||||||
@ -57,8 +58,8 @@ public class ComponentRoseGroupingElse extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseGroupingElse(HtmlColor groupBorder, FontConfiguration smallFont, CharSequence comment,
|
public ComponentRoseGroupingElse(HtmlColor groupBorder, FontConfiguration smallFont, CharSequence comment,
|
||||||
ISkinSimple spriteContainer, HtmlColor backgroundColor) {
|
ISkinSimple spriteContainer, HtmlColor backgroundColor) {
|
||||||
super(comment == null ? null : "[" + comment + "]", smallFont, HorizontalAlignment.LEFT, 5, 5, 1,
|
super(LineBreakStrategy.NONE, comment == null ? null : "[" + comment + "]", smallFont, HorizontalAlignment.LEFT, 5, 5,
|
||||||
spriteContainer, 0, null, null);
|
1, spriteContainer, null, null);
|
||||||
this.groupBorder = groupBorder;
|
this.groupBorder = groupBorder;
|
||||||
this.backgroundColor = backgroundColor;
|
this.backgroundColor = backgroundColor;
|
||||||
// this.stroke = stroke;
|
// this.stroke = stroke;
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -62,7 +63,7 @@ public class ComponentRoseGroupingHeader extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseGroupingHeader(HtmlColor background, SymbolContext symbolContext, FontConfiguration bigFont,
|
public ComponentRoseGroupingHeader(HtmlColor background, SymbolContext symbolContext, FontConfiguration bigFont,
|
||||||
FontConfiguration smallFont2, Display strings, ISkinSimple spriteContainer) {
|
FontConfiguration smallFont2, Display strings, ISkinSimple spriteContainer) {
|
||||||
super(strings.get(0), bigFont, HorizontalAlignment.LEFT, 15, 30, 1, spriteContainer, 0, null, null);
|
super(LineBreakStrategy.NONE, strings.get(0), bigFont, HorizontalAlignment.LEFT, 15, 30, 1, spriteContainer, null, null);
|
||||||
this.symbolContext = symbolContext;
|
this.symbolContext = symbolContext;
|
||||||
this.background = background;
|
this.background = background;
|
||||||
if (strings.size() == 1 || strings.get(1) == null) {
|
if (strings.size() == 1 || strings.get(1) == null) {
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.rose;
|
package net.sourceforge.plantuml.skin.rose;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.creole.Stencil;
|
import net.sourceforge.plantuml.creole.Stencil;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
@ -55,7 +56,7 @@ final public class ComponentRoseNote extends AbstractTextualComponent implements
|
|||||||
|
|
||||||
public ComponentRoseNote(SymbolContext symbolContext, FontConfiguration font, Display strings, double paddingX, double paddingY,
|
public ComponentRoseNote(SymbolContext symbolContext, FontConfiguration font, Display strings, double paddingX, double paddingY,
|
||||||
ISkinSimple spriteContainer) {
|
ISkinSimple spriteContainer) {
|
||||||
super(strings, font, HorizontalAlignment.LEFT, 6, 15, 5, spriteContainer, 0, true, null, null);
|
super(LineBreakStrategy.NONE, strings, font, HorizontalAlignment.LEFT, 6, 15, 5, spriteContainer, true, null, null);
|
||||||
this.paddingX = paddingX;
|
this.paddingX = paddingX;
|
||||||
this.paddingY = paddingY;
|
this.paddingY = paddingY;
|
||||||
this.symbolContext = symbolContext;
|
this.symbolContext = symbolContext;
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.rose;
|
package net.sourceforge.plantuml.skin.rose;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -49,7 +50,7 @@ final public class ComponentRoseNoteBox extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseNoteBox(SymbolContext symbolContext, FontConfiguration font, Display strings,
|
public ComponentRoseNoteBox(SymbolContext symbolContext, FontConfiguration font, Display strings,
|
||||||
ISkinSimple spriteContainer) {
|
ISkinSimple spriteContainer) {
|
||||||
super(strings, font, HorizontalAlignment.LEFT, 4, 4, 4, spriteContainer, 0, false, null, null);
|
super(LineBreakStrategy.NONE, strings, font, HorizontalAlignment.LEFT, 4, 4, 4, spriteContainer, false, null, null);
|
||||||
this.symbolContext = symbolContext;
|
this.symbolContext = symbolContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.rose;
|
package net.sourceforge.plantuml.skin.rose;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -51,7 +52,7 @@ final public class ComponentRoseNoteHexagonal extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseNoteHexagonal(SymbolContext symbolContext, FontConfiguration font, Display strings,
|
public ComponentRoseNoteHexagonal(SymbolContext symbolContext, FontConfiguration font, Display strings,
|
||||||
ISkinSimple spriteContainer) {
|
ISkinSimple spriteContainer) {
|
||||||
super(strings, font, HorizontalAlignment.LEFT, 12, 12, 4, spriteContainer, 0, false, null, null);
|
super(LineBreakStrategy.NONE, strings, font, HorizontalAlignment.LEFT, 12, 12, 4, spriteContainer, false, null, null);
|
||||||
this.symbolContext = symbolContext;
|
this.symbolContext = symbolContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
package net.sourceforge.plantuml.skin.rose;
|
package net.sourceforge.plantuml.skin.rose;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -57,12 +58,14 @@ public class ComponentRoseParticipant extends AbstractTextualComponent {
|
|||||||
private final UStroke stroke;
|
private final UStroke stroke;
|
||||||
private final double minWidth;
|
private final double minWidth;
|
||||||
private final boolean collections;
|
private final boolean collections;
|
||||||
|
private final double padding;
|
||||||
|
|
||||||
public ComponentRoseParticipant(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay,
|
public ComponentRoseParticipant(SymbolContext biColor, FontConfiguration font, Display stringsToDisplay,
|
||||||
ISkinSimple spriteContainer, double roundCorner, UFont fontForStereotype, HtmlColor htmlColorForStereotype,
|
ISkinSimple spriteContainer, double roundCorner, UFont fontForStereotype, HtmlColor htmlColorForStereotype,
|
||||||
double minWidth, boolean collections) {
|
double minWidth, boolean collections, double padding) {
|
||||||
super(stringsToDisplay, font, HorizontalAlignment.CENTER, 7, 7, 7, spriteContainer, 0, false,
|
super(LineBreakStrategy.NONE, stringsToDisplay, font, HorizontalAlignment.CENTER, 7, 7, 7, spriteContainer, false,
|
||||||
fontForStereotype, htmlColorForStereotype);
|
fontForStereotype, htmlColorForStereotype);
|
||||||
|
this.padding = padding;
|
||||||
this.minWidth = minWidth;
|
this.minWidth = minWidth;
|
||||||
this.collections = collections;
|
this.collections = collections;
|
||||||
this.back = biColor.getBackColor();
|
this.back = biColor.getBackColor();
|
||||||
@ -75,6 +78,7 @@ public class ComponentRoseParticipant extends AbstractTextualComponent {
|
|||||||
@Override
|
@Override
|
||||||
protected void drawInternalU(UGraphic ug, Area area) {
|
protected void drawInternalU(UGraphic ug, Area area) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
ug = ug.apply(new UTranslate(padding, 0));
|
||||||
ug = ug.apply(new UChangeBackColor(back)).apply(new UChangeColor(foregroundColor));
|
ug = ug.apply(new UChangeBackColor(back)).apply(new UChangeColor(foregroundColor));
|
||||||
ug = ug.apply(stroke);
|
ug = ug.apply(stroke);
|
||||||
final URectangle rect = new URectangle(getTextWidth(stringBounder), getTextHeight(stringBounder), roundCorner,
|
final URectangle rect = new URectangle(getTextWidth(stringBounder), getTextHeight(stringBounder), roundCorner,
|
||||||
@ -104,7 +108,7 @@ public class ComponentRoseParticipant extends AbstractTextualComponent {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public double getPreferredWidth(StringBounder stringBounder) {
|
public double getPreferredWidth(StringBounder stringBounder) {
|
||||||
return getTextWidth(stringBounder) + deltaShadow + getDeltaCollection();
|
return getTextWidth(stringBounder) + deltaShadow + getDeltaCollection() + 2 * padding;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,6 +33,7 @@ package net.sourceforge.plantuml.skin.rose;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -60,8 +61,8 @@ public class ComponentRoseReference extends AbstractTextualComponent {
|
|||||||
|
|
||||||
public ComponentRoseReference(FontConfiguration font, SymbolContext symbolContext, FontConfiguration header,
|
public ComponentRoseReference(FontConfiguration font, SymbolContext symbolContext, FontConfiguration header,
|
||||||
Display stringsToDisplay, HorizontalAlignment position, ISkinSimple spriteContainer, HtmlColor background) {
|
Display stringsToDisplay, HorizontalAlignment position, ISkinSimple spriteContainer, HtmlColor background) {
|
||||||
super(stringsToDisplay.subList(1, stringsToDisplay.size()), font, HorizontalAlignment.LEFT, 4, 4, 4,
|
super(LineBreakStrategy.NONE, stringsToDisplay.subList(1, stringsToDisplay.size()), font, HorizontalAlignment.LEFT, 4, 4,
|
||||||
spriteContainer, 0, false, null, null);
|
4, spriteContainer, false, null, null);
|
||||||
this.position = position;
|
this.position = position;
|
||||||
this.symbolContext = symbolContext;
|
this.symbolContext = symbolContext;
|
||||||
this.background = background;
|
this.background = background;
|
||||||
|
@ -34,6 +34,7 @@ import java.awt.geom.Dimension2D;
|
|||||||
import java.awt.geom.Point2D;
|
import java.awt.geom.Point2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinSimple;
|
import net.sourceforge.plantuml.ISkinSimple;
|
||||||
|
import net.sourceforge.plantuml.LineBreakStrategy;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
import net.sourceforge.plantuml.graphic.FontConfiguration;
|
||||||
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
@ -59,7 +60,7 @@ public class ComponentRoseSelfArrow extends AbstractComponentRoseArrow {
|
|||||||
private final boolean niceArrow;
|
private final boolean niceArrow;
|
||||||
|
|
||||||
public ComponentRoseSelfArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay,
|
public ComponentRoseSelfArrow(HtmlColor foregroundColor, FontConfiguration font, Display stringsToDisplay,
|
||||||
ArrowConfiguration arrowConfiguration, ISkinSimple spriteContainer, double maxMessageSize, boolean niceArrow) {
|
ArrowConfiguration arrowConfiguration, ISkinSimple spriteContainer, LineBreakStrategy maxMessageSize, boolean niceArrow) {
|
||||||
super(foregroundColor, font, stringsToDisplay, arrowConfiguration, spriteContainer, HorizontalAlignment.LEFT,
|
super(foregroundColor, font, stringsToDisplay, arrowConfiguration, spriteContainer, HorizontalAlignment.LEFT,
|
||||||
maxMessageSize);
|
maxMessageSize);
|
||||||
this.niceArrow = niceArrow;
|
this.niceArrow = niceArrow;
|
||||||
|
@ -35,6 +35,7 @@ import net.sourceforge.plantuml.ColorParam;
|
|||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.LineParam;
|
import net.sourceforge.plantuml.LineParam;
|
||||||
|
import net.sourceforge.plantuml.PaddingParam;
|
||||||
import net.sourceforge.plantuml.SkinParamUtils;
|
import net.sourceforge.plantuml.SkinParamUtils;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
import net.sourceforge.plantuml.cucadiagram.Stereotype;
|
||||||
@ -100,25 +101,26 @@ public class Rose implements Skin {
|
|||||||
config, messageHorizontalAlignment, param, textHorizontalAlignment, param.maxMessageSize(),
|
config, messageHorizontalAlignment, param, textHorizontalAlignment, param.maxMessageSize(),
|
||||||
param.strictUmlStyle() == false);
|
param.strictUmlStyle() == false);
|
||||||
}
|
}
|
||||||
|
final double padding = param.getPadding(PaddingParam.PARTICIPANT);
|
||||||
if (type == ComponentType.PARTICIPANT_HEAD) {
|
if (type == ComponentType.PARTICIPANT_HEAD) {
|
||||||
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
||||||
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
||||||
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), false);
|
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), false, padding);
|
||||||
}
|
}
|
||||||
if (type == ComponentType.PARTICIPANT_TAIL) {
|
if (type == ComponentType.PARTICIPANT_TAIL) {
|
||||||
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
||||||
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
||||||
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), false);
|
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), false, padding);
|
||||||
}
|
}
|
||||||
if (type == ComponentType.COLLECTIONS_HEAD) {
|
if (type == ComponentType.COLLECTIONS_HEAD) {
|
||||||
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
||||||
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
||||||
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), true);
|
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), true, padding);
|
||||||
}
|
}
|
||||||
if (type == ComponentType.COLLECTIONS_TAIL) {
|
if (type == ComponentType.COLLECTIONS_TAIL) {
|
||||||
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
return new ComponentRoseParticipant(getSymbolContext(param, ColorParam.participantBorder), getUFont2(param,
|
||||||
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
FontParam.PARTICIPANT), stringsToDisplay, param, param.getRoundCorner("", null), newFontForStereotype,
|
||||||
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), true);
|
getFontColor(param, FontParam.SEQUENCE_STEREOTYPE), param.minClassWidth(), true, padding);
|
||||||
}
|
}
|
||||||
if (type == ComponentType.PARTICIPANT_LINE) {
|
if (type == ComponentType.PARTICIPANT_LINE) {
|
||||||
final HtmlColor borderColor = getHtmlColor(param, ColorParam.sequenceLifeLineBorder);
|
final HtmlColor borderColor = getHtmlColor(param, ColorParam.sequenceLifeLineBorder);
|
||||||
|
@ -249,7 +249,7 @@ public class Line implements Moveable, Hideable {
|
|||||||
final double marginLabel = startUid.equalsId(endUid) ? 6 : 1;
|
final double marginLabel = startUid.equalsId(endUid) ? 6 : 1;
|
||||||
final TextBlock label = TextBlockUtils.withMargin(
|
final TextBlock label = TextBlockUtils.withMargin(
|
||||||
link.getLabel().create(labelFont, skinParam.getDefaultTextAlignment(HorizontalAlignment.CENTER),
|
link.getLabel().create(labelFont, skinParam.getDefaultTextAlignment(HorizontalAlignment.CENTER),
|
||||||
skinParam), marginLabel, marginLabel);
|
skinParam, skinParam.maxMessageSize()), marginLabel, marginLabel);
|
||||||
if (getLinkArrow() == LinkArrow.NONE) {
|
if (getLinkArrow() == LinkArrow.NONE) {
|
||||||
labelOnly = label;
|
labelOnly = label;
|
||||||
} else {
|
} else {
|
||||||
|
@ -37,6 +37,7 @@ import net.sourceforge.plantuml.UmlDiagramType;
|
|||||||
import net.sourceforge.plantuml.cucadiagram.dot.DotData;
|
import net.sourceforge.plantuml.cucadiagram.dot.DotData;
|
||||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColor;
|
import net.sourceforge.plantuml.graphic.HtmlColor;
|
||||||
|
import net.sourceforge.plantuml.graphic.HtmlColorUtils;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
import net.sourceforge.plantuml.posimo.Moveable;
|
import net.sourceforge.plantuml.posimo.Moveable;
|
||||||
import net.sourceforge.plantuml.skin.rose.Rose;
|
import net.sourceforge.plantuml.skin.rose.Rose;
|
||||||
@ -66,8 +67,9 @@ public final class SvekResult extends AbstractTextBlock implements IEntityImage,
|
|||||||
cluster.drawU(ug, new UStroke(1.5), dotData.getUmlDiagramType(), dotData.getSkinParam());
|
cluster.drawU(ug, new UStroke(1.5), dotData.getUmlDiagramType(), dotData.getSkinParam());
|
||||||
}
|
}
|
||||||
|
|
||||||
final HtmlColor color = rose.getHtmlColor(dotData.getSkinParam(), getArrowColorParam(), null);
|
final HtmlColor color = HtmlColorUtils.noGradient(rose.getHtmlColor(dotData.getSkinParam(),
|
||||||
|
getArrowColorParam(), null));
|
||||||
|
|
||||||
for (Shape shape : dotStringFactory.getBibliotekon().allShapes()) {
|
for (Shape shape : dotStringFactory.getBibliotekon().allShapes()) {
|
||||||
final double minX = shape.getMinX();
|
final double minX = shape.getMinX();
|
||||||
final double minY = shape.getMinY();
|
final double minY = shape.getMinY();
|
||||||
|
@ -37,6 +37,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
import net.sourceforge.plantuml.ColorParam;
|
import net.sourceforge.plantuml.ColorParam;
|
||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
|
import net.sourceforge.plantuml.Direction;
|
||||||
import net.sourceforge.plantuml.FontParam;
|
import net.sourceforge.plantuml.FontParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.command.Position;
|
import net.sourceforge.plantuml.command.Position;
|
||||||
@ -122,6 +123,7 @@ public class EntityImageTips extends AbstractEntityImage {
|
|||||||
final Point2D positionOther = shapeOther.getPosition();
|
final Point2D positionOther = shapeOther.getPosition();
|
||||||
bibliotekon.getShape(getEntity());
|
bibliotekon.getShape(getEntity());
|
||||||
final Position position = getPosition();
|
final Position position = getPosition();
|
||||||
|
Direction direction = position.reverseDirection();
|
||||||
double height = 0;
|
double height = 0;
|
||||||
for (Map.Entry<String, Display> ent : getEntity().getTips().entrySet()) {
|
for (Map.Entry<String, Display> ent : getEntity().getTips().entrySet()) {
|
||||||
final Display display = ent.getValue();
|
final Display display = ent.getValue();
|
||||||
@ -133,14 +135,17 @@ public class EntityImageTips extends AbstractEntityImage {
|
|||||||
final Dimension2D dim = opale.calculateDimension(stringBounder);
|
final Dimension2D dim = opale.calculateDimension(stringBounder);
|
||||||
final Point2D pp1 = new Point2D.Double(0, dim.getHeight() / 2);
|
final Point2D pp1 = new Point2D.Double(0, dim.getHeight() / 2);
|
||||||
double x = positionOther.getX() - positionMe.getX();
|
double x = positionOther.getX() - positionMe.getX();
|
||||||
if (position == Position.RIGHT) {
|
if (direction == Direction.RIGHT && x < 0) {
|
||||||
|
direction = direction.getInv();
|
||||||
|
}
|
||||||
|
if (direction == Direction.LEFT) {
|
||||||
x += memberPosition.getMaxX();
|
x += memberPosition.getMaxX();
|
||||||
} else {
|
} else {
|
||||||
x += 4;
|
x += 4;
|
||||||
}
|
}
|
||||||
final double y = positionOther.getY() - positionMe.getY() - height + memberPosition.getCenterY();
|
final double y = positionOther.getY() - positionMe.getY() - height + memberPosition.getCenterY();
|
||||||
final Point2D pp2 = new Point2D.Double(x, y);
|
final Point2D pp2 = new Point2D.Double(x, y);
|
||||||
opale.setOpale(position.reverseDirection(), pp1, pp2);
|
opale.setOpale(direction, pp1, pp2);
|
||||||
opale.drawU(ug);
|
opale.drawU(ug);
|
||||||
ug = ug.apply(new UTranslate(0, dim.getHeight() + ySpacing));
|
ug = ug.apply(new UTranslate(0, dim.getHeight() + ySpacing));
|
||||||
height += dim.getHeight();
|
height += dim.getHeight();
|
||||||
|
@ -288,6 +288,62 @@ public class TikzGraphics {
|
|||||||
cmd.add(sb.toString());
|
cmd.add(sb.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void round(double r, double[] points) {
|
||||||
|
final StringBuilder sb = new StringBuilder("\\draw[");
|
||||||
|
if (color != null) {
|
||||||
|
sb.append("color=" + getColorName(color) + ",");
|
||||||
|
}
|
||||||
|
if (fillcolor != null) {
|
||||||
|
sb.append("fill=" + getColorName(fillcolor) + ",");
|
||||||
|
}
|
||||||
|
sb.append("line width=" + thickness + "pt]");
|
||||||
|
sb.append(" ");
|
||||||
|
int i = 0;
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" arc (180:270:" + format(r) + "pt) -- ");
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" -- ");
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" arc (270:360:" + format(r) + "pt) -- ");
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" -- ");
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" arc (0:90:" + format(r) + "pt) -- ");
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" -- ");
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" arc (90:180:" + format(r) + "pt) -- ");
|
||||||
|
sb.append(couple(points[i++], points[i++]));
|
||||||
|
sb.append(" -- ");
|
||||||
|
sb.append("cycle;");
|
||||||
|
cmd.add(sb.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void rectangleRound(double x, double y, double width, double height, double r) {
|
||||||
|
double[] points = new double[8 * 2];
|
||||||
|
points[0] = x;
|
||||||
|
points[1] = y + r;
|
||||||
|
points[2] = x + r;
|
||||||
|
points[3] = y;
|
||||||
|
|
||||||
|
points[4] = x + width - r;
|
||||||
|
points[5] = y;
|
||||||
|
points[6] = x + width;
|
||||||
|
points[7] = y + r;
|
||||||
|
|
||||||
|
points[8] = x + width;
|
||||||
|
points[9] = y + height - r;
|
||||||
|
points[10] = x + width - r;
|
||||||
|
points[11] = y + height;
|
||||||
|
|
||||||
|
points[12] = x + r;
|
||||||
|
points[13] = y + height;
|
||||||
|
points[14] = x;
|
||||||
|
points[15] = y + height - r;
|
||||||
|
|
||||||
|
round(r, points);
|
||||||
|
}
|
||||||
|
|
||||||
public void upath(double x, double y, UPath path) {
|
public void upath(double x, double y, UPath path) {
|
||||||
final StringBuilder sb = new StringBuilder("\\draw[color=" + getColorName(color) + ",line width=" + thickness
|
final StringBuilder sb = new StringBuilder("\\draw[color=" + getColorName(color) + ",line width=" + thickness
|
||||||
+ "pt] ");
|
+ "pt] ");
|
||||||
|
@ -189,11 +189,11 @@ public class Histogram implements TimeDrawing {
|
|||||||
final UTranslate deltaY = new UTranslate(0, getFullDeltaY());
|
final UTranslate deltaY = new UTranslate(0, getFullDeltaY());
|
||||||
final UTranslate pos = new UTranslate(pt).compose(deltaY);
|
final UTranslate pos = new UTranslate(pt).compose(deltaY);
|
||||||
ug = ug.apply(pos);
|
ug = ug.apply(pos);
|
||||||
final SymbolContext context = getContext();
|
// final SymbolContext context = getContext();
|
||||||
final double height = -pt.getY();
|
// final double height = -pt.getY();
|
||||||
if (height > 0) {
|
// if (height > 0) {
|
||||||
context.withForeColor(context.getBackColor()).apply(ug).draw(new URectangle(len, height));
|
// context.withForeColor(context.getBackColor()).apply(ug).draw(new URectangle(len, height));
|
||||||
}
|
// }
|
||||||
ug.draw(new ULine(len, 0));
|
ug.draw(new ULine(len, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ import net.sourceforge.plantuml.ugraphic.UDriver;
|
|||||||
import net.sourceforge.plantuml.ugraphic.UParam;
|
import net.sourceforge.plantuml.ugraphic.UParam;
|
||||||
import net.sourceforge.plantuml.ugraphic.URectangle;
|
import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||||
import net.sourceforge.plantuml.ugraphic.UShape;
|
import net.sourceforge.plantuml.ugraphic.UShape;
|
||||||
|
import net.sourceforge.plantuml.utils.MathUtils;
|
||||||
|
|
||||||
public class DriverRectangleTikz implements UDriver<TikzGraphics> {
|
public class DriverRectangleTikz implements UDriver<TikzGraphics> {
|
||||||
|
|
||||||
@ -43,11 +44,16 @@ public class DriverRectangleTikz implements UDriver<TikzGraphics> {
|
|||||||
|
|
||||||
final double width = rect.getWidth();
|
final double width = rect.getWidth();
|
||||||
final double height = rect.getHeight();
|
final double height = rect.getHeight();
|
||||||
|
final double r = MathUtils.min(rect.getRx(), rect.getRy(), width / 2, height / 2);
|
||||||
|
|
||||||
tikz.setFillColor(mapper.getMappedColor(param.getBackcolor()));
|
tikz.setFillColor(mapper.getMappedColor(param.getBackcolor()));
|
||||||
tikz.setStrokeColor(mapper.getMappedColor(param.getColor()));
|
tikz.setStrokeColor(mapper.getMappedColor(param.getColor()));
|
||||||
tikz.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDashTikz());
|
tikz.setStrokeWidth(param.getStroke().getThickness(), param.getStroke().getDashTikz());
|
||||||
tikz.rectangle(x, y, width, height);
|
if (r == 0) {
|
||||||
|
tikz.rectangle(x, y, width, height);
|
||||||
|
} else {
|
||||||
|
tikz.rectangleRound(x, y, width, height, r);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,22 @@ public class MathUtils {
|
|||||||
return max(max(a, b, c), max(d, e));
|
return max(max(a, b, c), max(d, e));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static double min(double a, double b) {
|
||||||
|
return Math.min(a, b);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double min(double a, double b, double c) {
|
||||||
|
return min(min(a, b), c);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double min(double a, double b, double c, double d) {
|
||||||
|
return min(min(a, b), min(c, d));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static double min(double a, double b, double c, double d, double e) {
|
||||||
|
return min(min(a, b, c), min(d, e));
|
||||||
|
}
|
||||||
|
|
||||||
public static double limitation(double v, double min, double max) {
|
public static double limitation(double v, double min, double max) {
|
||||||
if (min >= max) {
|
if (min >= max) {
|
||||||
// assert false : "min="+min+" max="+max+" v="+v;
|
// assert false : "min="+min+" max="+max+" v="+v;
|
||||||
|
@ -80,7 +80,7 @@ public class PSystemVersion extends AbstractPSystem {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return null;
|
return new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferedImage getCharlieImage() {
|
public static BufferedImage getCharlieImage() {
|
||||||
@ -92,7 +92,7 @@ public class PSystemVersion extends AbstractPSystem {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return null;
|
return new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BufferedImage getPlantumlSmallIcon() {
|
public static BufferedImage getPlantumlSmallIcon() {
|
||||||
@ -104,7 +104,7 @@ public class PSystemVersion extends AbstractPSystem {
|
|||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return null;
|
return new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BufferedImage transparentIcon;
|
private static BufferedImage transparentIcon;
|
||||||
@ -115,7 +115,7 @@ public class PSystemVersion extends AbstractPSystem {
|
|||||||
}
|
}
|
||||||
final BufferedImage ico = getPlantumlSmallIcon();
|
final BufferedImage ico = getPlantumlSmallIcon();
|
||||||
if (ico == null) {
|
if (ico == null) {
|
||||||
return null;
|
return new BufferedImage(10, 10, BufferedImage.TYPE_INT_ARGB);
|
||||||
}
|
}
|
||||||
transparentIcon = new BufferedImage(ico.getWidth(), ico.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE);
|
transparentIcon = new BufferedImage(ico.getWidth(), ico.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE);
|
||||||
for (int i = 0; i < ico.getWidth(); i++) {
|
for (int i = 0; i < ico.getWidth(); i++) {
|
||||||
|
@ -36,7 +36,7 @@ import java.util.Date;
|
|||||||
public class Version {
|
public class Version {
|
||||||
|
|
||||||
public static int version() {
|
public static int version() {
|
||||||
return 8056;
|
return 8057;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String versionString() {
|
public static String versionString() {
|
||||||
@ -68,7 +68,7 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static long compileTime() {
|
public static long compileTime() {
|
||||||
return 1487187608733L;
|
return 1488106743921L;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String compileTimeString() {
|
public static String compileTimeString() {
|
||||||
|
Loading…
Reference in New Issue
Block a user