mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-23 03:19:06 +00:00
version 1.2017.12
This commit is contained in:
parent
5c62d2c083
commit
dc9d5327b7
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>2017.12-SNAPSHOT</version>
|
<version>1.2017.13-SNAPSHOT</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>PlantUML</name>
|
<name>PlantUML</name>
|
||||||
|
@ -40,6 +40,7 @@ import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
|||||||
|
|
||||||
public enum AlignParam {
|
public enum AlignParam {
|
||||||
|
|
||||||
|
ARROW_MESSAGE_ALIGN(HorizontalAlignment.LEFT),
|
||||||
SEQUENCE_MESSAGE_ALIGN(HorizontalAlignment.LEFT),
|
SEQUENCE_MESSAGE_ALIGN(HorizontalAlignment.LEFT),
|
||||||
SEQUENCE_MESSAGETEXT_ALIGN(HorizontalAlignment.LEFT),
|
SEQUENCE_MESSAGETEXT_ALIGN(HorizontalAlignment.LEFT),
|
||||||
SEQUENCE_REFERENCE_ALIGN(HorizontalAlignment.CENTER);
|
SEQUENCE_REFERENCE_ALIGN(HorizontalAlignment.CENTER);
|
||||||
|
130
src/net/sourceforge/plantuml/BackSlash.java
Normal file
130
src/net/sourceforge/plantuml/BackSlash.java
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* If you like this project or if you find it useful, you can support us at:
|
||||||
|
*
|
||||||
|
* http://plantuml.com/patreon (only 1$ per month!)
|
||||||
|
* http://plantuml.com/paypal
|
||||||
|
*
|
||||||
|
* This file is part of PlantUML.
|
||||||
|
*
|
||||||
|
* PlantUML is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* PlantUML distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
* License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||||
|
* USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Original Author: Arnaud Roques
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package net.sourceforge.plantuml;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class BackSlash {
|
||||||
|
|
||||||
|
private static final char PRIVATE_BLOCK = '\uE000';
|
||||||
|
|
||||||
|
public static char hiddenNewLine() {
|
||||||
|
return PRIVATE_BLOCK + '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> splitHiddenNewLine(String s) {
|
||||||
|
return Arrays.asList(s.split("" + hiddenNewLine()));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String manageNewLine(String string) {
|
||||||
|
return string.replace(hiddenNewLine(), '\n');
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> getWithNewlines(CharSequence s) {
|
||||||
|
if (s == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final List<String> result = new ArrayList<String>();
|
||||||
|
final StringBuilder current = new StringBuilder();
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
final char c = s.charAt(i);
|
||||||
|
if (c == '\\' && i < s.length() - 1) {
|
||||||
|
final char c2 = s.charAt(i + 1);
|
||||||
|
i++;
|
||||||
|
if (c2 == 'n') {
|
||||||
|
result.add(current.toString());
|
||||||
|
current.setLength(0);
|
||||||
|
} else if (c2 == 't') {
|
||||||
|
current.append('\t');
|
||||||
|
} else if (c2 == '\\') {
|
||||||
|
current.append(c2);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
current.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
result.add(current.toString());
|
||||||
|
return Collections.unmodifiableList(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String translateBackSlashes(CharSequence s) {
|
||||||
|
if (s == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final StringBuilder result = new StringBuilder();
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
final char c = s.charAt(i);
|
||||||
|
if (c == '\\' && i < s.length() - 1 && isEnglishLetter(s.charAt(i + 1))) {
|
||||||
|
result.append('\\');
|
||||||
|
result.append(translateChar(s.charAt(i + 1)));
|
||||||
|
i++;
|
||||||
|
} else {
|
||||||
|
result.append(c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String untranslateBackSlashes(CharSequence s) {
|
||||||
|
if (s == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final StringBuilder result = new StringBuilder();
|
||||||
|
for (int i = 0; i < s.length(); i++) {
|
||||||
|
char c = s.charAt(i);
|
||||||
|
if (c > PRIVATE_BLOCK && c < '\uE07F') {
|
||||||
|
c = (char) (c - PRIVATE_BLOCK);
|
||||||
|
}
|
||||||
|
result.append(c);
|
||||||
|
}
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isEnglishLetter(char c) {
|
||||||
|
return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z');
|
||||||
|
}
|
||||||
|
|
||||||
|
private static char translateChar(char c) {
|
||||||
|
if (c > 128) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
return (char) (PRIVATE_BLOCK + c);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -126,6 +126,8 @@ public enum ColorParam {
|
|||||||
cloudBorder(HtmlColorUtils.BLACK, ColorType.LINE),
|
cloudBorder(HtmlColorUtils.BLACK, ColorType.LINE),
|
||||||
queueBackground(HtmlColorUtils.MY_YELLOW, true, ColorType.BACK),
|
queueBackground(HtmlColorUtils.MY_YELLOW, true, ColorType.BACK),
|
||||||
queueBorder(HtmlColorUtils.MY_RED, ColorType.LINE),
|
queueBorder(HtmlColorUtils.MY_RED, ColorType.LINE),
|
||||||
|
pipeBackground(HtmlColorUtils.MY_YELLOW, true, ColorType.BACK),
|
||||||
|
pipeBorder(HtmlColorUtils.MY_RED, ColorType.LINE),
|
||||||
databaseBackground(HtmlColorUtils.MY_YELLOW, true, ColorType.BACK),
|
databaseBackground(HtmlColorUtils.MY_YELLOW, true, ColorType.BACK),
|
||||||
databaseBorder(HtmlColorUtils.BLACK, ColorType.LINE),
|
databaseBorder(HtmlColorUtils.BLACK, ColorType.LINE),
|
||||||
folderBackground(HtmlColorUtils.MY_YELLOW, true, ColorType.BACK),
|
folderBackground(HtmlColorUtils.MY_YELLOW, true, ColorType.BACK),
|
||||||
|
@ -79,6 +79,7 @@ public enum FontParam {
|
|||||||
NODE(14, Font.PLAIN), //
|
NODE(14, Font.PLAIN), //
|
||||||
DATABASE(14, Font.PLAIN), //
|
DATABASE(14, Font.PLAIN), //
|
||||||
QUEUE(14, Font.PLAIN), //
|
QUEUE(14, Font.PLAIN), //
|
||||||
|
PIPE(14, Font.PLAIN), //
|
||||||
// SEQUENCE_ARROW(13, Font.PLAIN), //
|
// SEQUENCE_ARROW(13, Font.PLAIN), //
|
||||||
SEQUENCE_BOX(13, Font.BOLD), //
|
SEQUENCE_BOX(13, Font.BOLD), //
|
||||||
SEQUENCE_DIVIDER(13, Font.BOLD), //
|
SEQUENCE_DIVIDER(13, Font.BOLD), //
|
||||||
@ -112,6 +113,7 @@ public enum FontParam {
|
|||||||
FRAME_STEREOTYPE(14, Font.ITALIC), //
|
FRAME_STEREOTYPE(14, Font.ITALIC), //
|
||||||
DATABASE_STEREOTYPE(14, Font.ITALIC), //
|
DATABASE_STEREOTYPE(14, Font.ITALIC), //
|
||||||
QUEUE_STEREOTYPE(14, Font.ITALIC), //
|
QUEUE_STEREOTYPE(14, Font.ITALIC), //
|
||||||
|
PIPE_STEREOTYPE(14, Font.ITALIC), //
|
||||||
ACTOR_STEREOTYPE(14, Font.ITALIC), //
|
ACTOR_STEREOTYPE(14, Font.ITALIC), //
|
||||||
SEQUENCE_STEREOTYPE(14, Font.ITALIC), //
|
SEQUENCE_STEREOTYPE(14, Font.ITALIC), //
|
||||||
PARTITION(14, Font.PLAIN); //
|
PARTITION(14, Font.PLAIN); //
|
||||||
|
@ -178,18 +178,15 @@ public class SourceFileReader implements ISourceFileReader {
|
|||||||
if (dir == null) {
|
if (dir == null) {
|
||||||
Log.info(newName + " is not taken as a directory");
|
Log.info(newName + " is not taken as a directory");
|
||||||
suggested = SuggestedFile.fromOutputFile(new File(outputDirectory, newName),
|
suggested = SuggestedFile.fromOutputFile(new File(outputDirectory, newName),
|
||||||
fileFormatOption.getFileFormat(), cpt++);
|
fileFormatOption.getFileFormat(), 0);
|
||||||
} else {
|
} else {
|
||||||
Log.info("We are going to create files in directory " + dir);
|
Log.info("We are going to create files in directory " + dir);
|
||||||
// newName = fileFormatOption.getFileFormat().changeName(file.getName(), cpt++);
|
|
||||||
// suggested = new File(dir, newName);
|
|
||||||
suggested = SuggestedFile.fromOutputFile(new File(dir, file.getName()),
|
suggested = SuggestedFile.fromOutputFile(new File(dir, file.getName()),
|
||||||
fileFormatOption.getFileFormat(), cpt++);
|
fileFormatOption.getFileFormat(), 0);
|
||||||
}
|
}
|
||||||
Log.info("We are going to put data in " + suggested);
|
Log.info("We are going to put data in " + suggested);
|
||||||
}
|
}
|
||||||
if (suggested == null) {
|
if (suggested == null) {
|
||||||
// newName = fileFormatOption.getFileFormat().changeName(file.getName(), cpt++);
|
|
||||||
suggested = SuggestedFile.fromOutputFile(new File(outputDirectory, file.getName()),
|
suggested = SuggestedFile.fromOutputFile(new File(outputDirectory, file.getName()),
|
||||||
fileFormatOption.getFileFormat(), cpt++);
|
fileFormatOption.getFileFormat(), cpt++);
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,6 @@ package net.sourceforge.plantuml;
|
|||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@ -60,33 +59,6 @@ public class StringUtils {
|
|||||||
return file.getAbsolutePath();
|
return file.getAbsolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> getWithNewlines(CharSequence s) {
|
|
||||||
if (s == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
final List<String> result = new ArrayList<String>();
|
|
||||||
final StringBuilder current = new StringBuilder();
|
|
||||||
for (int i = 0; i < s.length(); i++) {
|
|
||||||
final char c = s.charAt(i);
|
|
||||||
if (c == '\\' && i < s.length() - 1) {
|
|
||||||
final char c2 = s.charAt(i + 1);
|
|
||||||
i++;
|
|
||||||
if (c2 == 'n') {
|
|
||||||
result.add(current.toString());
|
|
||||||
current.setLength(0);
|
|
||||||
} else if (c2 == 't') {
|
|
||||||
current.append('\t');
|
|
||||||
} else if (c2 == '\\') {
|
|
||||||
current.append(c2);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
current.append(c);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
result.add(current.toString());
|
|
||||||
return Collections.unmodifiableList(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
final static public List<String> getSplit(Pattern2 pattern, String line) {
|
final static public List<String> getSplit(Pattern2 pattern, String line) {
|
||||||
final Matcher2 m = pattern.matcher(line);
|
final Matcher2 m = pattern.matcher(line);
|
||||||
if (m.find() == false) {
|
if (m.find() == false) {
|
||||||
@ -300,10 +272,6 @@ public class StringUtils {
|
|||||||
return '\u0006';
|
return '\u0006';
|
||||||
}
|
}
|
||||||
|
|
||||||
public static char hiddenNewLine() {
|
|
||||||
return '\u0009';
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String hideComparatorCharacters(String s) {
|
public static String hideComparatorCharacters(String s) {
|
||||||
s = s.replace('<', hiddenLesserThan());
|
s = s.replace('<', hiddenLesserThan());
|
||||||
s = s.replace('>', hiddenBiggerThan());
|
s = s.replace('>', hiddenBiggerThan());
|
||||||
@ -518,13 +486,5 @@ public class StringUtils {
|
|||||||
return arg.subSequence(i, j + 1).toString();
|
return arg.subSequence(i, j + 1).toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> splitHiddenNewLine(String s) {
|
|
||||||
return Arrays.asList(s.split("" + hiddenNewLine()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String manageNewLine(String string) {
|
|
||||||
return string.replace(hiddenNewLine(), '\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
// http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html
|
// http://docs.oracle.com/javase/tutorial/i18n/format/dateFormat.html
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,11 @@ public class SuggestedFile {
|
|||||||
this.outputFile = outputFile;
|
this.outputFile = outputFile;
|
||||||
this.fileFormat = fileFormat;
|
this.fileFormat = fileFormat;
|
||||||
this.initialCpt = initialCpt;
|
this.initialCpt = initialCpt;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return outputFile.getAbsolutePath() + "[" + initialCpt + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
public static SuggestedFile fromOutputFile(File outputFile, FileFormat fileFormat) {
|
public static SuggestedFile fromOutputFile(File outputFile, FileFormat fileFormat) {
|
||||||
|
@ -58,7 +58,7 @@ public class Url implements EnsureVisible {
|
|||||||
if (tooltip == null) {
|
if (tooltip == null) {
|
||||||
this.tooltip = url;
|
this.tooltip = url;
|
||||||
} else {
|
} else {
|
||||||
this.tooltip = StringUtils.manageNewLine(tooltip);
|
this.tooltip = BackSlash.manageNewLine(tooltip);
|
||||||
}
|
}
|
||||||
if (label == null || label.length() == 0) {
|
if (label == null || label.length() == 0) {
|
||||||
this.label = url;
|
this.label = url;
|
||||||
|
@ -35,6 +35,8 @@
|
|||||||
*/
|
*/
|
||||||
package net.sourceforge.plantuml.activitydiagram3.ftile;
|
package net.sourceforge.plantuml.activitydiagram3.ftile;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
|
|
||||||
public abstract class AbstractConnection implements Connection {
|
public abstract class AbstractConnection implements Connection {
|
||||||
|
|
||||||
private final Ftile ftile1;
|
private final Ftile ftile1;
|
||||||
@ -58,4 +60,14 @@ public abstract class AbstractConnection implements Connection {
|
|||||||
return ftile2;
|
return ftile2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final public HorizontalAlignment arrowHorizontalAlignment() {
|
||||||
|
if (ftile1 != null) {
|
||||||
|
return ftile1.arrowHorizontalAlignment();
|
||||||
|
}
|
||||||
|
if (ftile2 != null) {
|
||||||
|
return ftile2.arrowHorizontalAlignment();
|
||||||
|
}
|
||||||
|
return HorizontalAlignment.LEFT;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,10 +39,12 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.AlignParam;
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.LineParam;
|
import net.sourceforge.plantuml.LineParam;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
||||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||||
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||||
@ -102,4 +104,7 @@ public abstract class AbstractFtile extends AbstractTextBlock implements Ftile {
|
|||||||
// return Collections.emptyList();
|
// return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HorizontalAlignment arrowHorizontalAlignment() {
|
||||||
|
return skinParam.getHorizontalAlignment(AlignParam.ARROW_MESSAGE_ALIGN, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -40,6 +40,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
||||||
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
import net.sourceforge.plantuml.graphic.TextBlock;
|
import net.sourceforge.plantuml.graphic.TextBlock;
|
||||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||||
@ -65,4 +66,6 @@ public interface Ftile extends Swimable, TextBlock {
|
|||||||
|
|
||||||
public List<WeldingPoint> getWeldingPoints();
|
public List<WeldingPoint> getWeldingPoints();
|
||||||
|
|
||||||
|
public HorizontalAlignment arrowHorizontalAlignment();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ import java.util.Set;
|
|||||||
import net.sourceforge.plantuml.ISkinParam;
|
import net.sourceforge.plantuml.ISkinParam;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
import net.sourceforge.plantuml.activitydiagram3.LinkRendering;
|
||||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||||
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||||
@ -157,4 +158,8 @@ public class FtileAssemblySimple extends AbstractTextBlock implements Ftile {
|
|||||||
return Arrays.asList(tile1, tile2);
|
return Arrays.asList(tile1, tile2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HorizontalAlignment arrowHorizontalAlignment() {
|
||||||
|
return tile1.arrowHorizontalAlignment();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.Direction;
|
import net.sourceforge.plantuml.Direction;
|
||||||
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.HtmlColorAndStyle;
|
import net.sourceforge.plantuml.graphic.HtmlColorAndStyle;
|
||||||
import net.sourceforge.plantuml.graphic.Rainbow;
|
import net.sourceforge.plantuml.graphic.Rainbow;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
@ -61,9 +62,10 @@ public class Snake implements UShape {
|
|||||||
private TextBlock textBlock;
|
private TextBlock textBlock;
|
||||||
private MergeStrategy mergeable = MergeStrategy.FULL;
|
private MergeStrategy mergeable = MergeStrategy.FULL;
|
||||||
private Direction emphasizeDirection;
|
private Direction emphasizeDirection;
|
||||||
|
private final HorizontalAlignment horizontalAlignment;
|
||||||
|
|
||||||
public Snake transformX(CompressionTransform compressionTransform) {
|
public Snake transformX(CompressionTransform compressionTransform) {
|
||||||
final Snake result = new Snake(color, endDecoration);
|
final Snake result = new Snake(horizontalAlignment, color, endDecoration);
|
||||||
result.textBlock = this.textBlock;
|
result.textBlock = this.textBlock;
|
||||||
result.mergeable = this.mergeable;
|
result.mergeable = this.mergeable;
|
||||||
result.emphasizeDirection = this.emphasizeDirection;
|
result.emphasizeDirection = this.emphasizeDirection;
|
||||||
@ -79,7 +81,7 @@ public class Snake implements UShape {
|
|||||||
this.endDecoration = null;
|
this.endDecoration = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Snake(Rainbow color, UPolygon endDecoration) {
|
public Snake(HorizontalAlignment horizontalAlignment, Rainbow color, UPolygon endDecoration) {
|
||||||
if (color == null) {
|
if (color == null) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
@ -88,10 +90,11 @@ public class Snake implements UShape {
|
|||||||
}
|
}
|
||||||
this.endDecoration = endDecoration;
|
this.endDecoration = endDecoration;
|
||||||
this.color = color;
|
this.color = color;
|
||||||
|
this.horizontalAlignment = horizontalAlignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Snake(Rainbow color) {
|
public Snake(HorizontalAlignment horizontalAlignment, Rainbow color) {
|
||||||
this(color, null);
|
this(horizontalAlignment, color, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLabel(TextBlock label) {
|
public void setLabel(TextBlock label) {
|
||||||
@ -99,7 +102,7 @@ public class Snake implements UShape {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Snake move(double dx, double dy) {
|
public Snake move(double dx, double dy) {
|
||||||
final Snake result = new Snake(color, endDecoration);
|
final Snake result = new Snake(horizontalAlignment, color, endDecoration);
|
||||||
for (Point2D pt : worm) {
|
for (Point2D pt : worm) {
|
||||||
result.addPoint(pt.getX() + dx, pt.getY() + dy);
|
result.addPoint(pt.getX() + dx, pt.getY() + dy);
|
||||||
}
|
}
|
||||||
@ -182,12 +185,20 @@ public class Snake implements UShape {
|
|||||||
final Point2D pt1 = worm.get(0);
|
final Point2D pt1 = worm.get(0);
|
||||||
final Point2D pt2 = worm.get(1);
|
final Point2D pt2 = worm.get(1);
|
||||||
final Dimension2D dim = textBlock.calculateDimension(stringBounder);
|
final Dimension2D dim = textBlock.calculateDimension(stringBounder);
|
||||||
|
double x = Math.max(pt1.getX(), pt2.getX());
|
||||||
|
if (horizontalAlignment == HorizontalAlignment.CENTER
|
||||||
|
&& (worm.getDirectionsCode().startsWith("DLD") || worm.getDirectionsCode().startsWith("DRD"))) {
|
||||||
|
final Point2D pt3 = worm.get(2);
|
||||||
|
x = (pt2.getX() + pt3.getX()) / 2 - dim.getWidth() / 2;
|
||||||
|
} else {
|
||||||
|
x += 4;
|
||||||
|
}
|
||||||
// if (worm.getDirectionsCode().startsWith("LD")) {
|
// if (worm.getDirectionsCode().startsWith("LD")) {
|
||||||
// final double y = pt1.getY() - dim.getHeight();
|
// final double y = pt1.getY() - dim.getHeight();
|
||||||
// return new Point2D.Double(Math.max(pt1.getX(), pt2.getX()) - dim.getWidth(), y);
|
// return new Point2D.Double(Math.max(pt1.getX(), pt2.getX()) - dim.getWidth(), y);
|
||||||
// }
|
// }
|
||||||
final double y = (pt1.getY() + pt2.getY()) / 2 - dim.getHeight() / 2;
|
final double y = (pt1.getY() + pt2.getY()) / 2 - dim.getHeight() / 2;
|
||||||
return new Point2D.Double(Math.max(pt1.getX(), pt2.getX()) + 4, y);
|
return new Point2D.Double(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Line2D> getHorizontalLines() {
|
public List<Line2D> getHorizontalLines() {
|
||||||
@ -229,7 +240,7 @@ public class Snake implements UShape {
|
|||||||
}
|
}
|
||||||
if (same(this.getLast(), other.getFirst())) {
|
if (same(this.getLast(), other.getFirst())) {
|
||||||
final UPolygon oneOf = other.endDecoration == null ? endDecoration : other.endDecoration;
|
final UPolygon oneOf = other.endDecoration == null ? endDecoration : other.endDecoration;
|
||||||
final Snake result = new Snake(color, oneOf);
|
final Snake result = new Snake(horizontalAlignment, color, oneOf);
|
||||||
// result.textBlock = oneOf(this.textBlock, other.textBlock, stringBounder);
|
// result.textBlock = oneOf(this.textBlock, other.textBlock, stringBounder);
|
||||||
result.emphasizeDirection = emphasizeDirection == null ? other.emphasizeDirection : emphasizeDirection;
|
result.emphasizeDirection = emphasizeDirection == null ? other.emphasizeDirection : emphasizeDirection;
|
||||||
result.worm.addAll(this.worm.merge(other.worm, strategy));
|
result.worm.addAll(this.worm.merge(other.worm, strategy));
|
||||||
|
@ -75,7 +75,7 @@ public class ConnectionVerticalDown extends AbstractConnection implements Connec
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Snake getSimpleSnake() {
|
private Snake getSimpleSnake() {
|
||||||
final Snake snake = new Snake(color, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToDown());
|
||||||
snake.setLabel(textBlock);
|
snake.setLabel(textBlock);
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
@ -83,7 +83,7 @@ public class ConnectionVerticalDown extends AbstractConnection implements Connec
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||||
final Snake snake = new Snake(color, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToDown());
|
||||||
snake.setLabel(textBlock);
|
snake.setLabel(textBlock);
|
||||||
final Point2D mp1a = translate1.getTranslated(p1);
|
final Point2D mp1a = translate1.getTranslated(p1);
|
||||||
final Point2D mp2b = translate2.getTranslated(p2);
|
final Point2D mp2b = translate2.getTranslated(p2);
|
||||||
|
@ -110,7 +110,7 @@ public class FtileFactoryDelegatorRepeat extends FtileFactoryDelegator {
|
|||||||
final UTranslate tr2 = genealogy.getTranslate(diamondBreak, ug.getStringBounder());
|
final UTranslate tr2 = genealogy.getTranslate(diamondBreak, ug.getStringBounder());
|
||||||
final Dimension2D dimDiamond = diamondBreak.calculateDimension(ug.getStringBounder());
|
final Dimension2D dimDiamond = diamondBreak.calculateDimension(ug.getStringBounder());
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToRight());
|
final Snake snake = new Snake(getFtile1().arrowHorizontalAlignment(), arrowColor, Arrows.asToRight());
|
||||||
snake.addPoint(tr1.getDx(), tr1.getDy());
|
snake.addPoint(tr1.getDx(), tr1.getDy());
|
||||||
snake.addPoint(0, tr1.getDy());
|
snake.addPoint(0, tr1.getDy());
|
||||||
snake.addPoint(0, tr2.getDy() + dimDiamond.getHeight() / 2);
|
snake.addPoint(0, tr2.getDy() + dimDiamond.getHeight() / 2);
|
||||||
|
@ -225,7 +225,7 @@ class FtileIfAndStop extends AbstractFtile {
|
|||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToRight());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToRight());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
|
@ -144,7 +144,7 @@ public class FtileIfDown extends AbstractFtile {
|
|||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
// p2 = new Point2D.Double(p2.getX(), p1.getY());
|
// p2 = new Point2D.Double(p2.getX(), p1.getY());
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToRight());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToRight());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
@ -187,7 +187,7 @@ public class FtileIfDown extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.addPoint(getP1(stringBounder));
|
snake.addPoint(getP1(stringBounder));
|
||||||
snake.addPoint(getP2(stringBounder));
|
snake.addPoint(getP2(stringBounder));
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ public class FtileIfDown extends AbstractFtile {
|
|||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
final Point2D mp1a = translate1.getTranslated(p1);
|
final Point2D mp1a = translate1.getTranslated(p1);
|
||||||
final Point2D mp2b = translate2.getTranslated(p2);
|
final Point2D mp2b = translate2.getTranslated(p2);
|
||||||
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
||||||
@ -235,7 +235,7 @@ public class FtileIfDown extends AbstractFtile {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.addPoint(getP1(stringBounder));
|
snake.addPoint(getP1(stringBounder));
|
||||||
snake.addPoint(getP2(stringBounder));
|
snake.addPoint(getP2(stringBounder));
|
||||||
|
|
||||||
@ -251,7 +251,7 @@ public class FtileIfDown extends AbstractFtile {
|
|||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
final Point2D mp1a = translate1.getTranslated(p1);
|
final Point2D mp1a = translate1.getTranslated(p1);
|
||||||
final Point2D mp2b = translate2.getTranslated(p2);
|
final Point2D mp2b = translate2.getTranslated(p2);
|
||||||
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
||||||
@ -290,7 +290,7 @@ public class FtileIfDown extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(endInlinkColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), endInlinkColor, Arrows.asToLeft());
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToRight());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToRight());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
@ -266,7 +266,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final UTranslate tr = getTranslateDiamond1(getFtile2(), ug.getStringBounder());
|
final UTranslate tr = getTranslateDiamond1(getFtile2(), ug.getStringBounder());
|
||||||
final Point2D p2 = tr.getTranslated(getFtile2().calculateDimension(ug.getStringBounder()).getPointIn());
|
final Point2D p2 = tr.getTranslated(getFtile2().calculateDimension(ug.getStringBounder()).getPointIn());
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
final Point2D p1 = calculateDimensionInternal(ug.getStringBounder()).getPointIn();
|
final Point2D p1 = calculateDimensionInternal(ug.getStringBounder()).getPointIn();
|
||||||
|
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
@ -290,7 +290,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
final Point2D p1 = getP1(ug.getStringBounder());
|
final Point2D p1 = getP1(ug.getStringBounder());
|
||||||
final UTranslate tr2 = getTranslate2(ug.getStringBounder());
|
final UTranslate tr2 = getTranslate2(ug.getStringBounder());
|
||||||
final Point2D p2 = tr2.getTranslated(getFtile2().calculateDimension(ug.getStringBounder()).getPointIn());
|
final Point2D p2 = tr2.getTranslated(getFtile2().calculateDimension(ug.getStringBounder()).getPointIn());
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2.getX(), p1.getY());
|
snake.addPoint(p2.getX(), p1.getY());
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
@ -326,7 +326,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
final double totalHeight = calculateDimensionInternal(stringBounder).getHeight();
|
final double totalHeight = calculateDimensionInternal(stringBounder).getHeight();
|
||||||
final Point2D p2 = new Point2D.Double(p1.getX(), totalHeight);
|
final Point2D p2 = new Point2D.Double(p1.getX(), totalHeight);
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
@ -348,7 +348,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
@ -368,7 +368,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
final Point2D p1 = getP1(ug.getStringBounder());
|
final Point2D p1 = getP1(ug.getStringBounder());
|
||||||
final Point2D p2 = getP2(ug.getStringBounder());
|
final Point2D p2 = getP2(ug.getStringBounder());
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToDown());
|
||||||
|
|
||||||
final Point2D mp1a = translate1.getTranslated(p1);
|
final Point2D mp1a = translate1.getTranslated(p1);
|
||||||
final Point2D mp2b = translate2.getTranslated(p2);
|
final Point2D mp2b = translate2.getTranslated(p2);
|
||||||
@ -400,7 +400,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
}
|
}
|
||||||
final Point2D p2 = new Point2D.Double(p1.getX(), totalHeight);
|
final Point2D p2 = new Point2D.Double(p1.getX(), totalHeight);
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
@ -462,7 +462,7 @@ class FtileIfLongHorizontal extends AbstractFtile {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Snake s = new Snake(arrowColor);
|
final Snake s = new Snake(arrowHorizontalAlignment(), arrowColor);
|
||||||
s.goUnmergeable(MergeStrategy.NONE);
|
s.goUnmergeable(MergeStrategy.NONE);
|
||||||
final double height = totalDim.getHeight();
|
final double height = totalDim.getHeight();
|
||||||
s.addPoint(minX, height);
|
s.addPoint(minX, height);
|
||||||
|
@ -220,7 +220,7 @@ class FtileIfLongVertical extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final UTranslate tr = getTranslateDiamond(getFtile2(), ug.getStringBounder());
|
final UTranslate tr = getTranslateDiamond(getFtile2(), ug.getStringBounder());
|
||||||
final Point2D p2 = tr.getTranslated(getFtile2().calculateDimension(ug.getStringBounder()).getPointIn());
|
final Point2D p2 = tr.getTranslated(getFtile2().calculateDimension(ug.getStringBounder()).getPointIn());
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
final Point2D p1 = calculateDimensionInternal(ug.getStringBounder()).getPointIn();
|
final Point2D p1 = calculateDimensionInternal(ug.getStringBounder()).getPointIn();
|
||||||
|
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
@ -246,7 +246,7 @@ class FtileIfLongVertical extends AbstractFtile {
|
|||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2.getX(), p1.getY());
|
snake.addPoint(p2.getX(), p1.getY());
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
@ -281,7 +281,7 @@ class FtileIfLongVertical extends AbstractFtile {
|
|||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
|
|
||||||
final Snake snake = new Snake(color, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
@ -317,7 +317,7 @@ class FtileIfLongVertical extends AbstractFtile {
|
|||||||
final Point2D p2 = getTranslate2(stringBounder).getTranslated(
|
final Point2D p2 = getTranslate2(stringBounder).getTranslated(
|
||||||
getFtile2().calculateDimension(stringBounder).getPointIn());
|
getFtile2().calculateDimension(stringBounder).getPointIn());
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p1.getX(), p2.getY() - 15);
|
snake.addPoint(p1.getX(), p2.getY() - 15);
|
||||||
snake.addPoint(p2.getX(), p2.getY() - 15);
|
snake.addPoint(p2.getX(), p2.getY() - 15);
|
||||||
@ -346,7 +346,7 @@ class FtileIfLongVertical extends AbstractFtile {
|
|||||||
final Point2D p2 = getTranslateLastDiamond(stringBounder).getTranslated(
|
final Point2D p2 = getTranslateLastDiamond(stringBounder).getTranslated(
|
||||||
getFtile2().calculateDimension(stringBounder).getPointIn());
|
getFtile2().calculateDimension(stringBounder).getPointIn());
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p1.getX(), p2.getY() - 15);
|
snake.addPoint(p1.getX(), p2.getY() - 15);
|
||||||
snake.addPoint(p2.getX(), p2.getY() - 15);
|
snake.addPoint(p2.getX(), p2.getY() - 15);
|
||||||
@ -380,7 +380,7 @@ class FtileIfLongVertical extends AbstractFtile {
|
|||||||
|
|
||||||
final Dimension2D dimTotal = calculateDimensionInternal(stringBounder);
|
final Dimension2D dimTotal = calculateDimensionInternal(stringBounder);
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToLeft());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p1.getX(), p1.getY() + 15);
|
snake.addPoint(p1.getX(), p1.getY() + 15);
|
||||||
snake.addPoint(dimTotal.getWidth(), p1.getY() + 15);
|
snake.addPoint(dimTotal.getWidth(), p1.getY() + 15);
|
||||||
@ -411,7 +411,7 @@ class FtileIfLongVertical extends AbstractFtile {
|
|||||||
|
|
||||||
final Point2D p2 = new Point2D.Double(dimTotal.getWidth(), p1.getY() + 15);
|
final Point2D p2 = new Point2D.Double(dimTotal.getWidth(), p1.getY() + 15);
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToRight());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToRight());
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p1.getX(), p2.getY());
|
snake.addPoint(p1.getX(), p2.getY());
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
|
@ -198,7 +198,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.setLabel(tbin);
|
snake.setLabel(tbin);
|
||||||
snake.addPoint(getP1(stringBounder));
|
snake.addPoint(getP1(stringBounder));
|
||||||
snake.addPoint(getP2(stringBounder));
|
snake.addPoint(getP2(stringBounder));
|
||||||
@ -233,7 +233,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.setLabel(tbout);
|
snake.setLabel(tbout);
|
||||||
snake.addPoint(getP1(stringBounder));
|
snake.addPoint(getP1(stringBounder));
|
||||||
snake.addPoint(getP2(stringBounder));
|
snake.addPoint(getP2(stringBounder));
|
||||||
@ -246,7 +246,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
if (getFtile1().calculateDimension(stringBounder).hasPointOut() == false) {
|
if (getFtile1().calculateDimension(stringBounder).hasPointOut() == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Snake snake = new Snake(arrowColor);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor);
|
||||||
snake.setLabel(tbout);
|
snake.setLabel(tbout);
|
||||||
final Point2D mp1a = translate1.getTranslated(getP1(stringBounder));
|
final Point2D mp1a = translate1.getTranslated(getP1(stringBounder));
|
||||||
final Point2D mp2b = translate2.getTranslated(getP2(stringBounder));
|
final Point2D mp2b = translate2.getTranslated(getP2(stringBounder));
|
||||||
@ -257,7 +257,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
// snake.addPoint(mp2b);
|
// snake.addPoint(mp2b);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
|
|
||||||
final Snake small = new Snake(arrowColor, Arrows.asToDown());
|
final Snake small = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
small.addPoint(mp2b.getX(), middle);
|
small.addPoint(mp2b.getX(), middle);
|
||||||
small.addPoint(mp2b);
|
small.addPoint(mp2b);
|
||||||
ug.draw(small);
|
ug.draw(small);
|
||||||
@ -288,7 +288,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
|
|
||||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToLeft());
|
||||||
snake.emphasizeDirection(Direction.UP);
|
snake.emphasizeDirection(Direction.UP);
|
||||||
final Dimension2D dimRepeat = repeat.calculateDimension(stringBounder);
|
final Dimension2D dimRepeat = repeat.calculateDimension(stringBounder);
|
||||||
|
|
||||||
@ -330,7 +330,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, null);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, null);
|
||||||
snake.setLabel(tbback);
|
snake.setLabel(tbback);
|
||||||
final Dimension2D dimRepeat = repeat.calculateDimension(stringBounder);
|
final Dimension2D dimRepeat = repeat.calculateDimension(stringBounder);
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
@ -369,7 +369,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToUp());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToUp());
|
||||||
snake.setLabel(tbback);
|
snake.setLabel(tbback);
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
@ -408,7 +408,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToLeft());
|
||||||
snake.emphasizeDirection(Direction.UP);
|
snake.emphasizeDirection(Direction.UP);
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
@ -448,7 +448,7 @@ class FtileRepeat extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToLeft());
|
||||||
snake.setLabel(tbback);
|
snake.setLabel(tbback);
|
||||||
snake.emphasizeDirection(Direction.UP);
|
snake.emphasizeDirection(Direction.UP);
|
||||||
final Dimension2D dimTotal = calculateDimensionInternal(stringBounder);
|
final Dimension2D dimTotal = calculateDimensionInternal(stringBounder);
|
||||||
|
@ -174,7 +174,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
snake.addPoint(getP1(stringBounder));
|
snake.addPoint(getP1(stringBounder));
|
||||||
snake.addPoint(getP2(stringBounder));
|
snake.addPoint(getP2(stringBounder));
|
||||||
|
|
||||||
@ -185,7 +185,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
final Point2D mp1a = translate1.getTranslated(p1);
|
final Point2D mp1a = translate1.getTranslated(p1);
|
||||||
final Point2D mp2b = translate2.getTranslated(p2);
|
final Point2D mp2b = translate2.getTranslated(p2);
|
||||||
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
||||||
@ -228,7 +228,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(endInlinkColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), endInlinkColor, Arrows.asToLeft());
|
||||||
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
if (p1 == null) {
|
if (p1 == null) {
|
||||||
@ -264,7 +264,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
|
|
||||||
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
public void drawTranslate(UGraphic ug, UTranslate translate1, UTranslate translate2) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
final Snake snake = new Snake(endInlinkColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), endInlinkColor, Arrows.asToLeft());
|
||||||
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
||||||
final Point2D ap1 = getP1(stringBounder);
|
final Point2D ap1 = getP1(stringBounder);
|
||||||
final Point2D ap2 = getP2(stringBounder);
|
final Point2D ap2 = getP2(stringBounder);
|
||||||
@ -323,7 +323,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(endInlinkColor, Arrows.asToLeft());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), endInlinkColor, Arrows.asToLeft());
|
||||||
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
final Dimension2D dimTotal = calculateDimension(stringBounder);
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
final Point2D p2 = getP2(stringBounder);
|
final Point2D p2 = getP2(stringBounder);
|
||||||
@ -373,7 +373,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(afterEndwhileColor);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), afterEndwhileColor);
|
||||||
|
|
||||||
final FtileGeometry dimDiamond1 = diamond1.calculateDimension(stringBounder);
|
final FtileGeometry dimDiamond1 = diamond1.calculateDimension(stringBounder);
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
@ -395,7 +395,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
// ug = ug.apply(new UChangeColor(afterEndwhileColor)).apply(new UChangeBackColor(afterEndwhileColor));
|
// ug = ug.apply(new UChangeColor(afterEndwhileColor)).apply(new UChangeBackColor(afterEndwhileColor));
|
||||||
// ug.apply(new UTranslate(Diamond.diamondHalfSize, (y1 + y2) / 2)).draw(Arrows.asToDown());
|
// ug.apply(new UTranslate(Diamond.diamondHalfSize, (y1 + y2) / 2)).draw(Arrows.asToDown());
|
||||||
|
|
||||||
final Snake snake2 = new Snake(afterEndwhileColor);
|
final Snake snake2 = new Snake(arrowHorizontalAlignment(), afterEndwhileColor);
|
||||||
snake2.addPoint(Diamond.diamondHalfSize, y2);
|
snake2.addPoint(Diamond.diamondHalfSize, y2);
|
||||||
snake2.addPoint(x2, y2);
|
snake2.addPoint(x2, y2);
|
||||||
// snake2.goUnmergeable(MergeStrategy.LIMITED);
|
// snake2.goUnmergeable(MergeStrategy.LIMITED);
|
||||||
@ -424,7 +424,7 @@ class FtileWhile extends AbstractFtile {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final StringBounder stringBounder = ug.getStringBounder();
|
final StringBounder stringBounder = ug.getStringBounder();
|
||||||
|
|
||||||
final Snake snake = new Snake(afterEndwhileColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), afterEndwhileColor, Arrows.asToDown());
|
||||||
|
|
||||||
final FtileGeometry dimDiamond1 = diamond1.calculateDimension(stringBounder);
|
final FtileGeometry dimDiamond1 = diamond1.calculateDimension(stringBounder);
|
||||||
final Point2D p1 = getP1(stringBounder);
|
final Point2D p1 = getP1(stringBounder);
|
||||||
|
@ -128,7 +128,7 @@ public class ParallelBuilderFork extends ParallelFtilesBuilder {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
ug = ug.apply(new UTranslate(x, 0));
|
ug = ug.apply(new UTranslate(x, 0));
|
||||||
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
@ -143,7 +143,7 @@ public class ParallelBuilderFork extends ParallelFtilesBuilder {
|
|||||||
final Point2D p1 = new Point2D.Double(geo.getLeft(), 0);
|
final Point2D p1 = new Point2D.Double(geo.getLeft(), 0);
|
||||||
final Point2D p2 = new Point2D.Double(geo.getLeft(), geo.getInY());
|
final Point2D p2 = new Point2D.Double(geo.getLeft(), geo.getInY());
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
@ -182,7 +182,7 @@ public class ParallelBuilderFork extends ParallelFtilesBuilder {
|
|||||||
if (geo.hasPointOut() == false) {
|
if (geo.hasPointOut() == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
@ -202,7 +202,7 @@ public class ParallelBuilderFork extends ParallelFtilesBuilder {
|
|||||||
final Point2D p1 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), geo.getOutY()));
|
final Point2D p1 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), geo.getOutY()));
|
||||||
final Point2D p2 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), height));
|
final Point2D p2 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), height));
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ public class ParallelBuilderMerge extends ParallelFtilesBuilder {
|
|||||||
} else if (counter == 1) {
|
} else if (counter == 1) {
|
||||||
endDecoration = Arrows.asToLeft();
|
endDecoration = Arrows.asToLeft();
|
||||||
}
|
}
|
||||||
final Snake snake = new Snake(arrowColor, endDecoration);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, endDecoration);
|
||||||
snake.addPoint(x1, y1);
|
snake.addPoint(x1, y1);
|
||||||
snake.addPoint(x1, y2);
|
snake.addPoint(x1, y2);
|
||||||
snake.addPoint(x2, y2);
|
snake.addPoint(x2, y2);
|
||||||
@ -186,7 +186,7 @@ public class ParallelBuilderMerge extends ParallelFtilesBuilder {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
ug = ug.apply(new UTranslate(x, 0));
|
ug = ug.apply(new UTranslate(x, 0));
|
||||||
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
@ -201,7 +201,7 @@ public class ParallelBuilderMerge extends ParallelFtilesBuilder {
|
|||||||
final Point2D p1 = new Point2D.Double(geo.getLeft(), 0);
|
final Point2D p1 = new Point2D.Double(geo.getLeft(), 0);
|
||||||
final Point2D p2 = new Point2D.Double(geo.getLeft(), geo.getInY());
|
final Point2D p2 = new Point2D.Double(geo.getLeft(), geo.getInY());
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
|
@ -163,7 +163,7 @@ public class ParallelBuilderSplit extends ParallelFtilesBuilder {
|
|||||||
maxX = totalWidth / 2;
|
maxX = totalWidth / 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Snake s = new Snake(arrowColor);
|
final Snake s = new Snake(arrowHorizontalAlignment(), arrowColor);
|
||||||
s.goUnmergeable(MergeStrategy.NONE);
|
s.goUnmergeable(MergeStrategy.NONE);
|
||||||
s.addPoint(minX, y);
|
s.addPoint(minX, y);
|
||||||
s.addPoint(maxX, y);
|
s.addPoint(maxX, y);
|
||||||
@ -209,7 +209,7 @@ public class ParallelBuilderSplit extends ParallelFtilesBuilder {
|
|||||||
}
|
}
|
||||||
final Dimension2D dimInner = inner.calculateDimension(stringBounder);
|
final Dimension2D dimInner = inner.calculateDimension(stringBounder);
|
||||||
|
|
||||||
final Snake s = new Snake(arrowColor);
|
final Snake s = new Snake(arrowHorizontalAlignment(), arrowColor);
|
||||||
// final Snake s = new Snake(HtmlColorUtils.GREEN);
|
// final Snake s = new Snake(HtmlColorUtils.GREEN);
|
||||||
s.goUnmergeable(MergeStrategy.LIMITED);
|
s.goUnmergeable(MergeStrategy.LIMITED);
|
||||||
s.addPoint(minX, y);
|
s.addPoint(minX, y);
|
||||||
@ -235,7 +235,7 @@ public class ParallelBuilderSplit extends ParallelFtilesBuilder {
|
|||||||
ug = ug.apply(new UTranslate(x, 0));
|
ug = ug.apply(new UTranslate(x, 0));
|
||||||
final FtileGeometry geo = getFtile2().calculateDimension(ug.getStringBounder());
|
final FtileGeometry geo = getFtile2().calculateDimension(ug.getStringBounder());
|
||||||
final double left = geo.getLeft();
|
final double left = geo.getLeft();
|
||||||
final Snake s = new Snake(arrowColor, Arrows.asToDown());
|
final Snake s = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
s.setLabel(text);
|
s.setLabel(text);
|
||||||
s.addPoint(left, 0);
|
s.addPoint(left, 0);
|
||||||
s.addPoint(left, geo.getInY());
|
s.addPoint(left, geo.getInY());
|
||||||
@ -265,7 +265,7 @@ public class ParallelBuilderSplit extends ParallelFtilesBuilder {
|
|||||||
assert false;
|
assert false;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Snake s = new Snake(arrowColor, Arrows.asToDown());
|
final Snake s = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
s.setLabel(text);
|
s.setLabel(text);
|
||||||
s.goUnmergeable(MergeStrategy.NONE);
|
s.goUnmergeable(MergeStrategy.NONE);
|
||||||
s.addPoint(geo.getLeft(), geo.getOutY());
|
s.addPoint(geo.getLeft(), geo.getOutY());
|
||||||
|
@ -154,7 +154,7 @@ public class ParallelBuilderSplit2 extends ParallelFtilesBuilder {
|
|||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
ug = ug.apply(new UTranslate(x, 0));
|
ug = ug.apply(new UTranslate(x, 0));
|
||||||
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
final FtileGeometry geo = getFtile2().calculateDimension(getStringBounder());
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ public class ParallelBuilderSplit2 extends ParallelFtilesBuilder {
|
|||||||
final Point2D p1 = new Point2D.Double(geo.getLeft(), 0);
|
final Point2D p1 = new Point2D.Double(geo.getLeft(), 0);
|
||||||
final Point2D p2 = new Point2D.Double(geo.getLeft(), geo.getInY());
|
final Point2D p2 = new Point2D.Double(geo.getLeft(), geo.getInY());
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
@ -208,7 +208,7 @@ public class ParallelBuilderSplit2 extends ParallelFtilesBuilder {
|
|||||||
if (geo.hasPointOut() == false) {
|
if (geo.hasPointOut() == false) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
@ -228,7 +228,7 @@ public class ParallelBuilderSplit2 extends ParallelFtilesBuilder {
|
|||||||
final Point2D p1 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), geo.getOutY()));
|
final Point2D p1 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), geo.getOutY()));
|
||||||
final Point2D p2 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), height));
|
final Point2D p2 = translate0.getTranslated(new Point2D.Double(geo.getLeft(), height));
|
||||||
|
|
||||||
final Snake snake = new Snake(arrowColor, Arrows.asToDown());
|
final Snake snake = new Snake(arrowHorizontalAlignment(), arrowColor, Arrows.asToDown());
|
||||||
if (Display.isNull(label) == false) {
|
if (Display.isNull(label) == false) {
|
||||||
snake.setLabel(getTextBlock(label));
|
snake.setLabel(getTextBlock(label));
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
final double x2 = p2.getX();
|
final double x2 = p2.getX();
|
||||||
final double y2 = p2.getY();
|
final double y2 = p2.getY();
|
||||||
|
|
||||||
final Snake snake = new Snake(color, usingArrow);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, usingArrow);
|
||||||
snake.addPoint(x1, y1);
|
snake.addPoint(x1, y1);
|
||||||
snake.addPoint(x2, y1);
|
snake.addPoint(x2, y1);
|
||||||
snake.addPoint(x2, y2);
|
snake.addPoint(x2, y2);
|
||||||
@ -158,14 +158,14 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
if (originalDirection != newDirection) {
|
if (originalDirection != newDirection) {
|
||||||
final double delta = (originalDirection == Direction.RIGHT ? -1 : 1) * Diamond.diamondHalfSize;
|
final double delta = (originalDirection == Direction.RIGHT ? -1 : 1) * Diamond.diamondHalfSize;
|
||||||
final Dimension2D dimDiamond1 = diamond1.calculateDimension(stringBounder);
|
final Dimension2D dimDiamond1 = diamond1.calculateDimension(stringBounder);
|
||||||
final Snake small = new Snake(color);
|
final Snake small = new Snake(arrowHorizontalAlignment(), color);
|
||||||
small.addPoint(p1);
|
small.addPoint(p1);
|
||||||
small.addPoint(p1.getX() + delta, p1.getY());
|
small.addPoint(p1.getX() + delta, p1.getY());
|
||||||
small.addPoint(p1.getX() + delta, p1.getY() + dimDiamond1.getHeight() * .75);
|
small.addPoint(p1.getX() + delta, p1.getY() + dimDiamond1.getHeight() * .75);
|
||||||
ug.draw(small);
|
ug.draw(small);
|
||||||
p1 = small.getLast();
|
p1 = small.getLast();
|
||||||
}
|
}
|
||||||
final Snake snake = new Snake(color, usingArrow);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), color, usingArrow);
|
||||||
snake.addPoint(p1);
|
snake.addPoint(p1);
|
||||||
snake.addPoint(p2.getX(), p1.getY());
|
snake.addPoint(p2.getX(), p1.getY());
|
||||||
snake.addPoint(p2);
|
snake.addPoint(p2);
|
||||||
@ -202,7 +202,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
final double y2 = p2.getY();
|
final double y2 = p2.getY();
|
||||||
|
|
||||||
final UPolygon arrow = x2 > x1 ? Arrows.asToRight() : Arrows.asToLeft();
|
final UPolygon arrow = x2 > x1 ? Arrows.asToRight() : Arrows.asToLeft();
|
||||||
final Snake snake = new Snake(myArrowColor, arrow);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), myArrowColor, arrow);
|
||||||
if (branchEmpty) {
|
if (branchEmpty) {
|
||||||
snake.emphasizeDirection(Direction.DOWN);
|
snake.emphasizeDirection(Direction.DOWN);
|
||||||
}
|
}
|
||||||
@ -257,7 +257,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
if (originalDirection == newDirection) {
|
if (originalDirection == newDirection) {
|
||||||
final double delta = (x2 > x1 ? -1 : 1) * 1.5 * Diamond.diamondHalfSize;
|
final double delta = (x2 > x1 ? -1 : 1) * 1.5 * Diamond.diamondHalfSize;
|
||||||
final Point2D mp2bc = new Point2D.Double(mp2b.getX() + delta, mp2b.getY());
|
final Point2D mp2bc = new Point2D.Double(mp2b.getX() + delta, mp2b.getY());
|
||||||
final Snake snake = new Snake(myArrowColor);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), myArrowColor);
|
||||||
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
final double middle = (mp1a.getY() + mp2b.getY()) / 2.0;
|
||||||
snake.addPoint(mp1a);
|
snake.addPoint(mp1a);
|
||||||
snake.addPoint(mp1a.getX(), middle);
|
snake.addPoint(mp1a.getX(), middle);
|
||||||
@ -265,7 +265,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
snake.addPoint(mp2bc);
|
snake.addPoint(mp2bc);
|
||||||
snake.goUnmergeable(MergeStrategy.LIMITED);
|
snake.goUnmergeable(MergeStrategy.LIMITED);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
final Snake small = new Snake(myArrowColor, arrow);
|
final Snake small = new Snake(arrowHorizontalAlignment(), myArrowColor, arrow);
|
||||||
small.addPoint(mp2bc);
|
small.addPoint(mp2bc);
|
||||||
small.addPoint(mp2bc.getX(), mp2b.getY());
|
small.addPoint(mp2bc.getX(), mp2b.getY());
|
||||||
small.addPoint(mp2b);
|
small.addPoint(mp2b);
|
||||||
@ -275,13 +275,13 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
final double delta = (x2 > x1 ? -1 : 1) * 1.5 * Diamond.diamondHalfSize;
|
final double delta = (x2 > x1 ? -1 : 1) * 1.5 * Diamond.diamondHalfSize;
|
||||||
final Point2D mp2bb = new Point2D.Double(mp2b.getX() + delta, mp2b.getY() - 1.5
|
final Point2D mp2bb = new Point2D.Double(mp2b.getX() + delta, mp2b.getY() - 1.5
|
||||||
* Diamond.diamondHalfSize);
|
* Diamond.diamondHalfSize);
|
||||||
final Snake snake = new Snake(myArrowColor);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), myArrowColor);
|
||||||
snake.addPoint(mp1a);
|
snake.addPoint(mp1a);
|
||||||
snake.addPoint(mp1a.getX(), mp2bb.getY());
|
snake.addPoint(mp1a.getX(), mp2bb.getY());
|
||||||
snake.addPoint(mp2bb);
|
snake.addPoint(mp2bb);
|
||||||
snake.goUnmergeable(MergeStrategy.LIMITED);
|
snake.goUnmergeable(MergeStrategy.LIMITED);
|
||||||
ug.draw(snake);
|
ug.draw(snake);
|
||||||
final Snake small = new Snake(myArrowColor, arrow);
|
final Snake small = new Snake(arrowHorizontalAlignment(), myArrowColor, arrow);
|
||||||
small.addPoint(mp2bb);
|
small.addPoint(mp2bb);
|
||||||
small.addPoint(mp2bb.getX(), mp2b.getY());
|
small.addPoint(mp2bb.getX(), mp2b.getY());
|
||||||
small.addPoint(mp2b);
|
small.addPoint(mp2b);
|
||||||
@ -320,7 +320,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
final double x2 = p2.getX();
|
final double x2 = p2.getX();
|
||||||
final double y2 = p2.getY();
|
final double y2 = p2.getY();
|
||||||
|
|
||||||
final Snake snake = new Snake(myArrowColor);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), myArrowColor);
|
||||||
if (branchEmpty) {
|
if (branchEmpty) {
|
||||||
snake.emphasizeDirection(Direction.DOWN);
|
snake.emphasizeDirection(Direction.DOWN);
|
||||||
}
|
}
|
||||||
@ -346,7 +346,7 @@ public class FtileIfWithLinks extends FtileIfWithDiamonds {
|
|||||||
final Point2D mp1a = translate1.getTranslated(p1);
|
final Point2D mp1a = translate1.getTranslated(p1);
|
||||||
final Point2D mp2b = translate2.getTranslated(p2);
|
final Point2D mp2b = translate2.getTranslated(p2);
|
||||||
|
|
||||||
final Snake snake = new Snake(myArrowColor);
|
final Snake snake = new Snake(arrowHorizontalAlignment(), myArrowColor);
|
||||||
// snake.emphasizeDirection(Direction.DOWN);
|
// snake.emphasizeDirection(Direction.DOWN);
|
||||||
|
|
||||||
final double x1 = mp1a.getX();
|
final double x1 = mp1a.getX();
|
||||||
|
@ -48,6 +48,7 @@ import net.sourceforge.plantuml.activitydiagram3.ftile.FtileGeometry;
|
|||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.Swimlane;
|
||||||
import net.sourceforge.plantuml.activitydiagram3.ftile.WeldingPoint;
|
import net.sourceforge.plantuml.activitydiagram3.ftile.WeldingPoint;
|
||||||
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
import net.sourceforge.plantuml.graphic.AbstractTextBlock;
|
||||||
|
import net.sourceforge.plantuml.graphic.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.graphic.StringBounder;
|
import net.sourceforge.plantuml.graphic.StringBounder;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
import net.sourceforge.plantuml.ugraphic.UStroke;
|
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||||
@ -128,4 +129,9 @@ public abstract class FtileDecorate extends AbstractTextBlock implements Ftile {
|
|||||||
return Collections.singleton(ftile);
|
return Collections.singleton(ftile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public HorizontalAlignment arrowHorizontalAlignment() {
|
||||||
|
return ftile.arrowHorizontalAlignment();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -144,7 +144,7 @@ public class CommandCreateElementFull2 extends SingleLineCommand2<ClassDiagram>
|
|||||||
usymbol = null;
|
usymbol = null;
|
||||||
} else {
|
} else {
|
||||||
type = LeafType.DESCRIPTION;
|
type = LeafType.DESCRIPTION;
|
||||||
usymbol = USymbol.getFoo1(symbol, diagram.getSkinParam().useUml2ForComponent());
|
usymbol = USymbol.getFromString(symbol, diagram.getSkinParam().useUml2ForComponent());
|
||||||
if (usymbol == null) {
|
if (usymbol == null) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,7 @@ import java.util.Collections;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.BackSlash;
|
||||||
import net.sourceforge.plantuml.StringUtils;
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
import net.sourceforge.plantuml.command.regex.MyPattern;
|
import net.sourceforge.plantuml.command.regex.MyPattern;
|
||||||
import net.sourceforge.plantuml.cucadiagram.Display;
|
import net.sourceforge.plantuml.cucadiagram.Display;
|
||||||
@ -67,7 +68,7 @@ public class BlocLines implements Iterable<CharSequence> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static BlocLines getWithNewlines(CharSequence s) {
|
public static BlocLines getWithNewlines(CharSequence s) {
|
||||||
return new BlocLines(StringUtils.getWithNewlines(s));
|
return new BlocLines(BackSlash.getWithNewlines(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
public BlocLines() {
|
public BlocLines() {
|
||||||
@ -174,7 +175,7 @@ public class BlocLines implements Iterable<CharSequence> {
|
|||||||
final StringBuilder sb = new StringBuilder();
|
final StringBuilder sb = new StringBuilder();
|
||||||
for (CharSequence line : lines) {
|
for (CharSequence line : lines) {
|
||||||
sb.append(line);
|
sb.append(line);
|
||||||
sb.append(StringUtils.hiddenNewLine());
|
sb.append(BackSlash.hiddenNewLine());
|
||||||
}
|
}
|
||||||
return single(sb.substring(0, sb.length() - 1));
|
return single(sb.substring(0, sb.length() - 1));
|
||||||
}
|
}
|
||||||
|
@ -173,11 +173,26 @@ public class Bodier {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<String> rawBodyWithoutHidden() {
|
||||||
|
if (hides == null || hides.size() == 0) {
|
||||||
|
return rawBody;
|
||||||
|
}
|
||||||
|
final List<String> result = new ArrayList<String>();
|
||||||
|
for (String s : rawBody) {
|
||||||
|
final Member m = new MemberImpl(s, isMethod(s), manageModifier);
|
||||||
|
if (hides.contains(m.getVisibilityModifier()) == false) {
|
||||||
|
result.add(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public TextBlock getBody(final FontParam fontParam, final ISkinParam skinParam, final boolean showMethods,
|
public TextBlock getBody(final FontParam fontParam, final ISkinParam skinParam, final boolean showMethods,
|
||||||
final boolean showFields, Stereotype stereotype) {
|
final boolean showFields, Stereotype stereotype) {
|
||||||
if (type.isLikeClass() && isBodyEnhanced()) {
|
if (type.isLikeClass() && isBodyEnhanced()) {
|
||||||
if (showMethods || showFields) {
|
if (showMethods || showFields) {
|
||||||
return new BodyEnhanced(rawBody, fontParam, skinParam, manageModifier, stereotype, leaf);
|
return new BodyEnhanced(rawBodyWithoutHidden(), fontParam, skinParam, manageModifier, stereotype, leaf);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ import java.util.Collections;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.BackSlash;
|
||||||
import net.sourceforge.plantuml.CharSequence2;
|
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;
|
||||||
@ -138,7 +139,7 @@ public class Display implements Iterable<CharSequence> {
|
|||||||
current.append(c);
|
current.append(c);
|
||||||
current.append(c2);
|
current.append(c2);
|
||||||
}
|
}
|
||||||
} else if (c == StringUtils.hiddenNewLine()) {
|
} else if (c == BackSlash.hiddenNewLine()) {
|
||||||
result.add(current.toString());
|
result.add(current.toString());
|
||||||
current.setLength(0);
|
current.setLength(0);
|
||||||
} else {
|
} else {
|
||||||
@ -220,16 +221,16 @@ public class Display implements Iterable<CharSequence> {
|
|||||||
return new Display(this, mode);
|
return new Display(this, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String asStringWithHiddenNewLine() {
|
// private String asStringWithHiddenNewLine() {
|
||||||
final StringBuilder sb = new StringBuilder();
|
// final StringBuilder sb = new StringBuilder();
|
||||||
for (int i = 0; i < display.size(); i++) {
|
// for (int i = 0; i < display.size(); i++) {
|
||||||
sb.append(display.get(i));
|
// sb.append(display.get(i));
|
||||||
if (i < display.size() - 1) {
|
// if (i < display.size() - 1) {
|
||||||
sb.append(StringUtils.hiddenNewLine());
|
// sb.append(BackSlash.hiddenNewLine());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return sb.toString();
|
// return sb.toString();
|
||||||
}
|
// }
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@ -47,6 +47,7 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.BackSlash;
|
||||||
import net.sourceforge.plantuml.FileFormat;
|
import net.sourceforge.plantuml.FileFormat;
|
||||||
import net.sourceforge.plantuml.StringUtils;
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
import net.sourceforge.plantuml.cucadiagram.CucaDiagram;
|
import net.sourceforge.plantuml.cucadiagram.CucaDiagram;
|
||||||
@ -126,14 +127,14 @@ public final class CucaDiagramTxtMaker {
|
|||||||
ug.getCharArea().drawHLine('-', y, 1, w - 1);
|
ug.getCharArea().drawHLine('-', y, 1, w - 1);
|
||||||
y++;
|
y++;
|
||||||
for (Member att : ent.getBodier().getFieldsToDisplay()) {
|
for (Member att : ent.getBodier().getFieldsToDisplay()) {
|
||||||
final List<String> disp = StringUtils.getWithNewlines(att.getDisplay(true));
|
final List<String> disp = BackSlash.getWithNewlines(att.getDisplay(true));
|
||||||
ug.getCharArea().drawStringsLR(disp, 1, y);
|
ug.getCharArea().drawStringsLR(disp, 1, y);
|
||||||
y += StringUtils.getHeight(disp);
|
y += StringUtils.getHeight(disp);
|
||||||
}
|
}
|
||||||
ug.getCharArea().drawHLine('-', y, 1, w - 1);
|
ug.getCharArea().drawHLine('-', y, 1, w - 1);
|
||||||
y++;
|
y++;
|
||||||
for (Member att : ent.getBodier().getMethodsToDisplay()) {
|
for (Member att : ent.getBodier().getMethodsToDisplay()) {
|
||||||
final List<String> disp = StringUtils.getWithNewlines(att.getDisplay(true));
|
final List<String> disp = BackSlash.getWithNewlines(att.getDisplay(true));
|
||||||
ug.getCharArea().drawStringsLR(disp, 1, y);
|
ug.getCharArea().drawStringsLR(disp, 1, y);
|
||||||
y += StringUtils.getHeight(disp);
|
y += StringUtils.getHeight(disp);
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ import net.sourceforge.plantuml.graphic.color.Colors;
|
|||||||
|
|
||||||
public class CommandCreateElementFull extends SingleLineCommand2<DescriptionDiagram> {
|
public class CommandCreateElementFull extends SingleLineCommand2<DescriptionDiagram> {
|
||||||
|
|
||||||
public static final String ALL_TYPES = "artifact|actor|folder|card|file|package|rectangle|node|frame|cloud|database|queue|storage|agent|usecase|component|boundary|control|entity|interface";
|
public static final String ALL_TYPES = "artifact|actor|folder|card|file|package|rectangle|node|frame|cloud|database|queue|pipe|storage|agent|usecase|component|boundary|control|entity|interface";
|
||||||
|
|
||||||
public CommandCreateElementFull() {
|
public CommandCreateElementFull() {
|
||||||
super(getRegexConcat());
|
super(getRegexConcat());
|
||||||
@ -148,7 +148,7 @@ public class CommandCreateElementFull extends SingleLineCommand2<DescriptionDiag
|
|||||||
usymbol = null;
|
usymbol = null;
|
||||||
} else {
|
} else {
|
||||||
type = LeafType.DESCRIPTION;
|
type = LeafType.DESCRIPTION;
|
||||||
usymbol = USymbol.getFoo1(symbol, diagram.getSkinParam().useUml2ForComponent());
|
usymbol = USymbol.getFromString(symbol, diagram.getSkinParam().useUml2ForComponent());
|
||||||
if (usymbol == null) {
|
if (usymbol == null) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
|
@ -65,17 +65,17 @@ import net.sourceforge.plantuml.version.PSystemVersion;
|
|||||||
public class PSystemDonors extends AbstractPSystem {
|
public class PSystemDonors extends AbstractPSystem {
|
||||||
|
|
||||||
public static final String DONORS = "UDfbL4jksp0GtSyfk1RIGoXsxDI_17QQ0jcDfR75c29TKd8ghOAUeK3NlKABB8eMsVG2oeqwSYkJIWaO"
|
public static final String DONORS = "UDfbL4jksp0GtSyfk1RIGoXsxDI_17QQ0jcDfR75c29TKd8ghOAUeK3NlKABB8eMsVG2oeqwSYkJIWaO"
|
||||||
+ "CCNXp7ipxp5MqRz55gwf82jYNHWjCO4RYlmoESoCtre7SNSLrp2s_eWgMD4QNI5HYuN9DCGwDLQC3HKr"
|
+ "CCNXp7lptZ1MqRz55gwf82jYNHWjCO4RYlmoESoCtre7SNSLrp2s_eWgMD4QNI5HYuN9DCGwDLQC3HKr"
|
||||||
+ "jNyt6uxemb7338D2ke2Xx3PIGUnJcmEiIW-XWh6C-aiRc7GeImUhWlOPQJ4mPi_yXbqTSZ3DNrqr5WP6"
|
+ "jNyt6uxemb7338D2ke2Xx3PIGUnJcmEiIW-XWh6C-aiRc7GeImUhWlOPQJ4mPi_yXbqTSZ3DNrqr5WP6"
|
||||||
+ "IIsMfdG4a_BLUNHlc4YtsKkO1wWn3xTSAbRq4NNAxHnaahDkqLRCT7cYhRUm2D4NDLmfUU0BGvdi6Fdf"
|
+ "IIsMfdG4a_BLUNHlc4YtsKkO1wWn3xTSAbRq4NNAxHnaahDkqLRCT7cYhRUm2D4NDLmfUU0BGvdi6Fdf"
|
||||||
+ "H6guSAVKEW0HqG66TIuBMuaPPYP5cBHDlykGqmTn4Ia_BbwxYjkaiU0uniUu9d_1qwx7IgUyjGdtP8Hh"
|
+ "H6guSAVKEW0HqG66TIuBMuaPPYP5cBHDlykGqmTn4Ial5wzTnMtIM70SusDSax_WQTTZfLFUseHxCiAr"
|
||||||
+ "M-tCWzj9JgJusfKjP0sNFZerC9T9HagSerHLo43L8HZdO4Aetqmm-L2I4yDoRP5dgJpVMtDVK9A9gKM7"
|
+ "hNRcmUqa9r9yxSeMiePB7vqQcCia8oNEKQegPA3g48npC27KRoQOV2Z9YM6vjiXQAi_trjmNb6HYQj6X"
|
||||||
+ "7jAMMAB1n1vQPN68c9g338LobCexJrWYB0FnjYL2dj4ztzu7iZAxjZFdng96jJyJTrIWsJjOCa6qgPZA"
|
+ "XxGbjcYWs4FhB0uHKtEGeL6ELddd2Kk4PM3UjaJ8Cxhds_l0LcRNTkRSMDIezcVYZWeqUmTB9eWs5LFP"
|
||||||
+ "ThGmKiQs_Px__gNKSUXU42eG9yjfTfAJnQxRxTIpFYC7rzZ9OobxW6CbnGenPUlOBOdtfBTapyGyldcx"
|
+ "IWiZPMpRx_dlNqeTHVU6K84vsKwpavqiTjrkLS_wZ1nSOsUFfUm1ZfKKAyIKHyTkIRmdlILx9kRnpTjL"
|
||||||
+ "Yhsq8wDXJ3tBXCnrmXB9nIsZ7h9efpxIKZjPDikC22uEeV8F20kVXF8EP1JG69UITL7c94QcfCBtDt4m"
|
+ "xAqT6GrZwerCo5mdR95St3Bg8PjswYCjjShoiCo8uE8GEl-0iF19AEz0HW6DSIdP5sLEOcHAAdn_4mUZ"
|
||||||
+ "2YTpvEBLeEkmRGnt8RUiePNClGKP43jvqtOQsTK1w4WfQ3utJq7wvgdv0OEiP-sAZLUkZm-1rUo5IzE3"
|
+ "K9aZ5-y6NOTjOxWBkMKFhMJkHv01yIHlsauZJtK0Eb8Aci_DKv2-UMf-m23hZNR5WrUkZm-1rJmBbwO7"
|
||||||
+ "CoQpsLYgn4BcFBW9_l-gB763IimhfzWZpTVcwUMn-TwM4isNvhdvsJo_VEBV8t_w1XUMQZ55bREpBiDP"
|
+ "Pqncix5KYONCMRW9_l-gB763IimhftX6cg_DqyjZyxqj9PelpNFpitb--SI_H_xq3IuirMAAAkV9kWor"
|
||||||
+ "jt8brkivgVPG1sFZAZ9u5QE87ya-2nRO7yKAYtS0";
|
+ "RkrAxDTpKksX3cJZAZ9u5QE87ya-2pROBRr-bA9ImH_rNe_d";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed)
|
final protected ImageData exportDiagramNow(OutputStream os, int num, FileFormatOption fileFormat, long seed)
|
||||||
|
@ -231,9 +231,8 @@ public class QuoteUtils {
|
|||||||
"Vtabenapr oevatf punbf, abg xabjyrqtr.", "Yrneavat vf nyjnlf n cnvashy cebprff.",
|
"Vtabenapr oevatf punbf, abg xabjyrqtr.", "Yrneavat vf nyjnlf n cnvashy cebprff.",
|
||||||
"V'z fbeel, ner lbh sebz gur cnfg ?", "Unir lbh gevrq gheavat vg bss naq ba ntnva ?",
|
"V'z fbeel, ner lbh sebz gur cnfg ?", "Unir lbh gevrq gheavat vg bss naq ba ntnva ?",
|
||||||
"Vs lbh qba'g xabj jurer lbh ner tbvat nal ebnq pna gnxr lbh gurer",
|
"Vs lbh qba'g xabj jurer lbh ner tbvat nal ebnq pna gnxr lbh gurer",
|
||||||
"Ortva ng gur ortvaavat, naq tb ba gvyy lbh pbzr gb gur raq: gura fgbc"
|
"Ortva ng gur ortvaavat, naq tb ba gvyy lbh pbzr gb gur raq: gura fgbc",
|
||||||
|
"Xrrc pnyz naq cerff Pgey-Nyg-Qry");
|
||||||
);
|
|
||||||
|
|
||||||
private QuoteUtils() {
|
private QuoteUtils() {
|
||||||
}
|
}
|
||||||
|
@ -62,6 +62,9 @@ public class SkinParameter {
|
|||||||
public static final SkinParameter QUEUE = new SkinParameter("QUEUE", ColorParam.queueBackground,
|
public static final SkinParameter QUEUE = new SkinParameter("QUEUE", ColorParam.queueBackground,
|
||||||
ColorParam.queueBorder, FontParam.QUEUE, FontParam.QUEUE_STEREOTYPE);
|
ColorParam.queueBorder, FontParam.QUEUE, FontParam.QUEUE_STEREOTYPE);
|
||||||
|
|
||||||
|
public static final SkinParameter PIPE = new SkinParameter("PIPE", ColorParam.pipeBackground,
|
||||||
|
ColorParam.pipeBorder, FontParam.PIPE, FontParam.PIPE_STEREOTYPE);
|
||||||
|
|
||||||
public static final SkinParameter CLOUD = new SkinParameter("CLOUD", ColorParam.cloudBackground,
|
public static final SkinParameter CLOUD = new SkinParameter("CLOUD", ColorParam.cloudBackground,
|
||||||
ColorParam.cloudBorder, FontParam.CLOUD, FontParam.CLOUD_STEREOTYPE);
|
ColorParam.cloudBorder, FontParam.CLOUD, FontParam.CLOUD_STEREOTYPE);
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ public abstract class USymbol {
|
|||||||
public final static USymbol CONTROL = record("CONTROL", SkinParameter.CONTROL, new USymbolControl(2));
|
public final static USymbol CONTROL = record("CONTROL", SkinParameter.CONTROL, new USymbolControl(2));
|
||||||
public final static USymbol INTERFACE = record("INTERFACE", SkinParameter.INTERFACE, new USymbolInterface());
|
public final static USymbol INTERFACE = record("INTERFACE", SkinParameter.INTERFACE, new USymbolInterface());
|
||||||
public final static USymbol QUEUE = record("QUEUE", SkinParameter.QUEUE, new USymbolQueue());
|
public final static USymbol QUEUE = record("QUEUE", SkinParameter.QUEUE, new USymbolQueue());
|
||||||
|
public final static USymbol PIPE = record("PIPE", SkinParameter.PIPE, new USymbolPipe());
|
||||||
public final static USymbol TOGETHER = record("TOGETHER", SkinParameter.QUEUE, new USymbolTogether());
|
public final static USymbol TOGETHER = record("TOGETHER", SkinParameter.QUEUE, new USymbolTogether());
|
||||||
|
|
||||||
abstract public SkinParameter getSkinParameter();
|
abstract public SkinParameter getSkinParameter();
|
||||||
@ -181,7 +182,7 @@ public abstract class USymbol {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static USymbol getFoo1(String symbol, boolean useUml2ForComponent) {
|
public static USymbol getFromString(String symbol, boolean useUml2ForComponent) {
|
||||||
USymbol usymbol = null;
|
USymbol usymbol = null;
|
||||||
if (symbol.equalsIgnoreCase("artifact")) {
|
if (symbol.equalsIgnoreCase("artifact")) {
|
||||||
usymbol = USymbol.ARTIFACT;
|
usymbol = USymbol.ARTIFACT;
|
||||||
@ -203,6 +204,8 @@ public abstract class USymbol {
|
|||||||
usymbol = USymbol.DATABASE;
|
usymbol = USymbol.DATABASE;
|
||||||
} else if (symbol.equalsIgnoreCase("queue")) {
|
} else if (symbol.equalsIgnoreCase("queue")) {
|
||||||
usymbol = USymbol.QUEUE;
|
usymbol = USymbol.QUEUE;
|
||||||
|
} else if (symbol.equalsIgnoreCase("pipe")) {
|
||||||
|
usymbol = USymbol.PIPE;
|
||||||
} else if (symbol.equalsIgnoreCase("storage")) {
|
} else if (symbol.equalsIgnoreCase("storage")) {
|
||||||
usymbol = USymbol.STORAGE;
|
usymbol = USymbol.STORAGE;
|
||||||
} else if (symbol.equalsIgnoreCase("agent")) {
|
} else if (symbol.equalsIgnoreCase("agent")) {
|
||||||
|
181
src/net/sourceforge/plantuml/graphic/USymbolPipe.java
Normal file
181
src/net/sourceforge/plantuml/graphic/USymbolPipe.java
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2017, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: http://plantuml.com
|
||||||
|
*
|
||||||
|
* If you like this project or if you find it useful, you can support us at:
|
||||||
|
*
|
||||||
|
* http://plantuml.com/patreon (only 1$ per month!)
|
||||||
|
* http://plantuml.com/paypal
|
||||||
|
*
|
||||||
|
* This file is part of PlantUML.
|
||||||
|
*
|
||||||
|
* PlantUML is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* PlantUML distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
* License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||||
|
* USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Original Author: Arnaud Roques
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package net.sourceforge.plantuml.graphic;
|
||||||
|
|
||||||
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
|
import net.sourceforge.plantuml.creole.Stencil;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UChangeBackColor;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UHorizontalLine;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UPath;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||||
|
|
||||||
|
class USymbolPipe extends USymbol {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SkinParameter getSkinParameter() {
|
||||||
|
return SkinParameter.PIPE;
|
||||||
|
}
|
||||||
|
|
||||||
|
private final double dx = 5;
|
||||||
|
|
||||||
|
private void drawQueue(UGraphic ug, double width, double height, boolean shadowing) {
|
||||||
|
final UPath shape = new UPath();
|
||||||
|
if (shadowing) {
|
||||||
|
shape.setDeltaShadow(3.0);
|
||||||
|
}
|
||||||
|
shape.moveTo(dx, 0);
|
||||||
|
shape.lineTo(width - dx, 0);
|
||||||
|
shape.cubicTo(width, 0, width, height / 2, width, height / 2);
|
||||||
|
shape.cubicTo(width, height / 2, width, height, width - dx, height);
|
||||||
|
shape.lineTo(dx, height);
|
||||||
|
|
||||||
|
shape.cubicTo(0, height, 0, height / 2, 0, height / 2);
|
||||||
|
shape.cubicTo(0, height / 2, 0, 0, dx, 0);
|
||||||
|
|
||||||
|
ug.draw(shape);
|
||||||
|
|
||||||
|
final UPath closing = getClosingPath(width, height);
|
||||||
|
ug.apply(new UChangeBackColor(null)).draw(closing);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private UPath getClosingPath(double width, double height) {
|
||||||
|
final UPath closing = new UPath();
|
||||||
|
closing.moveTo(width - dx, 0);
|
||||||
|
closing.cubicTo(width - dx * 2, 0, width - dx * 2, height / 2, width - dx * 2, height / 2);
|
||||||
|
closing.cubicTo(width - dx * 2, height, width - dx, height, width - dx, height);
|
||||||
|
return closing;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyUGraphicQueue extends AbstractUGraphicHorizontalLine implements Stencil {
|
||||||
|
|
||||||
|
private final double x1;
|
||||||
|
private final double x2;
|
||||||
|
private final double fullHeight;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected AbstractUGraphicHorizontalLine copy(UGraphic ug) {
|
||||||
|
return new MyUGraphicQueue(ug, x1, x2, fullHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MyUGraphicQueue(UGraphic ug, double x1, double x2, double fullHeight) {
|
||||||
|
super(ug);
|
||||||
|
this.x1 = x1;
|
||||||
|
this.x2 = x2;
|
||||||
|
this.fullHeight = fullHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void drawHline(UGraphic ug, UHorizontalLine line, UTranslate translate) {
|
||||||
|
line.drawLineInternal(ug, this, translate.getDy(), line.getStroke());
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getStartingX(StringBounder stringBounder, double y) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getEndingX(StringBounder stringBounder, double y) {
|
||||||
|
final double factor2;
|
||||||
|
final double halfHeight = fullHeight / 2;
|
||||||
|
if (y <= halfHeight) {
|
||||||
|
factor2 = 1 - (y / halfHeight);
|
||||||
|
} else {
|
||||||
|
factor2 = (y - halfHeight) / halfHeight;
|
||||||
|
}
|
||||||
|
return (x2 - x1) * factor2 + x1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Margin getMargin() {
|
||||||
|
return new Margin(5, 15, 5, 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextBlock asSmall(TextBlock name, final TextBlock label, final TextBlock stereotype,
|
||||||
|
final SymbolContext symbolContext) {
|
||||||
|
return new AbstractTextBlock() {
|
||||||
|
|
||||||
|
public void drawU(UGraphic ug) {
|
||||||
|
final Dimension2D dim = calculateDimension(ug.getStringBounder());
|
||||||
|
ug = symbolContext.apply(ug);
|
||||||
|
drawQueue(ug, dim.getWidth(), dim.getHeight(), symbolContext.isShadowing());
|
||||||
|
final Margin margin = getMargin();
|
||||||
|
final TextBlock tb = TextBlockUtils.mergeTB(stereotype, label, HorizontalAlignment.CENTER);
|
||||||
|
final UGraphic ug2 = new MyUGraphicQueue(ug, dim.getWidth() - 2 * dx, dim.getWidth() - dx,
|
||||||
|
dim.getHeight());
|
||||||
|
tb.drawU(ug2.apply(new UTranslate(margin.getX1(), margin.getY1())));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
||||||
|
final Dimension2D dimLabel = label.calculateDimension(stringBounder);
|
||||||
|
final Dimension2D dimStereo = stereotype.calculateDimension(stringBounder);
|
||||||
|
return getMargin().addDimension(Dimension2DDouble.mergeTB(dimStereo, dimLabel));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public TextBlock asBig(final TextBlock title, final TextBlock stereotype, final double width, final double height,
|
||||||
|
final SymbolContext symbolContext) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
// return new TextBlock() {
|
||||||
|
//
|
||||||
|
// public void drawU(UGraphic ug) {
|
||||||
|
// final Dimension2D dim = calculateDimension(ug.getStringBounder());
|
||||||
|
// ug = symbolContext.apply(ug);
|
||||||
|
// drawDatabase(ug, dim.getWidth(), dim.getHeight(), symbolContext.isShadowing());
|
||||||
|
// final Dimension2D dimStereo = stereotype.calculateDimension(ug.getStringBounder());
|
||||||
|
// final double posStereo = (width - dimStereo.getWidth()) / 2;
|
||||||
|
// stereotype.drawU(ug.apply(new UTranslate(posStereo, 0)));
|
||||||
|
//
|
||||||
|
// final Dimension2D dimTitle = title.calculateDimension(ug.getStringBounder());
|
||||||
|
// final double posTitle = (width - dimTitle.getWidth()) / 2;
|
||||||
|
// title.drawU(ug.apply(new UTranslate(posTitle, 21)));
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// public Dimension2D calculateDimension(StringBounder stringBounder) {
|
||||||
|
// return new Dimension2DDouble(width, height);
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean manageHorizontalLine() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -38,12 +38,13 @@ package net.sourceforge.plantuml.graphic;
|
|||||||
import java.awt.geom.Dimension2D;
|
import java.awt.geom.Dimension2D;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.Dimension2DDouble;
|
import net.sourceforge.plantuml.Dimension2DDouble;
|
||||||
import net.sourceforge.plantuml.creole.Stencil;
|
|
||||||
import net.sourceforge.plantuml.ugraphic.AbstractUGraphicHorizontalLine;
|
|
||||||
import net.sourceforge.plantuml.ugraphic.UChangeBackColor;
|
import net.sourceforge.plantuml.ugraphic.UChangeBackColor;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UChangeColor;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
import net.sourceforge.plantuml.ugraphic.UHorizontalLine;
|
import net.sourceforge.plantuml.ugraphic.UGraphicStencil;
|
||||||
import net.sourceforge.plantuml.ugraphic.UPath;
|
import net.sourceforge.plantuml.ugraphic.UPath;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.URectangle;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UStroke;
|
||||||
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
import net.sourceforge.plantuml.ugraphic.UTranslate;
|
||||||
|
|
||||||
class USymbolQueue extends USymbol {
|
class USymbolQueue extends USymbol {
|
||||||
@ -53,78 +54,25 @@ class USymbolQueue extends USymbol {
|
|||||||
return SkinParameter.QUEUE;
|
return SkinParameter.QUEUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final double dx = 5;
|
private void drawQueue(UGraphic ug, double width, double height, boolean shadowing, double roundCorner) {
|
||||||
|
final double border = 15;
|
||||||
private void drawQueue(UGraphic ug, double width, double height, boolean shadowing) {
|
final URectangle rect = new URectangle(width - 2 * border, height, roundCorner, roundCorner);
|
||||||
final UPath shape = new UPath();
|
|
||||||
if (shadowing) {
|
if (shadowing) {
|
||||||
shape.setDeltaShadow(3.0);
|
rect.setDeltaShadow(3.0);
|
||||||
}
|
|
||||||
shape.moveTo(dx, 0);
|
|
||||||
shape.lineTo(width - dx, 0);
|
|
||||||
shape.cubicTo(width, 0, width, height / 2, width, height / 2);
|
|
||||||
shape.cubicTo(width, height / 2, width, height, width - dx, height);
|
|
||||||
shape.lineTo(dx, height);
|
|
||||||
|
|
||||||
shape.cubicTo(0, height, 0, height / 2, 0, height / 2);
|
|
||||||
shape.cubicTo(0, height / 2, 0, 0, dx, 0);
|
|
||||||
|
|
||||||
ug.draw(shape);
|
|
||||||
|
|
||||||
final UPath closing = getClosingPath(width, height);
|
|
||||||
ug.apply(new UChangeBackColor(null)).draw(closing);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private UPath getClosingPath(double width, double height) {
|
|
||||||
final UPath closing = new UPath();
|
|
||||||
closing.moveTo(width - dx, 0);
|
|
||||||
closing.cubicTo(width - dx * 2, 0, width - dx * 2, height / 2, width - dx * 2, height / 2);
|
|
||||||
closing.cubicTo(width - dx * 2, height, width - dx, height, width - dx, height);
|
|
||||||
return closing;
|
|
||||||
}
|
|
||||||
|
|
||||||
class MyUGraphicQueue extends AbstractUGraphicHorizontalLine implements Stencil {
|
|
||||||
|
|
||||||
private final double x1;
|
|
||||||
private final double x2;
|
|
||||||
private final double fullHeight;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected AbstractUGraphicHorizontalLine copy(UGraphic ug) {
|
|
||||||
return new MyUGraphicQueue(ug, x1, x2, fullHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
public MyUGraphicQueue(UGraphic ug, double x1, double x2, double fullHeight) {
|
|
||||||
super(ug);
|
|
||||||
this.x1 = x1;
|
|
||||||
this.x2 = x2;
|
|
||||||
this.fullHeight = fullHeight;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void drawHline(UGraphic ug, UHorizontalLine line, UTranslate translate) {
|
|
||||||
line.drawLineInternal(ug, this, translate.getDy(), line.getStroke());
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getStartingX(StringBounder stringBounder, double y) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public double getEndingX(StringBounder stringBounder, double y) {
|
|
||||||
final double factor2;
|
|
||||||
final double halfHeight = fullHeight / 2;
|
|
||||||
if (y <= halfHeight) {
|
|
||||||
factor2 = 1 - (y / halfHeight);
|
|
||||||
} else {
|
|
||||||
factor2 = (y - halfHeight) / halfHeight;
|
|
||||||
}
|
|
||||||
return (x2 - x1) * factor2 + x1;
|
|
||||||
}
|
}
|
||||||
|
ug.apply(new UChangeColor(null)).apply(new UTranslate(border, 0)).draw(rect);
|
||||||
|
final UPath path = new UPath();
|
||||||
|
path.moveTo(0, 0);
|
||||||
|
path.lineTo(border, 0);
|
||||||
|
path.lineTo(border, height);
|
||||||
|
path.lineTo(width - border, height);
|
||||||
|
path.lineTo(width - border, 0);
|
||||||
|
path.lineTo(width, 0);
|
||||||
|
ug.apply(new UChangeBackColor(null)).draw(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Margin getMargin() {
|
private Margin getMargin() {
|
||||||
return new Margin(5, 15, 5, 5);
|
return new Margin(25, 25, 10, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TextBlock asSmall(TextBlock name, final TextBlock label, final TextBlock stereotype,
|
public TextBlock asSmall(TextBlock name, final TextBlock label, final TextBlock stereotype,
|
||||||
@ -133,13 +81,13 @@ class USymbolQueue extends USymbol {
|
|||||||
|
|
||||||
public void drawU(UGraphic ug) {
|
public void drawU(UGraphic ug) {
|
||||||
final Dimension2D dim = calculateDimension(ug.getStringBounder());
|
final Dimension2D dim = calculateDimension(ug.getStringBounder());
|
||||||
|
ug = UGraphicStencil.create(ug, getRectangleStencil(dim), new UStroke());
|
||||||
ug = symbolContext.apply(ug);
|
ug = symbolContext.apply(ug);
|
||||||
drawQueue(ug, dim.getWidth(), dim.getHeight(), symbolContext.isShadowing());
|
drawQueue(ug, dim.getWidth(), dim.getHeight(), symbolContext.isShadowing(),
|
||||||
|
symbolContext.getRoundCorner());
|
||||||
final Margin margin = getMargin();
|
final Margin margin = getMargin();
|
||||||
final TextBlock tb = TextBlockUtils.mergeTB(stereotype, label, HorizontalAlignment.CENTER);
|
final TextBlock tb = TextBlockUtils.mergeTB(stereotype, label, HorizontalAlignment.CENTER);
|
||||||
final UGraphic ug2 = new MyUGraphicQueue(ug, dim.getWidth() - 2 * dx, dim.getWidth() - dx,
|
tb.drawU(ug.apply(new UTranslate(margin.getX1(), margin.getY1())));
|
||||||
dim.getHeight());
|
|
||||||
tb.drawU(ug2.apply(new UTranslate(margin.getX1(), margin.getY1())));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
public Dimension2D calculateDimension(StringBounder stringBounder) {
|
||||||
@ -153,27 +101,9 @@ class USymbolQueue extends USymbol {
|
|||||||
public TextBlock asBig(final TextBlock title, final TextBlock stereotype, final double width, final double height,
|
public TextBlock asBig(final TextBlock title, final TextBlock stereotype, final double width, final double height,
|
||||||
final SymbolContext symbolContext) {
|
final SymbolContext symbolContext) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
// return new TextBlock() {
|
|
||||||
//
|
|
||||||
// public void drawU(UGraphic ug) {
|
|
||||||
// final Dimension2D dim = calculateDimension(ug.getStringBounder());
|
|
||||||
// ug = symbolContext.apply(ug);
|
|
||||||
// drawDatabase(ug, dim.getWidth(), dim.getHeight(), symbolContext.isShadowing());
|
|
||||||
// final Dimension2D dimStereo = stereotype.calculateDimension(ug.getStringBounder());
|
|
||||||
// final double posStereo = (width - dimStereo.getWidth()) / 2;
|
|
||||||
// stereotype.drawU(ug.apply(new UTranslate(posStereo, 0)));
|
|
||||||
//
|
|
||||||
// final Dimension2D dimTitle = title.calculateDimension(ug.getStringBounder());
|
|
||||||
// final double posTitle = (width - dimTitle.getWidth()) / 2;
|
|
||||||
// title.drawU(ug.apply(new UTranslate(posTitle, 21)));
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// public Dimension2D calculateDimension(StringBounder stringBounder) {
|
|
||||||
// return new Dimension2DDouble(width, height);
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean manageHorizontalLine() {
|
public boolean manageHorizontalLine() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,7 @@ public class DotPath implements UShape, Moveable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final List<CubicCurve2D.Double> beziers = new ArrayList<CubicCurve2D.Double>();
|
private final List<CubicCurve2D.Double> beziers = new ArrayList<CubicCurve2D.Double>();
|
||||||
|
private String comment;
|
||||||
|
|
||||||
public DotPath() {
|
public DotPath() {
|
||||||
this(new ArrayList<CubicCurve2D.Double>());
|
this(new ArrayList<CubicCurve2D.Double>());
|
||||||
@ -406,7 +407,7 @@ public class DotPath implements UShape, Moveable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UPath toUPath() {
|
public UPath toUPath() {
|
||||||
final UPath result = new UPath();
|
final UPath result = new UPath(comment);
|
||||||
boolean start = true;
|
boolean start = true;
|
||||||
for (CubicCurve2D.Double bez : beziers) {
|
for (CubicCurve2D.Double bez : beziers) {
|
||||||
if (start) {
|
if (start) {
|
||||||
@ -668,4 +669,8 @@ public class DotPath implements UShape, Moveable {
|
|||||||
return Collections.unmodifiableList(result);
|
return Collections.unmodifiableList(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setComment(String comment) {
|
||||||
|
this.comment = comment;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -39,6 +39,8 @@ import java.util.Iterator;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
|
|
||||||
|
import net.sourceforge.plantuml.BackSlash;
|
||||||
|
|
||||||
public class Define {
|
public class Define {
|
||||||
|
|
||||||
private final DefineSignature signature;
|
private final DefineSignature signature;
|
||||||
@ -78,7 +80,9 @@ public class Define {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
final String regex = "\\b" + signature.getKey() + "\\b";
|
final String regex = "\\b" + signature.getKey() + "\\b";
|
||||||
|
line = BackSlash.translateBackSlashes(line);
|
||||||
line = line.replaceAll(regex, definitionQuoted);
|
line = line.replaceAll(regex, definitionQuoted);
|
||||||
|
line = BackSlash.untranslateBackSlashes(line);
|
||||||
}
|
}
|
||||||
return line;
|
return line;
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,7 @@ public class Defines implements Truth {
|
|||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
final Defines result = createEmpty();
|
final Defines result = createEmpty();
|
||||||
|
result.environment.put("filedate", new Date(file.lastModified()).toString());
|
||||||
result.environment.put("filename", file.getName());
|
result.environment.put("filename", file.getName());
|
||||||
result.environment.put("dirpath", file.getAbsoluteFile().getParentFile().getAbsolutePath().replace('\\', '/'));
|
result.environment.put("dirpath", file.getAbsoluteFile().getParentFile().getAbsolutePath().replace('\\', '/'));
|
||||||
return result;
|
return result;
|
||||||
|
@ -84,6 +84,7 @@ import net.sourceforge.plantuml.svek.extremity.ExtremityFactoryExtends;
|
|||||||
import net.sourceforge.plantuml.svek.image.EntityImageNoteLink;
|
import net.sourceforge.plantuml.svek.image.EntityImageNoteLink;
|
||||||
import net.sourceforge.plantuml.ugraphic.UChangeBackColor;
|
import net.sourceforge.plantuml.ugraphic.UChangeBackColor;
|
||||||
import net.sourceforge.plantuml.ugraphic.UChangeColor;
|
import net.sourceforge.plantuml.ugraphic.UChangeColor;
|
||||||
|
import net.sourceforge.plantuml.ugraphic.UComment;
|
||||||
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
import net.sourceforge.plantuml.ugraphic.UGraphic;
|
||||||
import net.sourceforge.plantuml.ugraphic.UPolygon;
|
import net.sourceforge.plantuml.ugraphic.UPolygon;
|
||||||
import net.sourceforge.plantuml.ugraphic.UShape;
|
import net.sourceforge.plantuml.ugraphic.UShape;
|
||||||
@ -613,7 +614,8 @@ public class Line implements Moveable, Hideable {
|
|||||||
if (opale) {
|
if (opale) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
ug.draw(new UComment("link " + link.getEntity1().getCode().getFullName() + " to "
|
||||||
|
+ link.getEntity2().getCode().getFullName()));
|
||||||
double x = 0;
|
double x = 0;
|
||||||
double y = 0;
|
double y = 0;
|
||||||
final Url url = link.getUrl();
|
final Url url = link.getUrl();
|
||||||
@ -671,6 +673,7 @@ public class Line implements Moveable, Hideable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
todraw.setComment(link.getEntity1().getCode().getFullName() + "-" + link.getEntity2().getCode().getFullName());
|
||||||
ug.apply(new UTranslate(x, y)).draw(todraw);
|
ug.apply(new UTranslate(x, y)).draw(todraw);
|
||||||
|
|
||||||
ug = ug.apply(new UStroke()).apply(new UChangeColor(color));
|
ug = ug.apply(new UStroke()).apply(new UChangeColor(color));
|
||||||
|
@ -139,7 +139,7 @@ public class EntityImageClass extends AbstractEntityImage implements Stencil, Wi
|
|||||||
|
|
||||||
final double widthTotal = dimTotal.getWidth();
|
final double widthTotal = dimTotal.getWidth();
|
||||||
final double heightTotal = dimTotal.getHeight();
|
final double heightTotal = dimTotal.getHeight();
|
||||||
final Shadowable rect = new URectangle(widthTotal, heightTotal, roundCorner, roundCorner);
|
final Shadowable rect = new URectangle(widthTotal, heightTotal, roundCorner, roundCorner, getEntity().getCode().getFullName());
|
||||||
if (getSkinParam().shadowing()) {
|
if (getSkinParam().shadowing()) {
|
||||||
rect.setDeltaShadow(4);
|
rect.setDeltaShadow(4);
|
||||||
}
|
}
|
||||||
|
@ -334,7 +334,8 @@ public class SvgGraphics {
|
|||||||
return pendingLink2.get(0);
|
return pendingLink2.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void svgRectangle(double x, double y, double width, double height, double rx, double ry, double deltaShadow) {
|
public void svgRectangle(double x, double y, double width, double height, double rx, double ry, double deltaShadow,
|
||||||
|
String id) {
|
||||||
if (height <= 0 || width <= 0) {
|
if (height <= 0 || width <= 0) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
@ -346,7 +347,9 @@ public class SvgGraphics {
|
|||||||
elt.setAttribute("rx", format(rx));
|
elt.setAttribute("rx", format(rx));
|
||||||
elt.setAttribute("ry", format(ry));
|
elt.setAttribute("ry", format(ry));
|
||||||
}
|
}
|
||||||
|
if (id != null) {
|
||||||
|
elt.setAttribute("id", id);
|
||||||
|
}
|
||||||
getG().appendChild(elt);
|
getG().appendChild(elt);
|
||||||
}
|
}
|
||||||
ensureVisible(x + width + 2 * deltaShadow, y + height + 2 * deltaShadow);
|
ensureVisible(x + width + 2 * deltaShadow, y + height + 2 * deltaShadow);
|
||||||
@ -619,6 +622,10 @@ public class SvgGraphics {
|
|||||||
elt.setAttribute("d", sb.toString());
|
elt.setAttribute("d", sb.toString());
|
||||||
elt.setAttribute("style", getStyle());
|
elt.setAttribute("style", getStyle());
|
||||||
elt.setAttribute("fill", fill);
|
elt.setAttribute("fill", fill);
|
||||||
|
final String id = path.getComment();
|
||||||
|
if (id != null) {
|
||||||
|
elt.setAttribute("id", id);
|
||||||
|
}
|
||||||
addFilterShadowId(elt, deltaShadow);
|
addFilterShadowId(elt, deltaShadow);
|
||||||
getG().appendChild(elt);
|
getG().appendChild(elt);
|
||||||
}
|
}
|
||||||
|
@ -70,6 +70,7 @@ public class LanguageDescriptor {
|
|||||||
type.add("database");
|
type.add("database");
|
||||||
type.add("storage");
|
type.add("storage");
|
||||||
type.add("agent");
|
type.add("agent");
|
||||||
|
type.add("pipe");
|
||||||
type.add("boundary");
|
type.add("boundary");
|
||||||
type.add("control");
|
type.add("control");
|
||||||
type.add("entity");
|
type.add("entity");
|
||||||
|
@ -42,11 +42,20 @@ import java.util.List;
|
|||||||
|
|
||||||
public class UPath extends AbstractShadowable implements Iterable<USegment> {
|
public class UPath extends AbstractShadowable implements Iterable<USegment> {
|
||||||
|
|
||||||
|
private final String comment;
|
||||||
private final List<USegment> segments = new ArrayList<USegment>();
|
private final List<USegment> segments = new ArrayList<USegment>();
|
||||||
private MinMax minmax = MinMax.getEmpty(false);
|
private MinMax minmax = MinMax.getEmpty(false);
|
||||||
|
|
||||||
private boolean isOpenIconic;
|
private boolean isOpenIconic;
|
||||||
|
|
||||||
|
public UPath(String comment) {
|
||||||
|
this.comment = comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UPath() {
|
||||||
|
this(null);
|
||||||
|
}
|
||||||
|
|
||||||
public void add(double[] coord, USegmentType pathType) {
|
public void add(double[] coord, USegmentType pathType) {
|
||||||
addInternal(new USegment(coord, pathType));
|
addInternal(new USegment(coord, pathType));
|
||||||
}
|
}
|
||||||
@ -66,7 +75,7 @@ public class UPath extends AbstractShadowable implements Iterable<USegment> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UPath translate(double dx, double dy) {
|
public UPath translate(double dx, double dy) {
|
||||||
final UPath result = new UPath();
|
final UPath result = new UPath(comment);
|
||||||
for (USegment seg : segments) {
|
for (USegment seg : segments) {
|
||||||
result.addInternal(seg.translate(dx, dy));
|
result.addInternal(seg.translate(dx, dy));
|
||||||
}
|
}
|
||||||
@ -74,7 +83,7 @@ public class UPath extends AbstractShadowable implements Iterable<USegment> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public UPath rotate(double theta) {
|
public UPath rotate(double theta) {
|
||||||
final UPath result = new UPath();
|
final UPath result = new UPath(comment);
|
||||||
for (USegment seg : segments) {
|
for (USegment seg : segments) {
|
||||||
result.addInternal(seg.rotate(theta));
|
result.addInternal(seg.rotate(theta));
|
||||||
}
|
}
|
||||||
@ -158,6 +167,10 @@ public class UPath extends AbstractShadowable implements Iterable<USegment> {
|
|||||||
this.isOpenIconic = isOpenIconic;
|
this.isOpenIconic = isOpenIconic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final String getComment() {
|
||||||
|
return comment;
|
||||||
|
}
|
||||||
|
|
||||||
// public boolean isEmpty() {
|
// public boolean isEmpty() {
|
||||||
// return segments.size() == 0;
|
// return segments.size() == 0;
|
||||||
// }
|
// }
|
||||||
|
@ -42,27 +42,33 @@ public class URectangle extends AbstractShadowable implements Scalable {
|
|||||||
private final double height;
|
private final double height;
|
||||||
private final double rx;
|
private final double rx;
|
||||||
private final double ry;
|
private final double ry;
|
||||||
|
private final String comment;
|
||||||
|
|
||||||
public UShape getScaled(double scale) {
|
public UShape getScaled(double scale) {
|
||||||
if (scale == 1) {
|
if (scale == 1) {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
final AbstractShadowable result = new URectangle(width * scale, height * scale, rx * scale, ry * scale);
|
final AbstractShadowable result = new URectangle(width * scale, height * scale, rx * scale, ry * scale, comment);
|
||||||
result.setDeltaShadow(this.getDeltaShadow());
|
result.setDeltaShadow(this.getDeltaShadow());
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public URectangle(double width, double height) {
|
public URectangle(double width, double height) {
|
||||||
this(width, height, 0, 0);
|
this(width, height, 0, 0, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public URectangle(double width, double height, double rx, double ry) {
|
public URectangle(double width, double height, double rx, double ry) {
|
||||||
|
this(width, height, rx, ry, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public URectangle(double width, double height, double rx, double ry, String comment) {
|
||||||
// if (height == 0) {
|
// if (height == 0) {
|
||||||
// throw new IllegalArgumentException();
|
// throw new IllegalArgumentException();
|
||||||
// }
|
// }
|
||||||
if (width == 0) {
|
if (width == 0) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
|
this.comment = comment;
|
||||||
this.width = width;
|
this.width = width;
|
||||||
this.height = height;
|
this.height = height;
|
||||||
this.rx = rx;
|
this.rx = rx;
|
||||||
@ -102,4 +108,8 @@ public class URectangle extends AbstractShadowable implements Scalable {
|
|||||||
return MinMax.fromMax(width, height);
|
return MinMax.fromMax(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final String getComment() {
|
||||||
|
return comment;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,6 @@ public class DriverRectangleSvg implements UDriver<SvgGraphics> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
svg.svgRectangle(x, y, width, height, rx / 2, ry / 2, rect.getDeltaShadow());
|
svg.svgRectangle(x, y, width, height, rx / 2, ry / 2, rect.getDeltaShadow(), rect.getComment());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ public class DriverTextSvg implements UDriver<SvgGraphics> {
|
|||||||
svg.setFillColor("url(#" + id + ")");
|
svg.setFillColor("url(#" + id + ")");
|
||||||
svg.setStrokeColor(null);
|
svg.setStrokeColor(null);
|
||||||
final double deltaPatch = 2;
|
final double deltaPatch = 2;
|
||||||
svg.svgRectangle(x, y - height + deltaPatch, width, height, 0, 0, 0);
|
svg.svgRectangle(x, y - height + deltaPatch, width, height, 0, 0, 0, null);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
backColor = StringUtils.getAsHtml(mapper.getMappedColor(back));
|
backColor = StringUtils.getAsHtml(mapper.getMappedColor(back));
|
||||||
|
@ -264,7 +264,7 @@ public class PSystemVersion extends AbstractPSystem {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final URL url = new URL("http://plantuml.com/download.html");
|
final URL url = new URL("http://plantuml.com/download");
|
||||||
final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
|
final HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
|
||||||
urlConnection.setUseCaches(false);
|
urlConnection.setUseCaches(false);
|
||||||
urlConnection.connect();
|
urlConnection.connect();
|
||||||
@ -283,12 +283,14 @@ public class PSystemVersion extends AbstractPSystem {
|
|||||||
|
|
||||||
private static int extractVersion(BufferedReader in) throws IOException {
|
private static int extractVersion(BufferedReader in) throws IOException {
|
||||||
String s;
|
String s;
|
||||||
final Pattern p = Pattern.compile(".*\\.(\\d{4,5})\\..*");
|
final Pattern p = Pattern.compile(".*\\.([1-9]\\d?)\\.(20\\d\\d)\\.([1-9]?\\d)\\..*");
|
||||||
while ((s = in.readLine()) != null) {
|
while ((s = in.readLine()) != null) {
|
||||||
final Matcher m = p.matcher(s);
|
final Matcher m = p.matcher(s);
|
||||||
if (m.matches()) {
|
if (m.matches()) {
|
||||||
final String v = m.group(1);
|
final String a = m.group(1);
|
||||||
return Integer.parseInt(v);
|
final String b = m.group(2);
|
||||||
|
final String c = m.group(3);
|
||||||
|
return Integer.parseInt(a) * 1000000 + Integer.parseInt(b) * 100 + Integer.parseInt(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -40,8 +40,10 @@ import java.util.Date;
|
|||||||
|
|
||||||
public class Version {
|
public class Version {
|
||||||
|
|
||||||
|
private static final int MAJOR_SEPARATOR = 1000000;
|
||||||
|
|
||||||
public static int version() {
|
public static int version() {
|
||||||
return 201711;
|
return 1201712;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String versionString() {
|
public static String versionString() {
|
||||||
@ -52,8 +54,9 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static String dotted(int nb) {
|
private static String dotted(int nb) {
|
||||||
final String s = "" + nb;
|
final String minor = "" + nb % MAJOR_SEPARATOR;
|
||||||
return s.substring(0, 4) + "." + s.substring(4);
|
final String major = "" + nb / MAJOR_SEPARATOR;
|
||||||
|
return major + "." + minor.substring(0, 4) + "." + minor.substring(4);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String versionString(int size) {
|
public static String versionString(int size) {
|
||||||
@ -70,7 +73,7 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static String etag() {
|
public static String etag() {
|
||||||
return Integer.toString(version() - 201670, 36) + Integer.toString(beta(), 36);
|
return Integer.toString(version() % MAJOR_SEPARATOR - 201670, 36) + Integer.toString(beta(), 36);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String turningId() {
|
public static String turningId() {
|
||||||
@ -78,12 +81,12 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static long compileTime() {
|
public static long compileTime() {
|
||||||
return 1492618739962L;
|
return 1493222796077L;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String compileTimeString() {
|
public static String compileTimeString() {
|
||||||
if (beta() != 0) {
|
if (beta() != 0) {
|
||||||
return versionString();
|
return "Unknown compile time";
|
||||||
}
|
}
|
||||||
return new Date(Version.compileTime()).toString();
|
return new Date(Version.compileTime()).toString();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user